Автор работы: Пользователь скрыл имя, 24 Июля 2013 в 10:33, курсовая работа
В данной курсовой работе представлен проект системы регулирования температуры позаданным нелинейным законам с помощью микроконтроллера ATTINY 461, фирмы Atmel[1].
Целью данной курсовой работы является разработка системы регулирования температуры по нелинейным законам.
Основной задачей курсовой работы является – закрепление навыков работы с микроконтроллерами посредством разработки устройства, использующего микроконтроллер в качестве базового управляющего элемента.
EE_READ ee_TSensorHigh_L
mov YL, EE_DATA
;читаем, отрицательное ли TDH
EE_READ ee_TSensorHigh_PosNeg
cpi EE_DATA, 1
brne read_TSH_exit; уходим, если положительное
; инвертируем
mov ng1l, YL
mov ng1h, YH
rcall ng16
mov YL, ng1l
mov YH, ng1h
read_TSH_exit:
STS TSensorHigh_L, YL
STS TSensorHigh_H, YH
ret
;-----------------------------
;
;-----------------------------
; читаем TRL
read_TRL:
EE_READ ee_TRegulatorLow_H
mov XH, EE_DATA
EE_READ ee_TRegulatorLow_L
mov XL, EE_DATA
;читаем, отрицательное ли TDL
EE_READ ee_TRegulatorLow_
cpi EE_DATA, 1
brne read_TRL_exit; уходим, если положительное
; инвертируем
mov ng1l, XL
mov ng1h, XH
rcall ng16
mov XL, ng1l
mov XH, ng1h
read_TRL_exit:
STS TRegulatorLow_L, XL
STS TRegulatorLow_H, XH
ret
;-----------------------------
;
;-----------------------------
; читаем TRH
read_TRH:
EE_READ ee_TRegulatorHigh_H
mov XH, EE_DATA
EE_READ ee_TRegulatorHigh_L
mov XL, EE_DATA
;читаем, отрицательное ли TDL
EE_READ ee_TRegulatorHigh_
cpi EE_DATA, 1
brne read_TRH_exit; уходим, если положительное
; инвертируем
mov ng1l, XL
mov ng1h, XH
rcall ng16
mov XL, ng1l
mov XH, ng1h
read_TRH_exit:
STS TRegulatorHigh_L, XL
STS TRegulatorHigh_H, XH
ret
;-----------------------------
;
;-----------------------------
; ADC Init - ИнициализуремАЦП
ADC_INIT:
ldi r16, 0b00000000//
out ADMUX, r16
;А тут выбираем откуда брать будем сигнал
;REFS1:0 -- 0b[00]xxxxxx первые два бита - напряжение преобразователя ADC с входа Vcc
;ADLAR -- 0bxx[0]xxxxx следующий бит выравнивание по правой границе (будем снимать все 16 бит)
;MUX -- 0bxxx[01100] Сигнал подается на диференциальный вход ADC0-ADC1 с умножителем 1x
ldi r16, (0<<BIN) | (0<<GSEL) | (0<<REFS2) | (0<<MUX5) | (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0)
out ADCSRB, r16
; BIN=0 работаем в униполярном режиме (напруга на выводе + всегда больше напруги на выводе -)
; GSEL=0 убираем предусиление
; REFS2=0 смотри дальше
; NUX5 смотри дальше
ldi r16, (1<<ADEN)|(1<<ADSC)|(
out ADCSRA, r16
; Итак что тут у нас:
; ADEN = 1 разрешаем АЦП
; ADSC = 1 Запускаем преобразование (первое, дальше автоматом)
; ADate = 1 Непрерывные последовательные преобразования, одно за другим. (зависит от ADCSRB.ADTS)
; ADIE = 1 Разрешаем прерывания.
; ADPS2..0 = 3 Делитель частоты выборок
ret
;-----------------------------
;
;-----------------------------
;обработчик прерывания АЦП
ADC_COMPLETE_INT:
#define tmp_SREG r1
; сохраняем слово состояния программы (SREG)
in tmp_SREG, SREG
;запоминаем измеренное значение (ADCH) в переменной Т
in r0, ADCL
STS T_ADC_L, r0
in r0, ADCH
STS T_ADC_H, r0
rcall calc_temperature
rcall regulator_work
;восстанавливаем ССП
out SREG, tmp_SREG
#undef tmp_SREG
reti
;-----------------------------
;
regulator_work:
push XL
push XH
push YL
push YH
compare_T_RegulatorLow:
LDS XL, TL
LDS XH, TH
LDS YL, TRegulatorLow_L
LDS YH, TRegulatorLow_H
; Y<X, то включаем нагреватель, Y>=X - выключаем нагреватель
cp XH, YH
brlt Enable_Heater; еслименьше
brne Disable_Heater; если даже не равны, то есть XH>YH, то выключаем нагреватель и проверяем дальше
; XH==YH, сравниваем младшие байты
cp XL, YL
brlt Enable_Heater; еслименьше
rjmp Disable_Heater; большелиборавно
Disable_Heater:
ldi XL, 0
STS HeaterEnabled, XL
cbi PORT_HEATER, PIN_HEATER
rjmpcompare_T_RegulatorHigh
compare_T_RegulatorHigh:
LDS XL, TL
LDS XH, TH
LDS YL, TRegulatorHigh_L
LDS YH, TRegulatorHigh_H
cp XH, YH
brlt Disable_Freezer; если меньше, то выходим
; XH==YH || XH>YH
brne Enable_Freezer; XH!=YH => XH>YH (т.к. условие (XH<YH)==0)
; XH==YH => сравниваем младшие байты
cp XL, YL
brlt Disable_Freezer; если меньше, то выходим
rjmp Enable_Freezer;
Disable_Freezer:
ldi XL, 0
STS FreezerEnabled, XL
cbi PORT_FREEZER, PIN_FREEZER
rjmpexit_regulator_work
Enable_Heater:
ldi XL, 1
STS HeaterEnabled, XL
ldi XL, 0
STS FreezerEnabled, XL
sbi PORT_HEATER, PIN_HEATER
rjmpexit_regulator_work
Enable_Freezer:
ldi XL, 1
STS FreezerEnabled, XL
ldi XL, 0
STS HeaterEnabled, XL
sbi PORT_FREEZER, PIN_FREEZER
rjmpexit_regulator_work
exit_regulator_work:
pop YH
pop YL
pop XH
pop XL
ret
Приложение B
Структурная схема проекта
Исполнительный Исполнительный
механизм механизм
морозильника
Индикатор Микроконтроллер
Клавиатура
Датчик
температуры
Приложение C
Система для моделирования процессом регулирования температурой
Приложение D
Алгоритм компьютерной программы
начало
1инициализация
2 вывод на
LCD
3 обновление
LCD
Информация о работе Регуляторы температуры по нелинейным законам