Двухконтурный микропроцессорный регулятор температурыРефераты >> Радиоэлектроника >> Двухконтурный микропроцессорный регулятор температуры
Работа на участке включает в себя запуск таймеров и проверку на окончание интервалов. В зависимости от результата осуществляется переход на подпрограмму регулирования либо переход на следующий участок.
Подпрограмма регулирования включает в себя запуск и проверку АЦП, его опрос, сравнение полученного результата с уставкой и в зависимости от результата сравнения производит либо запуск нагревателя, либо его остановку.
Масштабирование кривой регулирования, выбор термопары и расчет входного усилителя.
|
|
|
Масштабирование проводим с учетом запаса (во избежание выхода из строя АЦП).
С учетом максимальной температуры выбираем термопару ТПП ПП68
Рабочий интервал 0-1200 0С, максимальная температура 1600 0С.
График зависимости ТЭДС от температуры выглядит следующим образом.
Ктерм=0.0098
Усилитель сигнала с термопары: 140УД17А, Uсм<0.1 мВ
Dt1уставки = 454/(1085-543)=0,8 c или 8 импульсов таймера.(8H)
Dt2уставки = (3180-1362)/(814-543) = 6.7 с или 67 импульсов таймера.(43H)
Dt1интервал=454 с или 4540 импульсов таймера (11BCH)
Dt2интервал=908 с или 9080 импульсов таймера (2378H)
Dt3интервал=1818 с или 18180 импульсов таймера (4704H)
Uвх.макс=Ктерм∙Кз∙Тмах= 12.8 мВ
Кус = Uоп/(Ктерм∙Кз∙Тмах) =455
R2=1 кОм, R1=R2*(Кус-1) =454 кОм
С1=0.1 мкФ подбор конденсатора производился с помощью Electronics Workbench 512
Подбор мощности печи и периода АЦП.
Мощность печи: 20 кВт
Период АЦП: 0.09
Предварительные установки.
Вход АЦП – DF4
Выход на усилитель – DA0
Прерывания таймера каждые 0,1 с.
Назначение регистров:
-R16, R17 – хранение уставки.
-R18, R19 – счетчик окончания интервала.
-R20 – счетчик интервала изменения уставки.
-R15 - счетчик для хранения 0 (флаг переполнения).
-R5, R22 – рабочие регистры.
-R23,R24 – регистры для хранения числа, прочитанного с АЦП.
Текст программы.
ORG |
$0000 |
Установка нулевого адреса для программы, директива компилятору | |
JMP |
NACH |
Переход к метке NACH | |
ORG |
$0018 |
Установка адреса 0018H для программы | |
DEC |
R20 |
R20 = R20 – 1 – декремент | |
DEC |
R18 |
Уменьшение на единицу R18 | |
SBC |
R19,R15 |
R19 <- R19 – R15 – C В итоге – уменьшение на единицу счетчика на регистрах R19, R18 («длинного счетчика») | |
RETI | |||
ORG |
$0050 |
Установка начального адреса для программы === начало работы программы === | |
NACH: |
BCLR |
7 |
Запрещение всех прерываний (уст. 0 в 7 разряд регистра статуса SREG -- $3F) |
LDI |
R22,$7F |
Установка адреса стека $7FFF. SPH – регистр старшего байта адреса ($3E) SPL – регистр младшего байта адреса ($3D) Далее в программе работа со стеком идет автоматически | |
OUT |
SPH,R22 | ||
LDI |
R22,$FF | ||
OUT |
SPL,R22 | ||
LDI |
R22,0b00000000 |
Обнуление регистра управления MCUCR - $35. Обнуление бита 7 этого регистра устанавливает основной режим работы порта А. | |
OUT |
MCUCR,R22 | ||
LDI |
R22,0b00000001 |
Программирование: DA0 – выход, остальные – входы. (DDA - $1A) | |
OUT |
DDA,R22 | ||
LDI |
R22,$00 |
Отключение нагрузочных резисторов от входов и обнуление выхода (PORTA - $1B) | |
OUT |
PORTA,R22 | ||
LDI |
R22,0b00000100 |
Установка входа DF4 для работы АЦП. (ADMUX - $07) | |
OUT |
ADMUX,R22 | ||
LDI |
R22,0b10000101 |
Установка АЦП: разрешение работы, незапуск, однократный режим, обнуление флага, прерывание запрещено, коэффициент деления частоты 32. Частота АЦП fацп = fo/32 = 4000000/32 = 125000 Гц. Время преобразования tпр = 14/125000 = 112*10-6 c = 112 мкс. (ADCSR - $06) | |
OUT |
ADCSR,R22 | ||
LDI |
R22,0b00010000 |
Разрешение прерывания по режиму А таймера 1, и запрещение остальных прерываний. | |
OUT |
TIMSK,R22 | ||
CLR |
R22 |
Очистка R22 | |
OUT |
TIFR,R22 |
Обнуление всех флагов и всех таймеров. (TIFR - $36) | |
OUT |
TCCR1A,R22 |
Блокировка режима ШИМ. (TCCR1A - $2F) | |
LDI |
R22,0b00001101 |
Установка циклического режима и деления частоты на 1024. fтайм = 4000000/1024 = 3906 Гц. (TCCR1B - $2E) | |
OUT |
TCCR1B,R22 | ||
LDI |
R22,$87 |
Запись числа k = $0187 в регистры сравнения OCR1AH, OCR1AL ($2B, $2A). K = 3906/10 ~ 391 = $0187. Здесь частота прерываний таймера fпр. тайм = 10. Dtпр. тайм = 0,1 секунды. | |
OUT |
OCR1AL,R22 | ||
LDI |
R22,$01 | ||
OUT |
OCR1AH,R22 | ||
CLR |
R15 |
Очистка регистра | |
NOP |
Резервные ячейки памяти | ||
NOP | |||
NOP | |||
INT1: | LDI | R20,$55; |
Занесение начального значения уставки в регистры R17 (старший) , R16 (младший). |
LDI | R17,$03; | ||
LDI | R18,$BC; |
Занесение длительности 1го интервала t1 (числа 11BCH) в регистры R19, R18 (Интервал 454 с). | |
LDI | R19,$11; | ||
M0: | LDI | R20,$8; |
Интервал Dtуставки1=0,8с (8H) |
BSET | 7; |
Разрешение глобального прерывания (запуск счета импульсов установки длительности интервалов). | |
M1: | CALL | REG; |
Вызов подпрограммы REG |
OR | R20,R20; |
Проверка R20 на нуль | |
BRNE | M1; |
Если не нуль, то переход на метку М1 | |
DEC | R16,$01; |
Уменьшение уставки на 1 | |
ADC | R17,R15; | ||
CLR | R5; |
Очистка регистра | |
OR | R5,R18; |
Проверка на нуль регистров R18, R19 (счетчик окончания интервала). | |
OR | R5,R19; | ||
BRNE | M0; |
Если не нуль, переход на метку М10 | |
JMP | INT2; |
Переход на метку INT2 – к работе на втором интервале | |
NOP | |||
NOP | |||
NOP | |||
INT2: | BCLR | 7; |
Запрещение всех прерываний (остановка работы счетчиков). |
LDI | R16,$AB; |
Занесение уставки 0280H в регистры (температура постоянного участка) | |
LDI | R17,$01; | ||
LDI | R18,$78; |
Занесение длительности 2го интервала (числа 2378Н) в регистры счетчика окончания интервала (интервал 908 с) | |
LDI | R19,$23; | ||
BSET | 7; |
Разрешение прерываний. Запуск счетчика. | |
M2: | CALL | REG; |
Вызов подпрограммы |
CLR | R5; | Проверка на нуль | |
OR | R5,R18; | ||
OR | R5,R19; | ||
BRNE | M2; |
Если не нуль, переход к метке М2 | |
JMP | INT3; |
Переход на метку INT3 – к работе на третьем интервале | |
NOP | |||
NOP | |||
NOP | |||
INT3: | LDI | R16,$AB; |
Занесение начального значения уставки в регистры R17 (старший) , R16 (младший). |
LDI | R17,$01; | ||
LDI | R18,$04; |
Занесение длительности 3го интервала t3 (числа 4704Н) в регистры R19, R18 (Интервал 1818 с). | |
LDI | R19,$47; | ||
M3: | LDI | R20,$43; |
Интервал Dtуставки2=6.7с (43H) |
BSET | 7; |
Разрешение глобального прерывания (запуск счета импульсов установки длительности интервалов). | |
M4: | CALL | REG; |
Вызов подпрограммы REG |
OR | R20,R20; |
Проверка R20 на нуль | |
BRNE | M4; |
Если не нуль, то переход на метку М4 | |
INC | R16,$01; |
Увеличение уставки на 1 | |
ADC | R17,R15; | ||
CLR | R5; |
Очистка регистра | |
OR | R5,R18; |
Проверка на нуль регистров R18, R19 (счетчик окончания интервала). | |
OR | R5,R19; | ||
BRNE | M3; |
Если не нуль, переход на метку М3 | |
NOP | |||
NOP | |||
IN | R22,PINA; |
Чтение порта А (PINA -$19) | |
ANI | R22,0b11111110; |
Вывод нуля по выходу DA0 (PORTA - $18) | |
OUT | PORTA,R22; | ||
BCLR | 7; |
Запрещение прерываний. | |
SLEEP |
Выключение до сброса | ||
NOP | |||
NOP | |||
;Подпрограмма | |||
REG: |
IN |
R22,ADCSR |
Чтение регистра управления и состояния АЦП |
ORI |
R22,0b01000000 |
Запуск АЦП | |
OUT |
ADCSR,R22 | ||
NGOT: |
IN |
R22,ADCSR |
Чтение регистра управления и состояния АЦП Маскирование (выделение флага готовности) |
ANI |
R22,0b00001000 | ||
BREQ |
NGOT |
Если нет готовности – переход к метке NGOT | |
IN |
R23,ADCL |
Чтение АЦП (ADCH - $05, ADCL - $04) | |
IN |
R24,ADCH | ||
ANI |
R24,0b00000011 |
Маскирование неиспользуемых разрядов Сравнение старших битов | |
CR |
R17,R24 | ||
BRNQ |
RM0 |
Если равны | |
BRCS |
RM1 |
Если измеренная температура больше уставки | |
RJMP |
RM2 |
Если измеренная температура меньше уставки | |
RM0: |
CR |
R16,R23 |
Сравнение младших байтов |
BRCS |
RM1 |
Если измеренная температура больше уставки | |
RM2: |
IN |
R22,PINA |
Включение нагревателя |
ORI |
R22,0b00000001 | ||
OUT |
PORTA,R22 |
Возврат из подпрограммы Выключение нагревателя | |
RET | |||
RM1: |
IN |
R22,PINA | |
ANI |
R22,0b11111110 | ||
OUT |
PORTA,R22 |
Возврат из подпрограммы | |
RET |