Схем паяльных станций в интернете великое множество. Часть из них выполнены на специализированных микросхемах, часть — на микроконтроллерах. Кроме того, некоторые из них позволяют не только регулировать температуру паяльника, но и использовать термофен.
Что касается данной схемы, то она рассчитана на подключение только лишь паяльника. Это связано не только с малым количеством свободных выводом микроконтроллера, но и с тем, что это потребовало бы увеличение и усложнение программного кода МК, когда места под него, что говорится, «в обрез». Большая часть кода — это управление регистрами сдвига, через которые, в свою очередь можно управлять индикатором. Программный код на языке Pascal вы можете увидеть ниже:
program PIC_SolderStation; const led_d: array [0..9] of array [0..7] of byte = ( (0,0,0,0,0,0,1,1), (1,0,0,1,1,1,1,1), (0,0,1,0,0,1,0,1), (0,0,0,0,1,1,0,1), (1,0,0,1,1,0,0,1), (0,1,0,0,1,0,0,1), (0,1,0,0,0,0,0,1), (0,0,0,1,1,1,1,1), (0,0,0,0,0,0,0,1), (0,0,0,0,1,0,0,1)); led_c: array [0..2] of array [0..2] of byte = ( (0,0,1), (0,1,0), (1,0,0)); {mx_s: array [0..7] of array [0..2] of byte = ( (0,0,0), (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1));} mx_s: array [0..3] of array [0..1] of byte = ( (0,0), (0,1), (1,0), (1,1)); /////////////////////////////////////////////////////////////////////////// var ds: sbit at GP2_bit; sh_cp: sbit at GP4_bit; st_cp: sbit at GP5_bit; id: array [0..2] of byte; led: array [0..1] of byte; mp: byte; temp, r_temp, count, count_adc: integer; //////////////////////////////////////////////////////////////////////////////// procedure Save; var a:array [0..2] of byte; i: byte; begin a[2] := temp div 100; a[1] := (temp mod 100) div 10; a[0] := (temp mod 100) mod 10; for i := 0 to 2 do Eeprom_Write(i, a[i]); end; function Read: integer; var a: array [0..2] of byte; i: byte; begin for i := 0 to 2 do a[i] := Eeprom_Read(i); result := (a[2] * 100) + (a[1] * 10) + a[0]; end; //////////////////////////////////////////////////////////////////////////////// procedure RegWrite(var l_n: array [0..2] of byte; var led: array [0..1] of byte); var n: byte; outp_a: array [0..15] of byte; begin for n := 8 to 15 do outp_a[n] := led_d[l_n[count]][n - 8]; for n := 5 to 7 do outp_a[n] := led_c[count][n - 5]; for n := 3 to 4 do outp_a[n] := led[n - 3]; for n := 1 to 2 do outp_a[n] := mx_s[mp][n - 1]; /////////////////////////////////////////////////////////////////////// for n := 0 to 15 do begin if outp_a[n] = 0 then ds := 0 else ds := 1; delay_us(500); sh_cp := 1; delay_us(500); sh_cp := 0; ds := 0; delay_us(500); end; st_cp := 1; delay_us(500); st_cp := 0; if count < 2 then inc(count) else count := 0; /////////////////////////////////////////////////////////////////////// if GPIO.3 = 0 then begin case mp of 0: temp := temp + 10; 1: temp := temp - 10; 2: Save; 3: temp := Read; {4: temp := 200; 5: temp := 250; 6: temp := 300; 7: temp := 350; } end; while GPIO.3 = 0 do end; if mp < 3 then inc(mp) else mp := 0; end; procedure ReadTemp; var a: array [0..2] of byte; adc_data: integer; begin RegWrite(a, led); /////////////////////////////////////////////////////////////////////////// if count_adc < 20 then inc(count_adc) else begin count_adc := 0; adc_data := adc_read(0); r_temp := (adc_data shl 2) + adc_data - (adc_data shr 1) + (adc_data shl 3)/256; r_temp := r_temp / 5; a[2] := temp div 100; a[1] := (temp mod 100) div 10; a[0] := (temp mod 100) mod 10; if r_temp < temp then begin led[0] := 0; GP1_bit := 1; end else begin led[0] := 1; GP1_bit := 0; end end; ///////////////////////////////////////////////////////////////////////////; end; begin CMCON0 := $7; TRISIO := $1; ANSEL := $71; ADCON0 := $1; led[0] := 1; led[1] := 0; while true do begin ReadTemp; end; end.
К слову, как вы наверное уже догадались, программа была написана в среде mikroPascal for PIC.
Немного о коде:
Основная трудность (для меня) заключалась в том, чтобы реализовать динамический опрос кнопок, используя сдвиговый регистр (74HC595) и мультиплексор (74HC4051 или 74HC4052). В итоге решил действовать следующим образом:
- При каждом вызове процедуры записи в регистр проверяем, есть ли на выходе мультиплексора низкий уровень.
- Если есть, то определяем на каком именно (переменная mp). Если нет, то просто увеличиваем значение переменной mp на 1 и идем дальше. Так же, переключаем мультиплексор на следующий канал.
Таким образом можно опросить до 8-ми кнопок включительно.
Теперь о АЦП. Функцию чтения значения АЦП я использовал встроенную, но конфигурировал значение регистров, отвечающих за АЦП, вручную, дабы не возникло лишних конфликтов.
Информация о температуре выводится на 3-х разрядный семисегментный светодиодный индикатор. Управление устройством осуществляется посредством 8-ми кнопок (или 4-х, в урезанном варианте).
Теперь посмотрим, у нас 12 (8 сегменты + 3 аноды) выходов регистров отведены под индикатор, 3 (2) — под управление мультиплексором. Итого, остается всего 2 (3) свободных выхода. Вот к ним мы и подцепим светодиоды, которые будут отображать наличие питания и нагрев. Да, конечно, наличие питания можно не отображать светодиодом, ведь индикатор в случае отсутствия оного будет погашен. Но все же решил этот светодиод поставить — дань традиции 🙂
Управление же нагревом паяльника осуществляется с помощью транзистора IRFZ44 (в принципе, можно поставить IRFZ24). Он подключен напрямую, к 1 пину микроконтроллера.
Назначение кнопок на схеме указано, но повторюсь:
- Увеличить температуру на 10 градусов
- Уменьшить на 10 градусов
- Загрузить сохраненное значение
- Сохранить значение температуры
- Значение температуры 200
- —//— 250
- —//— 300
- —//— 350
Схема устройства:
Сразу хочу заметить, что это схема для 4-х кнопок. Если вам нужен вариант, где используется 8 кнопок, то мультиплексор нужно заменить на 74HC4051, подключив адресный вход «С» к выходу Q7 сдвигового регистра U3. Соответственно разъем J7 взять на 8 пин, и как следствие — немного переделать печатную плату.
Печатная плата устройства (четыре кнопки):
Кнопки и светодиоды монтируются вне платы.
Теперь кратко о характеристиках устройства:
- Питание 24 вольта
- Потребляемый ток — в зависимости от выбранного паяльника, электроника ~150mA (зависит от индикатора)
- Для отображения используется индикатор с общим анодом.
- Регулировка температуры — без лимита. Но это не значит что можно поставить больше, чем может нагреться паяльник.
- Микроконтроллер работает от внутреннего тактового генератора на 4МГц
Взаимозаменяемость деталей. Микроконтроллер заменить нельзя, как и микросхемы логики. Транзисторы можно взять КТ361 и аналогичные (маломощные, p-n-p). Операционный усилитель так же можно взять аналогичный, но скорее всего придется переделывать печатную плату. Резисторы можно брать +/- 10% от исходного номинала (это не касается резисторов в обвязке ОУ). Светодиодный индикатор — 3 разряда с общим анодом (можно и четыре разряда взять, но один будет погашен).
Спасибо за внимание! Если есть замечания или пожелания, пишите в комментариях!
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U1 | МК PIC 8-бит | PIC12F683 | 1 | DIP | ||
U2, U3 | Сдвиговый регистр | CD74HC595 | 2 | DIP | ||
U4 | Мультиплексор/демультиплексор | CD74HC4051 | 1 | DIP | ||
U5 | Операционный усилитель | LM358 | 1 | DIP | ||
U6 | Линейный регулятор | LM7805 | 1 | Так как ток нагрузки выше 100 мА, то необходим радиатор | ||
Q1, Q2, Q4 | Транзистор | 2N3702 | 3 | Можно заменить на КТ315 | ||
Q3 | MOSFET-транзистор | IRFZ44 | 1 | |||
С1, С2 | Конденсатор | 100 нФ | 2 | |||
С4 | Конденсатор | 1000мкФ х 16В | 1 | |||
С3 | Конденсатор | 1000мкФ х 50В | 1 | |||
R1 | Резистор | 1 кОм | 1 | 0805 | ||
R2-R11 | Резистор | 220 Ом | 10 | 0805 | ||
R12 | Резистор | 100 кОм | 1 | 0805 | ||
R13 | Резистор | 4.7 кОм | 1 | 0805 | ||
R14 | Резистор | 1 МОм | 1 | 0805 | ||
R15, R19-21 | Резистор | 10 кОм | 4 | 0805 | ||
RV1 | Резистор | 47 кОм | 1 | подстроечный | ||
На схеме нет обозначения | Индикатор | 3-х разрядный семисегментный индикатор с ОА | 1 | |||
Все разъемы на схеме | Разъемы | PLS-40. PBS-40 | 2 | |||
PB1-PB4 | Кнопка | 4 | Любые без фиксации | |||