Я хочу контролировать скорость двигателя с помощью ПИД-регулятора. Моя проблема в том, что действительный диапазон ШИМ, который я могу установить в своем микроконтроллере, составляет от 0 до 199 , но я измеряю скорость двигателя (используя энкодер) в диапазоне от ~ 50 до 6000 об/мин.
Как я могу осмысленно поменять местами эти значения?
Пример:
Я установил целевую скорость на 6000, когда двигатель работает на 0 об/мин. Затем запускается PID, и в этот момент ошибка составляет 6000 ... поэтому PID дает максимальный выход, который будет 32767. Но я могу установить только PWM таймера от 0 до 200.
Я использую код в примечаниях к применению AVR221, и там каждая переменная является целым числом со знаком (без плавающих запятых). Мой собственный микроконтроллер - stm32, который, как я полагаю, может эффективно обрабатывать числа с плавающей запятой.
Нет необходимости масштабировать. Вам нужно ограничить выходной сигнал ПИД-регулятора 0% и 99% и выяснить, какие факторы работают лучше всего. Есть I*R, всевозможные помехи, ускорения, поэтому напряжение не имеет строгой зависимости от скорости. На самом деле иногда может показаться, что никакой связи вообще нет. Итак, вы делаете PI или PID и настраиваете его. Лучшей практикой является также повсеместное использование единиц СИ, но не обязательно.
Кстати, и это очень важно. Вы должны построить профиль движения. Что в случае управления скоростью означает, что вы должны постепенно увеличивать скорость в соответствии с ускорением. В противном случае вы получите перерегулирование и очень нестабильное поведение или плохой контроль, если вы уменьшите усиление, чтобы успокоить систему.
Обычно выход функции PID представляет собой число от 0,0 до 1,0 (0-100%), вы можете умножить его на период вашего таймера, чтобы получить значение рабочего цикла.
Но если вы используете целочисленную математику, выход вашей функции PID будет от -32768 до 32767, тогда у вас будет от -1,0 до 1,0 с разрешением 1/32767.
В вашем случае разделите 16-битный вывод со знаком на 163.
Выходной сигнал ПИД-регулятора в основном представляет собой требуемое увеличение МОЩНОСТИ, чтобы проложить путь к требуемой уставке — подумайте о круиз-контроле в автомобиле: когда скорость падает ниже уставки, подается больше акселератора. Кривая крутящего момента на большинстве двигателей постоянного тока следует параболическая форма, поэтому при высоких и низких оборотах ваш «ускоритель» должен быть соответственно увеличен. Кривые крутящего момента, конечно, изменяются с входным напряжением, поэтому хорошей идеей для стабилизации системы было бы использование регулятора напряжения, который поможет исключить из системы хотя бы одну движущуюся цель.
ШИМ не изменяет скорость двигателя напрямую, он изменяет напряжение на двигателе, сохраняя при этом крутящий момент. Единственный способ надежно и точно перевести рабочий цикл ШИМ в скорость двигателя — это построить график самостоятельно. Я бы сказал, сделайте как минимум 5 точек и нарисуйте скорость в зависимости от рабочего цикла на графике.
тусклый
пользователь76844
Давид777
Давид777
пользователь76844
Давид777
пользователь76844