digispark — паяльная станция 2

Опубліковано: 17 січня 2015р. 20:47
Я їжджу на Mitsubishi Colt VI
Павлоград, Україна

Небольшое дополнение для тех, кто решил собрать паяльную станцию. Вначале ссылка на теорию физики терморезисторов lib.qrz.ru/book/export/html/6112
Два вопроса, которые меня интересовали это гистерезис в показаниях и зависимость формы графика от дополнительного резистора (в делителе). В общем, пришлось мне вспоминать молодость и студенческие лабораторные. Вооружившись мультиметром с термопарой, я приступил к замерам.

Не буду мучать подробностями процесса просто предоставляю результат. Сделал замеры температуры и напряжения на выходе термодатчика паяльника. Замерял в два этапа, при повышении и при понижении температуры. Естественно получилась кривая гистерезиса, но изменять программу, что бы отслеживать эту кривую посчитал не целесообразным, поэтому выбрал средние значения и построил диаграмму.

Потом на диаграмму «кинул» трендовую линию и получил уравнение этой линии. С примененным у меня дополнительным резистором (200 Ом) график имел линейную зависимость.
На основании полученных данных сделал изменения в коде программы, чисто субъективно мне работа станции с новым кодом больше понравилась …

Ниже измененный код программы:

/*
********************************************************
********************** — B — Pin **********************
Digispark B5A0 – ATtiny85 pin 1 – (reset)
Digispark B3A3 – ATtiny85 pin 2 – управление транзистором
Digispark B4A2 – ATtiny85 pin 3 – вход датчика температуры паяльника
Digispark B0 – ATtiny85 pin 5 – ЛСД di(high)
Digispark B1 – ATtiny85 pin 6 – ЛСД sk(low)
Digispark B2A1 – ATtiny85 pin 7 – вход резистор настройки температуры
********************************************************
********************************************************
PORTB |= (1<<2); установить в порт *B2* лог 1
PORTB &=~ (1<<2); установить в порт *B2* лог 0
PORTB ^= (1<<2); инвертировать состояние порта *B2*
********************************************************
*/

#include <util/delay.h>
const int potSensorPin = A1; // порт подключения регулятора
int tempSet = 0; // задаваемая температура
const int heaterSensorPin = A2; // порт подключения термистора паяльника
int tempRead = 0; // температура паяльника

byte tR1, tR2, tR3, tH1, tH2, tH3, z;

void setup() {
DDRB = B001011; // назначает порты * выходными, 2 входной
PORTB = B000001; // устанавливает на портах 1,2 LOW на * HIGH
}

void loop(){

tempRead = getOversampled(heaterSensorPin);
double NmHot = (tempRead-310)/5;
double ztH = (6.7225*NmHot)+135.38;
int tH = int(ztH);
if (tempRead >= 315) {
tH1 = tH/100;
if (tH1==0) tH1=10;
tH2 = (tH%100)/10;
if (tH2==0) tH2=10;
tH3 = tH%10;
if (tH3==0) tH3=10; }

if (tempRead < 315) { tH1=15; tH2=15; tH3=15; }

// ***************************************************************
// ***************************************************************

tempSet = map(getOversampled(potSensorPin), 0, 1023, 315, 450);
double NmSet = (tempSet-310)/5;
double ztR = (6.7225*NmSet)+135.38;
int tR = int(ztR);
tR1 = tR/100;
if (tR1==0) tR1=10;
tR2 = (tR%100)/10;
if (tR2==0) tR2=10;
tR3 = tR%10;
if (tR3==0) tR3=10;

if (ztR > ztH) PORTB |= (1<<3);
if (ztR <= ztH) PORTB &=~ (1<<3);

if (++z >= 50) {
z = 0;
writeDigit(0);
writeDigit(tH1);
writeDigit(tH2);
writeDigit(tH3);
writeDigit(0);
writeDigit(0);
writeDigit(tR1);
writeDigit(tR2);
writeDigit(tR3);
writeDigit(0); }
}

void writeDigit(byte d) {
for (byte i=0; i<4; i++) {
PORTB |=(1<<1);
_delay_us(20);
digitalWrite(0, d&(1<<(3-i)));
_delay_us(10);
PORTB ^=(1<<1);
_delay_us(30); }
// _delay_us(70);
}

int getOversampled(int sensorPin) {
unsigned long int res = 0;
for (byte j = 0; j < 64; j++) res += analogRead(sensorPin);
return res >> 6;
}

И немного фотографий:
Такая себе станция в панк стиле …

Это мне подарили блок питания для станции, работает все отлично …


0 0

Коментарі

Щоб залишати коментарі, потрібно авторизуватись.