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

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


Ответить

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

Вс янв 12, 2020 21:15:48

Я о том же писал. Затри весь код от сих-


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

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

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

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



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

if (soldt <= 182) // короткое замыкание или замерз
soldd = 0;
if (soldt >= 670) // перегрев или обрыв
soldd = 888;


до сих .

Вместо этого напиши -

analogWrite(3,0); // остановить ШИМ перед чтением АЦП
soldt = Filter (); // считать отфильтрованное значение температуры нагревателя
soldd =soldt; //

После этих манипуляций на дисплее вместо реальной температуры будет значение АЦП. Тогда ты поймешь где что править. Посмотришь значение ацп при комнатной температуре. Нагреешь другим паяльником или горелкой и т.д. То есть надо определить минимальное значение АЦП и максимально возможное. Отрицательных значений не должно быть.

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

Пн янв 13, 2020 22:46:10

Коли вже той Український Рамадан(від Романа до Йордана) закінчиться.... :beer:

Не могу вкурить как формируется значение температуры выводимое на дисплей... Почему три участка...
Если я перешел от опорного 5В на 2,5В, то показания должны отличаться в 2 раза, а они почти такие как надо...
Нужно разбираться на "свежую" голову... Что-то не вяжется пока в голове...

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

Вт янв 14, 2020 10:19:56

Коли вже той Український Рамадан(від Романа до Йордана) закінчиться.... :beer:

Не могу вкурить как формируется значение температуры выводимое на дисплей... Почему три участка...
Если я перешел от опорного 5В на 2,5В, то показания должны отличаться в 2 раза, а они почти такие как надо...
Нужно разбираться на "свежую" голову... Что-то не вяжется пока в голове...



Значение температуры отображаемое на дисплее формируется из знацений АЦП. То есть подается напряжение на аналоговый вход микроконтроллера с усилителя термопары. Аналогово цифровой преобразователь контроллера (АЦП) преобразует это напряжение (уровень сигнала) в цифровое значение (от 0 до 1023). Далее уже програмным путем (в скетче) это цифровое значение подгоняется под реальные показания температуры. У меня три диапазона потому что усилитель термопары выдает не пропорциональные значения, то есть чем выще температура тем сильнее усиление сигнала с термопары. Диапазонов можно сделать больше или вообще один. Насколько понимаю у тебя усилитель специализированный для термопар, тебе скорее всего можно обойтись одним диапазоном. Но для этого тебе надо выполнить то условие, что я писал выше. Надо знать значение АЦП при минимальной температуре (например при 0 градусов (положить паяльник в холодильник или за окно) и при максимальной температуре (например 380 градусов). Но лучше оставить как есть несколько диапазонов, иначе код переписывать основательно придется.

Добавлено after 10 minutes 13 seconds:
И еще такая фигня может быть - блок питания уходит в защиту, потому что в холодный паяльник потребояет приличный ток (около 3 ампер). По мере разогрева потребление тока падает. Потому тебе приходится несколько раз тыкать ON\OFF. Попробуй в скетче поменять P_ON_E на P_ON_M :

вот в этом месте

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, P_ON_E, DIRECT); // подключаю пид регулятор

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

Вт янв 14, 2020 16:04:20

Сюда:

int cor_ir_1 = 200; // переменная 1 корректировки жал 1-2-3-4 (хранится в еепром по адр.30,38,46,54)
int cor_ir_2 = 286; // переменная 2 корректировки жал 1-2-3-4 (хранится в еепром по адр.32,40,48,56)
int cor_ir_3 = 500; // переменная 3 корректировки жал 1-2-3-4 (хранится в еепром по адр.34,42,50,58)
int cor_ir_4 = 650; // переменная 4 корректировки жал 1-2-3-4 (хранится в еепром по адр.36,44,52,60)

и сюда:

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

внес данные своих измерений, но температура на дисплееи реальная отличается: на дисплее -260 реально - 200 ...
В скетче нигде больше не нужно править?

Попробую еще раз перемерить...
Последний раз редактировалось davids58 Вт янв 14, 2020 16:23:34, всего редактировалось 1 раз.

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

Вт янв 14, 2020 16:18:57

найди в скетче вот эту строку :

soldd = soldd+corr; // поправка введенная в программу для ручного ввода (подгон температуры по внешнему датчику)

удали или закоментируй.

И пришли то же самое что писал выше, только со своими значениями. Надо посмотреть.

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

Вт янв 14, 2020 16:43:16

int cor_ir_1 = 5; // переменная 1 корректировки жал 1-2-3-4 (хранится в еепром по адр.30,38,46,54)
int cor_ir_2 = 225; // переменная 2 корректировки жал 1-2-3-4 (хранится в еепром по адр.32,40,48,56)
int cor_ir_3 = 690; // переменная 3 корректировки жал 1-2-3-4 (хранится в еепром по адр.34,42,50,58)
int cor_ir_4 = 999; // переменная 4 корректировки жал 1-2-3-4 (хранится в еепром по адр.36,44,52,60)

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;}

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

Вт янв 14, 2020 17:04:31

Попробуй вот так

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

Я ничего не менял, только убрал лишнее (переменную ASM, она не нужна вообще) и немного изменил условие перехода (else if)
Если ничего не поменяется, то включай паяльник и выполни калибровку. Клавиши "+" и "-" одновременно, далее длительное нажатие "ON\OFF". Паяльник включится на нагрев (380 градусов), надо измерить и клавишами "+" и "-" выставить реальную температуру. Далее короткое нажатие "ON\OFF", следующая ступень и т.д.

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

Вт янв 14, 2020 19:54:44

К сожалению ничего не поменялось.... Я второй раз прошелся по измерениям.
А где вводится значение внешнего источника, я не нашел...
Может есть смысл откорректировать коэфициент усиления ОУ, или где-то(?) ввести корректировочный коэфициент для АЦП, типа ввести еще переменную...

а строчку:
soldd = soldd+corr;
раскомментировать при ручной калибровке?

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

Вт янв 14, 2020 20:44:51

К сожалению ничего не поменялось.... Я второй раз прошелся по измерениям.
А где вводится значение внешнего источника, я не нашел...
Может есть смысл откорректировать коэфициент усиления ОУ, или где-то(?) ввести корректировочный коэфициент для АЦП, типа ввести еще переменную...

а строчку:
soldd = soldd+corr;
раскомментировать при ручной калибровке?


Эту строка нужна была, когда не было режима калибровок. Можно было в меню настроек подогнать температуру ( в общем то эта возможность сейчас есть).

Раскомментируй, пусть будет.

У тебя слишком большой коэффициент усиления усилителя. Значение АПЦ 999 при температуре 380 - это слишком много. Скорее всего это вообще предельное значение для микроконтроллера. Должно быть хотя бы 700 при максимальной температуре. И нарисуй и вышли схему управления с усилителем (силовую и измерительную часть).

Добавлено after 26 minutes 43 seconds:
Внешний источник образцового напряжения включается вот так:

analogReference (EXTERNAL); //подключение вннешнего источника опорного наржения (позволяет сильно увеличить точность измерений)

Надо раскомментировать эту строку в скетче.
При использовании TL431 образцовое напряжение будет примерно 5 вольт. То есть как и в моем варианте без TL431. Только стабильность будет немного лучше. Особого смысла я в этой микросхеме не вижу.

Вручную значения нигде не вводятся. Это железо.

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

Вт янв 14, 2020 23:12:29

В моем включении(катод и упр. соединены) ИОН = 2,5В, я потому и спрашивал...
Схему нарисовал прилагаю... Там пунктиром моя универсальная плата, на ней предусмотрены компоненты: если не нужен не впаиваю или ОR...
Да, и М4 - єто задумка для турбокнопки, - при нажатии температура подскакивает на 50 градусов на 20 сек а потом в предыдущее состояние(для пайки толстых выводов... А то вечно забываешь сбрасывать температуру...)
SS-11.jpg
(95.79 KiB) Скачиваний: 626


Вручную конечно можно, но хочется добраться до сути, - почему не соответствует, ведь температуру мерил одним и тем же тестером, в одинаковых условиях(внутренний разогрев, т.е. штатный режим)... :dont_know:

Попробую сначала скинуть усиление ОУ и выйти на нужное значение температуры в среднем диапазоне, а потом прикину что в остальных...
Последний раз редактировалось davids58 Ср янв 15, 2020 10:35:31, всего редактировалось 1 раз.

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

Ср янв 15, 2020 10:30:25

Тебе надо уменьшать коэфф. усиления. Так как максимальный отчет АЦП 1023. А у тебя при 380 градусах уже 999, это почти предел. У меня при 380 градусах АЦП 650. Надо оставлять запас на перегрев для защиты. Ресзистор R27 у тебя 10 кОм. У меня этот резистор 22 кОм. Он так же влияет на измерительную часть. В идеальном варианте коэфф усиления должнен быть четным (то есть, 2, 4, 6, 8, 10 и т.д.). Или можно настроить так, что вообще корректировна не нужна будет. То есть настроить усилитель так, что отсчеты АЦП будут точно соответсвовать ральной температуре (линейно), но это сложно сделать. Можно изменить способ преобразования значений АЦП в показания температуры, вводя коэффициент, например так:

if (soldt >= 5 && soldt <= 225) // при темпеатуре от 13 градусов до 100 (200 и 286 - это значения АЦП)
soldd = soldt*1.5;
}

То есть просто умножаем на коэфф. пропорциональности. Можно умножать, или делить, или вычитать, или прибавлять. Да и вообще можно делать как угодно.
Основное что нужно - это точно знать значение АЦП при определенных температурах. Я делал три диапазона, так как усилитель выдает не линейную зависимость, а пропорциональную. До какого то значения все нормально (линейно), а потом начинается нелинейность (но не значительно). У меня усилитель почти линейно работает (. Чтобы устранить погрешность я использовал функцию "MAP".
Настраивай усилитель для начала. Так чтобы при комнатной температуре АЦП было больше 100, а при 380 меньшне 600.

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

Ср янв 15, 2020 10:50:35

Так чтобы при комнатной температуре АЦП было больше 100, а при 380 меньшне 600.


НЕ знаю с чем связано, но с термопары типа К (от тестера) при комнатной температуре есть каких-то 0.2 милливольта, а с Т12 жала - голяк! Появляется только при 50-60 градусах, - поэтому не знаю как при 13 градусах накачать 100АЦП, может жало такое, котя вроде "фирмовое" от Ksger.
Поставлю подстроечник на ОУ подгоню под нужное значение в средине и гляну что будет... Прийду с работы подумаю, что делать, возможно и коэффициентом побалуюсь, но сначала скину усиление ОУ...
А резюк у меня 20К, (стоят две СМД по 10), - накосячил, когда рисовал... :oops:

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

Чт янв 16, 2020 03:05:02

А сюда:
Спойлер///////////////////////////////////////////////////////
////////// подпрограмма чтения калибровок /////////////
///////////////////////////////////////////////////////
void READ_KALIBR ()
{
if (iron_vib == 1)
{
Iron_tek = Iron_1;
addr = 30;
cor_ir_1 = EEPROMReadInt(addr);
if (cor_ir_1 <0 || cor_ir_1 >800)
cor_ir_1 = 200;
addr = 32;
cor_ir_2 = EEPROMReadInt(addr);
if (cor_ir_2 <0 || cor_ir_2 >800)
cor_ir_2 = 286;
addr = 34;
cor_ir_3 = EEPROMReadInt(addr);
if (cor_ir_3 <0 || cor_ir_3 >800)
cor_ir_3 = 500;
addr = 36;
cor_ir_4 = EEPROMReadInt(addr);
if (cor_ir_4 <0 || cor_ir_4 >800)
cor_ir_4 = 650;
}


if (iron_vib == 2)
{
Iron_tek = Iron_2;
addr = 38;
cor_ir_1 = EEPROMReadInt(addr);
if (cor_ir_1 <0 || cor_ir_1 >800)
cor_ir_1 = 200;
addr = 40;
cor_ir_2 = EEPROMReadInt(addr);
if (cor_ir_2 <0 || cor_ir_2 >800)
cor_ir_2 = 286;
addr = 42;
cor_ir_3 = EEPROMReadInt(addr);
if (cor_ir_3 <0 || cor_ir_3 >800)
cor_ir_3 = 500;
addr = 44;
cor_ir_4 = EEPROMReadInt(addr);
if (cor_ir_4 <0 || cor_ir_4 >800)
cor_ir_4 = 650;
}

if (iron_vib == 3)
{
Iron_tek = Iron_3;
addr = 46;
cor_ir_1 = EEPROMReadInt(addr);
if (cor_ir_1 <0 || cor_ir_1 >800)
cor_ir_1 = 200;
addr = 48;
cor_ir_2 = EEPROMReadInt(addr);
if (cor_ir_2 <0 || cor_ir_2 >800)
cor_ir_2 = 286;
addr = 50;
cor_ir_3 = EEPROMReadInt(addr);
if (cor_ir_3 <0 || cor_ir_3 >800)
cor_ir_3 = 500;
addr = 52;
cor_ir_4 = EEPROMReadInt(addr);
if (cor_ir_4 <0 || cor_ir_4 >800)
cor_ir_4 = 650;
}

if (iron_vib == 4)
{
Iron_tek = Iron_4;
addr = 54;
cor_ir_1 = EEPROMReadInt(addr);
if (cor_ir_1 <0 || cor_ir_1 >800)
cor_ir_1 = 200;
addr = 56;
cor_ir_2 = EEPROMReadInt(addr);
if (cor_ir_2 <0 || cor_ir_2 >800)
cor_ir_2 = 286;
addr = 58;
cor_ir_3 = EEPROMReadInt(addr);
if (cor_ir_3 <0 || cor_ir_3 >800)
cor_ir_3 = 500;
addr = 60;
cor_ir_4 = EEPROMReadInt(addr);
if (cor_ir_4 <0 || cor_ir_4 >800)
cor_ir_4 = 650;
}
}

тоже нужно вводить свои значения? Может потому у меня такой разбег?

Усилитель я загрубил, теперь 380грд. это 799АЦП, но разница в температуре очень большая, - при 380грд. на дисплее - 302 на на жале...
Пока значения не сойдутся, дальше идти, я думаю, нет смысла... Поправьте меня, если ошибаюсь...

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

Чт янв 16, 2020 12:08:57

Опять много, еще уменьшай коэфф усиления. Функция МАР слишком "растягивает" показания. Тебе нужно добиться максимальной линейности. При комнатной температуре сколько АЦП??? Иначе не получится добиться хорошей точности.
У меня при температуре 100 градусов АЦП 285, при 380 градусах АЦП 650. 285-100= 185, 650-380=270. Нелинейность всего 270-185=85. 85 это мало. Эта нелинейность при разбитии на 3 диапазона почти не влияет на точность показаний.
У тебя же нелинейность очень большая.
У тебя при комнатной температур АЦП должно быть около 200. Уменьшай усиление и поподбирай номинал резистора R27.

if (iron_vib == 1)
{
Iron_tek = Iron_1;
addr = 30;
cor_ir_1 = EEPROMReadInt(addr);
if (cor_ir_1 <0 || cor_ir_1 >800)
cor_ir_1 = 200;

В этом куске кода происходит чтение калибровок из еепром. Если калибровки выходят за диапазон, то есть меньше 0 и больше 800, то значение устанавливается 200. В остальных калибровка то же самое. Это нужно для того чтобы при неправильном чтении или записи в еепром (значение меньше 0 и больше 800) калибровка не очень то выходила за диапазон. То есть при прошивке контроллера в EEPROM может быть вообще все что угодно, и отрицательные числа и числа более 1000 и т.д. После первой калибровки через меню эти значения переписываются на твои. Эти значения можешь поменять на свои, но скорее всего это не поможет.

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

Чт янв 16, 2020 13:11:43

То есть при прошивке контроллера в EEPROM может быть вообще все что угодно, и отрицательные числа и числа более 1000 и т.д. После первой калибровки через меню эти значения переписываются на твои. Эти значения можешь поменять на свои, но скорее всего это не поможет.


Я наверно туплю...

Мои действия:
1. пошиваю контроллер
2. переключаюсь на 24 В
3. - ? Что значит первая калибровка? Как её осуществлять? :dont_know:

Добавлено after 1 minute 17 seconds:
Можно поподробнее, пожалуйста...

Добавлено after 18 minutes 39 seconds:
Т.е. что я должен сделать, чтобы значения переписались на мои...

Добавлено after 6 minutes 33 seconds:
у меня сейчас при 380 - 799 АЦП, - я уже снизил коэф. усиления. Непонятно почему на жале при комнатной температуре нет ЭДС...

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

Чт янв 16, 2020 13:55:38

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

3. Вход в режим смены и калибровки насадок выполняется одновременным зажатием кнопок "+" и "-". Далее кнопками "+" и "-" выбирается насадка по умолчанию. При кратковременном нажатии кнопки "ON\OFF" насадка сохраняется в еепром. При длительном нажатии кнопки "ON\OFF" происходит переход в режим калибровки. Включается нагрев. Кнопками "+" и "-" нужно выставить истинную температуру. Далее кнопкой "ON\OFF" переход на следующую ступень. И т.д. Калибровки сохраняются в еепром.

Почему нет эдс при комнатной температуре не понимаю. Термопара какая то особенная может быть. Вероятно не показывает отрицательных температур. Проверь подключение самой насадки. Там плюс и минус имеют значение (попробуй поменять местами). И попробуй менять номинал R27 (20 кОм) больше или меньше.

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

Чт янв 16, 2020 17:28:24

Спасибо большущее за поддержку! :))
Таки нужно было в "подпрограмму чтения калибровок" ввести свои данные. Ввел - и все температуры держатся такие, как выставлял по АЦП.
Следующий этап - запуск. У меня, наверное, жало какое-то ненормальное, - при комнатной температуре нет напруги(смотрел милливольтметром),буду думать как обойти.... может нужно будет дать небольшое смещение на неинвертирующий вход ОУ... Это я поборю...

А есть какие-нибудь мысли на счет турбокнопки, в каком месте скетча ее можно было-бы пристроить? :dont_know:

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

Чт янв 16, 2020 18:37:21

Кнопку можно пристроить в любом месте основного цикла программы :

void loop()

Этот цикл "крутится" по кругу. Естественно соблюдая правила написания скетча.

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

Чт янв 16, 2020 19:05:33

я немого увеличил время паузы:
Спойлер///////////////////////////////////////////////////////////////////////
////// плавный пуск холодного паяльника ////////////////////////
///////////////////////////////////////////////////////////////////////

void plavno()
{
for(int i=0;i<=241;i++)
{
//analogWrite(3, i);
analogWrite(9, i);
delay(20); // ставлю задержку для эффекта
}
power_on = false;
}


и жало сразу разогревается приблизительно до 100 градусов, - этого хватает... Правда нужно еще раз тыкнуть. А можно вместо
power_on = false;
поставить
power_on = true;
это не испортит идеологию программы?
Или это бред?

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

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

не помню почему здесь написал

power_on = false;

кажется для отладки, но так и не поменял на

power_on = true;

не испортишь.
Ответить