Здравствуйте. Нужен регулятор поддерживающий давления мазута с помощью клапана рециркуляции. Управление клапаном дискретное, двумя дискретными выходами (открыть, закрыть). Обратной связи по положению нет.
Для этой задачи (и для будущих подобных) нужен ПИД регулятор. (желательно с мертвой зоной по входу или рассогласованию и ограничением минимального импульса) Из всех что я нашел в разных библиотеках, на форуме все не то. Либо это аналоговые, подходящие для управления частотником или сервоприводом (позиционером). Либо псевдо-аналоговые в которых программа пытается "угадать" реальное положение привода и подогнать его под заданное, но это по моему вообще лажа.
Можно конечно на выход аналогового ПИД посадить ШИМ и управлять выходами, но есть такая проблема. Когда есть рассогласование, ПИД допустим увеличивает выход, когда уставка сравнивается с заданием, выход ПИД замирает, но не 0 и соответственно ШИМ продолжает гнать клапан. Когда значение переваливает уставку выход ПИД начинает уменьшаться, но все еще положительный, и ШИМ продолжает гнать клапан в прежнюю сторону. В общем не то. Если только привязаться к изменению выхода ПИД. Но по-моему то же не очень. Кроме того когда ПИД упрется в край то все пропало.
По моему у ПИД регулятора значение должно соответствовать рассогласованию. Чем больше рассогласование, тем больше значение. Соответственно если рассогласование положительное (Значение больше уставки) то и значение положительное, если рассогласование отрицательное (значение меньше уставки) то и значение отрицательное. Ну или наоборот... Если рассогласование 0, то и на выходе 0. И выход должен меняться в соответствии с коэффициентами ПИД. Я вот парочку нашел подходящих (во вложении), но они ведут себя как простые "отниматоры" с пропорциональным коэффициентом. На остальные коэффициенты никак не реагируют. Я так понимаю зависимость в ПИД должна быть нелинейной, кроме случаев когда коэффициенты И и Д равны 1 (или 0), или меняться с какой-то скоростью.
Или же у ПИД сразу на выходе должны быть дискреты. KZR_DO_Sel из раздела "Для вентиляции" как то непонятно работает.
В итоге хотелось бы получить универсальное решение для данного вопроса и чтоб в будущем использовать в других подобных случаях.