Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Мини паяльная станция на жалах T12.

Чт янв 16, 2020 22:56:08

power_on = true;

Это никак не повлияло ни на что, видно где-то есть дубль... или кто-то гасит после... :dont_know:
В программировании я не силен, - только начинаю изучать азы... :oops:

Re: Мини паяльная станция на жалах T12.

Пт янв 17, 2020 10:16:57

При включении станции без паяльника показывает температуру "914", с паяльником "-140". Нагрев не идет. Жала T12 из Китая. Прошивка самая первая. Что менять: обвязку LM или программу?

Re: Мини паяльная станция на жалах T12.

Пт янв 17, 2020 11:44:55

Меняй обвязку LM. Без паяльника 914 - это нормально, это обрыв. С паяльником -140 это не нормально. Услитель должен быть LM358, c LM2094 у меня прошивка не заработала (хотя пишут что эта микросхема лучше). Или брак попался или как то не так микросхема работает. Прошей версию V4, найди на второй странице этого форума. Она максимально без ошибок сделана.
Последний раз редактировалось Proton78 Пт янв 17, 2020 17:27:45, всего редактировалось 2 раз(а).

Re: Мини паяльная станция на жалах T12.

Пт янв 17, 2020 11:47:22

У меня lm358. В программе менял только пины кнопок и экрана.

Re: Мини паяльная станция на жалах T12.

Пт янв 17, 2020 16:38:07

Добавлено after 4 hours 43 minutes 9 seconds:
power_on = true;

Это никак не повлияло ни на что, видно где-то есть дубль... или кто-то гасит после... :dont_know:
В программировании я не силен, - только начинаю изучать азы... :oops:



Пришли свой скетч. Посмотрю. Возможно в железе дело. Может кнопка он офф глючит. Может наводки на контроллер или усилитель.

Re: Мини паяльная станция на жалах T12.

Пт янв 17, 2020 23:07:18

Пришли свой скетч. Посмотрю.

Я его немного пытался подстроить под свои значения АЦП и особенности моего жала (менял только цифровые значения)
тут:
TCCR1B = TCCR1B & 0b11111000 | 4;
При 4 самое адекватное поведение дисплея и точность

Хочу до конца понять алгоритм работы этого куска скетча и соответственно алгоритм разогрева жала
Спойлер/////////////////////////////////////////////////////////////////////////
/// использую медианный фильтр с большим числом измерений /////
/// точность в железе хорошая (на данный момент исп. этот фильтр) /////
/////////////////////////////////////////////////////////////////////////

//analogWrite(3,0); // остановить ШИМ перед чтением АЦП (було)
analogWrite(9,0); // остановить ШИМ перед чтением АЦП (стало)

soldt = Filter (); // считать отфильтрованное значение температуры нагревателя

// soldd = map(soldt, 7, 888, 0, 420); // Еще один вариант определения температуры, считывается переменная soldt, ее диапазон 7 - 888,
// переменной soldd присваивается значение в диапазоне 0-420,
// в этом случае надо точно знать значение переменной soldt. Можно узнать только одним способом
// подключать ардуину к компорту и при наладке схемы выводить в порт это значение. Или сначала выводить
// на дисплей значения переменной soldt, записать значения при разных температурах, а после ввести их в программу
// и пршить заново.
// Для повышения точности можно сделать три и более диапазона.
// Этот вариант хорош тем, что можно сделать большой коэффициент усиления усилителя термопары,
// тем самым повысить точность измерения.
// Например:



//if (soldt >= 5 && soldt <= 225) // при темпеатуре от 13 градусов до 100 (200 и 286 - это значения на выходе усилителя термопары), температура замеряна градусником
//{soldd = map(soldt, cor_ir_1, cor_ir_2, 13, 100);
// ASM=1; }
// if (soldt >= 226 && soldt <= 690) // при темпеатуре от 101 градусов до 260 (287 и 500 - это значения на выходе усилителя термопары), температура замеряна тестером
// {soldd = map(soldt, cor_ir_2+1, cor_ir_3, 101, 260);
// ASM=2; }
//if (soldt >= 691 && soldt <= 999) // при темпеатуре от 261 градусов до 380 (501 и 650 - это значения на выходе усилителя термопары), температура замеряна градусником
//{soldd = map(soldt, cor_ir_3+1, cor_ir_4, 261, 380);
//ASM=3;}

if (soldt >= 5 && soldt <= 193) // при темпеатуре от 13 градусов до 100 (5 и 193 - это значения на выходе усилителя термопары), температура замеряна градусником
{
soldd = map(soldt, cor_ir_1, cor_ir_2, 13, 100);
}
else if (soldt >= 194 && soldt <= 540) // при темпеатуре от 101 градусов до 260 (194 и 540 - это значения на выходе усилителя термопары), температура замеряна тестером
{
soldd = map(soldt, cor_ir_2+1, cor_ir_3, 101, 260);
}
else if (soldt >= 541 && soldt <= 859) // при темпеатуре от 261 градусов до 380 (691 и 859 - это значения на выходе усилителя термопары), температура замеряна тестером
{
soldd = map(soldt, cor_ir_3+1, cor_ir_4, 261, 380);
}

if (soldt <= 1) // короткое замыкание или замерз
soldd = 0;
if (soldt >= 997) // перегрев или обрыв
soldd = 888;
/*
/////////////////////////////////////////////////////////////////(для калибровки АЦП-темп.)
analogWrite(9,0); // остановить ШИМ перед чтением АЦП
soldt = Filter (); // считать отфильтрованное значение температуры нагревателя
soldd =soldt;

////////////////////////////////////////////////////////////////////////
*/
if(sol==false)

// analogWrite(3,0); // остановить ШИМ если нагрев запрещен
// else
// analogWrite(3,Output); // иначе запустить ШИМ *///(було)

analogWrite(9,0); // остановить ШИМ если нагрев запрещен
else
analogWrite(9,Output); // иначе запустить ШИМ (стало)

soldd = soldd+corr; // поправка введенная в программу для ручного ввода (подгон температуры по внешнему датчику)
{
myGLCD.setFont(SmallFont); //изменить шрифт
myGLCD.print("%",78,24); //вывести на дисплей знак %
myGLCD.printNumI(set,RIGHT,12); //вывести на дисплей значение температуры уставки

if (kalibr_set==1 || kali==1) //если режим калибровки
{
myGLCD.print(IRON[Iron_tek],60,38); //вывести на дисплей название выбранного жала
myGLCD.print("Kalibr.",10,0); //вывести на дисплей надпись
myGLCD.drawLine(0,9,84,9); //нарисовать линию с началом х=0, у=9 и с окончанием х=84, у=9
myGLCD.print("Tek:",0,13); //вывести на дисплей надпись
myGLCD.printNumI(soldd,30,13); //вывести на дисплей значение температуры измеренное
myGLCD.print("Ist:",0,23); //вывести на дисплей надпись
myGLCD.printNumI(soldd+popr,30,23); //вывести на дисплей значение температуры истинное
}

else
{
myGLCD.setFont(BigNumbers); //изменить шрифт
myGLCD.printNumI(soldd,7,3); //вывести на дисплей фактическое значение температуры
}
myGLCD.drawLine(59,0,59,48); //нарисовать линию с началом х=59, у=0 и с окончанием х=59, у=33
myGLCD.drawLine(59,9,84,9); //нарисовать линию с началом х=59, у=9 и с окончанием х=84, у=9
myGLCD.drawLine(59,21,84,21); //нарисовать линию с началом х=59, у=21 и с окончанием х=84, у=21
myGLCD.drawLine(0,33,84,33); //нарисовать линию с началом х=0, у=33 и с окончанием х=84, у=33
}

if(sol==true) // если разрешена регулировка паяльника
{
myGLCD.setFont(SmallFont);
myGLCD.print(" ON ",66,0);
Input = soldd; // входной контролируемый сигнал
myPID.Compute(); // запустить ПИД вычисление
pwm = Output / 2.4; // значение ШИМ делим на 2.4, для вывода на дисплей в процентах (максимальное значение 240, потому делим на 2.4)
myGLCD.printNumI(pwm,60,24); // вывести на дисплей значение ШИМ в процентах

if (Output>150) // если вычисленное значение шим 100%, питание включено, вывести на дисплей "ON" и запустить плавно
{
if (power_on == true)
{
myGLCD.update();
myGLCD.setFont(SmallFont);
myGLCD.print(" ON ",66,0);
if(soldd<5)
{
plavno();
}
}
}
//analogWrite(3,Output);
analogWrite(9,Output);
}
if(sol==false)
{
// analogWrite(3,0);
analogWrite(9,0);
}

if (kalibr_set==1 || kali==1) // если режим калибровки
{
if(soldd == 888 || soldd < 5) //если перегрев, обрыв или к.з. терморезистора
{
myGLCD.print("(!)",66,0);
sol = false;
// analogWrite(3,0);
analogWrite(9,0);
}
}
else //иначе
{
if(soldd == 888 || soldd < 5) //если перегрев, обрыв или к.з. терморезистора
{
myGLCD.setFont(BigNumbers); //изменить шрифт
myGLCD.printNumI(soldd,7,3); //вывести на дисплей 888
if(soldd < 5)
myGLCD.print("000",7,3); //вывести на дисплей 000
myGLCD.setFont(SmallFont);
myGLCD.print("(!)",66,0);
sol = false;
//analogWrite(3,0);
analogWrite(9,0);
}
}
}

Уперся в эту строчку, точнее в комментарий к ней...
if (Output>150) // если вычисленное значение шим 100%,.... и запустить плавно
я понял так: если жало разогрелось до 150(АЦП), то ШИМ 100%, и тут же - "запустить плавно" - до меня туговато доходит... Сорри...

Весь скетч во вложении...
Вложения
t12-5510_v4_2-1.zip
(14.99 KiB) Скачиваний: 279

Re: Мини паяльная станция на жалах T12.

Сб янв 18, 2020 12:06:48

if (Output>150) // если вычисленное значение шим 100%,.... и запустить плавно

Output>150 - это не значение АЦП. Это значение заполнения ШИМ. Ширина импульсов. В прошивке от 0 до 240. Так вот, при включении, если алгоритм вычислил, что ширина импульсов ШИМ больше 150 (в комменте я написал "если вычисленное значение шим 100%,.... и запустить плавно"), то нужно выполнить строки ниже. То есть паяльник был холодный , или почти остыл после выхода в сон. Надо в комменте написать "если вычисленное значение шим >150,.... и запустить плавно"

Добавлено after 54 minutes 1 second:
if(soldd == 888 || soldd < 5) //если перегрев, обрыв или к.з. терморезистора
{
myGLCD.print("(!)",66,0);
sol = false;
// analogWrite(3,0);
analogWrite(9,0);
}
}
else //иначе
{
if(soldd == 888 || soldd < 5) //если перегрев, обрыв или к.з. терморезистора


Поменяй в этом куске цифру 5 на меньшее знаяение например 1 или 2 (в двух местах). Больше ничего подозрительного не нашел. Посмотрю еще немного позднее.

Re: Мини паяльная станция на жалах T12.

Сб янв 18, 2020 17:35:32

не заметил в одном месте:
Спойлер///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////// подпрогр. перевода паяльника в режим сна ////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
void sony()
{
sonnn = true;
//analogWrite(3,0);
analogWrite(9,0);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("SLEEP",CENTER,21);
myGLCD.update();
do // бесконечный цикл, до нажатия кнопки ON/OFF

что не поменял пин выхода ШИМ(в режиме сна паяльник жарил во всю), но если я ставлю свой 9 пин, - скетч перестает компилироваться, выдает "Ошибка компиляции для плати Arduino Pro or Pro Mini" :shock: :dont_know:
меняю снова на 3 - компилируется...

Re: Мини паяльная станция на жалах T12.

Сб янв 18, 2020 18:50:46

Это что то не то с компилятором или я не понимаю... У меня твой скетч компилится со всеми платами. Может быть ошибка в написании analogWrite(9,0); все должно быть написано латинскими буквами. Перепиши analogWrite(9,0); заново. Х.З. в общем.

Re: Мини паяльная станция на жалах T12.

Сб янв 18, 2020 22:19:49

Сам офигеваю...
даже копировал с "живого" места, попробую новейшую IDE, - уже месяц просится...

Добавлено after 41 minute 54 seconds:
Поставил IDE-1-8-10... Скомпиллировалось! Чудеса!

Добавлено after 7 minutes 8 seconds:
Теперь паяльник тухнет...Все ОК!

Добавлено after 33 minutes 14 seconds:
Сам офигеваю...
даже копировал с "живого" места, попробую новейшую IDE, - уже месяц просится...

Добавлено after 41 minute 54 seconds:
Поставил IDE-1-8-10... Скомпиллировалось! Чудеса!

Добавлено after 7 minutes 8 seconds:
Теперь паяльник тухнет...Все ОК!

if (Output>150) // если вычисленное значение >150,.... и запустить плавно


Я не совсем понял:
при холодном паяльнике ШИМ растет от до 150(150 это я по незнанию себе исправил, - в оригинале было 240), а после включается плавная регулировка?

Re: Мини паяльная станция на жалах T12.

Сб янв 18, 2020 22:32:14

Когда паяльник холодный, включается плавный пуск, для уменьшения нагрузки на блок питания (у меня блок питания очень компактный и большой ток не выдает).
То есть, при старте холодного паяльника ПИД регулятор выставляет ШИМ на максимальную ширину импульсов, при этом ток большой. Я сделал так, что если ширина импульсов ШИМ при старте 240 (то есть 100 %), то нужно сделать плавный пуск (ШИМ плавно растет от 0 до 240), после включается обычный режим регулирования.

Re: Мини паяльная станция на жалах T12.

Вс янв 19, 2020 21:53:54

Большое спасибо за ЛИКБЕЗ и за терпение!

Потихоньку разбираюсь... но старта с первого тыка пока не победил...
Заодно присматриваюсь куда втулить М4, чтобы не чухать левое ухо правой рукой...

А тут еще, попользовавшись новым девайсом, захотелось еще одной фишки - двухрежимного сна: т.е. сначала(через 30-60сек) сброс температуры до 100 градусов(чтобы при вибрации или он/оф скорее набирал температуру), а потом по таймеру уже уходил спать. Пока что я не способен на воспроизведение подобного - только прорабатываю ТЗ, чтобы с минимальными изменениями в скетче можно было это реализовать...

А вообще - класная штука получилась, не хуже китайской на СТМ32! Большое спасибо, Proton78, за шикарный проект!

Я эту платку пристрою в АТХ БП ПК с небольшой переделкой на 24В, а чтобы место в корпусе не пустовало и БП не "дурковал" - пристрою туда небольшой линейный БП типа как здесь, но с МК-управлением как здесь, - получится компактно и функционально... Правда с минималистическим дизайном... Но зато с двумя дисплеями.. :)

Re: Мини паяльная станция на жалах T12.

Пн янв 20, 2020 09:57:16

Дорогу осилит идущий! Слава Богам! Слава Родам! Слава Предкам нашим!

Re: Мини паяльная станция на жалах T12.

Вт янв 21, 2020 01:04:38

Дорогу осилит идущий! Слава Богам! Слава Родам! Слава Предкам нашим!


Слава навіки!

На сегодня мне удалось "оживить" кнопку М4 с тем же функционалом, что и М1...М3. Хотел сделать автоматический переход через 40сек с М4 на М2, пробывал через M2S = true; но с задержкой проблемы...
Стою на раздорожьи: толи идти этим путем, толи вводить еще переменную, которая будет отображать выставленную температуру и к ней добавлять 50градусов на 40сек с последующим возвратом к выставленной - что посоветуете?

Пошел по второму пути получилось так:
Спойлер////////////////////////////////////////////////////////////////////////////////////
switch( button8.Loop() ) // обработка кнопки M4
{
case SB_CLICK: // нажатие кнопки M4
BUZZER (); // включаю BUZZER
//set_mem = set; //не используется
set = set + 50;
M4S = true;
M1S = false;
M2S = false;
M3S = false;
SON = 0; // сброс таймера сна
delay(5000);
set = set - 50;
M4S = false;
M1S = false;
M2S = false;
M3S = false;
SON = 0;
BUZZER_2 ();
break;
}
////////////////////////////////////////////////////////////////////////////////////

Только там delay(5000); стоит чисто для проверки, его нужно там менять на что-то другое, он тормозит все, думаю нужен Timer, но не знаю его атрибутов и как ним пользоваться... может подскажете?

Re: Мини паяльная станция на жалах T12.

Вт янв 21, 2020 13:22:18

Такой вариант не годится (это просто задержка, которая тормозит весь цикл). Надо вводить переменную еще одну переменную. Вообще я делал без таймеров. Таймеры нужны для большой точности. В прошивке же плюс минус 2 - 3 минуты для сна особой роли не играют. (Хотя есть возможность переписать код на таймеры).

В самом начале кода объявляешь еще одну переменную, например

unsigned long TURBO = 0; // переменная отчет времени для режима TURBO

Далее в самом начале основного цикла :
void loop()


if (TURBO == 400 && M4S == true) // если установлен отчет времени для режима турбо, добавить 50 градусов к температуре уставки
set = set + 50;

if (TURBO == 5) // если отсчет времени режима турбо почти закончен, вернуть уставку температуры к исходному значению.
{
set = set - 50;
M4S = false;
}

if (TURBO > 0) // если отсчет режима турбо не закончен (не равно 0), то уменьшить переменную на 1
TURBO = TURBO - 1;


Далее правишь код обработки кнопки:
switch( button8.Loop() ) // обработка кнопки M4
{
case SB_CLICK: // нажатие кнопки M4
BUZZER (); // включаю BUZZER
//set_mem = set; //не используется
TURBO = 400; // установить переменную в значение 400 (400- это отсчет времени, надо пробовать разное значение, пока не получится столько секунд сколько надо, так как 400 - это не 400 секунд)
if (M4S == false) M4S = true;

M1S = false;
M2S = false;
M3S = false;
SON = 0; // сброс таймера сна
break;
}

Вот примерно так.
Последний раз редактировалось Proton78 Вт янв 21, 2020 16:48:53, всего редактировалось 2 раз(а).

Re: Мини паяльная станция на жалах T12.

Вт янв 21, 2020 13:27:53

Спасибо! Буду пробьівать. :)

Re: Мини паяльная станция на жалах T12.

Вт янв 21, 2020 13:47:16

Отредактировал немного. Перепроверь.

Re: Мини паяльная станция на жалах T12.

Вт янв 21, 2020 23:08:43

Отредактировал немного. Перепроверь.


СУПЕР!!! Огромное спасибо! Это то что я хотел! я там еще подправил этот кусочек:
Спойлерif(M4S == true)
{
myGLCD.setFont(SmallFont);
myGLCD.invertText(true);
myGLCD.print("M4",67,38);
myGLCD.drawRect(66, 37, 79, 46);
myGLCD.drawRect(65, 36, 80, 47);
myGLCD.drawRect(65, 36, 81, 47);
//myGLCD.invertText(false);
myGLCD.print("+50!",5,38); //вывести на дисплей +50!
myGLCD.drawRect(4, 37, 29, 46);
myGLCD.drawRect(3, 36, 30, 47);
myGLCD.drawRect(3, 36, 31, 47);
}

теперь во время турборежима вместо типа жала +50 в инверсии а потом все штатно. (при 100 около 4-5 секунд турборежима, - позже подберу эксперементально необходимую длительность) просто сказка!
Спасибо!

Re: Мини паяльная станция на жалах T12.

Сб янв 25, 2020 09:43:59

Про калибровку я писал в описании на прошивку.

...........
Почему нет эдс при комнатной температуре не понимаю. Термопара какая то особенная может быть. .....


Потому что термопара показывает разность температур, а если разности температур нет, нет и показаний. Для точных измерений нужна Компенсация «холодного» спая!

Re: Мини паяльная станция на жалах T12.

Сб янв 25, 2020 10:27:35

Про калибровку я писал в описании на прошивку.

...........
Почему нет эдс при комнатной температуре не понимаю. Термопара какая то особенная может быть. .....


Потому что термопара показывает разность температур, а если разности температур нет, нет и показаний. Для точных измерений нужна Компенсация «холодного» спая!



Ну не знаю. У меня все прекрасно показывает без компенсации "холодного" спая. Наконечники китайские ksger t12. Перестает показывать только если положить паяльник в морозильную камеру, примерно при минус 5 градусах. И мне не понятно, как это термопара может показывать разность температур??? Разность температур между чем и чем???
Ответить