Анализ
неисправностей силового электронного
оборудования показывает, что одним из
основных факторов, влияющих на
качественные характеристики устройств,
является устойчивость компонентов к
перегрузу по току. Хорошим признаком
ухода в область максимальных величин
есть повышенное тепловыделение. То, что предлагает промышленность и доступно пользователям, для контроля температуры, сложно применить для решения данной задачи.
В
ниже следующем обзоре рассмотрен,
простой в реализации, способ фиксации температуры. Это устройство представляет
собой контроллер, далее по тексту
термостат. Область применения данного
прибора определена необходимостью
чёткого соответствия измеренной
температуры к заданным параметрам. Есть одно программное ограничение, что сделано для конкретных целей, диапазон
контролируемой температуры находится
в пределах от 0ºС до+125ºС. Для примера, в
качестве исполнительного элемента,
использовано реле.
Выбор
измерительного элемента остановился
на DS18B20,
что облегчает процесс калибровки, а
точнее в его отсутствие, что очень важно.
В данном варианте, для образца, указан
один датчик. Из практики, оптимальным
можно считать три точки контроля, это
транзисторный блок, трансформатор и
выпрямительный модуль. Вся логика работы
схемы заложена в контроллере ATtiny13A,
ссылка на архив с прошивкой прилагается,
там также находится макет платы в pdf,
формат А5 1:1 . Если тема будет интересной,
выложу схемы с двумя и тремя датчиками.
Уставка срабатывания и отпускания,
выбирается пользователем самостоятельно,
находится она в EEPROM
по адресу
0x00-верхний порог,
0x01-нижний порог и инициализируется с
помощью программатора PoniProg.
Кратко
о работе схемы. Питание 12 вольт, длина
соединительных жил датчика около 50 см,
но лучше менее, располагать шлейф надо
перпендикулярно силовым цепям. С подачей
напряжения происходит инициализация
контроллера, светодиод led1 "Готовность"
начинает промаргивать, а в установившемся
режиме горит постоянно, схема подготовлена
к измерениям. Если температура в
контролируемой точке достигнет порога
срабатывания, светодиод led1 гаснет и
зажигается led2 “tº”,
а также срабатывает реле Rel1.
Процесс отпускания идёт в обратном
порядке, т.е. реле обесточивается,
светодиод led2 гаснет, led1 зажигается.
Вот
так выглядит устройство в сборе.
Один
из способов крепления датчика.
Далее,
описание как работать с программой и
программатором.
В
архиве имеется основная прошивка
“tds.hex” и пример, для образца, прошивки EEPROM
“tds.eep”. Напомним,
в EEPROM находятся
уставки срабатывания и отпускания, для
наглядности они выбраны как 70º и
соответственно 65º. Все операции по
переносу данных в контроллер выполняются
с помощью программатора PoniProg и
соответствующего программного
обеспечения. Работы с программатором,
касаться не будем, есть подробные
инструкции в интернете. Сначала загружаем
файл “tds.hex” , а
затем “tds.eep”.
Так
выглядит окно программы после всех
основных прошивок.
Чтобы изменить порог срабатывания термостата
необходимо в среде PoniProg
поменять вот эти уставки.
Для
этого активируем опцию “Edit
Buffer
enabled”.
Кликаем
на цифру 46, всплывает окно, где в десятичной
форме можно задать параметр верхнего
уровня порога срабатывания. Все единицы
соответствуют единицам градусов в
Цельсиях. Hex
46 это шестнадцатеричный эквивалент 70º
градусов.
Подобные
движения проводим с позицией 41, это
нижний порог срабатывания.
И
последнее FUSE.
Ссылка для скачивания прошивки Здесь
Мой контакт: avt48@yandex.ua
Пример кода чтения данных датчика ds18b20.
В данном обзоре используется компилятор, со своей средой, “ WinAVR-20100110” для Cи . Для примера, в исходнике указана переменная “termo”, где скомпонован результат измерения температура,
только целая часть. Вся программа оптимизирована под контроллер attiny13a, и
хорошо просматривается в “ PROTEUS”.
/*
* prog_example_ds18b20_attiny13a
*
* Created: 26.06.2014
*
Author: alexander
*/
//определяем
частоту
#define F_CPU 4800000L
//подключаем заголовочные
файлы
#include <avr/io.h>
#include <avr/signal.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
//задаёмся прототипом
функции, чтения данных датчика ds18b20
void temperature(void);
int8_t volatile termo; //переменная для данных температуры
int main(void)
{
while(1)
{
temperature() ; // функцию read ds18b20
}
return 0;
}
//-----------------------------------------------------------------------
uint8_t therm_reset() //функция подготовки ds18b20
{
uint8_t i; // переменная
PORTB&=~(1<<3); //устанавливаем порт PB3 в низкий
уровень
DDRB|=(1<<3); //активируем PB3 как выход
_delay_us(480);//--480 // ждём
DDRB&=~(1<<3); //активируем
PB3 как вход
_delay_us(60);//--60
i=(PINB & (1<<3)); //читаем
_delay_us(420);//--420
return i; // возвращаем
"1" ok
}
//-------------------------------------------------------------------------
//запись бита
void therm_write_bit(uint8_t bit)
{
PORTB&=~(1<<3);
DDRB|=(1<<3);
_delay_us(2);//---2
if(bit) DDRB&=~(1<<3);
_delay_us(60);//--60
DDRB&=~(1<<3);
}
//----------------------------------------------------------------------
//запись байта
void therm_write_byte(uint8_t byte)
{
uint8_t i=8;
while(i--)
{
therm_write_bit(byte&1);
byte>>=1;
}
}
//-----------------------------------------------------------------------
//чтение бита
uint8_t therm_read_bit(void)
{
uint8_t bit=0;
PORTB&=~(1<<3);
DDRB|=(1<<3);
_delay_us(2);//2
DDRB&=~(1<<3);
_delay_us(14);//--14
if(PINB&(1<<3)) bit=1;
_delay_us(45);//--45
return bit;
}
//---------------------------------------------------------------------
//чтение байта
uint8_t therm_read_byte(void)
{
uint8_t i=8, n=0;
while(i--)
{
n>>=1;
n|=(therm_read_bit()<<7);
}
return n;
}
//----------------------------------------------------------------------
void temperature(void)
{
asm("cli");
uint8_t temperature[2];
therm_reset();
therm_write_byte(0xcc);
therm_write_byte(0x44);
while(!therm_read_bit());
therm_reset();
therm_write_byte(0xcc);
therm_write_byte(0xbe);
temperature[0]=therm_read_byte();
temperature[1]=therm_read_byte();
therm_reset();
// обрабатываем полученные данные в читаемый вид
termo=temperature[0]>>4;
termo|=(temperature[1]&0xf)<<4;
}
//--------------------------------------------------------------------------------
Здесь собраны все файлы для WinAVR,
а также схема в “ PROTEUS”.
Здесь рабочий вариант устройства для точного измерения температуры.
Здесь рабочий вариант устройства для точного измерения температуры.
Мой контакт: avt48@yandex.ua
Здравствуйте. А можно переделать термостат наоборот, для защиты от переохлаждения.
ОтветитьУдалитьНет, в этом варианте проблематично. Данный проект предназначен для защиты от теплового пробоя силового электронного оборудования, там есть свои особенности, а низкие температуры не совсем по теме.
Удалить