Подогрев из утюга.
Привет ремонтникам.
Строго говоря, тема длиннопоста относится скорее к разработке, чем к ремонту.
Но поскольку разработка имеет практическую ценность в первую очередь для целей ремонта, я решил спросить у @gepka разрешения на публикацию в разделе ремонтников, с чем он любезно согласился.
Началось все с того, что мне принесли компактный дорожный утюг, с вопросом можно ли его починить. Разобрав его я увидел, что внутренние клеммы подгорели, регулятор из биметаллика частично оплавился, короче починить его я мог, но с только кастрацией термостабилизации. Поскольку стоимость утюга составляла что-то около 700 рублей, владелица решила, что ожидаемый результат все равно не стоит усилий и сказала, что можно выкинуть.
Я уже отрезал было шнур питания, но нечто внутри меня внезапно подтолкнуло уточнить, могу ли я забрать подошву. Разумеется нагреватель с подошвой для владелицы, как отдельная часть не представляли никакой ценности, и я получил добро делать со всем потрохами все, что мне заблагорассудится.
Я давно уже подумывал, что надо бы сделать что-то для нижнего подогрева, но поскольку я разработчик, а не ремонтник, мысли были вялые и аппатичные.
Но раз уж подвернулась оказия, было решено попробовать сделать подогрев из того, что упало в руки. Сразу оговорюсь, что я не ставил своей целью сделать устройство привлекательным. В данном случае мне требовалась только 1) функциональность и 2) безопасность прибора. Именно по этим двум причинам оно и сделано 1) невзрачно и в довольно короткие сроки 2) но все-таки в корпусе.
Прикинув, в какой корпус засунуть все потребное я остановился на корпусе CD-ROM.
Морда
LED семисегментник (текущая температура, установки, меню) тумблер отключения текущей работы (но не выключения устройства), индикатор работы и включенного нагревателя, ротационный энкодер с кнопкой, справа - разъем для обновления прошивки
Корпус
Ну тут особо нечего рассказывать, любому человеку с руками и инструментом очевидно, как и что сделано, не буду останавливаться на этом. Подошва установлена на стойки, стойки закреплены к нижней стенке.
По силовой части – просто разъем Е14, выключатель, небольшая плата с предохранителем и фильтром мне показалась здоровой идеей, поскольку на момент сборки я не исключал, что буду использовать ШИМ на килогерцовых частотах, а шуметь относительно мощным потребителем в сеть – не лучшая идея. Позднее я обнаружил, что все, имеющиеся у меня IGBT имеют встроенный диод, что потребовало бы городить выпрямитель и, возможно, демпфер, а места внутри не так много. Так что отказался от этой мысли в пользу твердотелого реле.
Для управления полученным использован ротационный энкодер и семисегментник. МК взял первый, который удовлетворял потребностям по числу выводов. Удобнее всего показалось взять ATMega328p в виде готовой платы Arduino. Питание – обычный зарядник, кажется от nokia, с последующим DC-DC стабилизатором. Мог взять сразу на пять вольт, но на пяти вольтах как-то совсем вяло крутился вентилятор, а использовать длительное время нагреватель с питанием от 220в, при температуре в 200С, в самодельном устройстве руководствуясь «да авось не нагреется» мне показалось не лучшим подходом.
Примерно так я прикинул что у меня куда подключится (ну ладно, на самом деле сперва распаял как мне распаялось, а потом перерисовал, чтобы не путаться)
Вот так я скомпоновал модули.
Да, признаю, видок на троечку, как и аккуратность исполнения. Но поскольку повторять такое изделие мне наверняка более никогда не представится (а Вам часто приносят в ремонт утюги ?) – решил, что изготовление отдельного шилда нецелесообразно. Сомневаюсь, что при наличии альтернативы в виде дешевой плитки из Ашана кто-то из Вас пойдет покупать утюг, отрывать от него подошву и делать корпус по образу и подобию моего поделия.
Контроль температуры производится термопарой K-типа (можно было и по другому, но взял то, что было под рукой), термопара прикреплена в подошве снизу, на фото ее не видно, только шлейф с разъемами. Рассчет ОУ для контроля взят из интернета (в конце поста будут ссылки на источники – не вижу причин нагружать пост результатами чужих статей)
Рассчет термостабилизации – стандартный тепловой рассчет. Масса подошвы нам известна, (325 грамм, в моем случае) материал, как я предположил – сталь. Теплоемкость стали 460дж/(кг*градус). Текущую температуру берем через АЦП с термопары, зная на сколько градусов нам нужно подогреть – вычисляем мощность: 225вольт^2/сопротивление нагревателя= в моем случае 750Вт. Одна Ватт/секунда – один джоуль. В экселе прикидываем, проверяем экспериментально – все расчеты почти идеально подтвержаются практической работой.
Инициализация АЦП
void adc_init(void)
{
ADCSRA = (1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); // устанавливаем делитель в 128, включаем ADC
DIDR0=0x01; // отключаем цифровые функции ноги ADC0
}
Снятие данных с АЦП (Обратите внимание ! Спева читаем ADCL !)
void start_adc()
{
ADMUX = 0x60|6; // выбран канал adc6, AREF=VCC чипа, результат измерений в ADCH,
// в ADCL 7,6 - младшие два бита.
ADCSRA|=0x40; // запускаем ADC на измерение (ADSC=1)
}
unsigned int get_temp()
{
unsigned char z,i;
i=ADCL>>6;
z=ADCH;
adc=(z<<2) | i;
res=tempraw[0];
start_adc();
}
unsigned int adc_to_temp()
{
float temp;
temp=adc/2.25+5;
return temp;
}
В программе все константы сведены в одну. Компилятор почти наверняка и так бы это сделал, но в силу привычки оформлено примерно так
unsigned int calc_heat(unsigned char t)
{
// Разницу температур, помножить на требуемую энергию для поднятия
// температуры на 1 гр С (149,5), делить на мощность (750Вт)=5,016722
// округляем до пяти, умножаем на 1000 (миллисекунд)
return((t-now_t)*200); // то же, что (t-now_t)/5*1000
}
Таймер у меня сконфигурирован на 1 мс, там у меня код
// desired value: 1000Hz
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0x06; //reload counter value (10mSec)
if (heat_timer) heat_timer--; // таймер нагрева
if (heat_pause) heat_pause--; // таймер паузы нагрева
if (press>0) press--; // таймер паузы нагрева
ind_no++;
if (ind_no>4) ind_no=0;
PORTB=(4<<ind_no) | (symbol[ind_no] & 0x03); //PB5-2 - номер индикатора, PB0-1 - LED
PORTD=(symbol[ind_no] & 0xF8) | 0x04; // скинули два младших бита - ими управляют PB0, PB1, оставили подтяжку pd2
}
А в главном теле программы
if (run) // запущен режим стабилизации заданной температуры
{
// сама стабилизация
if (heat_pause==0) // если вышла пауза после нагрева
{
if (now_t<end_temp)
{
heat_timer=calc_heat(end_temp);
heat_pause=heat_timer+5000;
}
else
{
if (run==1) // запущен режим стабилизации заданной температуры
{
if (now_t>=end_temp) beep(1000); // сигнал достижения температуры
run=2; // признак - продолжать выполнение, отключить сигнал.
}
}
}
Простите за форматирование, не нашел способа использовать разметочный тэг #CODE
В принципе это практически все главное, что Вам нужно от программы МК. Таймер, ноги, и меню, думаю все осилят. Если нет – не вопрос, выложу, не жалко, но разбираться Вам все равно придется, а это по опыту всегда лучше делать самому, а не ковыряясь в чужом коде.
Данные АЦП с термопары имеют практически идеальную линейную зависимость к температуре. Я не стал городить подстроечные резисторы для схемотехнической регулировки, а коррекцию производил вычислительно. Да, это потребовало использование float, чего я вообще-то очень не люблю, но в данном случае я очень далек от тому, чтобы упереться в производительность чипа, так что счел допустимым. Калибровка производилась вот этим (одолжил на пару дней у наших кондиционерщиков), Вы можете использовать все ту же термопару и мультиметр.
Правда диапазон прибора только до 200гр.С, а подогрев я рассчитывал до 250гр.С но в диапазоне от 30 до 200гр линейность практически идеальна, так что думаю, что и до 250 она такая же.
Пост получился немного скомканным, но я не знаю, что именно будет интересно, а углубляться в возможно совершенно очевидные вещи мне не хотелось. Лучше подробно отвечу в комментариях.
Используемые ссыли и ресурсы
Теплоемкость материалов http://steelcast.ru/steel_heat_capacity
Подключение термопары к мк http://avrproject.ru/publ/kak_podkljuchit/podkljuchaem_termo...
Модуль Arduino Pro Mini http://all-arduino.ru/arduino-pro-mini/
Даташит на ATMega 328p http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontr...