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

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

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

    revolover Гик

    И еще, чтобы себе жизнь не усложнять - сначала можно просто через монитор порта глянуть какие данные и как идут в порт. эдакая отладка)
     
  2. SOLOway

    SOLOway Гуру

    revolover Спасибо. Запустил мониторинг.
    Нужно было кроме указанного вами, объявить ещё такую строчку:
    Код (C++):
    double Secs, prev_millis=0; //это для графиков на ПК
    Угу :) Тоже посмотрел, просто и понятно!

    Вопрос ко всем:
    Возникли непонятки с eeprom: Я запустил скетч из поста #1718, раскомментировав строчки:
    Код (C++):
        for (int i = 0; i < 1024; i++)
        EEPROM.write(i, 1);
    единички прописались. А затем закомментировал обратно те строчки и снова вгрузил скетч. Итог - вместо значений по умолчанию, прописанных в скетче, получил везде те самые единички. Последующие заливки приводили точно к таким же результатам. Вернуть в исходное состояние помог скетч 209 от snmar4enko. Значит в скетче из поста #1718 недоработана функция записи в eeprom начальных значений. Как это поправить? У snmar4enko есть блок:
    Код (C++):
    void initEeprom() //Запись в память начальных значений
    {
      if (EEPROM.read(500) == 'C')
      {
        //что-то только для уже инициализированой памяти
      }
      else {
        //профиль: шаги, температура низа, 9 скоростей роста температуры шага умноженое на 4
        static byte rom1[] = {3, 150, 4, 2, 4, 4, 4, 4, 4, 4, 4,
                              //9 продолжительностей шага
                              5, 5, 15, 1, 1, 1, 1, 1, 1,
                              //температуры верхнего нагревателя по 9 шагам
                              150, 180, 190, 190, 205, 210, 215, 220
                             };

        for (uint8_t j = 0; j < 14; j++) {

          for (uint8_t i = 0; i < 29; i++) {
            if (i == 22)            {
              EEPROM.write((29 * j) + i, (j * 5) + 190);
            }
            else                  {
              EEPROM.write((29 * j) + i, rom1[i]);
            }
            if ((i == 21) && (j > 6)) {
              EEPROM.write((29 * j) + i, 220);
            }
          }
        }

        static byte rom2[] = {
          //PID верха, Kp умноженый на 100, Ki и Kd умноженые на 10
          55, 7, 30,
          //PID низа, Kp умноженый на 100, Ki и Kd умноженые на 10
          63, 3, 30,
          //ограничение мощности верха и низа в процентах умноженное на 2
          80, 170
        };
        for (int i = 480; i < 488; i++) EEPROM.write(i, rom2[i - 480]);

        //Записываем метку CFG о том что в памяти уже есть значения
        EEPROM.write(500, 'C');
      }

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("EEPROM");
      lcd.setCursor(0, 1);

      for (uint8_t i = 0; i < 11; i++) {
        lcd.print(".");
        delay(150);
      }
    }

    void sReset() {
      asm volatile ("jmp 0");
    }
     
  3. revolover

    revolover Гик

    Ну это Вам компилятор всегда подскажет ;)
     
    SOLOway нравится это.
  4. mrzevs

    mrzevs Нерд

    Притащил домой с работы осциллограф). Посмотрел выход с обоих плат детектора. Теперь у меня вопрос, как правильно посмотреть синус в сети, чтобы не спалить осла? Делитель 10:1.
    Питание ардуинка получает от китайского БП (вилка) 9в.
     

    Вложения:

    Последнее редактирование: 29 авг 2018
  5. Dmitrysh

    Dmitrysh Гуру

    например, можно взять синус с отдельного трансформатора
     
  6. Dmitrysh

    Dmitrysh Гуру

    А там вообще нет функции записи начальных значений. Проходите настройку параметров и в самом конце происходит запись в eeprom заданных вами значений.
    Вот это и есть функция записи начальных значений, но в скетче из #1718 такого нет.
    Есть другой вопрос. Зачем в этом скетче переменная Input_f1 и Input_f2?
     
    Последнее редактирование: 29 авг 2018
  7. revolover

    revolover Гик

    Я так понимаю, что это мои)))
    Когда я выкладывал скетч - писал, что там много лишнего, не красивого и нелогичного)
    Если память не изменяет, пришлось тогда эти промежуточные поставить, чтоб данные в порт пошли, что-то с типами данных вроде было не то. Разбираться было некогда и вот так прокатило быстро, просто и не красиво. Сейчас вдвойне некогда разбираться(((
     
  8. revolover

    revolover Гик

    А смещения синуса не будет через транс?
     
  9. mrzevs

    mrzevs Нерд

    Подключил через понижающий трансф (28в) 1 канал. Как мне кажется смещение небольшое есть. Прошу гуру проанализировать. Первая плата (1_1, 1_2), вторая плата (2_1, 2_2).
     

    Вложения:

    • 1_1.jpg
      1_1.jpg
      Размер файла:
      195,9 КБ
      Просмотров:
      428
    • 1_2.jpg
      1_2.jpg
      Размер файла:
      189,3 КБ
      Просмотров:
      448
    • 2_1.jpg
      2_1.jpg
      Размер файла:
      245,7 КБ
      Просмотров:
      450
    • 2_2.jpg
      2_2.jpg
      Размер файла:
      229,6 КБ
      Просмотров:
      433
  10. Dmitrysh

    Dmitrysh Гуру

    Переменные ваши, но в скетче под mega2560 терпимо, а в mega328 расточительно. Есть Input1 и Input2 их и достаточно.
    А у вас рост температуры правильно считает? У меня что-то бред выводит, хотя код как-бы правильный.
     
  11. Dmitrysh

    Dmitrysh Гуру

    Не должно быть, как мне кажется. Там индуктивность.
     
  12. revolover

    revolover Гик

    Согласен, но у меня mega2560 )))
    Рост правильно, скачкообразно из-за шумов, но правильно.
    Не под рукой пк с моим скетчем, может эти переменные использовались в расчетах скорости, а вы их заменили на Input1 ...?)
     
  13. Dmitrysh

    Dmitrysh Гуру

    С виду всё правильно. Смещение должно быть. Только почему оно у вас в плюс относительно времени t=0
     
  14. Dmitrysh

    Dmitrysh Гуру

    Ну я немного по-другому переписал, похоже что я где-то ошибся, потому как ваш код однозначно правильный, там по другому и быть не должно. Буду пробовать править.
     
  15. revolover

    revolover Гик

    В общем, переменная input1 типа double не шла в порт или округлялась как-то, а input_f1 типа float - без проблем. точно сказать не могу, наверняка есть более рациональное решение.
     
  16. SOLOway

    SOLOway Гуру

    Может иногда помочь переподключение (перефазировка) обмотки к сети или к осциллографу, у себя замечал, и CLON2 про трансформатор замечание сделал.
     
    Dmitrysh нравится это.
  17. Dmitrysh

    Dmitrysh Гуру

    Возможно. Я вообще что хотел сказать, желательно чтобы импульс с zcc приходил несколько раньше реального нуля, для того чтобы процессор успел в прерывании выполнить набор команд и не пропустить начальную часть полупериода, чтобы не включить следующий полупериод. Сложновато на пальцах объяснить.
     
  18. revolover

    revolover Гик

    Лучше осликом потыкать уже после ssd... И сравнить с импульсами с МК. И проверить, открывается ли всегда, когда необходимо, и не цепляет ли следующий полупериод....
     
    SOLOway и Dmitrysh нравится это.
  19. Dmitrysh

    Dmitrysh Гуру

    У кого-нибудь есть мысли, почему переменные Setpoint1 и Setpoint2 типа double? Мне кажется там и byte за глаза.
     
  20. CLON2

    CLON2 Нерд

    Подключать нужно через трансформатор 220/220 саму исследуемую силовую схему или сам осциллограф, т.к. общий провод осциллографа сидит на одном из проводов питания (если он конечно не на батарейках) и в зависимости от того какой стороной вилка в розетке то на "крокодил" приходит или N или фаза. А если подключать измерительный канал через трансформатор (как я понял из вашего поста) то из за индуктивности будет смещение показаний во времени да и сигнал подгуляет... Импульс уже на симисторе должен "поджигать" симистор когда через управляющую цепь начинает течь ток, достаточный для его открытия, т.е после перехода через ноль начинает расти напряжение и если есть цепь через МОС (подан импульс от ардуины) т.е. на максимальном угле его открытия симистора. Но это для МОС типа МОС3023 без схемы определения 0, а если МОС 3063 то импульс с ардуины может быть и в конце предыдущего полупериода (да хоть в середине ), схема определения 0 внутри МОС "подожгет" его "автоматически" как раз в начале полупериода как только ток через упр.электрод будет достаточный для его открытия .

    Сам пользую трансформатор от старого черно-белого лампового телевизора типа ТС-180 скоммутировав перемычками вторичку на 220В.
     
    Последнее редактирование: 30 авг 2018
Статус темы:
Закрыта.