Замена термореле холодильника
Утром светлого погожего утра захожу на кухню и останавливаюсь. Спрашиваю себя
Зачем я сюда пришёл?
Смотрю на стены, там много фотографий в рамках. Смотришь на них и вспоминаешь события связанные с ними. Повспоминал и снова спросил себя
Зачем я сюда пришёл? На фото смотреть что ли?
Перевожу взгляд на холодильник, подхожу, открываю дверку. Так, огурцов не хочу, помидоров тоже, выпью, наверное, стакан молока.
Наливаю в стакан молоко, пью. Что за чёрт, молоко тёплое. Жена тоже обратила на это внимание и сделала мне замечание, на предмет, чтобы я разобрался с холодильником. Я сославшись на отсутствие времени пошёл в гараж чинить удочки.
В обед жена на удивление накрыла мне обеденный стол, что бывает очень редко, у нас самообслуживание. Когда я приступил к трапезе, борщ оказался прокисшим, второе тоже.
Винить было некого, я поджарил себе 2 яйца и запил чаем. Заглянул в холодильник, холодильная камера не работает, там теплее чем в квартире. Требуется ремонт. Порылся в телефонном справочнике, но ничего не нашёл.
Уходя сказал жене
- пошёл искать мастерскую по ремонту холодильников
Долго блуждал я по городу спрашивая прохожих, пока не пришёл в какой то пустынный двор и нашёл там злополучную мастерскую с вывеской «РЕМОНТИРУЕМ ХОЛОДИДЬНИКИ». На двери мастерской большой амбарный замок был весь в пыли сказал мне:
- проваливай мужик, я тебя не звал
Поплёлся домой и после семейного совета, подсчитав затраты, пришли к выводу что новый холодильник не потянем, придётся разбираться самому.
Нашёл в интернете электрическую схему, вот она на Рис.1
Рис.1
Электрическая схема двухкомпрессорного холодильника ARDO:
1 — компрессор холодильного отделения;
11 — датчик температуры;
2 — термореле; холодильной камеры
12 — выключатель термостата морозильного отделения;
3 — электромагнитное репе:
13 — электромагнитное репе;
4 — лампа подсветки:
14 — термореле морозильной камеры;
5 — выключатель пампы:
15 — компрессор морозильного отделения;
6 — мотор вентилятора:
16 — «земля»
7 — термостат холодильного отделения;
N — нейтраль;
8 — термостат морозильного отделения:
L — фаза;
9 — выключатель цепи питания;
10 — измеритель температур;
Возможно термореле? Вытаскиваю из холодильника термореле холодильной камеры пытаюсь понять как оно работает, вывинчиваю какой то винтик, оттуда как чёрт из табакерки выскакивают пружинки и термореле разваливается на отдельные элементы. Пытаюсь всё собрать но ничего не получается. Осталась на момент написания статьи часть представленная на Рис.2
Рис.2
Полая трубка подсоединённая к камере. Похоже на барометр. Наверное, в камере и трубке газ, под действием температуры происходит расширение газа, камера увеличивается в размере и давит на контакт включающий двигатель компрессора. Следовательно, с электрической точки нужен контакт, включающий и выключающий камеру. Это уже легче.
Выключаю холодильник, нахожу провода подходящие к термореле, замыкаю их, включаю холодильник. И о чудо! Холодильная камера заработала и через час там была Антарктида!
Т.е. у меня как у человека, который работает с цифровой техникой, созрел план управления регулируемой скважностью включения/выключения двигателя компрессора.
Т.е. раздельно регулируемые по длительности импульсы включения/выключения двигателя компрессора позволяют выйти на нужный режим работы холодильной камеры
На тот период времени написал план.
«Управление холодильной камерой – план»
-
Определение тока через контакты включения двигателя компрессора (опытным путём установлен ток 750 мА двигателя компрессора).
-
Подбор силового ключа (семистора или реле).
-
Определение блока питания.
-
Разработка схемы управления на основе регулируемого таймера (555 или ATtiny15 или применение 176 серии).
Поскольку я весьма ограничен в выборе комплектующих, то сделал из того что было. На Рис.3 представлена принципиальная схема управления двигателем насоса холодильной камеры АРДО.
Рис.3
Силовая часть схемы состоит из элементов R4, VT1, R5, MOC3061, R6, R7, TC112-10. Включение двигателя происходит при наличии сигнала управления UPR=0, который формируется микроконтроллером МК1. При UPR=0 транзистор VT1 открывается и напряжение Vcc=5V через R5=200 Ом идёт на светодиод микросхемы MOC3061 на выходе 4 которой формируется потенциал открывающий симистор Т1. Двигатель компрессора холодильника М включается, камера начинает морозить. При UPR=1 двигатель выключается.
Схема управления представлена МК1 программируемым через разъём SH1 программатора STK500.
Для управления раздельной длительностью импульса и паузы служат элементы кнопка КН и тумблер Т1. Т1 – определяет в замкнутом положении длительность паузы, в разомкнутом длительность импульса.
Как это работает? При включении питания схемы программа выставляет по умолчанию уставки по времени включения 1 мин и времени выключения 1 мин. При таком жёстком режиме появляется Антарктида и при длительной работе намерзает иней и не успевает оттаивать. При нажатии/отпускании кнопки КН программа анализирует состояние тумблера Т1. Если Т1=1, то это режим добавления импульса, если Т1=0, то это режим добавления паузы. В сдвигающем регистре RG1, RG2 код минут импульса/паузы в зависимости от Т1 с отображением на индикаторе ИНД. Опытной проверкой установлено, что холодильная камера при наружной температуре квартиры от 25 до 30 градусов работает в оптимальном режиме т.е. длительность импульса от 2-х до 3-х мин, паузы 8-и до 9-и мин. .
С блоком питания проблем не оставалось. Сходил на рынок, купил БУ адаптер от мобилы на 5 В.
На Рис.4 представлена печатная плата управления холодильной камерой.
Рис.4
На Рис.5 представлен внешний вид прибора «Терморегулятор на МК ATTiny15».
Рис.5
Прога на ассемблере
.include "tn15def.inc"
.def d0 = r0
.def d1 = r1
.def imp = r2
.def pau = r3
.def ip = r4
.def tmp = r16
.def mls20 = r17//регистр накапливает 1сек за 100 прерываний
.def sek = r18//регистр накапливает секунды
.def min = r19//регистр накапливает минуты
//коды сегментов индикатора
.equ g=2
.equ b=4
.equ a=8
.equ c=16
.equ d=32
.equ f=64
.equ e=128
//коды цифр индикатора
.equ _0=a+b+c+d+e+f
.equ _1=b+c
.equ _2=a+b+g+e+d
.equ _3=a+b+c+d+g
.equ _4=b+c+f+g
.equ _5=a+c+d+f+g
.equ _6=a+c+d+e+f+g
.equ _7=a+b+c
.equ _8=a+b+c+d+e+f+g
.equ _9=a+b+c+d+f+g
.equ t1_compa =3//вектор прерывания
rjmp main
.org t1_compa;Установка начального адреса программы прерывания T1
rjmp p_t1_compA ;Безусловный переход на подпрограмму обработки T1по сравнению с А
main:
;********** Установка портa и режима прерывания **********
ldi tmp,0x40
out tifr,tmp//разр.прер.по совпад.в рег.А
out timsk,tmp//флаг.прер.по совпад.в рег.А
ldi tmp,0x8e
out tccr1,tmp//сброс по совпадению, ck/512,oc1a-отключён,
ldi tmp,100
out ocr1a,tmp
sbi ddrb,0//синхроимпульс
sbi ddrb,1//инфо
sbi ddrb,3//семистор
cbi portb,3//включить камеру ARDO
ldi tmp,1
mov imp,tmp//длительность импульса по умолчанию
ldi tmp,1
mov pau,tmp//длительность паузы по умолчанию
sei
cbi portb,3//открыть симистор
work:
sbic pinb,4
mov ip,imp
sbis pinb,4
mov ip,pau
mov tmp,ip
rcall convert_chisla_simvol
wait1:
sbic pinb,2//нажата?
rjmp wait1
wait2:
sbis pinb,2//отжата?
rjmp wait2
dl:
dec d0 brne dl dec d1 brne dl
sbic pinb,4
inc imp
sbis pinb,4
inc pau
mov tmp,ip
cpi tmp,10
brne work
ldi tmp,1
sbic pinb,4
mov imp,tmp
sbis pinb,4
mov pau,tmp
rjmp work
convert_chisla_simvol:
pau1: cpi tmp,1 brne pau2 ldi tmp,_1 rcall wrTM8
pau2: cpi tmp,2 brne pau3 ldi tmp,_2 rcall wrTM8
pau3: cpi tmp,3 brne pau4 ldi tmp,_3 rcall wrTM8
pau4: cpi tmp,4 brne pau5 ldi tmp,_4 rcall wrTM8
pau5: cpi tmp,5 brne pau6 ldi tmp,_5 rcall wrTM8
pau6: cpi tmp,6 brne pau7 ldi tmp,_6 rcall wrTM8
pau7: cpi tmp,7 brne pau8 ldi tmp,_7 rcall wrTM8
pau8: cpi tmp,8 brne pau9 ldi tmp,_8 rcall wrTM8
pau9: cpi tmp,9 brne pau10 ldi tmp,_9 rcall wrTM8
pau10:ret
wrTM8:
//запись в 8-и разрядный последовательный регистр inf0 для вывода на индикатор
rcall write_bit// проталкиваем нулевой разряд
lsr tmp rcall write_bit// проталкиваем 1 разряд
lsr tmp rcall write_bit// проталкиваем 2 разряд
lsr tmp rcall write_bit// проталкиваем 3 разряд
lsr tmp rcall write_bit// проталкиваем 4 разряд
lsr tmp rcall write_bit// проталкиваем 5 разряд
lsr tmp rcall write_bit// проталкиваем 6 разряд
lsr tmp rcall write_bit// проталкиваем 7 разряд
ret
write_bit://анализ,запись и проталкивание бита 1/0 в регистр на 2-х 155ТМ8
sbrc tmp,0//пропустить если бит в регистре очищен
sbi portb,1//info=1
sbrs tmp,0//пропустить если бит в регистре установлен
cbi portb,1//info=0
//выдача синхроимпульса для записи бита
sbi portb,0
cbi portb,0
ret
p_t1_compA:
sbis pinb,3//симистор включён?
brne control1
sbic pinb,3//симистор выключён?
brne control2
control1:
cp min,imp
brne sum
clr mls20
clr sek
clr min
sbi portb,3//выключить симистор
rjmp sum
control2:
cp min,pau
brne sum
clr mls20
clr sek
clr min
cbi portb,3//включить симистор
sum:
//накапливаем 100 прерываний,обнуляем и получаем 1 сек
inc mls20
cpi mls20,20
brne ret1
clr mls20
//накапливаем 60сек до 1 мин,обнуляем и получаем 1мин
inc sek
cpi sek,60
brne ret1
clr sek
//накапливаем минуты до 10 мин,обнуляем и получаем 0 мин
inc min
cpi min,10
brne ret1
clr min
ret1:
reti
Ещё один вариант регулятора
В статье 1 был описан вариант термореле на ATiny15. Вариант рабочий, год уже пашет без замечаний. Но в единственном варианте. Посколько я страшно не люблю ремонт. Даже собственных изделий. Перспектива чинить, если сломается, да ещё в реальном времени, когда в холодильнике портятся продукты, меня не устраивал.
Во временном застое, в котором я пребывал в последнее время, после неудачной схемы по снятию и фиксации биопотенциалов сердца я решил заняться чисто цифровой схемой, а именно второго варианта термореле на ATiny2313. Привлекала возможность написания проги на С, корячиться на ассемблере шибко не хотелось. На Рис.6 изображена принципиальная схема второго варианта.
Рис.6
Силовая часть VT1,MC1,ТС112-10 и сопутсвующих пассивных элементах практически повторяет первый вариант за исключением замены PNP транзистора на NPN управляемый положительным сигналом UPR.
Теперь коротко о работе данного варианта.Управление осуществляется на базе МК ATiny2313. На Рис.7 представлен алгоритм работы схемы. Задание на включение/отключение холодильной камеры формируется на микропереключателе S1 нулевым позиционным двоичным кодом 1248 на контактах 1-2 3-4 5-6 7-8 микропереключателя. Его контакты 9-10 11-12 служат для аппаратного сброса МК.
Рис.7
Красные диоды служат для отображения задания в минутах для включения холодильной камеры, жёлтые отображают «Паузу» задания в минутах для отключения холодильной камеры. Пауза вычисляется МК по формуле ПАУЗА=15-ЗАДАНИЕ. Далее МК включает компрессор холодильной камеры и переходит к отсчёту времени. По истечении минуты происходит инкремент ЗАДАНИЕ =ЗАДАНИЕ-1. Задание для паузы при этом не менятся. При достижения ЗАДАНИЯ=0 красные светодиоды гаснут и происходит выключения компрессора холодильника. По истечении минуты происходит инкремент ПАУЗА = ПАУЗА -1. Задание для ЗАДАНИЯ при этом показывает 0. При достижения ПАУЗА =0 жёлтые светодиоды гаснут и происходит считывание кода ЗАДАНИЯ с выключателя S1,при этом код отоьражается на красных светодиодах с включением компрессора холодильника. Далее цикл повторяется. Для изменения соотношения ЗАДАНИЕ/ПАУЗА изменяется код на переключателе и вступает ав силу при считывании после отработки ПАУЗЫ. Для немедленного вступления в силу нового режима необходимо кратковременно замкнуть контакты 9-10 или 11-12 или снять питание со схемы.
Рис.8
На Рис.8 приведена печатная схема изготовленная с помощью программы SprintLayOut 6.0, экпортирована той же программой в формат «Фрезеровка изоляционных дорожек» и сверление отверстий «EXCELION». Для экспорта указанных баз данных в текстовый формат для фрезерного станка использовалась программа CNC_Converter_v1.72.exe. Данные программы есть в Интернете и легко ищутся и инсталлируются на ПК. Плата изготовлена на фрезерном станке СНС3 (Рис.9).
Рис.9
Для отладки программы использовался комплекс STK500 приобретённый мной в Киеве 10 лет назад. На Рис.5 отображена лицевая и обратная сторона указанного отладочного комплекса. При наладке обнаружены недорабоки платы а именно контакт PA0-5 ножка сокета, куда вставлялся контроллер не соединялся со штырьковым разъёмом порта А, пришлось припаять провод, на Рис.10 – длинная связь.Объём программы составил 25% от общей. Также было обнаружено ранее отсутствие проводников сокета для ATMega8 на штырьковое поле порта В, два коротких проводника Рис.5. Пришлось написать по этому поводу письмо в Ассоциацию разработчиков ATMEL, ответа, к сожалению, не получено.
Рис.10
На Рис.11 приведен внешний вид регулятора в прозрачной пластмассовой коробке с крышкой(на рисунке не видно). На переключателе выставлен код минут ЗАДАНИЯ равный 5 минутам. Следовательно ПАУЗА равна 15-5=10 минут. Размер данной схемы вместе с корпусом составляет ¼ от прежнего варианта.
Рис.11
Этапы
-
Первый этап - реализация идеи в виде алгоритма(Рис.2) ;
-
Второй этап – вычерчивание схемы в любом графическом приложении,( использовался Splan 7.0 без привязки к контактам схемы, т.е. без обозначения адресов;
-
Так как танцуем от печки, подыскиваю корпус, примерных на глазок размеров;
-
Если такого корпуса не отыскивается, начинаю разрабатывать плату с компактным размещением деталей, с удобной привязкой деталей, попутно проставляя адреса привязки;
-
По окончании разработки печатной платы проверяю соответствие принципиальной схемы монтажной с помощью «ТЕСТИЛКИ» имеющейся в SprintLayOut;
-
Пишем ПП «ИНИЦИАЛИЗАЦИЯ» оборудования;
-
Пишем ПП «ТЕСТ» и проверяем работу оборудования на STK500;
-
Пишем ПП «Cчитывание задания и первоначальный вывод на индикатор величины ИМПУЛЬСА и ПАУЗЫ и проверяем работу оборудования на STK500;
-
Пишем ПП «Считывание текущего значения импульса с выводом на индикатор» и проверяем работу оборудования на STK500;
-
Пишем ПП «Считывание текущего значения паузы с выводом на индикатор» и проверяем работу оборудования на STK500;
-
Пишем программу «MAIN» c включением указанных модулей и проверяем работу оборудования на STK500;
-
Вырезаем односторонний текстолит нужных размеров и приклеиваем на стол фрезерного станка СНС3 с помощью двухсторонней липкой ленты со стороны отсутствия меди;
-
Запускаем станок на ПП «ФРЕЗЕРОВАНИЕ». По окончании запускаем ПП «СВЕРЛЕНИЕ»;
-
По окончании сверления, снимаем плату, с помощью остро заточенной отвёртки снимаю незадействованную медь;
-
Распаиваю детали, под сложные микросхемы устанавливаю сокеты для быстрой замены в будущем;
-
Плата спаяна, приступаем к комплексной отладке;
-
Плата отлажена, приступаем к установке её в корпус, если он имеется, иначе корпус изготавливаем;
-
По окончании монтажа устанавливаем изделие на реальный объект и подбираем необходимый режим для правильного охлаждения холодильной камеры. И на этом КОНЕЦ.
Ниже приведена незатейливая программа.
/*****************************************************
Date : 06.09.2017
Chip type : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <delay.h>
#define t delay_ms(1000)
#define T delay_ms(60000)
char Impuls,Pausa;
#pragma used+
//диагностика схемы
void diagn(void)
{
if (!PIND.0){PORTD.2=0; t; PORTD.2=1;}//индикация 0-го разряда задания
if (!PIND.1){PORTD.3=0; t; PORTD.3=1;}//индикация 1-го разряда задания
if (!PINA.1){PORTD.4=0; t; PORTD.4=1;}//индикация 2-го разряда задания
if (!PINA.0){PORTD.5=0; t; PORTD.5=1;}//индикация 3-го разряда задания
PORTB.3=0; t; PORTB.3=1;//индикация 0-го разряда задания паузы
PORTB.2=0; t; PORTB.2=1;//индикация 1-го разряда задания паузы
PORTB.1=0; t; PORTB.1=1;//индикация 2-го разряда задания паузы
PORTB.0=0; t; PORTB.0=1;//индикация 3-го разряда задания паузы
PORTB.6=1; t; PORTB.6=0;//индикация включения холодильника
}
void InicPort(void)
{
//ИницПорта А - все входы с подтягивающими резисторами
DDRA=0;PORTA=7;//Приём информации с кодового выключателя(PA0,PA1),RESET-PA2
//ИницПорта D - входы с подтягивающими резисторами
DDRD.0=DDRD.1=0;PORTD.0=PORTD.1=1;//Приём информации с кодового выключателя(PD0,PD1)
//ИницПорта D - активные входы - управление индикацией "ЗАДАНИЕ"
DDRD.2=DDRD.3=DDRD.4=DDRD.5=PORTD.2=PORTD.3=PORTD.4=PORTD.5=1;
//ИницПорта B - активные входы - управление индикацией "ПАУЗА" и откл компрессора
DDRB.0=DDRB.1=DDRB.2=DDRB.3=DDRB.6=1;PORTB.0=PORTB.1=PORTB.2=PORTB.3=1;PORTB.6=0;
}
//считывание задания и первоначальный вывод на индикатор величины ИМПУЛЬСА и ПАУЗЫ
void Read_I_P(void)
{
if (!PIND.0){Impuls|=1;PORTD.2=0;} else {Impuls&=0x0F-1;PORTD.2=1;}
if (!PIND.1){Impuls|=2;PORTD.3=0;} else {Impuls&=0x0F-2;PORTD.3=1;}
if (!PINA.1){Impuls|=4;PORTD.4=0;} else {Impuls&=0x0F-4;PORTD.4=1;}
if (!PINA.0){Impuls|=8;PORTD.5=0;} else {Impuls&=0x0F-8;PORTD.5=1;}
Pausa=15-Impuls;
if(Pausa&1)PORTB.3=0; else PORTB.3=1;
if(Pausa&2)PORTB.2=0; else PORTB.2=1;
if(Pausa&4)PORTB.1=0; else PORTB.1=1;
if(Pausa&8)PORTB.0=0; else PORTB.0=1;
}
//Считывание текущего значения импульса с выводом на индикатор
void Read_I(void)
{
if(Impuls&1)PORTD.2=0; else PORTD.2=1;
if(Impuls&2)PORTD.3=0; else PORTD.3=1;
if(Impuls&4)PORTD.4=0; else PORTD.4=1;
if(Impuls&8)PORTD.5=0; else PORTD.5=1;
}
//Считывание текущего значения паузы с выводом на индикатор
void Read_P(void)
{
if(Pausa&1)PORTB.3=0; else PORTB.3=1;
if(Pausa&2)PORTB.2=0; else PORTB.2=1;
if(Pausa&4)PORTB.1=0; else PORTB.1=1;
if(Pausa&8)PORTB.0=0; else PORTB.0=1;
}
#pragma used-
void main(void)
{
InicPort();
diagn();
while (1)
{
Read_I_P();
m1:
if(Impuls)
{
PORTB.6=1;//включение компрессора на время 1мин * Impuls
T;//задержка 1 мин
Impuls--;
Read_I();
goto m1;
}
else
{
PORTB.6=0;//выключение компрессора
m2:
T;//задержка 1 мин
Pausa--;
Read_P();
if(Pausa)goto m2;
}
};
}