Недавно, в первоапрельском обзоре ништяков из хлама, кто-то заинтересовался системой управления печкой для пайки SMD компонентов. Самоделка далеко не новая, но в ней есть ряд оригинальных решений, которые кому-то могут быть полезны. Время у пенсионера есть, опять же впереди у нас вечность — почему бы не сделать для хороших людей что-то полезное?
Базой послужила лидловская мини-духовка, доставшаяся мне за 5 евро на местной интернет-барахолке. Хотелось бы всю электронику разместить внутри, но размеры не позволили.
На Али приобрел дисплей на базе SPFD5408
У таких дисплеев обычно есть резистивный touch screen, но работает он с ардуино отвратительно. Немного поигравшись, плюнул на него и поставил обычный энкодер — дешево, сердито и надежно.
Тут первая полезная идея — когда у ардуины ног не хватает — для энкодера можно использовать единственный аналоговый вход.
Ресурсов такой ввод практически не отнимает, если все сделать в прерывании:
#include "scmRTOS.h"
#include "processes.h"
#include "Arduino.h"
#include "encoder.h"
void encoder_init(void)
{
ADCSRA = 0xAF; // Enable ADC, interrupt, auto trigger, clock clk/12
ADCSRB = 0x05; // Timer/Counter1 compare match B
ADMUX = 0x47; // A& input, Vref=Vcc
// Set up TIMER 1 - ADC sampler
TCNT1=0;
OCR1B = 32000;
ICR1 = 64000;
TCCR1A = 0x00;
TCCR1B = 0x19;
}
ISR(ADC_vect)
{
static bool encoder_A_prev;
static bool encoder_switch_prev;
bool encoder_A = false;
bool encoder_B = false;
bool encoder_switch = false;
uint16_t ADC_value;
uint8_t EncMsg;
TIFR1 = 1<<OCF1B;
ADC_value = ADC;
if (ADC_value<100) encoder_switch = true;
else
{
if (ADC_value<470)
{
// both
encoder_A = true;
encoder_B = true;
}
else
{
if (ADC_value<615) encoder_A = true; // pin A
else
{
if (ADC_value<815) encoder_B = true; // pin B
}
}
}
if(encoder_switch)
{
if(!encoder_switch_prev)
{
OS::TISRW ISR;
EncMsg=0; // switch
EncoderMsg = EncMsg;
EncoderMsg.send_isr();
}
}
else
{
if(!encoder_A && encoder_A_prev)
{ // positive ->0
OS::TISRW ISR;
if(encoder_B) EncMsg=1; // CW
else EncMsg=2; //CCW
EncoderMsg = EncMsg;
EncoderMsg.send_isr();
}
encoder_A_prev = encoder_A;
}
encoder_switch_prev = encoder_switch;
}
Если кто-то не поленился открыть код — он увидел еще одну идею, реализованную в этой печке — в ардуино используется многозадачная операционная система.
Это моя любимая система, которую я ставлю куда можно и куда нельзя — scmRTOS. Система в исходниках лежит здесь
Занимает она меньше килобайта и я не вижу причин не использовать ее где только можно. Где нельзя, впрочем, тоже.
Документация на великом могучем здесь, операционку писали уже давно наши люди, авторов всегда можно найти здесь.
Как смог, адаптировал эту систему для ардуино — найдете ее в прилагаемых исходниках.
Компилировалось в Sloeber, сделанном на базе Eclipse. Автор проект забросил, пришлось переходить на PlatformIO. Исходники остались как есть, их можно с небольшими доделками скомпилировать в Arduino IDE.
В качестве датчика используется термопара, примотанная к сетке внутри печки синей изолентой термостойким каптоновым скотчем.
Еще одно неплохое решение использовано для генерации прерываний при переходе фазы сетевого напряжения через ноль. Файлов симуляции найти не смог, хотя они где-то были.
Система управления собрана на двух платах — силовая и управление. Силовая была заказана в Китае (просто одну и ту же плату я использовал для нескольких разных устройств), управление сделано на макетке.
Коробочка, как обычно, напечатана на 3D принтере.
К сожалению, когда делал — ничего не сфотографировал. А сейчас разбирать не хочется: если что-то работает — не трогай.
Размер EEPROM AVR позволяет сохранить несколько профилей пайки.
Печка не нагревается быстро, поэтому тепловые профиля пайки, как правило, не соответствуют рекомендуемым — но тем не менее у меня до сих пор с ней проблем не было. Время от времени печку берут попользоваться знакомые — тоже никто не жаловался. А попробуй пожалуйся — в другой раз ведь не дам 🙂
Трафареты для нанесения пасты делаю из майлара с помощью CO2 лазера — но большой мощности не требуется, думаю что и полупроводникового лазера должно хватить.
Когда плата небольшая или лень делать трафарет — пасту можно нанести экструдером.
В итоге получается примерно так
Котя проверяет качество пайки
Файлы лежат здесь ссылка ссылка ссылка
Буду рад, если кто-то найдет что-нибудь полезное для себя.