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

Тема в разделе "Глядите, что я сделал", создана пользователем Jalnin, 2 ноя 2012.

Статус темы:
Закрыта.
  1. VaderMi

    VaderMi Нерд

    Давно интересует вопрос, как обстоят дела с морганием освещения в помещении при работе нагревателей? Ведь всё таки должна идти просадка напряжения при включении тэнов при коммутации симисторов .
     
  2. Yojiq

    Yojiq Гик

    VaderMi есть дрожание при полной мощности низа особенно заметно, но это не влияет на итоговый результат.
    У себя в новом кабинете я притянул две линии - 1я для стола, 2я силовая для паялки и других прожор, посмотрим как это себя оправдает
     
    VaderMi нравится это.
  3. SOLOway

    SOLOway Гуру

    Попробовал причесать немного, но проблему не устранял.
    Сейчас при отвале ZCC в IDLE плату жарить не будет. Но при нажатии ОК всё равно врубится НИ на всю мощь, а в некоторых случаях, при нажатии в последствии в такой ситуации на CANCEL, может врубиться и ВИ - будьте внимательны.
    Таймер вверху в центре... Как вы и пишете он дотикав до заданной температуры шага №1 ВИ запускает ВИ и отрубает НИ.
    Скетч игнорирует реальные показания температур с термопар, в частности, снижение температуры на НИ не приводит к попыткам ПИД НИ её поддерживать. Ощущение, что отсутствует кусок кода обеспечивающий эти взаимосвязи...
    UPD: Обновление в посте #1619
     

    Вложения:

    Последнее редактирование: 6 окт 2019
  4. SOLOway

    SOLOway Гуру

    Привет всем! Наконец-то я закончил с контроллером по просьбе товарища, у которого была только arduino ProMini AtMega168p / 16MHz / 5v и LCD1602A.
    Дисплей LCD2004 и модуль MAX6675 я собирался ему подарить, а платы ZCC и силовые у меня россыпью в коробке томились различные. Товарищ использует самодельный термостол из китайских керамических ТЭНов с управлением китайским же левацким ПИД-регулятором с "закосом" под REX-C100.
    Взяв за основу скетч для UNO & LCD2004 из этой темы, под руководством @Dmitrysh, я всё-таки перевел его на дисплей 1602. Благодаря оптимизациям @Dmitrysh снова стало возможным выводить график ВИ температура/время на ПК, а также хватило памяти для звуков, индикации и управления охлаждением силовой части. Теперь можно при желании на отдельной печатной плате всё это разместить вместе с силовым ключом, схемой ZCC и реле управления вентиляторами! Весь материал по проекту находится в архиве. Товарищ доволен работой - теперь у него это не просто термостол, а нормальная бюджетная станция :)
     

    Вложения:

    Последнее редактирование: 6 окт 2019
    binaver нравится это.
  5. Watashi

    Watashi Гуру

    Продолжаем исправлять детские болячки ))) подправил интерфейс настроек, привел код в соответствии с постом #1963, добавил украшалку)
    (прилагаемые файлы должны быть в одной папке)

    !!!! Внимание !!!!
    Вылез неприятный момент. Украшалка - это картинка на стартовый экран, для ее записи во флеш меги используется библиотека, встроенная в Ардуино IDE, avr/pgmspace.h, а неприятность в том что после компиляции операторы типа myGLCD.textRus("ВЕРХ ",22, 2); начинают выдавать предупреждающую ошибку, причем программа работает нормально. Исправляется так: myGLCD.textRus(F("ВЕРХ "),22, 2);
    Но самое плохое что и на других скетчах которые компилировались раньше нормально, в подобных случаях начинает выдавать то же предупреждение.

    Поэтому я картинку убираю и перезалью скетч без нее.
    Я прошу прощения за все это, я сам обнаружил это только что(((
     

    Вложения:

    Последнее редактирование: 10 мар 2019
    Yojiq и SOLOway нравится это.
  6. Dmitrysh

    Dmitrysh Гуру

    Старайтесь прилагать файл с изменениями, чтобы потом можно было найти концы, если что-то пойдёт не так.
     
    SOLOway нравится это.
  7. Watashi

    Watashi Гуру

    Понял, а сейчас очень много изменений. Посмотрите мой предыдущий пост про неприятность.
     
  8. Yojiq

    Yojiq Гик

    Watashi спасибо за вашу работу
    очень хотелось бы что бы библиотеки которые используются были вместе со скетчем выложены или иногда упоминать о них какие именно нужны.
     
  9. SOLOway

    SOLOway Гуру

    Буду признателен всем, кто поддержит портирование задания 14-и термопрофилей в проект v1.3.3. способом, примененным @SNMar4enko в его версии для ProMini+LCD1602. Он, напомню, применил библиотеку CyberLib.h и профили нумерует в 16-ричном формате, т.е. 12345678ABCDEF. При этом, профили инициализируются при загрузке скетча в плату arduino, сохраняя возможность их редактирования и сохранения новых значений, введённых пользователем.
    Оригинальный скетч крайней (2.0.9) версии, к сожалению, даже после хирургических вмешательств @Dmitrysh, не работоспособен. Причина тому - не нашлось в своё время альфа/бета-тестеров и автор @SNMar4enko покинул форумы на неопределённое время и более не участвует в развитии проекта. Он лишь в основной теме, где проводил разработку, просил всех, кто будет развивать его версию, отражать сделанные изменения в отдельном текстовом файле, рядом с измененным скетчем.
     
    Последнее редактирование: 21 окт 2019
  10. Dmitrysh

    Dmitrysh Гуру

    А что конкретно не работает?
     
  11. SOLOway

    SOLOway Гуру

    Пост #2183
    Я об этом истерил ещё в той теме, и @SNMar4enko не понял меня, ответив:
    Ну, дуркую я, чо ж... :( . Понимаю, что @SNMar4enko сделал замеры температуры функцией, и вызывает, когда надо. И не понимаю, как он связал этот таймер с реальными температурами, которые на том же экране выводятся, рядом. И как он привязал таймер к шагам термопрофилей...
    Сейчас всё выглядит как ДЕМО-режим: старт пайки > вкл. НИ, пошел таймер, дотикал до t*C шага №1 > выкл.НИ, вкл. ВИ... А рядом температуры 25*С по датчикам ВИ и НИ... Как так?!...
     
    Последнее редактирование: 25 окт 2019
  12. Dmitrysh

    Dmitrysh Гуру

    А вы про какой таймер? Там с виду очень даже лихо придумано, но и граблей не меньше. Я попробую исправить и порезать немного переменных. Надо немного времени ,реального железа у меня нет(ардуинка и lcd конечно есть, но нет силовой части), а в протеусе долго моделируется.
    И ещё вопрос, а надо ли 9 шагов в профиле?(это не принципиально, просто может кто использует не по назначению, с какой нибудь интересной целью).
     
  13. Нафаня

    Нафаня Нерд

    Есть силовая часть (низ (9 галогеновых ламп в групах по 3шт) верх(китайская керамика 80*80 450w) могу проверить
     
  14. Dmitrysh

    Dmitrysh Гуру

    Поправленная версия скетча 2.0.9 от snmar4enko. Алгоритм работы такой : при старте пайки запускается низ и по своей термопаре используя рампу идёт до уставки низа, затем включается верх и по рампе отрабатывает профиль верха. При этом низ держит свою уставку. Пока низ не вышел на свою температуру, верх не включается.
    Скетч использует низкочастотный ШИМ(он же фазовое управление) поэтому необходим отдельный детектор нуля для правильной работы.
    Файлом с изменениями дополню чуть позже, пока попробуйте скетч.
    Не забывайте проверять адрес своего LCD!
     

    Вложения:

    Последнее редактирование: 13 мар 2019
    SOLOway нравится это.
  15. Dmitrysh

    Dmitrysh Гуру

    Это не таймер, это рампа. Она нужна, чтобы ПИД не жарил по-полной, а отрабатывал с заданной скоростью. В этом скетче рампа используется не только для ВИ, а и для НИ.
    Да, есть некоторые функциональные косяки, но в целом не плохо. Попробуйте поправленный вариант, я что мог проверить - проверил, но желательно на реальном железе погонять.
     
  16. Dmitrysh

    Dmitrysh Гуру

    Вот версия с 14 профилями по 9 шагов с инициализацией EEPROM и выводом номера профиля в 16-ричном формате.
    Изменения
    -изменил адресацию записи параметров в EEPROM и теперь все профили идут один за другим.
    -добавил переработанную функцию инициализации EEPROM
    -составил карту EEPROM
    Не забывайте, что при первом старте скетча предыдущие настройки в EEPROM будут переписаны на те, что по умолчанию!!!
     

    Вложения:

    • eeprom_MAP.zip
      Размер файла:
      11,3 КБ
      Просмотров:
      361
    • release_1.3.3.ino
      Размер файла:
      52,5 КБ
      Просмотров:
      250
    SOLOway нравится это.
  17. Watashi

    Watashi Гуру

    Предлагаю изменить работу с EEPROM на метод который предоставляет язык с++:
    1. Создать структуру исходных данных (пример release_1.3.3 )
    Код (C++):
    //---секция профиля---//
    struct Profili_t {  // основные поля профиля
    byte currentProfile; //текущий профиль
    byte currentStep; //текущий шаг профиля
    byte profileSteps; //количество шагов профиля
    byte editStep; //номер шага профиля который редактируется в данный момент
    byte rampRateStep[9]; //скорость роста температуры
    byte dwellTimerStep[9]; //установленное время перехода на следующий шаг
    byte temperatureStep[9]; //заданные температуры для шагов профиля ВИ
    };
     
    2. Функция union создает общее поле в ОЗУ с переменной Mode
    Код (C++):
     union {
       byte Mode[];
       Profili_t Prof;
    } u;
    int SizePrrof = sizeof(Profili_t); // длинна поля данных
     
    3. Теперь чтение-запись в EEPROM будет выглядеть так
    Код (C++):

    int Adres;   // начальный адрес записи профилей
    byte NnProf; //  номер профиля
    void loadProfile(byte NnProf) {     //  загрузка текущего профиля
        for (byte j=0; j<=SizePrrof-1; j++) {
           u.Mode[j] = EEPROM.read(Adres+((NnProf-1)*SizePrrof)+j);
          }
    void SaveProfile(byte NnProf) {  //  сохранение текущего профиля
      for (byte j=0; j<=SizePrrof-1; j++) {
        EEPROM.update(Adres+((NnProf-1)*SizePrrof)+j, u.Mode[j]);  // лучше update чем write для сбережения ресурса EEPROM
      }
     
    4. Обращение к переменным профиля такое
    Код (C++):
     u.Prof.rampRateStep[i]; вместо rampRateStep[i];
    При таком подходе не надо думать о каких то смещениях и там где нужно записать параметр в EEPROM делаем вызов подпрограммы SaveProfile(byte NnProf); и все будет ок
    Причем если решите добавить(убавить) параметр в профиль ничего менять в остальной программе больше не надо
    как то так )
     
  18. DetSimen

    DetSimen Guest

    А ты уверен, что у тебя здесь

    union{
    byte Mode[]; ---- здесь
    Profili_t Prof;
    } u;
    int SizePrrof =sizeof(Profili_t);// длинна поля данных


    массив размером sizeof(Profili_t) а не указатель на неведомый байт хрен знает где?
     
    Последнее редактирование модератором: 13 мар 2019
  19. Watashi

    Watashi Гуру

    Уверен, у меня все это работает. Я как то предлагал в посте №1827 уже работающий вариант с такими данными.
     
  20. DetSimen

    DetSimen Guest

    Ну штош, спорить не буду. Няхай.
     
Статус темы:
Закрыта.