Регулятор температуры

Регулятор температуры

81
0

2013-11-18, 21.09.35

Терморегуляторы сейчас одни из самых распространенных устройств домашней автоматики. Практически каждый известный производитель предлагает выбор из нескольких моделей подобных приборов. Отличаются они функциональными возможностями и ценой, но призваны исполнять одну функцию – управление температурой какого-либо объекта. Несмотря на распространенность термоконтроллеров, находятся любители, предпочитающие собирать их самостоятельно.
Основу любого современного терморегулятора составляет элемент под названием микроконтроллер. Не следует путать его с одноименными вариантами ПЛК. Современный микроконтроллер это отдельная микросхема, в которой реализована большая часть классической микропроцессорной системы и некоторые из устройств связи с объектом. Для реализации полноценной системы, достаточно предусмотреть преобразователи уровней сигналов, элементы питания и написать управляющую программу. В чем-то все это напоминает внедрение ПЛК, за исключением того, что работы проводятся на уровне отдельных элементов микроэлектроники.
Схема регулятора температуры.


Программирование микроконтроллеров осуществляется либо на ассемблере, либо на языке высокого уровня, чаще всего C. При этом требуются солидные знания, как в области программирования, так и в области внутреннего устройства и работы микропроцессорных систем. Зато результат можно получить именно тот, который необходим. Плюс цена оборудования (не включая цену разработки) будет минимальной. Например, описываемая далее конструкция содержит элементы общей стоимостью порядка 15$. И это не предел. При желании и массовом производстве стоимость может быть еще ниже.
Но вернемся к регулятору температуры. Классическая схема любого современного прибора состоит из четырех частей:
  • Датчик
  • Управляющий микроконтроллер
  • Элементы индикации и управления
  • Выходное устройство
Самым серьезным отличием любительских конструкций от применяемых в промышленности, можно считать тип датчика температуры. В индустриальном оборудовании обычно используются термометры сопротивления или термопары. Но эти сенсоры требуют солидной схемы преобразования сигналов и АЦП. Повторить их в любительских условиях не так сложно, но несколько дорого. Данные датчики работают в диапазоне температур от -55 до 125 градусов Цельсия и оснащены встроенным АЦП и одним из последовательных интерфейсов обмена. Для подключения подобных сенсоров к микроконтроллеру не требуется никаких дополнительных элементов (разве что нескольких сопротивлений и конденсаторов), что сильно упрощает задачу построения термоконтроллера. Также цена на подобные датчики находится в районе 2-3$. Если пренебречь не самой высокой точностью и разрешением по температуре, то можно создать обычный регулятор температуры. Кстати изредка встречаются устройства, использующие полупроводниковые датчики и в промышленных применениях. Но наиболее часто эти сенсоры можно встретить в бытовой технике, ПК и других подобных приборах.
Выбор управляющего микроконтроллера целиком лежит на разработчике. Это может быть простая и дешевая модель, либо более мощный вариант, используемый также в промышленных контроллерах. Главным критерием здесь является необходимый алгоритм работы и сервисные функции прибора. Не секрет, что современные индустриальные регуляторы обладают большими возможностями настройки под конкретный процесс. Все это можно реализовать и самостоятельно.
Внешний вид
Принципиальная схема регулятора построена с использованием относительно простого микроконтроллера PIC16F676 и цифрового датчика температуры MCP9800, выпускаемых американской фирмой Microchip. Все микросхемы применены в стандартном варианте включения. Для индикации температуры использован трехсимвольный светодиодный дисплей. Задание температуры может быть выполнено с помощью трех кнопок. Конструкция предполагает два варианта выходных элементов – либо стандартное реле, либо оптопара управления симистором. Выбор нужного варианта производится на этапе сборки.
Самой сложной операцией при изготовлении устройства будет прошивка микроконтроллера управляющей программой. Она потребует наличия специального программатора. К счастью, сегодня, найти подобное оборудование не представляет большой сложности. Сама программа реализует позиционное управление температурой. Уставку можно задать в диапазоне от 0 до 99 градусов.
Конечно, приведенное устройство больше подходит для бытовых применений. Тем не менее, оно повторяет основные возможности современных регуляторов температуры. Несколько усложнив конструкцию, путем применения более мощного микроконтроллера и промышленного датчика, фактически можно получить полный аналог индустриальных систем.
Программа терморегулятора

program ThermoReg;
var i,dig:byte;
dig1,dig2,dig3:byte;
mm,ss,rm,rs,s1,s2:byte;
set_mm,set_ss:byte;
button_cnt1,button_cnt2,button_cnt3:byte;
rezim:byte;
Temp,Temp_set:word;
Soft_I2C_Scl : sbit at RA1_bit;
Soft_I2C_Sda : sbit at RA0_bit;
Soft_I2C_Scl_Direction : sbit at TRISA1_bit;
Soft_I2C_Sda_Direction : sbit at TRISA0_bit;
procedure Read_T();
begin
clrwdt;
Soft_I2C_Start();
Soft_I2C_Write(0x90);
Soft_I2C_Write(0x00);
Soft_I2C_Start();
Soft_I2C_Write(0x91);
rm := Soft_I2C_Read(1);
rs := Soft_I2C_Read(0);
Soft_I2C_Stop();
end;
procedure Delay1();
begin
clrwdt;
Delay_ms(300);
clrwdt;
end;
function m1(num1: byte): byte;
var i:byte;
tmp:word;
begin
clrwdt;
tmp:=0;
for i:=0 to num1 do
begin
tmp:=tmp+625;
end;
result:= tmp div 1000;
end;
function mask(num: byte): byte;
begin
clrwdt;
case num of //bfgacpde
0 : result:= %11011011;
1 : result:= %10001000;
2 : result:= %10110011;
3 : result:= %10111010;
4 : result:= %11101000;
5 : result:= %01111010;
6 : result:= %01111011;
7 : result:= %10011000;
8 : result:= %11111011;
9 : result:= %11111010;
10 : result:= %11111010;
end;
end;
procedure Digit_Reg(digit:byte);
begin
clrwdt;
if (dig=2) and (dig2>2) then digit:=digit+4;
for i:=1 to 8 do
begin
clearbit(PortC,0);
if testbit(digit,0) then setbit(PortC,0);
Setbit(portC,1);
Clearbit(portC,1);
digit:=digit shr 1;
end;
end;
procedure interrupt;
begin
clrwdt;
dig:=dig+1;
if dig>3 then dig:=1;
case dig of
1: begin
clearbit(portc,3);
Digit_Reg(dig3);
setbit(portc,5);
if testbit(portc,2) then
begin
if button_cnt1<200 then
begin
button_cnt1:=button_cnt1+1;
if button_cnt1>=198 then
begin
rezim:= rezim xor 1;
if rezim=0 then
begin
EEPROM_Write(0x02,set_ss);
EEPROM_Write(0x03,set_mm);
end;
end;
end;
end
else button_cnt1:=0;
end;
2: begin
clearbit(portc,5);
Digit_Reg(dig2);
setbit(portc,4);
if (rezim>0) and (testbit(portc,2)=1) then
begin
button_cnt2:=button_cnt2+1;
if button_cnt2=25 then set_ss:=set_ss+10;
if button_cnt2>120 then button_cnt2:=10;
end
else button_cnt2:=0;
end;
3: begin
clearbit(portc,4);
Digit_Reg(dig1);
setbit(portc,3);
if (rezim>0) and (testbit(portc,2)=1) then
begin
button_cnt3:=button_cnt3+1;
if button_cnt3=25 then set_ss:=set_ss-10;
if button_cnt3>120 then button_cnt3:=10;
end
else button_cnt3:=0;
end;
end;
INTCON := %10100000;
end;
function te1(d1,d2:byte):word;
begin
result:=(d1 shl 4)+(d2 shr 4);
end;
begin
OPTION_REG := %00000100;
ansel :=0;
cmcon :=7;
INTCON := $A0;
TRISA := %00000000;
TRISC := %00000100;
PORTA := 0;
PORTC := 0;
Setbit(portc,0);
dig:=1;
rezim:=0;
button_cnt1:=0;
button_cnt2:=0;
button_cnt3:=0;
Delay1;
set_ss:=EEPROM_Read(0x02);
set_mm:=EEPROM_Read(0x03);
clrwdt;
Soft_I2C_Init();
Soft_I2C_Start();
Soft_I2C_Write(0x90);
Soft_I2C_Write(0x01);
Soft_I2C_Write(%01100000);
Soft_I2C_Stop();
clrwdt;
while 1 do
begin
s1:=s1+1;
if set_ss>200 then begin set_ss:=90; set_mm:=set_mm-1; end;
if set_mm>200 then begin set_ss:=0; end;
if set_mm>99 then set_mm:=0;
if set_ss>90 then begin set_ss:=0; set_mm:=set_mm+1; end;
if (rezim>0) then
begin
if (testbit(s1,0)=1) then
begin
dig1:=mask(set_ss div 10);
dig2:=mask(set_mm mod 10);
dig3:=mask(set_mm div 10);
end
else begin
dig1:=2;
dig2:=2;
dig3:=2;
end;
end
else
begin
delay1;
delay1;
clearbit(intcon,gie);
Read_T();
setbit(intcon,gie);
s2:=m1(rs shr 4);
dig1:=mask(s2);
dig2:=mask(rm mod 10);
dig3:=mask(rm div 10);
Temp:=te1(rm,rs);
Temp_set:=te1(set_mm,set_ss);
if Temp<(temp_set-2) then setbit(porta,2);
if Temp>(temp_set+2) then clearbit(porta,2);
end;
delay1;
end;
end.

Статья с сайта «Микроконтроллеры»

НЕТ КОММЕНТАРИЕВ

ОСТАВЬТЕ ОТВЕТ