Задание.
1. Разработать принципиальную схему микроконтроллера для регулирования температуры технологического процесса.
-микроконтроллер: ATmega603
-использовать вход АЦП: DF4
-использовать выход: DA0
-величина опорного напряжения: 5.82 В
-вариант кривой регулирования: 7
-длительность процесса: 3180 сек.
-максимальная температура: 1085 0С.
2. Выбрать термопару, рассчитать усилитель и нарисовать принципиальную схему регулятора температуры.
3. Написать программу для микроконтроллера регулятора температуры.
4. Дать описание блок-схемы регулятора, описание принципиальной схемы, применяемых микросхем. Дать подробное описание структурной схемы программы и текста программы.
Принципиальная схема процесса регулирования.
Процесс регулирования является циклическим и выглядит следующим образом:
Температура в объекте регулирования (печи) измеряется с помощью термопары. Термопара преобразует температуру в напряжение, которое подается на усилитель. Выходной сигнал с усилителя подается на АЦП. Микроконтроллер Atmel ATmega 603
имеет встроенный АЦП. Процессор согласно программе, написанной для реализации данной кривой урегулирования, выдает или не выдает сигнал, который поступает на усилитель, который, питаясь от сети 380В, нагревает резистор печи. Модель, рассматриваемая нами, является упрощенной за счет того, что печь нагревается не мгновенно. По большому счету нагреватель следовало бы включать раньше, чем температура печи упадет ниже нужной нам. Но и в таком виде она достаточно продуктивна.
Важнейшим достоинством системы является то, что вмешательства человека не требуется.
Электронная схема регулятора.
U1 380B
48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33
49 32 Внешний вид
контроллера.
ATmega 603
Atmelcorporation
64 17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Описание выводов контроллера.
№
Краткое описание
1
REN
2-9
port E
10-17
port B
18-19
TOSC1,2 - выход на внешний генератор частоты
20
RESET
21
VCC
22
GND
23-24
XTAL1,2 - выход на кварц 4 МГц
25-32
port D
33
WR – запись
34
RD –чтение
35-42
port C - работает только на вывод данных
43
ALE
44-51
port A
52
VCC
53
GND
54-61
port F – вход АЦП, работает только на прием данных
62
AREF
63
AGND
64
AVCC
Используется архитектура с закрытой шиной (гарвардская архитектура).
Блок-схема микроконтроллера ATmega603
Блок-схема программы.
Инициализация включает в себя инициализацию порта F, подключение его к АЦП, выбор режима работы АЦП, инициализацию порта A, инициализацию двух таймеров.
Работа на участке включает в себя запуск таймеров и проверку на окончание интервалов. В зависимости от результата осуществляется переход на подпрограмму регулирования либо переход на следующий участок.
Подпрограмма регулирования включает в себя запуск и проверку АЦП, его опрос, сравнение полученного результата с уставкой и в зависимости от результата сравнения производит либо запуск нагревателя, либо его остановку.
Масштабирование кривой регулирования, выбор термопары и расчет входного усилителя.
427D 1ABH
853D 355H
640D 280H
Масштабирование проводим с учетом запаса (во избежание выхода из строя АЦП).
С учетом максимальной температуры выбираем термопару ТПП ПП68
Рабочий интервал 0-1200 0С, максимальная температура 1600 0С.
График зависимости ТЭДС от температуры выглядит следующим образом.
Ктерм=0.0098
Усилитель сигнала с термопары: 140УД17А, Uсм
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, 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
Использованная литература и программное обеспечение: «Курс лекций по электронике за 6 семестр» Краснопольский А.Е. Electronics Workbench 512 Math Lab 6.0