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

2-2/14.

Обеспечение визуального контроля за текущей температурой не только в


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

Текущая, принципиальная схема:

Речь пойдет о двух текущих "модернизациях".

1. Обеспечение визуального контроля за текущей температурой не только в


случае срабатывания термозащиты, но и в "нормальном" режиме.

В данном случае, "нормальным" режимом я называю


режим выключенной защиты, при условии
подключения термодатчика.
То, как это выглядит, Вы видите на рисунке слева.
Сократил надпись 1-й строки, а в освободившееся
место поместил текущее значение температуры. И
все дела.
Естественно, что в том случае, если термодатчик не
подключен, то и выводить на индикацию нечего.
А раз это так, то в этом случае, на индикацию, в
1-ю строку, выводится "старая" надпись (см. картинку
слева).
Эта "модернизация", на принципиальной схеме никак
не отразилась. Все "дела" делались только в программном "секторе".
Это выглядит так:

;################################################################################
; ВЕРХНЯЯ "ОБСЛУГА" 1-й СТРАНИЦЫ. ###############################################
;################################################################################
; Надпись "ЗАЩИТА ВЫКЛЮЧЕНА" (1-й блок 1-й страницы)
1
;-----------------------------------
TEXT_1 addwf PC,F ; Приращение PC на величину содержимого W.
dt 0xA4,0x41,0xE2,0xA5,0x54,0x41,0x20,0x42
dt 0xAE,0x4B,0xA7,0xB0,0xAB,0x45,0x48,0x41
....................................
....................................
;================================================================================
; ПП "плавающей" задержки на основе анализа состояния флага занятости BF
; (вариант для 4-разрядного интерфейса).
;================================================================================
ENTER_BF ........................
return ; Возврат по стеку.
....................................
;================================================================================
....................................
....................................
;-----------------------------------
; Надпись "ЗАЩИТА ВЫКЛ.t= " (3-й блок 1-й страницы)
;-----------------------------------
TEXT_1_1 addwf PC,F ; Приращение PC на величину содержимого W.
dt 0xA4,0x41,0xE2,0xA5,0x54,0x41,0x20,0x42
dt 0xAE,0x4B,0xA7,0x2E,0x74,0x3D,0x20,0x20
;################################################################################
; КОНЕЦ ВЕРХНЕЙ "ОБСЛУГИ" 1-й СТРАНИЦЫ. #########################################
;################################################################################

;********************************************************************************
; НАЧАЛО ИСПОЛНЕНИЯ ПРОГРАММЫ.
;********************************************************************************
....................................
....................................
INKEY ........................
....................................
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
; Сценарий "ЗАЩИТА ВЫКЛЮЧЕНА". VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
....................................
....................................
;--------------------------------------------------------------------------------
; Опрос флага наличия/отсутствия термодатчика.
;--------------------------------------------------------------------------------
btfss Flag,1 ; Флаг наличия/отсутствия термодатчика поднят
; или нет ?
goto RABOTA_D ; Если опущен, то работа с задействованием
; датчика.
; Если поднят, то программа исполняется далее
; (работа без задействования датчика).
;================================================================================
; Вывод на индикацию, в 1-ю строку, фиксированной надписи "ЗАЩИТА ВЫКЛЮЧЕНА".
;================================================================================
movlw b'10000000' ; Установка курсора в крайнее
call ENTER_BF ; левое знакоместо 1-й строки.
;----> Возврат по стеку из ПП ENTER_BF.
movlw .16 ; Запись числа .16 (количества выводимых в
movwf Count ; строку символов) в регистр Count.
movf Count,W ; Count -> W.
sublw .16 ; .16 - Count = ... (результат -> W).
call TEXT_1 ; Условный переход в ПП TEXT_1.
;----> Возврат по стеку из ПП TEXT_1.
bsf PortC,RS ; Установка на линии RS "1"
; (режим записи данных).
call ENTER_BF ; "Плавающая" задержка со стробом под вывод
; данных на индикацию.
;----> Возврат по стеку из ПП ENTER_BF.
decfsz Count,F ; Подготовка к выводу на индикацию
; следующего символа таблицы.
2
goto $-6 ; Если результат декремента не=0, то
; вывод на индикацию следующего символа.
goto OBHOD_D ; Если результат декремента =0,
; то обход работы с датчиком.
;================================================================================
; Вывод на индикацию, в 1-ю строку, фиксированной надписи "ЗАЩИТА ВЫКЛ.t= ".
;================================================================================
RABOTA_D movlw high TEXT_1_1; Выбор PCH 1-й команды ПП TEXT_1_1.
movwf PCLATH ; (находится в 3-м блоке 1-й страницы).

movlw b'10000000' ; Установка курсора в крайнее


call ENTER_BF ; левое знакоместо 1-й строки.
movlw .16 ;
movwf Count ;
movf Count,W ;
sublw .16 ; Аналогично, только
call TEXT_1_1 ; для TEXT_1_1.
bsf PortC,RS ;
call ENTER_BF ;
decfsz Count,F ;
goto $-6 ;
;-------------------------------------
; Подготовка к 2/10 преобразованию.
;-------------------------------------
movlw high BIN2_10_T; Выбор PCH 1-й команды ПП BIN2_10_T.
movwf PCLATH ; (находится на 2-й странице).
movf Temp_LSB,W ; Temp_LSB -> W.
;================================================================================
; 2/10 преобразование (1х2) с перекодировкой результата.
;================================================================================
call BIN2_10_T ; Переход в ПП 2/10 преобразования.
;--->Возврат по стеку из ПП BIN2_10_T
clrf PCLATH ; Выбор 1-го блока 1-й страницы.
;================================================================================
; Вывод на индикацию текущего значения температуры.
;================================================================================
movlw b'10001110' ;
movwf PortB ; 1-я строка, 15-е знакоместо. Адрес 0Eh.
call ENTER_BF ;

call IND_TERMO ; Переход в ПП IND_TERMO.


;----> Возврат по стеку из ПП IND_TERMO.
;--------------------------------------------------------------------------------
; Работа с текущей температурой.
;--------------------------------------------------------------------------------
bsf PCLATH,3 ; Выбор текущего блока 2-й страницы.
call TERMO ; Переход в ПП работы с датчиком, с целью
;--> Возврат по стеку из ПП TERMO. ; установки текущих оборотов вентиллятора.
clrf PCLATH ; Выбор 1-го блока 1-й страницы.
;--------------------------------------------------------------------------------
; Окончание цикла программы (для сценария "ЗАЩИТА ВЫКЛЮЧЕНА").
;--------------------------------------------------------------------------------
OBHOD_D bsf PortA,2 ; Если поднят, то ОТКРЫТИЕ ТРАНЗИСТОРА.
goto INKEY ; Переход на следующий цикл программы.
;********************************************************************************

;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; Сценарий "ЗАЩИТА ВКЛЮЧЕНА". |||||||||||||||||||||||||||||||||||||||||||||||||||
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
....................................
....................................
;################################################################################
; НИЖНЯЯ "ОБСЛУГА" 1-й СТРАНИЦЫ. ################################################
;################################################################################
....................................
....................................
3
;================================================================================
; Вывод на индикацию числовых значений верхнего Т-порога или текущих значений
; температуры.
;================================================================================
IND_TERMO .......................
....................................
return ; Возврат по стеку.
;================================================================================
....................................
....................................
;################################################################################
; КОНЕЦ НИЖНЕЙ "ОБСЛУГИ" 1-й СТРАНИЦЫ. ##########################################
;################################################################################
org 801h ; Заполнение 2-й страницы памяти программ
; начинается с 2050-й позиции (см. окно ROM).

;22222222222222222222222222222222222222222222222222222222222222222222222222222222
; 2-я СТРАНИЦА ПАМЯТИ ПРОГРАММ.
;22222222222222222222222222222222222222222222222222222222222222222222222222222222
....................................
....................................
;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
; ПП РАБОТЫ С ТЕРМОДАТЧИКОМ. DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
; "Администраторская" группа команд.
;--------------------------------------------------------------------------------
TERMO ........................
....................................
;################################################################################
; НИЖНЯЯ "ОБСЛУГА" 2-й СТРАНИЦЫ.
;################################################################################
....................................
....................................
;================================================================================
; 2/10 преобразование (1х2) с перекодировкой результата.
;================================================================================
BIN2_10_T ........................
....................................
return ; Возврат по стеку.
;================================================================================
....................................
....................................
;################################################################################
; КОНЕЦ НИЖНЕЙ "ОБСЛУГИ" 2-й СТРАНИЦЫ. ##########################################
;################################################################################
end ; Конец программы.

Принцип прост: в зависимости от состояния флага наличия/отсутствия термодатчика


(ветвление), исполняется тот или иной сценарий.
Если термодатчик подключен, то сначала, на индикацию выводится надпись
"ЗАЩИТА ВЫКЛ.t= ", а после этого, в 15-е и 16-е знакоместо выводится текущее
значение температуры.
Естественно, что в этом случае, ПП TERMO должна отрабатываться, что и имеет
место быть.
Если термодатчик не подключен, то сначала, на индикацию выводится надпись
"ЗАЩИТА ВЫКЛЮЧЕНА", а после этого, осуществляется обход всего того, что связано с
предыдущим сценарием (goto OBHOD_D).

2. Организация автоматического выключения блока питания (или


соответствующего оповещения, если эта "выключалка" отсутствует), в том случае,
если после срабатывания термозащиты, температура повысилась более чем на
заданное значение, и в случае, если в течение 5-ти минут после срабатывания
термозащиты, текущая температура не опустилась ниже нижнего Т-порога.

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

Его "отголоском" является то, что по сравнению с предыдущей принципиальной схемой,


в "новой" принципиальной схеме (см. рис. 1), задействован вывод RC1.
Это тот вывод, который управляет внешним устройством выключения блока питания.
То есть, в "нормальном" состоянии, на выводе RC1, присутствует нулевой уровень, но
в случае наличия "вышележащей гнусности", 0 меняется на 1.
Таким образом, имеет место быть сигнал управления, предназначенный для
управления внешним устройством аварийного выключения БП (на рис. 1, оно показано
в общем виде).
Этот сигнал управления можно "прислонить к различным стенкам", но особый интерес
представляет собой устройство аварийного выключения БП, осуществляющее
отключение БП от сети 220 в, так как при этом, "на корню блокируются" все
"источники" роста температуры, а заодно "спасается" БП и подключенная к нему
нагрузка.
5
Примечание: этот сигнал можно использовать для закрытия регулирующего транзистора
(если перепад от 0 к 1 неудобен, то можно сделать от 1 к 0. Нет проблем).
Надеюсь, что в будущем, по результатам испытаний, варианты такого рода внешних
устройств будут Вами предложены.
Я же сейчас займусь "наипервейшим" - обеспечением наличия "умного" сигнала
управления.
В простейшем случае, можно ориентироваться на заданное количество градусов
превышения, текущей температурой, верхнего Т-порога, но при этом нужно учесть то,
что нагрев может быть инерционен и то, что скорость нагрева может быть высокой.
То есть, вполне возможны случаи, когда, после срабатывания термозащиты, текущая
температура может оказаться выше этого превышения.
Например, если задать значение порога выключения блока питания, превышающее
значение верхнего Т-порога на 2 … 3 градуса, то может произойти ложное выключение
блока питания даже в том случае, когда "все в полном порядке".
Для предотвращения этих ложных выключений, нужно "задрать Т-планку" выключения
БП существенно выше верхнего Т-порога, но от этого могут быть неприятности.
"Навожу порядок" в терминологии.
"Сверхперегревом" я буду называть факт превышения, более чем на заданное
количество градусов, температуры некоего "эталона" , происходящее после
срабатывания термозащиты 1-го уровня (то есть, после превышения верхнего
Т-порога. Это то, о чем шла речь ранее).
Соответственно, по факту наличия "сверхперегрева", срабатывает термозащита
2-го уровня, о которой я сейчас и толкую.
"Упираюсь" в "эталон".
Ориентировать "эталон" на значение верхнего Т-порога можно, но не желательно.
Это не универсально. В одних случаях, "этот номер пройдет" (если скорость нагрева
низка), а в других случаях - нет (если скорость нагрева высока).
В последнем случае, БП ложно выключится.
Вопрос: "Как быть"?
Ответ: нужно "привязать эталон" не к верхнему Т-порогу, а к тому текущему значению
температуры, которое имеет место быть после срабатывания термозащиты 1-го уровня.
Это значение вполне может быть больше значения верхнего Т-порога.
Степень этого превышения зависит от интенсивности (скорости) нагрева.
То есть, условно говоря, чем "коротышее", тем это превышение будет бОльшим.
Если "привязаться" к тому текущему значению температуры, которое имеет место быть
после срабатывания термозащиты 1-го уровня (сохранить его в регистре общего
назначения, а потом использовать содержимое этого регистра как "эталон"), то в
дальнейшем, скорость нагрева можно не учитывать (она уже учтена), а останется
только учесть инерционность нагрева.
По моим "прикидкам", в этом случае, после закрытия транзистора, вне зависимости от
скорости предыдущего нагрева, дальнейший рост температуры, обусловленный
инерционностью нагрева, не должен быть более 3-х градусов (относительно указанного
выше "эталона").
На эту цифру и буду ориентироваться. Хотя, можно задать и другую. Минутное дело.
После такого рода "артподготовки", реализовать сказанное не составило большого
труда.
Но я пошел еще дальше.
В том смысле, что после срабатывания термозащиты 1-го уровня, автоматически
запускается таймер, отсчитывающий интервал времени продолжительностью примерно
5 минут.
Таким образом, термозащита 2-го уровня сработает в одном из 2-х случаев:

1. Если в течение интервала времени отработки таймера, произошел


"сверхперегрев", то БП "вырубается" по факту возникновения этого
"сверхперегрева".
2. Если в течение интервала времени отработки таймера (5 минут, но
можно задать и другое значение. Хоть минуту/час/сутки), "сверхперегрева"
не произошло, но и авторазблокировки не происходит (текущая
температура не становится ниже нижнего Т-порога), то через 5 минут от
6
момента срабатывания термозащиты 1-го уровня, БП "вырубается" по
факту отсутствия авторазблокировки.

Напоминаю, что после срабатывания термозащиты 1-го уровня, "пропеллер крутится" на


максимальных оборотах (максимальная интенсивность охлаждения), и если за 5 минут
такого "обдува", должного охлаждения не происходит, то это свидетельствует о чем-то
подозрительном/нехорошем, что разумно "присечь на корню".
Применение такой "дубинушки" ("со смещаемым центром массы") приводит как к
"обезвреживанию" явно выраженной "термобяки", так и к "обезвреживанию самых
хитропопых/наигнуснейших ее производных".
А теперь более предметно.
Для того чтобы можно было визуально отследить отсутствие/наличие сигнала
управления устройством аварийного выключения БП, в принципиальную схему введен
контрольный светодиод (см. рис. 1).
Его наличие совсем не обязательно, так как организован вывод на индикацию
соответствующей, информирующей надписи
(см. картинку слева).
Эта надпись, в течение всего времени вывода ее на
индикацию, сопровождается аварийным, звуковым
сигналом.
В случае наличия устройства аварийного выключения
БП, если ПИК запитывается от силового
трансформатора блока питания, в интервале времени от момента срабатывания
термозащиты 2-го уровня и до снижения Uпит. ПИКа до уровня BOR, эта надпись
будет "высвечиваться" кратковременно (с таким же кратковременным "писком").
И это естественно, так как в этом случае, Uпит. ПИКа будет снижаться.
Скорость этого снижения, а соответственно и время "высвечивания" надписи (и время
"писка" тоже), будут зависеть от емкости "электролитов" сглаживающего фильтра.
В случае, если ПИК запитывается от отдельного трансформатора, который продолжает
"запитываться" после аварийного прекращения "запитки" силового трансформатора
блока питания, а также в случае, если устройство аварийного выключения питания
отсутствует, эта надпись будет выводиться на индикацию (плюс, "пищание") вплоть до
выключения общего питания ("мертвая закольцовка").
То есть, долговременно.
Но можно и "поставить пищало на счетчик" или организовать его "кнопочное"
отключение. Чтобы не сильно нервировало.
Если будет нужно, то сделаю.
Программно, сказанное выглядит так:

....................................
....................................
;################################################################################
; ВЕРХНЯЯ "ОБСЛУГА" 1-й СТРАНИЦЫ. ###############################################
;################################################################################
....................................
....................................
;================================================================================
; Аварийная "пищалка" (мультивибратор, формирующий "пачку" импульсов).
;================================================================================
MULTI movlw .250 ; "Пищать" будем
movwf Reg_2 ; 250 периодов.

bcf PortC,4 ; Установка на выходе защелки RC4 уровня 0.


movlw .50 ; Задание периода
movwf Reg_3 ; (частоты).

decfsz Reg_3,F ; Формирование


goto $-1 ; полупериода.

btfsc PortC,4 ; Если на выходе защелки RC4 уровень 1,


goto $-6 ; то дальнейшая его смена на уровень 0.

7
decf Reg_2,F ; Если на выходе защелки RC4 уровень 0,
; то Reg_2 - 1 = ... и программа
; исполняется далее.
btfsc Status,Z ; Каков результат декремента ?
return ; Если =0, то "пачка" импульсов сформирована
; и выход из "пищалки".
bsf PortC,4 ; Если не=0, то установка на выходе защелки
; RC4 уровня 1.
goto $-.10 ; Переход на формирование следующего периода.
;================================================================================
....................................
....................................
;################################################################################
; КОНЕЦ ВЕРХНЕЙ "ОБСЛУГИ" 1-й СТРАНИЦЫ. #########################################
;################################################################################

;********************************************************************************
; НАЧАЛО ИСПОЛНЕНИЯ ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
START ........................
....................................
;--------------------------------------------------------------------------------
; Задание величины интервала времени контроля за температурой, осуществляемого
; после срабатывания термозащиты.
;--------------------------------------------------------------------------------
movlw .50 ; Примерно
movwf Count1 ; 5 минут.
....................................
....................................
....................................
....................................

;22222222222222222222222222222222222222222222222222222222222222222222222222222222
; 2-я СТРАНИЦА ПАМЯТИ ПРОГРАММ.
;################################################################################
; ВЕРХНЯЯ "ОБСЛУГА" 2-й СТРАНИЦЫ. ###############################################
;################################################################################
....................................
....................................
;-----------------------------------
; Надпись " Ттекущ.>или=Тн."
;-----------------------------------
TEXT_33 addwf PC,F ; -----"-----
dt 0x20,0x54,0xBF,0x65,0xBA,0x79,0xE6,0x2E
dt 0x3E,0xB8,0xBB,0xB8,0x3D,0x54,0xBD,0x2E
;-----------------------------------
; Надпись " ВЫКЛЮЧИТЕ БП!!!"
;-----------------------------------
TEXT_34 addwf PC,F ; -----"-----
dt 0x20,0x42,0xAE,0x4B,0xA7,0xB0,0xAB,0xA5
dt 0x54,0x45,0x20,0xA0,0xA8,0x21,0x21,0x21
;################################################################################
; КОНЕЦ ВЕРХНЕЙ "ОБСЛУГИ" 2-й СТРАНИЦЫ. #########################################
;################################################################################

;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
; ПП РАБОТЫ С ТЕРМОДАТЧИКОМ. DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
TERMO ........................
....................................
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Исполняется в случае превышения верхнего Т-порога.
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

8
PEREGREV bcf PortA,2 ; Если верхний Т-порог превышен,
; то ТРАНЗИСТОР ЗАКРЫВАЕТСЯ.
movlw .255 ; Перевод вентиллятора
movwf CCPR1L ; на максимальные обороты.
;------------------------------------
; Определение начала цикла анализа.
;------------------------------------
movlw .50 ;
subwf Count1,W ; Count1 - .50 = ...
btfsc Status,Z ; Результат =0 или не=0
; (это начало цикла или нет?) ?
goto NORMA ; Если =0 (начало цикла), то обход сравнения
; Temp_LSB и Temp_LSB1.
; В остальных случаях, сравнение.
;------------------------------------
; Сравнение Temp_LSB и Temp_LSB1.
;------------------------------------
movf Temp_LSB,W ;
subwf Temp_LSB1,W ; Temp_LSB1 - Temp_LSB = ...
btfsc Status,C ; Результат "+/=0" или "-" ?
goto NORMA ; Если "+/=0" (t не растет), то обход проверки
; на величину роста температуры.
; Если "-" (t растет), то эта проверка
; производится.
;--------------------------------------------
; Проверка на величину роста температуры.
;--------------------------------------------
movwf Karaul ; Temp_LSB1 - Temp_LSB -> Karaul
movlw .254 ;
subwf Karaul,W ; Karaul - .254 = ...
btfsc Status,C ; Результат "+/=0" или "-" ?
goto NORMA ; Если "+/=0" (Tтекущ. возросла менее
; чем на 2 градуса или на 2 градуса).
; Если "-" (Tтекущ. возросла до 3-х градусов
; и выше), то исполнение аварийного сценария.
;================================================================================
; Аварийный сценарий.
;================================================================================
call AVARIJA ; Вывод на индикацию аварийных надписей.
;----> Возврат по стеку из ПП AVARIJA.
;-----------------------------------------------------------------
; Формирование звукового сигнала аварии.
;-----------------------------------------------------------------
call PAUSE_UI_1 ; Задержка.
;----> Возврат по стеку из ПП PAUSE_UI_1.

clrf PCLATH ; Выбор 1-го блока 1-й страницы.


call MULTI ; Переход в ПП аварийной "пищалки".
;----> Возврат по стеку из ПП MULTI.
bsf PCLATH,3 ; Выбор 1-го блока 2-й страницы.
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
; Рабочее действие.
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
bsf PortC,1 ; Управляющий сигнал выключения БП.
goto $-5 ; "Закольцовка" в "вечном кольце".
;********************************************************************************
; Начало сценария-подсказки №3
;********************************************************************************
NORMA ........................
....................................
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; Поднятие флага срабатывания термозащиты.
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bsf Flag_1,7 ; "Отмашка" на дальнейшую работу с нижним Т-
; порогом (если Ттекущ. > нижнего Т-порога).
movlw .50 ;
9
subwf Count1,W ; Count1 -.50 = ...
btfss Status,Z ; В Count1 "лежит" число .50 или другое число?
goto $+3 ; Если Count1 не=.50,
; то обход Temp_LSB -> Temp_LSB1.
movf Temp_LSB,W ; Если Count1 =.50,
movwf Temp_LSB1 ; то Temp_LSB -> Temp_LSB1.

decfsz Count1,F ; Count1 - 1 = ...


goto OBHOD ; Если отработаны не все циклы, то обход
; аварийного сценария.
; Если отработаны все циклы, то исполнение
; аварийного сценария.
;================================================================================
; Аварийный сценарий.
;================================================================================
call AVARIJA ; Вывод на индикацию аварийных надписей.
;----> Возврат по стеку из ПП AVARIJA.
;-----------------------------------------------------------------
; Формирование звукового сигнала аварии.
;-----------------------------------------------------------------
call PAUSE_UI_1 ; Задержка.
;----> Возврат по стеку из ПП PAUSE_UI_1.

clrf PCLATH ; Выбор 1-го блока 1-й страницы.


call MULTI ; Переход в ПП аварийной "пищалки".
;----> Возврат по стеку из ПП MULTI.
bsf PCLATH,3 ; Выбор 1-го блока 2-й страницы.
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
; Рабочее действие.
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
bsf PortC,1 ; Управляющий сигнал выключения БП.
goto $-5 ; "Закольцовка" в "вечном кольце".
;================================================================================
; Сравнение текущей температуры с нижним Т-порогом.
;================================================================================
OBHOD ........................
....................................
goto TERMO
....................................
....................................
;================================================================================
; Вывод на индикацию фиксированной надписи " Автоматическая / разблокировка ".
;================================================================================
....................................
....................................
;--------------------------------------------------------------------------------
; Задание величины интервала времени контроля за температурой, осуществляемого
; после срабатывания термозащиты.
;--------------------------------------------------------------------------------
movlw .50 ; Примерно
movwf Count1 ; 5 минут.
;-------------------------------------------------------
; Возврат в то "место", из которого вызывалась ПП TERMO.
;-------------------------------------------------------
return ; Возврат по стеку в случае автоматической
; разблокировки.

;################################################################################
; НИЖНЯЯ "ОБСЛУГА" 2-й СТРАНИЦЫ.
;################################################################################
....................................
....................................
;================================================================================
; Задержка, определяющая скорость смены показаний и "добывание" результатов
; измерения.
;================================================================================
10
PAUSE_UI_1 movlw .250 ;
movwf Reg_2 ;
movlw .80 ;
movwf Reg_3 ;

decfsz Reg_2,F ; Стандартный,


goto $-1 ; 2-байтный,
decfsz Reg_3,F ; вычитающий
goto $-3 ; счетчик.
return ; Возврат по стеку.
;================================================================================
....................................
....................................
;================================================================================
; Вывод на индикацию аварийной надписи.
;================================================================================
AVARIJA movlw high TEXT_33; Выбор PCH 1-й команды ПП TEXT_33
movwf PCLATH ; (находится в 1-м блоке 2-й страницы).
;-----------------------------------------------------------------------------
; Вывод на индикацию, в 1-ю строку, фиксированной надписи " Ттекущ.>или=Тн.".
;-----------------------------------------------------------------------------
movlw b'10000000' ; Установка курсора в крайнее
call ENTER_BF_1 ; левое знакоместо 1-й строки.
movlw .16 ;
movwf Count ;
movf Count,W ;
sublw .16 ;
call TEXT_33 ; Аналогично, только
bsf PortC,RS ; для TEXT_33.
call ENTER_BF_1 ;
decfsz Count,F ;
goto $-6 ;
;------------------------------------------------------------------------------
; Вывод на индикацию, во 2-ю строку, фиксированной надписи " ВЫКЛЮЧИТЕ БП!!!".
;------------------------------------------------------------------------------
movlw b'11000000' ; Установка курсора в крайнее
call ENTER_BF_1 ; левое знакоместо 2-й строки.
movlw .16 ;
movwf Count ;
movf Count,W ;
sublw .16 ; Аналогично, только
call TEXT_34 ; для TEXT_34.
bsf PortC,RS ;
call ENTER_BF_1 ;
decfsz Count,F ;
goto $-6 ;
return ; Возврат по стеку.
;################################################################################
; КОНЕЦ НИЖНЕЙ "ОБСЛУГИ" 2-й СТРАНИЦЫ. ##########################################
;################################################################################
end ; Конец программы.

В ПП START, происходит Задание величины интервала времени контроля за


температурой, осуществляемого после срабатывания термозащиты.
То есть, задается значение интервала времени отработки цикла таймера (его
отработка начинается сразу же после превышения верхнего Т-порога).
В данном случае, это интервал времени отработки 50-ти внутренних циклов, число
которых записывается в счетчик внутренних циклов (регистр Count1).
Во внутренний цикл таймера входит бОльшая часть ПП TERMO (с учетом "массивного"
сценария-подсказки №3).
Отработка этих 50-ти внутренних циклов происходит примерно за 5 минут (засекал по
часам).
Примечание: в этом случае, какая-то особая точность не требуется. По ходу
дальнейшей работы, это время может измениться.
11
То есть, 10 внутренних циклов отрабатываются примерно за 1 минуту.
При необходимости осуществления той или иной коррекции значения интервала
времени отработки цикла таймера, из этого можно исходить .
При условии, что числовое значение константы будет единообразно изменено не
только в ПП START, но и еще в трех "местах" ПП TERMO (см. выше. Цифры
выделены желтым цветом).
"Новая" процедура представляет собой две "врезки" (обе "врезки" выделены темно-
синим цветом).
Первая "врезка врезана" в начало сценария, исполняющегося в случае превышения
верхнего Т-порога, что в контексте сказанного выше, вполне закономерно.
При первой отработке 1-й "врезки", нужно обеспечить обход сравнения текущего
значения температуры с "эталоном", так как "эталон" еще не сформирован (он
формируется позднее).
"Эталон" представляет собой текущее значение температуры, одноразово переписанное
из регистра Temp_LSB, в "эталонный" регистр Temp_LSB1 (назначен, "прописан"), на
1-м "витке" внутреннего цикла таймера.
Эту "перепись" можно было бы осуществить и в начале 1-го "витка" внутреннего цикла
таймера, но я, с учетом "вышележащего", сделал это в его конце.
То есть, эта "перепись" происходит не сразу же после срабатывания термозащиты 1-го
уровня, а спустя примерно 5 секунд после этого.
Таким образом, речь идет о сознательном и коварном "пережидании" роста
температуры, связанного как со скоростью нагрева, так и с его инерционностью.
Можно это "пережидание" сделать и бОльшим, и мЕньшим. Если нужно, то сделаю.
А пока, пусть будет так, как есть.
В соответствии со сказанным, на 1-м внутреннем цикле таймера, 1-я "врезка
проскакивается транзитом" (основная ее часть обходится).
По факту наличия числа .50. Так как именно оно имеет место быть на 1-м "влете".
Далее, программа отрабатывается до "упирания" во 2-ю "врезку", которая расположена
в концовке сценария-подсказки №3.
В начале этой "врезки", по факту наличия числа .50, содержимое регистра Temp_LSB
копируется в регистр Temp_LSB1 и "приобретает статус устаканившегося эталона", с
которым в дальнейшем (на последующих "витках" внутреннего цикла таймера) и будут
производиться сравнения текущих значений температуры.
Обращаю Ваше внимание на то, что в случае одного срабатывания термозащиты 1-го
уровня, "эталон" создается только один раз, и далее, в течение всего времени
"мотания витков" внутреннего цикла таймера, его значение остается неизменным.
В том случае, когда происходит автоматическая разблокировка, содержимое счетчика
внутренних циклов обновляется (запись в него числа .50).
То есть, если после автоматической разблокировки, термозащита 1-го уровня опять
сработает, то таймер будет отсчитывать не абы что ("хвосты/довески/черт знает что"), а
все те же 5 минут.
После того, как "эталон" будет создан, содержимое счетчика внутренних циклов
декрементируется (циклы "поставлены на счетчик").
Если после этого, содержимое счетчика внутренних циклов не станет нулевым, то
происходит дальнейшее "на колу мочало" (отрабатывается следующий цикл), а если
станет нулевым (окончание цикла таймера), то начинается отработка аварийного
сценария, в состав которого входит "мертвая закольцовка".
Проще говоря, после полной отработки цикла таймера, "железяка уходит в отказ" (об
этом позднее).
Предположим, что цикл таймера не отработан до конца.
В этом случае, имеет место быть обход аварийного сценария, с дальнейшим
переходом на начало ПП TERMO.
Начинается отработка следующего внутреннего цикла таймера, но с одной
существенной поправкой: "на влете" в 1-ю "врезку", в счетчике внутренних циклов
"лежит" число меньшее 50-ти (см. предыдущий декремент).
Следовательно, того "транзита", о котором упоминалось выше, не будет, а будет
сравнение текущего значения температуры с "эталоном", "лежащим" в регистре
Temp_LSB1.

12
Если текущая температура не будет превышать "эталон", то происходит "транзит №2"
(goto NORMA), а вот если она будет его превышать, то милости просим в проверку на
величину роста температуры.
Если эта величина менее 3-х градусов (считается допустимым), то происходит "транзит
№3" (то же самое goto NORMA).
Если эта величина равна или более 3-х градусов (это не допустимо), то
отрабатывается аварийный сценарий ("закончен бал, погасли свечи").
Предположим, что осуществлен "транзит №2" или "транзит №3".
После этого, во 2-й "врезке", создание "эталона" будет обойдено (так как в Count1
"лежит" число меньшее чем .50), счетчик внутренних циклов будет декрементирован, и
в случае отсутствия нулевого результата, произойдет переход на начало следующего
внутреннего цикла.
И эти циклы будут отрабатываться
- либо до момента превышения значения "эталона" на 3 градуса или выше,
- либо до момента окончания отработки цикла таймера (если автоматической
разблокировки не происходит),
- либо до автоматической разблокировки.
В первых двух случаях, отрабатывается аварийный сценарий.
В его начале, на индикацию выводится надпись Ттекущ.>или=Тн. / ВЫКЛЮЧИТЕ БП!!!
(см. "вышележащую" картинку).
Далее, отрабатывается "пищало" (генерация "нелимитированного количества пачек", с
паузами между ними), "закольцованное" на само себя ("мертвяк").
Во внутреннем цикле этой "мертвой закольцовки", формируется управляющий сигнал
выключения БП (bsf PortC,1).
О проверке на величину роста температуры.

;--------------------------------------------
; Проверка на величину роста температуры.
;--------------------------------------------
movwf Karaul ; Temp_LSB1 - Temp_LSB -> Karaul
movlw .254 ;
subwf Karaul,W ; Karaul - .254 = ...
btfsc Status,C ; Результат "+/=0" или "-" ?
goto NORMA ; Если "+/=0" (Tтекущ. возросла менее
; чем на 2 градуса или на 2 градуса).
; Если "-" (Tтекущ. возросла до 3-х градусов
; и выше), то исполнение аварийного сценария.

Под нее организован регистр Karaul.


Вместо него, можно было бы использовать какой-нибудь из имеющихся регистров, но я
не стал этого делать исходя из понятийно-комфортных соображений.
Потом заменю (если не забуду).
Число .254 используется потому, что в случае наличия "термобяки 2-го уровня", имеет
место быть заем.
Число .254 соответствует "уходу" в аварийный сценарий в случае превышения
"эталона" более чем на 2 градуса (от 3-х и выше).
Например, чтобы "поднять планку" на плюс 1 градус, нужно уменьшить это число на
единицу.
Ну и так далее (по принципу типа "шиворот на выворот").

Программа, в которой реализовано сказанное, называется BP_10.asm (прилагается).


Проверить работу термозащиты 2-го уровня можно так:
1. Подпаиваете контрольный светодиод (см. рис. 1).
2. "Шьете все это безобразие" в ПИК.
3. Включаете питание устройства и устанавливаете термопороги. Например, Тн = 40
градусов, Тв = 50 градусов.
4. Переходите в режим выключенной защиты. После этого, в конце 1-й строки, Вы
увидите текущие значения температуры.

13
5. Феном/паяльником (или еще чем-то) нагреваете термодатчик. Динамику нагрева
можно отследить визуально (см. пункт 4).
6. После превышения верхнего Т-порога, сработает термозащита 1-го уровня,
транзистор "вырубится", вентиллятор перейдет на полные обороты и начнется
отработка соответствующего сценария (повторяться не буду).
7. Если нагрев продолжить далее, то сработает термозащита 2-го уровня (динамику
изменения температуры также можно отследить), контрольный светодиод
"загорится", на индикацию будет выведена надпись
Ттекущ.>или=Тн. / ВЫКЛЮЧИТЕ БП!!!
и "железяка" будет постоянно и вредно "пищать".
8. Чтобы прекратить это "безобразие", нужно выключить/включить питание ПИКа.
По-другому оно не прекращается. Так как "мертвяк".
Но могу и "сваять прекращалку". Это как скажете.
9. Для того чтобы проконтролировать другой вариант срабатывания термозащиты
2-го уровня, нужно, в течение времени отработки сценария термозащиты 1-го
уровня, "держать" температуру, в данном случае, в диапазоне от 40 до 50
градусов. Через 5 минут такого "держания", "железяка" автоматически "уйдет в
отказ" (см. пункт 7).

Антракт.
Милости просим в буфет.
А я пока "артистам в тык дам". Профилактически. Чтобы не расхолаживались.

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

14

Вам также может понравиться