Вы находитесь на странице: 1из 8

2-2/8. Работа с транзистором.

Коррекция стратегии программы, с учетом


наличия обратной связи. Организация, в режиме включенной защиты, сценария-
помощника (подсказки).

Убедились в "жизнеспособности" процедуры измерения тока?


Убедились.
"Поприслоняли ее к разнообразнейшим стенкам"?
"Поприслоняли".
Приятный вывод: "текущая миссия" полномасштабно выполнена.
А вот теперь, можно и шунт, и транзистор подключить (следующая "текущая миссия"):

"Велосипед изобретать" не стал, а использовал соответствующие схемотехнические


наработки из ранее упомянутых статей Н.Заеца.
Да и ничего более толкового на ум просто не приходит.
"Цоколевка" мощного, полевого транзистора IRFZ44N указана.
Так как его сопротивление в открытом состоянии очень мало, то при дальнейших
"экспериментах", необходимость его "посадки" на радиатор отпадает.
Для обеспечения дополнительного, визуального контроля подключения/отключения
нагрузки, применен светодиод.
Использован шунт (R2), выпаянный из неисправного мультиметра M-830B (DT-830B).
"Эксперименты" производились с активной нагрузкой Rнагр., величину которой нужно
выбрать в зависимости от уровня Uвых. блока питания (и величину гасящего R
светодиода тоже. Помечено черными звездочками).
Соответствие (пока, можно даже и не строгое, "на глазок") величины тока,
протекающего через нагрузку (контролируется амперметром) и показаний "железяки",
обеспечивается "кручением/верчением" R5.
Если используется шунт 0,1 ом, то номиналы R5 и R6 нужно уменьшить в 10 раз.
Я ориентировался на ток, протекающий через Rнагр., где-то "в районе" 0,5 ампер.
Вопрос: "Почему такая принудиловка"?
Ответ: для начала, нужно как следует разобраться с "важняком 1-го ранга" (с
организацией процесса, как такового), а только после этого разбираться с "важняками
последующих рангов" (с временнЫми, точностными характеристиками, линейностью и
т.п.).
А то ведь, если не разобраться с первым, то со вторым, может произойти большущий
конфуз типа "Где Ляпкин-Тяпкин? Ан нет его".
Конечно же, все это можно "свалить в одну живописную кучу" и разбираться с ней
"оптом", но по-моему, сие не есть самый эффективный способ организации работы
("Фигаро здесь, Фигаро там". Этот "номер, на ура, проходит" только в опере).

1
Итак, введение, в принципиальную схему "текущей железяки", транзисторного
коммутатора тока, означает "неожиданное" возникновение обратной связи.
Ранее я упоминал о том, что последствия этого события, при условии наличия
превышения порога защиты по току, для нагрузки, по большому счету, не есть "зер
гут" (не всегда, но иногда может закончиться "Гитлер капутом").
А именно, если в сложившейся ситуации, не предпринять каких-то "контрмер", то
возникнет устойчивый автоколебательный процесс (в данном случае, "паразитный"),
представляющий собой множество кратковременных "перегрузов" (нагрузка
запитывается), с паузами между ними (нагрузка не запитывается).
Совершенно понятно, что это "безобразие" вообще "не лезет ни в какие ворота".
"Лучше уж сразу умереть", чем "сваять" такое.
Но жить-то очень хочется…
Соответственно, возникает вопрос "жизни и смерти": "Как, по умному, придушить эту
гадину (автоколебательный процесс)"?
Но не до конца, а иначе результатом будет "труп", с которого, естественно, "ничего не
поимеешь".
Вернее, "поимеешь", но совсем не то, что нужно, а диаметрально противоположное
("рытье могилы, похороны, венки" и т.д.).
Пусть уж этот "организм дышит", но только тогда, когда это будет дозволено
конструктором.
Вот и будет красота-ляпота, к которой нужно стремиться всеми фибрами истерзанной
и избитой невзгодами, конструкторской души.
Это и называется тяжелым, но почетным конструкторским счастьем.
Вернее, одной из ее составляющих.
Имею моральное право так говорить, так как являюсь "чемпионом мира по
перенесенным невзгодам" (шутка, но доля истины есть).
Итак, имеется некий автоколебательный процесс, который нужно "сорвать", но не до
конца.
Значит, в "границах" отдельно взятого, автоколебательного процесса, нужно оставить
одно "колебание", а остальные "поубивать".
И это "колебание" должно быть не абы каким, а первым (вспомните про
инерционность срабатывания защиты).
После его "прохождения" (дозволено "дышать"), все остальные колебания, "не
попавшие под раздачу слонов", должны "отправиться к праотцам" (не дозволено
"дышать", но "организм живой").
Вы сейчас сами удивитесь, как это просто "ваяется":
...................................
...................................

;********************************************************************************
; 2-е АЦП (сила тока). **********************************************************
;********************************************************************************
; Анализ, на предмет обхода процедуры 2-го АЦП, в случае предыдущего поднятия
; флага превышения порога защиты по току.
;--------------------------------------------------------------------------------
ACP_2 btfsc Flag,4 ; Флаг превышения порога защиты по току
; поднят или нет ?
goto ACP_END ; Если поднят, то обход процедуры 2-го АЦП.
; Если опущен, то процедура 2-го АЦП
; исполняется.
;--------------------------------------------------------------------------------
; Работа с регистром Adcon0.
;--------------------------------------------------------------------------------
...................................
...................................

;--------------------------------------------------------------------------------
; Проверка на превышение порога.
;--------------------------------------------------------------------------------
bcf Flag,4 ; Сброс флага превышения порога защиты
; по току.

2
subwf Porog_I,W ; Аналогично, только
btfsc Status,C ; Porog_I - Mem_IL = ...
goto ACP_END ; ----"----
bcf PortA,2 ; <-В этом случае, блокировка срабатывает и
bsf Flag,4 ; флаг превышения порога защиты, по току,
; поднимается.
;--------------------------------------------------------------------------------
; Теперь модуль АЦП можно выключить (начало выхода из прерывания).
;--------------------------------------------------------------------------------
ACP_END
...................................
...................................

В ПП прерывания, добавляются всего 2 команды (выделены красным цветом).


Ориентация проверки à на флаг превышения порога защиты по току (Flag,4).
Естественно, что если речь идет о замере тока, то на момент начала "токовой"
проверки (о деталях ее организации - см. ниже), транзистор должен быть открыт, и
нагрузка должна быть подключена.
А иначе, что замерять? Нулевой ток?
Если превышения порога защиты по току нет (Flag,4 = 0), то процедура 2-го АЦП
исполняется.
Если в ходе текущего исполнения процедуры 2-го АЦП, обнаружен "перегруз" по току,
то транзистор закроется, флаг превышения порога защиты по току поднимется и ПП
прерывания будет отработана до конца.
Но "влет" рабочей точки программы в следующее прерывание, произойдет уже с
поднятым флагом превышения порога защиты по току.
Значит, в этом случае, результатом той проверки, которая выделена красным цветом,
будет не исполнение процедуры 2-го АЦП, а "отфутболивание" рабочей точки
программы на начало выхода из прерывания (обход процедуры 2-го АЦП).
Проще говоря, после срабатывания защиты по току (закрытия транзистора), исполнение
процедуры 2-го АЦП блокируется до тех пор, пока флаг превышения порога защиты по
току не опустится.
Значит, должен существовать какой-то орган управления (кнопка), с помощью которого
можно было бы опустить этот флаг, прекратить назойливое "пи-пи-пи…", которое
сопровождает обнаружение "бяки" и перейти в режим ожидания следующего пуска
(что-то типа разблокировки, но при закрытом транзисторе).
Замечание по ПП прерывания: ранее, ПП ZAMER начиналась с команды clrf Mem_IL.
При данном "раскладе", такая команда вредна (то, что было хорошо раньше, плохо
сейчас), и я ее убрал.
На рис. 2, та кнопка, о которой идет
речь, обозначена как "-/Нет" (Возврат).
То есть, под это дело, я использовал
уже имеющуюся кнопку "-", присвоив
ей дополнительную функцию.
Следующий вопрос: "Как уходить в
проверку тока (как осуществить пуск)"?
Автоматический пуск, после каждого
включения блока питания, не
желателен, так как в этом случае,
могут иметь место быть "броски" тока,
которые нужно пережидать.
Да и не удобно это.
Лучше "клацнуть рубильником" один раз, а после этого, сколько угодно "клацать"
чем-нибудь другим.
В качестве этого "чего-нибудь другого" назначена кнопка "+/Да" (Пуск).
И в этом случае, уже имеющаяся кнопка "+", также "нагружена" дополнительной
функцией.
С помощью кнопки "+/Да", после ее отжатия, "дается "добро" на замер тока
(транзистор открывается и "понеслось"…).
После этого, если "бяки" нет, устройство переходит в режим слежения.
3
А если она есть, то будет "хэнде хох" (транзистор закрывается) и дальнейшее,
неумолимое "пи-пи-пи …", с выдачей информации о текущих значениях превышения
порогов и о текущих значениях порогов.
По-моему, это смотрится вполне эстетично и рационально.
Обращаю Ваше внимание на то, что в случае превышения порога защиты по току,
после отжатия кнопки "+/Да", отрабатывается всего один-разъединственный цикл
замера тока (см. выше), что свидетельствует о достаточно высокой степени
"пронзительности реактивного свиста" (про "соловья-разбойника" и ТУ-154 вспомнил).
То есть, в отличие от "напряженческих дел" (постоянное слежение), после устранения
"перегруза" по току, устройство автоматически не разблокируется.
И это, с точки зрения обеспечения минимизации количества "токовых ударов", вполне
оправдано.
Для того чтобы прекратить это "пи-пи-пи …" и подготовиться к следующему пуску,
нужно нажать на кнопку "-/Нет", устранить "бяку" и еще раз нажать на кнопку "+/Да"
(пуск). Ну и так далее. Любое количество раз.
До тех пор, пока не будет устранена "токовая бяка".
Как только это воистину радостное событие произойдет, после отжатия кнопки "+/Да",
Вы совсем не услышите никакого противного "пи-пи-пи…", и устройство автоматически
и радостно (тихо) перейдет в желанный режим слежения.
Время нахождения в этом очень симпатичном режиме ограничено только наличием
"бяк" и Вашим желанием в нем находиться.
Нужно взглянуть на текущее напряжение? Нет проблем. Глядите сколько хотите.
Нужно взглянуть на текущий ток? То же самое.
А чуть что, "железяка" быстренько предотвратит возможную "беду", выдаст ее
параметры и будет терпеливо ждать дальнейших распоряжений пользователя.
Примечание: этой "железякой" должен управлять человек, отдающее себе отчет в том,
что если причина "перегруза" не устранена, то повторные пуски приводят пусть даже к
очень кратковременным, но все-таки "токовым ударам" той или иной "силы" (зависит от
величины превышения порога).
Хотя, вероятнее всего, по причине кратковременности таких "токовых ударов" (чем
короче импульс, тем более значительные токи безопасны), и ничего страшного не
произойдет, но лучше, при наличии неустраненной "токовой бяки", излишне не
злоупотреблять повторными пусками.
Каждый конструктор имеет свое личное
представление о том, "что такое хорошо и что такое
плохо".
В части касающейся "блокировочно-разблокировочных
дел", лично я, организовал работу так.
При любом переходе в режим включенной защиты,
если пользователь не предпринимает дальнейших
действий (ничего не "жмет"), автоматически
начинается отработка сценария-помощника.
Типа "даю подсказку, на что именно нужно жать для
того, чтобы подключить нагрузку".
Обе картинки этого сценария Вы видите слева.
Эти картинки последовательно чередуются.
И не абы как, а заданное (в программе) количество
раз. Я задал 3 чередования (это количество можно программно изменить).
Прочерки, имеющие место быть на верхней картинке, намекают на то, что никакого
замера тока и в помине нет.
А вот напряжение "текущезамеряется", и если оно
будет изменяться, то Вы будете наблюдать эти
изменения.
После того, как картинки "прочередуются" заданное
количество раз, отработка сценария-помощника
автоматически заканчивается и Вы будете наблюдать
ту картинку, которую видите слева.
Символы "+" будут мигать, текущее значение напряжения будет замеряться, показания
тока будут нулевыми (так как транзистор закрыт).
4
Мигающие символы "+" намекают на то, что нагрузка не подключена к блоку питания,
и если это нужно сделать, то необходимо нажать на кнопку "+/Да" (это намек №2.
Намек №1 - см. выше).
Сия картинка будет "торчать" в дисплее до тех пор, пока Вы не нажмете на кнопку
"+/Да".
Если величина напряжения Вас не устраивает, то ее можно изменить.
Если, в ходе этого изменения, произойдет превышение порога защиты по напряжению,
то "железяка" автоматически "уйдет" в аварийный подрежим (с пи-пи-пи… и
соответствующими надписями).
Если, после этого, напряжение снизить (сделать ниже порога U), то "железяка"
автоматически выйдет из аварийного подрежима, и Вы снова будете наблюдать
картинку с мигающими символами "+".
При этом, транзистор как был закрыт, так и будет закрыт (нагрузку отключать не
нужно).
В частности, такую манипуляцию можно проделать в том случае, если Вы забыли
значения текущих порогов и их нужно узнать.
Если пороги Вас не устраивают, то нужно уйти в режим установки порогов (кнопка
"Установка порогов"), изменить их и вернуться в режим включенной защиты.
Но только, для возврата, нужно нажать/отжать не кнопку "-/Нет" (возврат), а кнопку
"Переключение режимов" (так как кнопка "-/Нет" используется в режиме установки
порогов).
После этого, повторится то, что описано выше.
За нагрузку можно не опасаться, так как она, во всех этих случаях, будет отключена
(транзистор будет "железобетонно" закрыт).
Правило: в режиме включенной защиты, транзистор открывается только после
отжатия кнопки "+/Да" (пуск).
Естественно, что прежде чем ее отжать, ее нужно нажать (это что-то типа дебильной
шутки).
На время нажатия, "жизнь замирает".
Кнопку "+/Да" можно нажать/отжать не только при "высвечивании" картинки с
мигающими символами "+", но и в любой момент
отработки сценария-помощника.
В обеих случаях, после отжатия кнопки "+/Да", и при
условии отсутствия "бяк", будет наблюдаться то, что
Вы видите на картинке слева.
Проще говоря, "железяка уйдет" в рабочий подрежим
режима включенной защиты (в режим слежения).
Если же будет "бяка", то "железяка уйдет" в аварийный подрежим (пи-пи-пи… и т.д.).
Если нагрузка подключена, то на индикацию будут выводиться результаты текущих
замеров U/I.
Если нагрузка не подключена, то ток будет нулевым
(см. картинку слева).
Если произошло пи-пи-пи…, то для того чтобы его
прекратить и вернуться в процедуру подготовки к
следующему пуску, нужно нажать/отжать кнопку
"-/Нет" (возврат).
После этого, неумолимо начнется отработка сценария-помощника ("напоминальщика"),
со всеми вытекающими … (см. выше).
Еще раз обращаю Ваше внимание на то, что в режиме включенной защиты, на кнопку
"+/Да" можно "жать" в любой момент, не дожидаясь окончания отработки сценария-
помощника.
Скорость отработки сценария-помощника можно изменить программно: либо изменением
количества смен картинок, либо изменением задержек, либо и тем, и другим.
Пока, я сделал ее достаточно медленной, а потом - посмотрим…
А теперь о том, каким именно образом реализовано сказанное.
Все эти "дела вершатся" в "границах" сценария включенной защиты.
Последовательность действий (алгоритм) выглядит так:

5
6
Внутри циклической ПП слежения KOL_MOZALO, организованы две процедуры
сценариев: MOZALO_1 и MOZALO_2.
Для обеспечения управляемости, внутри каждой из них "врезаны" процедуры опроса
клавиатуры.
Разница между этими опросами только в том, что в ПП MOZALO_1, организован
полномасштабный опрос клавиатуры (опрашиваются все 4 кнопки), а в ПП MOZALO_2,
организован частичный опрос клавиатуры (не опрашивается кнопка "-/Нет").
Это объясняется тем, что после окончания отработки сценария-помощника и далее, ПП
MOZALO_2 не исполняется (всегда обходится).
А раз это так, то и смысла в опросе кнопки "-/Нет", нет (извиняюсь за тавтологию).
Обе подпрограммы "ставятся на счетчики" отрабатываемых циклов.
После обнуления такого счетчика, происходит переход с конца исполнения одной ПП,
на начало исполнения другой ПП.
"Механика" подобного рода "постановок на счетчики" многократно описывались мной
ранее.
Но в этом случае, ни о каком заданном количестве смен картинок и речи не идет, так
как эти смены будут происходить постоянно ("безлимитно").
Значит, ПП MOZALO_2 нужно "поставить на двойной счетчик".
Первый счетчик - то, о чем сказано выше.
Второй счетчик должен отсчитывать количество переходов из ПП MOZALO_2 в ПП
MOZALO_1.
Как только второй счетчик обнулится, поднимается некий флаг, дальнейший опрос
состояния которого "закольцовывает" рабочую точку программы в ПП MOZALO_1.
А проще говоря, после поднятия этого флага, ПП MOZALO_2 всегда будет обходиться,
и вся дальнейшая работа будет происходить только в "границах" ПП MOZALO_1.
Что и реализовано.
Этот "некий флаг" я назвал флагом завершения смен надписей.
После такой "закольцовки", основная функция счетчика циклов ПП MOZALO_1
"атрофируется".
В том смысле, что его обнуление не приводит к выходу рабочей точки программы из
ПП MOZALO_1.
Поднятый флаг завершения смен надписей не позволяет выйти.
Он, образно выражаясь, "отфутболивает" рабочую точку программы на начало ПП
KOL_MOZALO, после чего она снова "закольцовывается" в ПП MOZALO_1.
И т.д. Вплоть до нажатия кнопки "+/Да" (пуск).
Вот и получается, что отрабатывается заданное количество смен надписей, которые
выводятся на индикацию в течение заданного интервала времени.
Этот принцип достаточно универсален.
С его помощью, можно организовать подобного рода смену не двух, а более надписей.
Для тех людей, которые как следует освоили "постановки на счетчики", это не
является большой проблемой.
Можно даже "состряпать" что-то и "покруче".
Вывод: умение "ставить разнообразнейшие циклы на счетчики" это признак
квалифицированного программиста и показатель существенного уменьшения количества
возможных, "тупиковых" ситуаций.
От всей души советую Вам как следует это прочувствовать, разобраться и сделать
соответствующие выводы.
Теперь обращаю Ваше внимание на "начинку" ПП MOZALO_1.
Кроме того, что в ней происходит работа с флагом завершения смен надписей, в ней
еще происходит и работа с флагом, который я назвал флагом факта нажатия кнопки
"+/Да".
Его поднятие означает то, что ранее, кнопка "+/Да" была нажата.
Это нужно для организации замены двух мигающих символов "+" на символы "пусто",
в случае пуска.
Если этого не сделать, то после пуска, символы "+" не "исчезнут", а просто
зафиксируются на дисплее.
Мигание символов "+" обеспечивается простейшим триггером (задействуется бит №0).
У меня уже от него на языке мозоль. Повторять, сию "механику" не буду.
7
В зависимости от одного из двух возможных состояний бита №0 этого триггера, на
индикацию, в самые крайние знакоместа 1-й строки ЖК-модуля, будут выведены либо
символы "+", либо символы "пусто".
Это происходит последовательно, и именно это обеспечивает мигание символов "+".
Если смена надписей не завершена (отрабатывается сценарий-подсказка), то в
знакоместа результата измерения тока, на индикацию выводятся прочерки (а можно и
вопросительные заки или еще что-нибудь).
Критерий - опущенный флаг завершения смен надписей.
Если же этот флаг поднимется (сценарий-подсказка отработан), то процедура вывода
на индикацию прочерков банально обходится, и далее, в эти знакоместа будут
выведены результаты измерения тока.
Примечание: для обеспечения возврата, в сценарий-подсказку, из аварийного
подрежима, в ПП проверки превышения/не превышения порогов (PROV_U_I) и в ПП
параметров защиты (PARAMETR), "врезаны" процедуры опросов кнопки "-/Нет".

Вот и весь сказ.


Если как следует разобраться, то ничего особо сложного-то и нет.
Нужно только уметь "раскладывать по полочкам / дробить", о чем я часто и нудно
напоминаю и чему пытаюсь научить (в меру своей испорченности).
Но надеюсь, что Вы войдете в мое положение и поймете, что я это делаю не из-за
вредности/забывчивости и т.п., а исходя из самых лучших побуждений.
Мотивация: этот "важняк" ох как дорого стОит. А кто его упорно игнорирует, тому
будет "геморрой" в особо тяжелой форме ("посадка на кол").
Однозначно. Без вариантов.
Вам это нужно?
А если не нужно, то приучайтесь к порядку в мозгах. Суровая правда жизни.
По-началу, будет плоховато, но потом очень полегчает.

Программа под "железяку", речь о которой шла в этом подразделе, называется


BP_5.asm (прилагается). Паяйте, "шейте".
Каждый из Вас может своими глазами увидеть "материальное воплощение" сказанного.
А я "побежал" дальше.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru