top of page

Замена термореле холодильника

Утром светлого погожего утра захожу на кухню и останавливаюсь. Спрашиваю себя

Зачем я сюда пришёл?

Смотрю на стены, там много фотографий в рамках. Смотришь на них и вспоминаешь события связанные с ними. Повспоминал и снова спросил себя

Зачем я сюда пришёл? На фото смотреть что ли?

Перевожу взгляд на холодильник, подхожу, открываю дверку. Так, огурцов не хочу, помидоров тоже, выпью, наверное, стакан молока.

Наливаю в стакан молоко, пью. Что за чёрт, молоко тёплое. Жена тоже обратила на это внимание и сделала мне замечание, на предмет, чтобы я разобрался с холодильником. Я сославшись на отсутствие времени пошёл в гараж чинить удочки.

В обед жена на удивление накрыла мне обеденный стол, что бывает очень редко, у нас самообслуживание. Когда я приступил к трапезе, борщ оказался прокисшим, второе тоже.

Винить было некого, я поджарил себе 2 яйца и запил чаем. Заглянул в холодильник, холодильная камера не работает, там теплее чем в квартире. Требуется ремонт. Порылся в телефонном справочнике, но ничего не нашёл.

Уходя сказал жене

- пошёл искать мастерскую по ремонту холодильников

Долго блуждал я по городу спрашивая прохожих, пока не пришёл в какой то пустынный двор и нашёл там злополучную мастерскую с вывеской «РЕМОНТИРУЕМ ХОЛОДИДЬНИКИ». На двери мастерской большой амбарный замок был весь в пыли сказал мне:

- проваливай мужик, я тебя не звал

Поплёлся домой и после семейного совета, подсчитав затраты, пришли к выводу что новый холодильник не потянем, придётся разбираться самому.

Нашёл в интернете электрическую схему, вот она на Рис.1

Рис.1

Электрическая схема двухкомпрессорного холодильника ARDO:

1 — компрессор холодильного отделения;

11 — датчик температуры;

2 — термореле; холодильной камеры

12 — выключатель термостата морозильного отделения;

3 — электромагнитное репе:

13 — электромагнитное репе;

4 — лампа подсветки:

14 — термореле морозильной камеры;

5 — выключатель пампы:

15 — компрессор морозильного отделения;

6 — мотор вентилятора:

16 — «земля»

7 — термостат холодильного отделения;

N — нейтраль;

8 — термостат морозильного отделения:

L — фаза;

9 — выключатель цепи питания;

10 — измеритель температур;
 

Возможно термореле? Вытаскиваю из холодильника термореле холодильной камеры пытаюсь понять как оно работает, вывинчиваю какой то винтик, оттуда как чёрт из табакерки выскакивают пружинки и термореле разваливается на отдельные элементы. Пытаюсь всё собрать но ничего  не получается. Осталась на момент написания статьи часть представленная на  Рис.2

Рис.2

Полая трубка подсоединённая к камере. Похоже на барометр. Наверное, в камере и трубке газ, под действием температуры происходит расширение газа, камера увеличивается в размере и давит на контакт включающий двигатель компрессора. Следовательно, с электрической точки нужен контакт, включающий и выключающий камеру. Это уже легче.

Выключаю холодильник, нахожу провода подходящие к термореле, замыкаю их, включаю холодильник. И о чудо! Холодильная камера заработала и через час там была Антарктида!

Т.е. у меня как у человека, который работает с цифровой техникой, созрел план управления регулируемой скважностью включения/выключения двигателя компрессора.

Т.е. раздельно регулируемые по длительности импульсы включения/выключения  двигателя компрессора позволяют выйти на нужный режим работы холодильной камеры

На тот период времени написал план.

«Управление холодильной камерой – план»

  1. Определение тока через контакты включения двигателя компрессора (опытным путём установлен ток 750 мА  двигателя компрессора).

  2. Подбор силового ключа (семистора или реле).

  3. Определение  блока питания.

  4. Разработка схемы управления на основе регулируемого таймера (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;

  }

 };

}      

bottom of page