ИК паяльная станция на Arduino Mega 2560. Доработка скетча "ARS_v2_Lilium_JSN"

Тема в разделе "Arduino & Shields", создана пользователем vector99, 7 дек 2016.

  1. vector99

    vector99 Гик

    Аналогично ЗА. В теме уже чёрт ногу сломит, пора открыть новую тему!!!
     
  2. SNMar4enko

    SNMar4enko Нерд

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


    В плане оптимизации - увеличение скорости путем использования чтения и записи целого порта или отдельных его бит, кстати хорошо с помощью C++ описано в библиотеке Cyber.lib. Существуют и другие наработки в тех же направлениях оптимизации ардуино (много). Классы C++, их переназначение здесь не уместно и нужно двигаться в сторону ассемблера. Когда-то даже на спор писали код для Z80 (ВМ80) на ассемблере в плане меньшего размера или большего быстродействия.

    - контроллер конешно не дорогой но памяти в нем всего 8 по сравнению с нашими 32. Можно низ-нагрев вынести отдельно к примеру как схема вариант 9 для инфракрасного нагревателя в источнике
    https://radiokot.ru/forum/viewtopic.php?f=25&t=44436 , правда там на форуме начался бардак и часть ссылок плохо работает или вообще не срабатывает.
    Хорошо то что термопара напрямую цепляется к схеме без MAX6675. Пробывал такой вариант - но LM7805 оказалась очень китайской и паспортных входных 35 вольт не держала, даже 24 вольт - которые пропустила на atmega8 и отправила к праотцам. Пересобранный вариант с использованием вместо LM7805 импульсного стабилизатора DC-DC LM2596 работает до сих пор. Причем без всякой коррекции комнатной температуры. Главное откалибровать к примеру на 150 градусах - которые и будем далее выставлять. Единственный недостаток - нагрев не по профилю а как нагреватель успевает ..... но это же не проблемма - включил подогрев - нагрело - подержал минуту и включил верх.
     
    Dmitrysh и SOLOway нравится это.
  3. SNMar4enko

    SNMar4enko Нерд

    - чего Вы паритесь над быстродействием термодатчиков - ничего у вас не получится добавить, принимайте как есть (опрос раз в 0.5 секунды тоже неплохо) и выставляйте коэффициенты ПИД меньшими, чтобы не было перерегулирования ПИД, то есть к примеру нагреватель нагрет 179 градусов, нужно 180, ошибка 1 градус и этим градусам соотвестветствует мощность на выходе ПИД 41% и 42% . Не забываем что за 0.5 секунды между измерениями температуры ПИД опрашивается как минимум 5 раз. И за эти 5 раз ПИД меняет свое выходное значение. Основная составляющая что накапливается Интегрирующая. Допустим что Ki = 1, что для целочисленного ПИД есть минимум. И что получаем в итоге для шкалы в 100? Мощность за 5 опросов выростает с 41 до 46% - а нам это нада? Перелет на 4% с учетом инерционности Нагревателя и связи с термопарой обеспечен. Вывод нужен коэффициент Ki=0.2 чтобы не было перелета за эти 5 опросов ПИД. И как здесь целочисленный ПИД? уже не применим - разве что шкалу расширим до 1000 или 10000, тогда для последней шкалы ПИД Ki=20 - не будет перелета температуры. Но это уже двухбайтные числа и какое повышение быстродейсвия ПИД? Он станет не чуть не быстрей работать но его точность регулирования ухудшиться.
    Казалось что напрашивается вывод - давайте опрашивать ПИД тот же период что и температуру - 0.5 секунды. Но при этом установившееся значение на выходе ПИД будет появлятся минимум за 5 секунд - что не будет дружить с нашим термопрофилем (шаг на 1 градус в среднем 1 секунда).Да и точность возможно упадет - ведь выходную шкалу 10000 надо будет приводить к ШИМ задающим значениям - а они у нас к примеру для твердотельного реле только 20.
    - Я переписывал с экрана 2004 на 1602 - так вот скажу вам что концепция не плохая но запутаться еще проще чем в нашем основном скетче. Ведь если так писать то нужно ставить програмные переключатели датчиков, экранов, клавиатур - энкодеров ..... и писать код для всех видов - а это увеличит код а выживет только ардионо2560
     
  4. Yojiq

    Yojiq Гик

    vector99 - так как Вы ! создатель темы то вам и карты в руки, если есть возможность для редактирования шапки то милости просим ...
    хотя правильнее было бы разделить по железу ветку и далее редактировать каждую в отдельности.
     
    SOLOway и CLON2 нравится это.
  5. Dmitrysh

    Dmitrysh Гик

    Конечно, это важный параметр. Какой смысл мне от датчика который 3-10 секунд реагирует на изменение температуры. Тут чем быстрее, тем лучше и точнее регулирование.
    Это ещё почему? PT100 реагирует на изменение температуры в течение 2 сек. АЦП если меряем самой meg-ой работает на частоте 50-200 кГц( до примерно 120 микросекунд, т.е быстро) или 21 милисекунда если меряем мах31865. Таким образом мы получаем правильную температуру только на 10-е измерение, когда температура ушла ещё дальше. А нам оно надо?
    Аргументируйте. Это интересно.
    Как раз в этом скетче все предельно просто. Работает по событиям. Вы вырежьте всю графику и обнажиться скелет программы. По-мне так достаточно лаконично.
    Ну не так все плохо, а пару косяков никакой программе не повредит.
    А у кого не работает? Я этот скетч "крутил" на всех IDE и все всегда работало.
    Хорошая идея, но практически не реализуемая. Все равно нужно будет править вывод на экран, ибо экраны разные(графические либо строчные).
    Видел подобный проект - регулятор для модуля Пельтье, не очень понравился если честно. Разбиение по интервалам достаточно кропотливый труд и надо ещё вычислять время выполнения того или иного действия. А если добавить надо что-нибудь то опять пересчитывай. На любителя.
    Так и прицепили для того чтобы косяки ловить, по крайней мере я.
    А зачем простому обывателю смотреть в программу? Пусть смотрит как запаивается его чип. Здесь как раз идет работа над тем чтобы свести работу обывателя до нажатия одной кнопки. "Кнопку нажал - чип стал". Да и можно подумать тут все читают код. Кто нибудь заглядывал в библиотеку delay или wiring или arduino? Сомневаюсь. А вы посмотрите и тогда увидите где "нечитаемо".
    Так она вроде как для 16 и 32 битных камней. А к нам она как станет?
    Аргументируйте.
    Ну это у кого как, изначально было фазовое, потом димер. А я сейчас обратно на фазовое перешёл, так точнее. И во всех вариантах нужен детектор нуля.
    Тогда можно сразу покупать отдельный ПИД контроллер.
    Запросто, критические секции выполняются строго по времени, все остальное на визуализацию. Я могу даже управление кофеваркой прикрутить в промежутке между сетевыми полупериодами. А вообще посмотрите на прошивку Marlin для 3D принтера, она и не такое вытворяет - все на mega2560.
     
  6. Dmitrysh

    Dmitrysh Гик

    Золотые слова! 5 баллов.
    Поддерживаю.
    Библиотека мне понравилась, но таймер на ней не заводится под mega2560, поэтому перетащу её по кускам туда где нужно.
    Однозначно согласен, то что компьютеру хорошо, микроконтроллеру не переварить.
    Не все так плохо, но кое-где можно и применить.
    Все получится, я добрался до 220мс. А сейчас смотрю на мах31855, там 100мс обещают.
    Так оно и будет. Единственное можно написать отдельные процедуры под разные экраны и этим процедурам передавать кучу переменных для вывода и информацию что выводить.
     
  7. Yojiq

    Yojiq Гик

  8. vector99

    vector99 Гик

    Предлогаю весь флуд и обсуждения оставить в данной ветке форума, а всю конкретику по наработкам записывать в новой теме, дабы была какая-то систематика!
     
    SOLOway, CLON2 и Yojiq нравится это.
  9. Yojiq

    Yojiq Гик

    а так же у кого другое железо (Mega 2560 + TFT-320x480) - сделайте отдельные ветки и ведите их ...
     
    CLON2 нравится это.
  10. Dmitrysh

    Dmitrysh Гик

    А какое другое?
     
  11. Yojiq

    Yojiq Гик

    LCD2004, UNO, NANO - такое
     
  12. bamik

    bamik Нерд

    Тогда я делаю костяк и описание концепции. Желающие могут взять себе конкретную тему и реализовать ее в модуле, задокументировав каждый шаг программы и назначение переменных. Если переменные не вновь введенные, то использовать имена уже имеющиеся.
     
  13. CLON2

    CLON2 Нерд

    Сам пробовал, делал контроллер с опросом ввода/вывода 10мС на UNO и NANO заливал работает (хотя это одно и то же)...

    Ну сделайте фазовое управление для двух нагревателей и ПИД регулирование там же, и опрос термодатчиков раз 10 в сек. И увидите что остального на визуализацию уже не останется, особенно если туда прикручивать "телевизоры" в 55" с выводом графиков, общение с ПК итд...:) Сделать можно все что угодно, но за какое время и кем... Я например не программист, но программистов видел очень много разных...

    Ну тогда процесс создания "идеальной" программы затянется лет на 5. Или надо подключить пяток другой проф. программистов с зарплатой тыс 2-3 евро. Всегда не любил схемы на 1 транзисторе... (радиолюбители со стажем поймут о чем я...:) )

    У меня "простой обыватель" в скобках не просто так, слишком простому оно точно не к чему, он купит китайскую станцию и успокоится... А тут собрались люди немного знакомые с "напильником" у которых чешутся руки. И у многих нет рядом радиорынка и даже нормальной почты... Приехал в "цивилизацию", какое железо было в наличии то и взял, и тут то уже надо программу подшаманить.... (я не говорю уже о том что всегда хочется прикрутить еще что нибудь). (Например у меня 1 нормальный продавец ардуинок на 2-3млн. населения т.к. фронт в 5км. и что он завез то и беру...)

    В каком это месте? Я наверно что то упустил? (курил в основном версию 1.3.2). Что, было правда так? https://ru.wikipedia.org/wiki/Фазовое_регулирование

    Я вроде аргументировал, тем что с такими постоянными времени как в нашей системе (в несколько секунд), плюс управлении по алгоритму Брезенхема с SSR, не обязательно ловить первый полупериод т.к. он существенной роли не играет,(кстати, как я убедился сам, 80% схем датчиков 0 запаздывают с детектированием 0 и в результате SSR модуль не открывается в первом полупериоде а только при прохождении через следующий ноль) и управление на SSR модуль выставлять по прерыванию от таймера а не от датчика 0 синусоиды. Можно растянуть минимальный управляющий импульс на SSR миллисекунд на 200. (т.е. выдавать управляющие воздействия на объект раз в 200мС, +/-5мС погоды не сделают, считывал бы температуру не раз в секунду, а раз 5-10 в сек что бы подсунуть ПИД регулятору уже хорошо отфильтрованные данные). Хочу еще 3-ю термопару в нижний нагреватель для разгона, а потом переход когда температуры почти сравняются на термопару внизу платы. Или ту же задачу решить адаптивным ПИД регулятором с изменяющимися коэффициентами. По 3й термопаре можно и аварийные режимы отсекать пока не зажарилась плата. (Например: намертво открылся модуль SSR или датчик температуры отпал от платы), короче спецнадзор за спецконтролем...;)

    Поддерживаю это направление, если veсtor99 готов на этот подвиг (наделать спойлеров и ссылок по направлениям в шапке) т.к. ключи от шапки у него...:)
     
  14. bamik

    bamik Нерд

    http://efo-sensor.ru/termosoprotivleniya-pt100-pt500-pt1000-i-drugie.html
    Есть РТ100 со скоростью реакции 0,05 сек при изменении температуры на 0,5 градуса. Вообще, мне не совсем понятен этот параметр в документации. Как я его понимаю - это время, требуемое для приобретения датчиком температуры от одной крайне точки до другой. Т.е. с -200 до +600 градусов, например. Иначе бред получается. Полградуса изменять за 10 секунд - бред. Но на всех форумах, посвященных ИК станциям, я читал, что при использовании РТ100 растет точность показаний. На мой взгляд, это требуется в серийном выпуске. В любительстве можно просто отградуировать один раз датчик по свои личные градусы.

    РТ100 - изменяет свое сопротивление линейно. Поэтому можно использовать любой АЦП. Довольно часто используют внутренний АЦП Ардуины. Точности в 0.25 градуса вполне хватает.

    Аргументы были ниже, если Вы не заметили. Контроллер управляет процессами во времени в первую очередь, потому желательно четко видеть когда что происходит и за какое время. Текущая версия больше похожа на пользовательский интерфейс, где главное - ожидание реакции юзера.

    Это прекрасно, что лично у Вас прямые руки.

    Если все будет хорошо документировано, то достаточно поменять блок для своих нужд и уразумения, используя готовый набор переменных. Возьмем тот же вывод на экран, который меняется чаще всего. Если в шапке перед блоком будет список используемых переменных, то для адаптации к своему экрану очередному последователю будет достаточно переписать этот блок. Если какие-то переменные или признаки не будут использоваться, то это не нарушит работу программы в целом. А в текущем скетче при замене экрана надо будет разобраться во всем тексте, вылавливая вывод на экран. Да, это может оказаться кропотливым трудом, но если кто-нибудь сможет сможет подсчитать такты или время для выполнения каждого блока и задокументировать это в программе, то со временем это не будет большой проблемой.
     
  15. bamik

    bamik Нерд

    Диммер и фазовое управление не одно и то же?..
    arduino-timer-api для любых м/к, там же нормально в документации несколько раз об этом говорится.
    Код (C++):
    Доступные таймеры:
    AVR ATmega1280, ATmega2560: _TIMER1, _TIMER3,_TIMER4, _TIMER5; TIMER_DEFAULT = _TIMER5
    AVR AT90USB646, AT90USB1286, ATmega128, ATmega1281, ATmega1284, ATmega1284P, AVR_ATmega2561: _TIMER1, _TIMER3; TIMER_DEFAULT = _TIMER3
    AVR ATmega32U4: _TIMER1; TIMER_DEFAULT = _TIMER1
    AVR другие чипы: _TIMER1; TIMER_DEFAULT = _TIMER1
    PIC32 (ChipKIT): _TIMER1, _TIMER2, _TIMER3, _TIMER4, _TIMER5, _TIMER2_32BIT, _TIMER4_32BIT; TIMER_DEFAULT = _TIMER4_32BIT
    SAM (Arduino Due): _TIMER1/_TIMER1_32BIT, _TIMER2/_TIMER2_32BIT, _TIMER3/_TIMER3_32BIT, _TIMER4/_TIMER4_32BIT, _TIMER5/_TIMER5_32BIT, _TIMER6/_TIMER6_32BIT, _TIMER7/_TIMER7_32BIT, _TIMER8/_TIMER8_32BIT, _TIMER9/_TIMER9_32BIT (все таймеры 32-битные, _TIMERX_32BIT == _TIMERX); TIMER_DEFAULT = _TIMER3/_TIMER3_32BIT;
     
  16. bamik

    bamik Нерд

  17. Dmitrysh

    Dmitrysh Гик

    Меня смутила запись AVR 16bit, а это оказывается таймер 16бит.
    С TFT дисплеем скорее нет, а с 1602 или 2004 вполне возможно(можете посмотреть у SNMar4enko).
    Да нам не надо идеальная программа, нам надо чтобы работала четко и без казусов. Я не видел профессиональных программистов пишущих под ардуино. И чем вам схема на 1 транзисторе не нравиться? Вполне себе имеет место быть, а иногда не стоит городить огород ибо все гениальное - просто. Но это лирика.
    Я не в намного лучших условиях, стараюсь все из китая по почте тянуть. А радиомагазинов у нас вообще нет, и не торгует никто. До ближайшего и единственного в стране радиорынка в столице мне пилить 250км, а цены там 10-100 китайских, причем на все. Сочувствую, что война у вас под боком, не хорошо это...
    Я вас ввел в заблуждение, извиняюсь. Сначала управление было "никакое", т.е где хочу там и молочу. Потом прицепили детектор нуля - стало лучше. Потом прицепили димер с алгоритмом Брезенхема - ещё лучше, но не достаточно точно, как мне показалось. Затем я прицепил фазовое управление, такое как в ссылке в википедию. Взял его у SNMar4enko.
    Наш детектор скорее опережает ноль, начиная со второго полупериода.
    А какая будет точность поддержания температуры?
     
  18. Dmitrysh

    Dmitrysh Гик

    Дайте ссылку на такой, почитаем. Если так оно и есть, то надо брать.
    В этом то и проблема, что они медленные. Я себе заказал из китая, приедут я подробно опишу что и как.
    Можно и ацп ардуины использовать, но лучше специализированную микросхему.
    События показывают, что происходит в данный момент. А за какое время, ну тут простите, считать надо. Вы тоже будете считать ваши периоды по 20мс и не факт что все у вас там будет гладко.
    Для работы всего одна кнопка. Где там ожидание реакции? Нажали СТАРТ и процесс пошёл в автомате.
    Без комментариев. Не красиво.
    Это все правильно, к этому надо стремиться, но это не первостепенная цель. Тема ушла в интерфейсы, экраны, кнопки и тд. А самое главное от нас ускользает. Нам нужен четко работающий алгоритм, который будет отрабатывать заданные параметры, такие как скорость роста температуры и точность её поддержания. Что у нас есть сейчас? Есть пид, который справляется с задачей поддержания температуры, но не справляется со скоростью роста. Есть несколько алгоритмов управления нагрузкой. Есть куча железа, к которому тяжело адаптировать нашу программу. И сейчас мы напишем ещё пару-тройку программ, которые будут работать с такими же граблями как и настоящая. И что нам это даст? Где идеи по развитию алгоритма? Грустно...
    Нет не одно. Диммер открывает симистор на несколько целых полупериодов(ну допустим 6 из 10), а фазовое управление подразумевает открытие симистора в течение каждого полупериода на определённое время.
     
  19. revolover

    revolover Гик

  20. Dmitrysh

    Dmitrysh Гик

    Это температура работы самой микросхемы. А с термопарой к-типа -200..1250