понедельник, 21 ноября 2016 г.

Паяльная станция своими руками.

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

Схема устройства:
Начнем с простого - блок питания. Естественно можно взять какие-то готовые варианты. Я для себя выбрал трансформатор 220/24 В на 2A. Конструкция проста и надежна - трансформатор - диодный мост для выпрямления - конденсатор для сглаживания скачков напряжения. Для питания управляющей схемы используется стабилизатор 7805 с очень хорошим радиатором (важно!). Конечно является ошибкой использования 7805 при входном напряжении 24В, но те на которых написано KIA справляются с работой на отлично - с этим элементом проблем за время использование не возникало.

Питание нагревательного элемента производится с использованием ШИМ микроконтроллера. К выводу ШИМ подключаем полевой транзистор (предпочтительно использовать транзистор с логическим уровнем). При достижении необходимой температуры величину ШИМа изменяем, тем самым держа паяльник в нужном диапазоне (подробнее далее).
Считывание температуры паяльника (термопата). Этим процессом занимается АЦП микроконтроллера, но прежде сигнал усиливает ОУ подключенный по схеме неинвертирующего усилителя (с подстроечным резистором для регулировки).

Дополнительная периферия. Для индикации температуры и состояния работы я использовал lcd дисплей wh0802 и для регулировки температуры - энкодер.

Программа управления написана в среде CodeVisionAVR. В ней можно с помощью языка высокого уровня (си подобного) создавать прошивки для микроконтроллеров atmel. Мне она по душе, т.к. нет необходимости в изучении ассемблера и можно за считанные минуты написать довольно-таки серьезную прошивку. Спор о том что нужно писать именно на ассемблере так как это язык привязанный к конкретному микроконтроллеру и займет вероятнее всего меньше места и т.п. и т.д. в любительской сфере считаю все таки излишним!
Поясню некоторые моменты программы, для тех, кто захочет что то изменить под себя и то, как программно откалибровать температуру.

float vlt,def;                              // vlt - чтение показаний с АЦП. def - разница в том что прочитало АЦП                                         
unsigned char buff[10];             // переменная для вывода на дисплей
int pwm,t_read;                        // вспомогательная переменная
bit ready = 0;                          // бит готовности станции
int set = 320;                          // установленное значение для температуры (в мили вольтах! а не вградусах)


Процесс инициализации:

PORTB.3 = 0; // вывод для ШИМа
DDRB.3 = 1;

PORTB.5 = 0; // пищалка
DDRB.5 = 1;

DDRB.4 = 0; // вход для использования энкодером
// Timer/Counter 2 initialization Работает в режиме ШИМ от 0 до 255
// Clock source: System Clock
// Clock value: 4000,000 kHz
// Mode: Fast PWM top=0xFF
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization Используем внешнее прерывание для того, чтобы засечь                         //изменение положения энкодера
// INT0: Off
// INT1: On
// INT1 Mode: Falling Edge
GICR|=(1<<INT1) | (0<<INT0);
MCUCR=(1<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
GIFR=(1<<INTF1) | (0<<INTF0);

// ADC initialization АЦП
// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;

// Alphanumeric LCD initialization Экран wh0802
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 8
lcd_init(16);


Вспомогательные функции:

void beep(int time) // писк в течении time миллисекунд
{
PORTB.5 =1;
delay_ms(time);
PORTB.5 =0;
};

void show_status(void) // показать статус станции на lcd
{
if ( def>-15 && def<15 ) если разница между установленной температурой и измеренной находится в

//пределах

{
lcd_gotoxy(4,0);
lcd_putsf(" ");
lcd_gotoxy(4,0);
lcd_putsf("Ok");

if (ready == 0) {beep(500); // пропищать если до этого бит готовности был 0
ready = 1;
};

}
else
{
lcd_gotoxy(4,0);
lcd_putsf(" ");
lcd_gotoxy(4,0);
lcd_putsf("Busy");
};
};

void show_temp(void) // вывести на lcd температуру
{
t_read = vlt*0.84+1;  // пересчет температуры (определяется из калибровки)
sprintf(buff,"%.0d",t_read);
lcd_putsf(" ");
lcd_gotoxy(5,1);
lcd_puts(buff);
};


Обработка прерывания:
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
ready = 0; // присваиваем биту готовности ноль

if (PINB.4 == 0)
{
if (set >= 200) { set = set - 20; beep(200);}  // если set больше 200 (около 150 градусов) то отнимаем 20.
}
else
{
if (set <= 370) { set = set + 20; beep(200);}; // если set меньше 370 (около 310 градусов) то прибавляем 20
}


Основной цикл программы:

while (1)
{
pwm = OCR2; // чтение данных АЦП выключаем ШИМ для исключения помех
OCR2 = 0x00;
delay_ms(20);// ждем 20 миллисекунд
vlt = read_adc(0);// читаем значение
OCR2 = pwm; // включаем ШИМ снова

vlt = vlt*500/1024;
def = set-vlt; // настраиваем на нужную температуру(определяем разницу между текущей и установленной).

show_status();
if (def == 0) {goto relax;}

else
{
if (def>0) // меньше
{
if (def>10) {OCR2 = 255;}
else {OCR2 = 40;}; // значение - 40 можно подбирать самостоятельно
}

else // больше
{
if (def<-10) {OCR2 = 40;}
else {OCR2 = 0;};
}
};

relax:;
show_temp();
delay_ms(300);
};


Теперь расскажу о калибровке. В приложенном архиве есть файл excell. При включении станции устанавливаете set в 100 и включаете станцию ждете пока станция войдет в рабочее состояние измеряете температуру и записываете в графу y град. Так же и с set 320. В итоге excell построит график и уравнение необходимо записать в функцию show_temp и заменить значение set на то которое соответствует необходимой для вас температуре при включении ( у меня 270 градусов).

Теперь о особенностях создания корпуса. Для корпуса я выбрал готовый вариант. Передние и задние панели заказал на лазерной резке из оргстекла:
Расположение компонентов внутри станции:
Ножки можно сделать из резиновый прокладок на из cd-rom- ов, разрезаем напополам и получаем 8 ножек из одного привода!
Электронику раскидал на две платы - одна управление - другая блок питания и транзистор управления паяльником - все сидит на радиаторах. Архив к статье.

Комментариев нет:

Отправить комментарий