Блок для PID регулятора
Расчет мощности идет по формуле PWR = Kp*E(t)+сумма(E(t)/Ki), где
E(t) -рассогласование (уставка - вход),
Kp,Ki - коэфф ПИ.
Параметры блока:
period - период ПИ и ШИМ в милисекундах
Входы блока:
Value - входная величина
Set - уставка
Kp - коэффициент пропорциональной составляющей >= 0
Ki - коэффициент интегральной составляющей > 0
Выходы блока:
PWR - выходная мощность 0..1000 (0..+100,0%)
pwm - ШИМ на нагреватель
Регулятор может управлять нагревателем (ТЭН).
Автор: Boroda.
Блок для фазового регулятора
Блок фазового регулятора.
Дата создания: 12.2016г.
*****************************************************************
Используется Timer2, поэтому этот блок нельзя использовать в схемах, где также используется этот таймер, например для формирования ШИМ с выводов 3 и 11 в Arduino Uno или Nano.
-------------------------------------------------------------------
Краткий алгоритм работы блока:
- при наступлении внешнего прерывания от детектора нуля синусоиды отключается выход на симмистор и начинается отсчёт времени паузы (значение со входа "Value", в условных единицах), по истечении которой произойдёт прерывание от переполнения таймера
- в момент прерывания от таймера (окончания паузы), включается выход на симмистор и он остаётся открытым (включенным) до конца полупериода сети, т.е. до возникновения прерывания от детектора нуля синусоиды
- далее всё повторяется "по кругу"
--------------------------------------------------------------------
Вход "Value" - задаёт уровень мощности.
Значения можно задавать от 0 до 255 (byte). 0 - минимальная, 255 - максимальная мощность.
При "Value" = 0 - выход на симмистор постоянно отключен, внешнее прерывание и прерывание от переполнения таймера запрещены,
при "Value" = 255 - выход на симмистор постоянно включен, внешнее прерывание и прерывание от переполнения таймера запрещены.
В реальности блок имеет около 156 (точнее будет равно 255 - "Val_Zero") значений градации мощности.
Для приведения к более удобному заданию значения уровня мощности использованно "внутреннее" масштабирование с "Val_Zero"...255 к 0...255 (без применения Long-чисел и операции деления, в отличии от стандартного пользовательского блока "Scale").
--------------------------------------------------------------------
Вход "Val_Zero" - корректировка "нулевого" значения мощности.
Обычно это значение равно 99 (byte), но возможно понадобиться эксперементальный подбор в небольших пределах этого значения для устранения мерцания лампы или "дёргания" двигателя при минимальных значениях на входе "Level" (кроме нуля, т.к. при нуле - выход на симмистор постоянно отключен).
***************************************************************************
--------------------------------------------------------------------
Параметры "N_Int" - номер внешнего прерывания и "Pin_Int" - номер ножки Arduino, к которому подключен детектор "нуля синусоиды":
Эти параметры необходимо менять совместно.
Прерывание Int0:
N_Int = 0 / Pin_Int = 2 - для Diecimila, Duemilanove, Nano, Pro, Uno и Mega2560
N_Int = 0 / Pin_Int = 3 - для Leonardo и Micro
Прерывание Int1:
N_Int = 1 / Pin_Int = 3 - для Diecimila, Duemilanove, Nano, Pro, Uno и Mega2560
N_Int = 1 / Pin_Int = 2 - для Leonardo и Micro
Прерывание Int2:
N_Int = 2 / Pin_Int = 0 - для Leonardo и Micro
N_Int = 2 / Pin_Int = 21 - для Mega2560
Прерывание Int3:
N_Int = 3 / Pin_Int = 1 - для Leonardo и Micro
N_Int = 3 / Pin_Int = 20 - для Mega2560
Прерывание Int4:
N_Int = 4 / Pin_Int = 7 - для Leonardo и Micro
N_Int = 4 / Pin_Int = 19 - для Mega2560
Прерывание Int5:
N_Int = 5 / Pin_Int = 18 - для Mega2560
--------------------------------------------------------------------
Параметр "Mode_Int" - режим возникновения внешнего прерывания от детектора "нуля синусоиды"
"False" = FALLING прерывание возникает при переходе с лог. 1 на 0
"True" = RISING прерывание возникает при переходе с лог. 0 на 1
--------------------------------------------------------------------
Параметр "R_Inpt" - "подтягивающий" резистор на входе с прерыванием
"False"- не подключен,
"True" - подключен
--------------------------------------------------------------------
Параметр "Pin_Out" - № ножки Arduino, которая подключенна в цепь управления коммутации нагрузки
--------------------------------------------------------------------
Параметр "Invert_Out" инвертирует состояние выхода "Pin_Out"
Например, если выход Arduino подключен к Аноду оптосиммистора, а Катод оптосиммистора к Gnd, то "Invert_Out" = False.
Если Анод оптосиммистора подключен к +Vdd, а Катод к выходу Arduino, то "Invert_Out" = True.