Регуляторы температуры по нелинейным законам

Автор работы: Пользователь скрыл имя, 24 Июля 2013 в 10:33, курсовая работа

Описание работы

В данной курсовой работе представлен проект системы регулирования температуры позаданным нелинейным законам с помощью микроконтроллера ATTINY 461, фирмы Atmel[1].
Целью данной курсовой работы является разработка системы регулирования температуры по нелинейным законам.
Основной задачей курсовой работы является – закрепление навыков работы с микроконтроллерами посредством разработки устройства, использующего микроконтроллер в качестве базового управляющего элемента.

Файлы: 1 файл

Курсач основная часть (Восстановлен).docx

— 1,009.42 Кб (Скачать файл)

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_PosNeg

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_PosNeg

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//0b00001100

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)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Информация о работе Регуляторы температуры по нелинейным законам