Вторник, 26.11.2024, 14:33
Радиосервис - ИЗМАИЛ

Меню сайта

Статистика
Форма входа
Друзья сайта

Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)

Электроника на KitPost
Поиск
Наш опрос
Оцените мой сайт
1. Отлично
2. Хорошо
3. Неплохо
4. Ужасно
5. Плохо
Всего ответов: 86
Ссылки по uCoz
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    Модератор форума: Alexandr_  
    Инфракрасная паяльная станция своими руками на ARDUINO
    Alexandr_
    Дата: Среда, 08.02.2017, 19:55 | Сообщение # 1        
    Генералиссимус
    Группа: Администраторы
    Сообщений: 814
    Статус: Offline

    Форумчане, куплю-продажу и личные сделки выяснять в личке, либо в новом форуме, этот форум для вопросов по электронной части станции.

    Архив по станции от hominidae с проектом efimsu ->здесь
    Проект Леонида, Leonid0071 "UNO-MAX6675-PC" и его доработки на форуме Амперки -> скачать

    Люби грешников, ненавидь сам грех!
     

    mon
    Дата: Воскресенье, 15.04.2018, 19:53 | Сообщение # 76        
    Подполковник
    Группа: Модераторы
    Сообщений: 191
    Статус: Offline

    snmar4enko, Мне не совсем понятна логика применения moc3063 который и так имеет контроль ноля,вот если поставить из серии без этого контроля ноля,тогда да,вы развязываете себе руки можете запилить фазовое или сигма-дельта с выкусыванием фаз или полуфаз, легко переключаясь в настройках между всеми вариантами.
    У атмела есть аппноут AVR221_PID,там есть пример для понимания
    Цитата snmar4enko ()
    когда опрос ПИД приближается к 100 разам в секунду
    В вашей программе я не увидел регулировку времени опроса ПИД,Функция внутри if (reflowStatus == REFLOW_STATUS_ON) и проверяется лишь станус как я понял включения работы и функция ПИД крутится внутри loop на частоте осциллятора.
     

    Cinema
    Дата: Воскресенье, 15.04.2018, 20:22 | Сообщение # 77        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Есть оптосимисторы без ZCC - это MOC3021, MOC3051. Они для фазового управления подходят.
    Как у LDZ работает ПИД? - там есть и ограничение мощности и нуль схемой не отлавливается...
    Думается, mon может объяснить, что не так с использованием диммирования совместно с ПИД в обсуждаемом нами скетче. Я пока не могу переварить :(.
    Я вполне успешно использовал первую схему Krievs с Еспец: 4 керамических ТЭНа по 500Вт, дешевый промышленный PID-контроллер REX-C100 с двумя функциями Alarm + SSR DA-AC + китайский симисторный диммер на 3800W, управляющий мощностью ВИ на 600Вт из кварцевых трубок + китайский электронный термометр с термопарой. ПИД управляет только преднагревателем (НИ) (уставка 170*С, датчик НИ под платой у её края), по достижении 150*С снизу платы, подключается по AL1 доп. резистор к диммеру, что дает ~30% на ВИ, по достижении уставки, по AL2 подключается к диммеру ещё доп. резистор, давая на ВИ ~55%. По термометру ждал у чипа ~190*C для свинца и вырубал НИ и ВИ. Пайка закончена. При демонтаже - просто убирал НИ в сторону. Иногда вручную на ~1/2 минуты отключал ПИД от SSR, чтоб дать плате лучше поглотить тепло...

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    snmar4enko
    Дата: Воскресенье, 15.04.2018, 20:38 | Сообщение # 78        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата mon ()
    Мне не совсем понятна логика применения moc3063 который и так имеет контроль ноля
    - Как оказалось я не совсем понимал как работает контроль нуля, хотя и читал даташиты до того как купить  moc3063. Оказывается она работает так же как и SSR реле с контролем нуля. А именно если если подан сигнал включения то со следующего перехода через ноль включается и остается включенным до следующего перехода через ноль. Для этого пришлось почти пол дня просидеть с осциллографом тестирую работу версии 2.0.0

    Посему переписал регулировки под SSR или moc3063, может даже для эксперимента и назвал 1.4.0 
    Убрал прерывания и освободил 2 вывод детектор нуля. Поменял PID коэффициенты.

    В плане программы - она не моя - а общая. И время опроса PID расчетно-теоретическое.

    Добавлено (15.04.2018, 20:38)
    ---------------------------------------------

    Цитата Cinema ()
    Есть оптосимисторы без ZCC - это MOC3021, MOC3051.
    Уже заказал - если ничего не изменится в среду четверг приедут.

    Если у вас такие стоят то тестируйте версию 2.0.0

    Встречались даже промышленные станции на REX-C100 и PС410 - но мы общими силами уже почти написали код который делает тоже самое ....
    Прикрепления: 4387233.rar (8.4 Kb)


    Сообщение отредактировал snmar4enko - Воскресенье, 15.04.2018, 20:30
     

    mon
    Дата: Воскресенье, 15.04.2018, 21:17 | Сообщение # 79        
    Подполковник
    Группа: Модераторы
    Сообщений: 191
    Статус: Offline

    Цитата snmar4enko ()
    И время опроса PID расчетно-теоретическое
    Заведите таймер ,а в нем выставляйте флаг события опроса самой функции ПИД,в реальности нужно опрашивать от 100 -2000ms,не зачем так быстро молотить ее в цикле.
    И ещё чтобы была возможностью задавать этот параметр из меню,тогда можно избавится от деления переменной c плавающей запятой (kp1/100...) для слабых МК без аппаратного деления отнимает много процессорного времени.Так же можно избавится в функции ПИД от float и привести к u16 ну или u32 ,расширить диапазон регулировки воздействия на нагреватель с шагом от 0-1000,если сделайте фазовую регулировку,тогда избавитесь от мерцания касательно  галагенок, да и вообще предпочтительно именно сигма-дельта, чем просто шимом как попало рубить фазы в узком диапазоне.
     

    snmar4enko
    Дата: Понедельник, 16.04.2018, 10:47 | Сообщение # 80        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата mon ()
    И время опроса PID расчетно-теоретическоеЗаведите таймер ,а в нем выставляйте флаг события опроса самой функции ПИД,в реальности нужно опрашивать от 100 -2000ms,не зачем так быстро молотить ее в цикле.

    Зачем еще таймеры - их и так достаточно для ШИМ и прочего (скорость роста температуры, задержки кнопок, звуков, пауз перед переходим на следующий шаг .....

    Время опроса задается самоходом в loop цикле.

    Цитата mon ()
    Так же можно избавится в функции ПИД от float

    На самом деле 4 байта одна переменная .... и это обусловлено точностью расчета выходного значения PID и чтобы поменять нужно переписывать библиотеку.
    Код
    double Setpoint1, Input1;
    double Output1=0;

    Цитата mon ()
    расширить диапазон регулировки воздействия на нагреватель с шагом от 0-1000
    Для экспериментальной версии 1.4.0 где используется встроенный в ключ детектор нуля это не к чему, так как ШИМ работает с периодом 1 секунда а изменения параметра увеличит скорость опроса PID. А от для новой ветки 2.0.0 - хорошая идея.

    Тестил версию 1.4.0 : общим петля PID регулирования не разрывается даже при Kp=25.5 Ki=2.5 Kd=0.4 Температура измеренная немного отстает от заданной

    Добавлено (16.04.2018, 10:47)
    ---------------------------------------------
    На Ардуино ИДЕ программирую только пару месяцев, вопрос к более опытным :

    Как переназначить Byte массив десятичными значениями от 0 до 255 ? Возможно ли такое?

    Сообщение отредактировал snmar4enko - Понедельник, 16.04.2018, 07:20
     

    snmar4enko
    Дата: Понедельник, 16.04.2018, 19:48 | Сообщение # 81        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Новая версия для силовой части с детектором нуля и отсутствием введения сетевой синхронизации в контролер на D2.
    скетч ARDUINO_REWORK_1.4.1

    Ввел таймер опроса PID - раз в 200 мкс, период ШИМ тоже сделал таким.
    Снова расширил значения коэффициентов ПИД от 0 до 255 
    Поменял их умолчания - как в контролере от LDZ. Необходимо произвести инициализацию памяти по 8 секундном удержанию клавиши Cancel.

    при установке PID коэффициентов учитывайте что время ПИД в 2 раза больше чем номинального, соответсвенно удваивается Ki и половинется Kd. Также 200 мкс период ШИМ регулятор включается при переходе через ноль - то есть раз в 10 мкс - получается только 20 значений для 100% мощности, все коеффицинты деляться вроде бы на 10. До конца не могу доанализировать ..... сори
    Прикрепления: 3751408.rar (8.4 Kb)
     

    snmar4enko
    Дата: Понедельник, 16.04.2018, 20:15 | Сообщение # 82        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    в догонку еще одна версия 1.4.2

    в станции от LDZ есть еще параметр Tpid (10-30) - период ПИД - по умолчанию 10. Не знаю что фактически делает так как исходников никто не оглашал но догадываюсь что тот самый множитель увеличение времени 
    интегрирования - дифиринцирования и вообще вычисления ПИД.
    В пошлой версии он 2. 
    В этой сделал 10. При установке коэффициентов учитывайте что 10*Ki и Kd/10. с мощностью 1 к 1.
    Хотя опоздание за установленной температурой увеличилось и недолет к цели.
    Прикрепления: 8849947.rar (8.4 Kb)
     

    Cinema
    Дата: Вторник, 17.04.2018, 09:16 | Сообщение # 83        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    snmar4enko что думаете по поводу:

    
    Цитата
    Dmitrysh
    Нашел небольшой косячок в скетче "sketch_TFT-320x480_dimer_V3-2". Есть такая функция "loadProfile()", которая читает параметры профилей из eprom. Так вот эта функция располагается в основном цикле программы - loop, т.е когда мы находимся в основном меню происходит постоянное считывание
    профилей из eprom(около 26 параметров). В этом нет никакого смысла.
    Такого быть не должно. Дело в том что обращение к eprom это процесс
    достаточно медленный, а быстродействие у ардуины не такое уже и высокое,
    чтобы нам тратить его на ненужную никому работу. Поэтому я предлагаю
    перенести обращение к функции "loadProfile()" из основного цикла loop в подпрограмму setup.

    взято отсюда:
    

    P.S.: Там, кстати, еще на 29-ой страничке Aleksander1997 свои изыскания показывал.
    ...а интересно, насколько все-таки возможна корректная работа без отслеживания нуля микроконтроллером, если тэнами будут рулить SSR с ZCC?

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    snmar4enko
    Дата: Вторник, 17.04.2018, 13:59 | Сообщение # 84        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата Cinema ()
    читает параметры профилей из eprom.
    -  у нас тоже настройки читает из Eeprom в loop цикле. Переключать профили в IDLE режиме простоя думаете возможно без считывания их вроде бы 29 значенией из Eeprom. Loop  цикл крутится - но его можно заворачивать куда хотим. Это зависит от режима работы который мы включили. Выбирается по Case. Быстродействия пока хватает. Особенно если тэнами будут рулить SSR с ZCC. По поводу отсутствия контроля нуля процессором версии 1.4.0 - 1.4.2 - без него. Его вводят чтобы не было помех. Но так как контроль есть в MOSах то помех если демпферная цепочка в схеме есть то не будет. В принципе заводит сигнал детектора нуля в процессор можно но только для подсчета импульсов .... с чем неплохо справляется таймер. Анализируя работу получаем что для версии 1.4.2 как бы не хватает значений коэффициентов PID. Мощность 0-100 полноценно просчитывается. Версия 1.4.1 более точно регулирует температуры хотя мощность регулируется 0-20. Вот и думай что важней шкала мощности или правильные ПИД коэффициенты.  Посмотри в сторону параллельного форума LDZ. Тоже нет сетевой синхронизации в процессор и управляет SSR с ZCC, хотя на некоторых силовых схемах  SSR без ZCC. Можно было и попробывать на Ардуинке - зашить поверх загрузщика, подпаяться вычислив аналоги выводов по назначению вывод проца и аналогах ардуино. Термодатчики не паять а подстрочники средним выводм на сигнал краями земля и +5в. Но еще кварц на 8 мгц перепаять .....

    В sketch_TFT-320x480_dimer корни как у нашего проекта, только экран покруче и ардуина подороже так как код уже не влезает в 32 метра.На днях нашел наш общий исходник на иностранном сайте https://www.mediafire.com/file/bzwf2g26chdg36t/Arduino+Rework+Station.rar
    - глюков в нем ого-го, начиная что с первого шага включаются оба нагревателя ....

    У нас проект открытый ..... и подглядывать у других не всегда получается. Если есть только нех-код то дизассемблерование занимает много времени, особенно меткометание и комментирование по разбору кода.


    Сообщение отредактировал snmar4enko - Вторник, 17.04.2018, 14:05
     

    snmar4enko
    Дата: Среда, 18.04.2018, 18:32 | Сообщение # 85        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Проводил эксперименты нагревая снизу керамическим инфракрасным нагревателем 450вт 8*8см на 220 вольт (что купил для верха). Коэффициенты PID зависят от расстояния размещения  платы от нижнего нагревателя. Уменьшил расстояние с 3 см (как рекомендовано) до 1.5см. Нижний термодатчик размещаю под платой не прижимая. Вылет температур низа есть 154 - 145 градусов. Верхний термодатчик сверху платы - прижат собственным весом сбоку от выпаиваемого чипа. нагрев показывает 83-90 градусов при нагреве низа до 150 градусов. Так что верх даже не включается - у нас он начинает работать при 10 градусах до температуры максимума низа но измеренный верхним термометром.

    Версия 1.4.3 включается верх за 70 градусов до низа.

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

    Да и металлический кожух вокруг нагревателя тоже сильно нагревается.

    И нужно вентилятор включать в конце процесса пайки -  охлаждаются очень медленно
    Прикрепления: 6676960.rar (8.4 Kb)


    Сообщение отредактировал snmar4enko - Среда, 18.04.2018, 18:37
     

    Cinema
    Дата: Четверг, 19.04.2018, 11:16 | Сообщение # 86        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    snmar4enko посмотрите:


    Наблюдаю у тех, кто использует ACHI IRxxxx -подобные станции, или отдельные термостолы с подручной термовоздушкой вместо ВИ, что НИ таки используется как электроплитка с поддержанием температуры. Т.е. задали низу (или термостолу) уставку в 270-360*С, закрепили над ним в холдере плату (или на стойки установили) и нажали START. Через какое-то время плата нагреется, примерно до 100-160*С (разными платами температуры и время будут разными). Далее или станция включит отработку профиля верхом (термопара там у чипа завязана только на верхний ПИД), или мастер начинает работать феном.
    Для сокращения времени преднагрева, и (что важно!) для сокращения времени нахождения платы под высокими температурами иногда станции начинают отработку термопрофиля только после достижения поверхностью нагревателей НИ температуры 60-70*С.

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    Cinema
    Дата: Четверг, 19.04.2018, 13:13 | Сообщение # 87        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    А если попробовать не использовать ПИД, но применять расчет мощности и привязать профиль к условиям типа указанных в прикрепленном файлике?
    Прикрепления: 0229430.zip (8.1 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    snmar4enko
    Дата: Пятница, 20.04.2018, 17:01 | Сообщение # 88        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата Cinema ()
    А если попробовать не использовать ПИД
    Тогда нужно полностью переписать код регулировки а это долговато .....

    Общим перепаял MOS3063 на  MOS3023 - получил регулятор с фазовой модуляцией .... вернулся к ветке 2.0.*. Соответственно вернул вход нуля синхронизации на D2. Для удобства необходимо добавить 2 светодиода последовательно в цепочку управления оптопарой для визуального контроль подводимой мощности по яркости светодиода. Резистор получается 200ом.  А пока на скорости 9600 мощности летят в комп по UART. 0- максимум, 200- минимум, 216- полностью отключен. Когда отстроите ПИД и т д то закоментируете.

    Ввел период опроса ПИД 0.1 секунду, убрал мерцание при настройке Температуры нижнего нагревания. Увеличил шкалу мощности до 0.5 процента. Заморозил фиксацию температуры в начале шага по показаниям датчика верхнего нагревателя - один раз в начале (раннее если нагрев шел быстрее то пере фиксировалась). При инициализации памяти после ее стирания должен быть ресет - не всегда срабатывает - 2 варианта прописал - выбираете какой у вас работает.

    Когда используем инерционный нагреватель (такой как утюг  или плитка, или инфракрасные нагреватели как у 
    Цитата Cinema ()
    кто использует ACHI IRxxxx
    то даже 2% ограничение мощности - все одно делает перелет на 7-15 градусов даже если термодатчик напрямую касается к нагревателю. Получается что аналогичные проблемы на версиях 1.4.* не из - регулятора твердотельного реле.

    Возможно что нужно перевести нагреватель четверть мощности путем включения нижнего нагревателя на нечетных полуволнах , а верхнего на четных ведь мощностей 1800вт низа и 450вт верха все равно достаточно ......

    Итак скетч 2.0.1

    Добавлено (20.04.2018, 17:01)
    ---------------------------------------------
    PID адаптивная регулировка: изменение коэффициентов PID в примере в 4 раза!!!!!

    

    Код
    #include <PID_v1.h>

    #define PIN_INPUT 0
    #define PIN_OUTPUT 3

    //Define Variables we'll be connecting to
    double Setpoint, Input, Output;

    //Define the aggressive and conservative Tuning Parameters
    double aggKp=4, aggKi=0.2, aggKd=1; //при разности измеренного и заданного  10 и более 
    double consKp=1, consKi=0.05, consKd=0.25; // при небольшой разности - фактически в 4 раза меньшие коэфф.

    //Specify the links and initial tuning parameters
    PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);

    void setup()
    {
      //initialize the variables we're linked to
      Input = analogRead(PIN_INPUT);
      Setpoint = 100;

      //turn the PID on
      myPID.SetMode(AUTOMATIC);
    }

    void loop()
    {
      Input = analogRead(PIN_INPUT);

      double gap = abs(Setpoint-Input); //distance away from setpoint
      if (gap < 10)
      {  //we're close to setpoint, use conservative tuning parameters
        myPID.SetTunings(consKp, consKi, consKd);
      }
      else
      {
         //we're far from setpoint, use aggressive tuning parameters
         myPID.SetTunings(aggKp, aggKi, aggKd);
      }

      myPID.Compute();
      analogWrite(PIN_OUTPUT, Output);
    }
    Прикрепления: 6345998.rar (8.7 Kb)


    Сообщение отредактировал snmar4enko - Пятница, 20.04.2018, 15:17
     

    mon
    Дата: Пятница, 20.04.2018, 22:01 | Сообщение # 89        
    Подполковник
    Группа: Модераторы
    Сообщений: 191
    Статус: Offline

    snmar4enko,  А каким образом считается температура? и как она влияет на термопрофиль?
      Я вижу в коде некое условие:
    
    которое опять же вызывается внутри loop и окружено кучей всяких функций с большой задержкой,для себя я вижу только один вариант,вызывать ее точно по времени(а это только в прерывании по таймеру) и сравнивать там разницу температур.
    Цитата snmar4enko ()
    Увеличил шкалу мощности до 0.5 процента
    Вы имели ввиду уменьшили шаг?
        Опять же вернёмся к ПИДу,в коде  подсовывается текущая температура и заданная и естественно он стремится ее стабилизировать,и вы естественно будете наблюдать замедление в момент достижения заданной температуры на текущем шаге,таким образом вы получаете волнообразный профиль,а вам он не нужен поэтому вы стремитесь дестабилизировать систему,попросту расшатать, путем диких для неё коэффициентов и в целом,
    вроде бы будет работать,но стоит изменить температуру окружающей среды,вы опять получите полную кашу в работе.
      В функции ПИД вы работаете с double и что возвращает эта функция? правильно double,а потом суете ее в DimmerUP=201-Output1; Допустим Output1 == 1.122 или 1.925  ,что будет в uint8_t DimmerUP ? конечно же целое число причем одно и тоже ,а как же 0.122 , 0.925 над которыми так пыхтит ПИД? в тысячи ненужных тактов ? всё испарились...выделение уйму процессорного времени в пустую,вот вам и 4-е байта + флешь под завязку.
      Или это double kp1;а потом работаете как с целым числом        
           kp1 = kp1 + 1;
            if (kp1 >= 255)
            {
              kp1 = 255;
            }
          Думается лишним не будет:
      http://microsin.net/program....vr.html
      http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR035.htm
     

    snmar4enko
    Дата: Пятница, 20.04.2018, 23:04 | Сообщение # 90        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата mon ()
    А каким образом считается температура?
    Температура не считается а меряется, с датчика через фильтр.
    Цитата mon ()
    Код
    //счётчик скорости роста температуры                  
          if ((currentMillis - previousMillis) > 4000 / rampRateStep[currentStep - 1])  //seconds counter
           {
            previousMillis = currentMillis;
            counter = counter + 1;
            setpointRamp = counter + startTemp;
            lcd.setCursor(7, 0);
            lcd.print("   ");       
            lcd.setCursor(7, 0);
            lcd.print(setpointRamp);
            lcd.write(byte(0));
            
            if (setpointRamp<100) {
            lcd.print(" ");
            }
    На этом 2м этапе пайки просчитывается  период времени за который задаваемая про профилю температура растает на 1 градус. Сама температура термопрофиля тоже вычисляется начиная с температуры старта, добавляется по 1 градусу до температуры цели (Target) и отображается на экране посредине верхняя строчка. Эта цифра как бы  прототип к которому ПИД будет стремится поднять реальную температуру нагрева.
    Цитата mon ()
    Увеличил шкалу мощности до 0.5 процентаВы имели ввиду уменьшили шаг?
    Да . 100% мощности это теперь от 0 до 200 шкала - то есть 0.5% деление
    Цитата mon ()
    Опять же вернёмся к ПИДу,в коде  подсовывается текущая температура и заданная и естественно он стремится ее стабилизировать,и вы естественно будете наблюдать замедление в момент достижения заданной температуры на текущем шаге,таким образом вы получаете волнообразный профиль,а вам он не нужен поэтому вы стремитесь дестабилизировать систему,попросту расшатать, путем диких для неё коэффициентов и в целом,вроде бы будет работать,но стоит изменить температуру окружающей среды,вы опять получите полную кашу в работе.
    В функции ПИД вы работаете с double и что возвращает эта функция? правильно double,а потом суете ее в DimmerUP=201-Output1; Допустим Output1 == 1.122 или 1.925  ,что будет в uint8_t DimmerUP ? конечно же целое число причем одно и тоже ,а как же 0.122 , 0.925 над которыми так пыхтит ПИД? в тысячи ненужных тактов ? всё испарились...выделение уйму процессорного времени в пустую,вот вам и 4-е байта + флешь под завязку.
    Или это double kp1;а потом работаете как с целым числом
    kp1 = kp1 + 1;
    if (kp1 >= 255)
    {
    kp1 = 255;
    }
    Думается лишним не будет:
    Я уже ранее объяснял, что double требует библиотека PID регулятора, а коэффициенты  и переменные    необходимо записывать в память EEPROM где можно записать только байт 0-255.
    DimmerUP=201-Output1 - Так как использую фазовую модуляцию в регуляторе то необходимо переворачивать значение .....работает. Если знаете как сделать по другому подскажите.

    В скетче 2.0.1 обнаружил что регулятор низа ложно срабатывает - включается на весь период если импульс не успел выключится с прошлого периода. Также есть ложные срабатывания верхнего нагреватя в выключенном состоянии. Пока не знаю что с ними делать, так как вспышки на 1 период раз в 30 секунд.

    Также поменял мошности, коэффицинты  ......

    В регулятор мощности ввел четность , в одну полуволну включается низ, в другую - если верх включен то включается верх.
    Изменил условие включения верха.

    Скетч версии 2.0.2

    Оптимизация - я за - тем более что после ввода библиотеки 
    #include <CyberLib.h> //Библиотека от Cyber-Place.ru
    есть возможность много чего в стиле ассемблера переписать ....
    Прикрепления: 0785808.rar (8.9 Kb)


    Сообщение отредактировал snmar4enko - Пятница, 20.04.2018, 23:12
     

    Поиск: