Алгоритм драйвера дизельного генератораC++

Программы на C++. Форум разработчиков
Anonymous
Алгоритм драйвера дизельного генератора

Сообщение Anonymous »

У меня старый дизельный генератор, и у меня большие проблемы с программированием регулятора.
Мне нужно, чтобы двигатель оставался на частоте 2400-2800 об/мин.

У меня мощный радиоуправляемый автомобильный сервопривод, который толкает рычаг газа двигателя, и сервопривод перемещается между 22° (минимум) и 95° (максимум) впрыска топлива.

Я езжу на нем с помощью Микроконтроллер Atmel meg 328.
Скорость измеряется с помощью датчика Хэла и одного магнита на маховике. Я измеряю время, необходимое для полного оборота, и на основе этого рассчитываю обороты (это значит, что чем быстрее двигатель, тем чаще код на него реагирует => Быстрее изменяется количество впрыска)

Сначала я попробовал самый простой и глупый способ. Если обороты больше, чем мне нужно, отведите сервопривод назад => Уменьшите количество впрыска топлива. Если число оборотов в минуту было ниже необходимого, переведите сервопривод вперед.
Это оказалось очень плохой идеей, поскольку двигатель имеет большую задержку, поэтому My RPM записывает идеальный синусоидальный график вокруг моих необходимых оборотов в минуту, потому что он имеет большую инерцию. поэтому, когда обороты были выше верхнего предела, двигатель все еще ускорялся.

Я также попробовал изменить степень регулирования, умножив ее на квадрат разницы (необходимые обороты в минуту-текущие обороты в минуту)
Он оказался лучшим, но все равно превышается.

Я хотел бы каким-то образом предсказать свою кривую и изменить впрыск топлива в соответствии с моей будущей кривой.
И обороты двигателя сильно падают при внезапном увеличении нагрузки (от этого я запускаю компрессор)

Помогите мне, пожалуйста, понятия не имею.
Я пришлю несколько изображений графиков в порядке.

Подробнее здесь: https://stackoverflow.com/questions/390 ... -algorithm

Вернуться в «C++»