Главная » Мастерская
Призовой фонд
на декабрь 2017 г.
1. Спектроанализатор Arinst SSA-TG LC
Крокс
2. Термометр Relsib WT51
Рэлсиб
3. 1000 руб
PCBWay
4. 100 руб.
От пользователей

Похожие статьи:


Паяльная станция на PIC12F683

Схем паяльных станций в интернете великое множество. Часть из них выполнены на специализированных микросхемах, часть - на микроконтроллерах. Кроме того, некоторые из них позволяют не только регулировать температуру паяльника, но и использовать термофен.

Что касается данной схемы, то она рассчитана на подключение только лишь паяльника. Это связано не только с малым количеством свободных выводом микроконтроллера, но и с тем, что это потребовало бы увеличение и усложнение программного кода МК, когда места под него, что говорится, "в обрез". Большая часть кода - это управление регистрами сдвига, через которые, в свою очередь можно управлять индикатором. Программный код на языке 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 пину микроконтроллера.

Назначение кнопок на схеме указано, но повторюсь:

  1. Увеличить температуру на 10 градусов
  2. Уменьшить на 10 градусов
  3. Загрузить сохраненное значение
  4. Сохранить значение температуры
  5. Значение температуры 200
  6.    --//--    250
  7.    --//--    300
  8.    --//--    350

Схема устройства:

Схема паяльной станции на микроконтроллере PIC12F683

Сразу хочу заметить, что это схема для 4-х кнопок. Если вам нужен вариант, где используется 8 кнопок, то мультиплексор нужно заменить на 74HC4051, подключив адресный вход "С" к выходу Q7 сдвигового регистра U3. Соответственно разъем J7 взять на 8 пин, и как следствие - немного переделать печатную плату. 

Печатная плата устройства (четыре кнопки):

Кнопки и светодиоды монтируются вне платы. 

Теперь кратко о характеристиках устройства:

  • Питание 24 вольта
  • Потребляемый ток - в зависимости от выбранного паяльника, электроника ~150mA (зависит от индикатора)
  • Для отображения используется индикатор с общим анодом.
  • Регулировка температуры - без лимита. Но это не значит что можно поставить больше, чем может нагреться паяльник.
  • Микроконтроллер работает от внутреннего тактового генератора на 4МГц

Взаимозаменяемость деталей. Микроконтроллер заменить нельзя, как и микросхемы логики. Транзисторы можно взять КТ361 и аналогичные (маломощные, p-n-p). Операционный усилитель так же можно взять аналогичный, но скорее всего придется переделывать печатную плату. Резисторы можно брать +/- 10% от исходного номинала (это не касается резисторов в обвязке ОУ). Светодиодный индикатор - 3 разряда с общим анодом (можно и четыре разряда взять, но один будет погашен).

Спасибо за внимание! Если есть замечания или пожелания, пишите в комментариях!

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U1 МК PIC 8-бит
PIC12F683
1 DIPПоиск в LCSCВ блокнот
U2, U3 Сдвиговый регистр
CD74HC595
2 DIPПоиск в LCSCВ блокнот
U4 Мультиплексор/демультиплексор
CD74HC4051
1 DIPПоиск в LCSCВ блокнот
U5 Операционный усилитель
LM358
1 DIPПоиск в LCSCВ блокнот
U6 Линейный регулятор
LM7805
1 Так как ток нагрузки выше 100 мА, то необходим радиаторПоиск в LCSCВ блокнот
Q1, Q2, Q4 Транзистор2N37023 Можно заменить на КТ315Поиск в LCSCВ блокнот
Q3 MOSFET-транзистор
IRFZ44
1 Поиск в LCSCВ блокнот
С1, С2 Конденсатор100 нФ2 Поиск в LCSCВ блокнот
С4 Конденсатор1000мкФ х 16В1 Поиск в LCSCВ блокнот
С3 Конденсатор1000мкФ х 50В1 Поиск в LCSCВ блокнот
R1 Резистор
1 кОм
1 0805Поиск в LCSCВ блокнот
R2-R11 Резистор
220 Ом
10 0805Поиск в LCSCВ блокнот
R12 Резистор
100 кОм
1 0805Поиск в LCSCВ блокнот
R13 Резистор
4.7 кОм
1 0805Поиск в LCSCВ блокнот
R14 Резистор
1 МОм
1 0805Поиск в LCSCВ блокнот
R15, R19-21 Резистор
10 кОм
4 0805Поиск в LCSCВ блокнот
RV1 Резистор
47 кОм
1 подстроечныйПоиск в LCSCВ блокнот
На схеме нет обозначения Индикатор3-х разрядный семисегментный индикатор с ОА1 Поиск в LCSCВ блокнот
Все разъемы на схеме РазъемыPLS-40. PBS-402 Поиск в LCSCВ блокнот
PB1-PB4 Кнопка4 Любые без фиксацииПоиск в LCSCВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (4) | Я собрал (0) | Подписаться

0
Олег #
На данную схему нужно подавать 24 вольта переменного тока или постоянного?
Ответить
0

[Автор]
zeconir #
Нужно 24В постоянного.
Ответить
0
nitmen #
В таблице элементов ошибка, транзистора индикатора заменяются на КТ361
Печатка в лайоте
Прикрепленный файл: паяльна станция.lay
Ответить
0
саша #
Кто нибудь собрал?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Бокс для хранения компонентов
Бокс для хранения компонентов
Лазерный модуль 650нм 5мВт Raspberry Pi 2
вверх