Управление скоростью двигателя с помощью ПИД-регулятора, как масштабировать ШИМ до оборотов в минуту и ​​обратно

Я хочу контролировать скорость двигателя с помощью ПИД-регулятора. Моя проблема в том, что действительный диапазон ШИМ, который я могу установить в своем микроконтроллере, составляет от 0 до 199 , но я измеряю скорость двигателя (используя энкодер) в диапазоне от ~ 50 до 6000 об/мин.

Как я могу осмысленно поменять местами эти значения?

Пример:

Я установил целевую скорость на 6000, когда двигатель работает на 0 об/мин. Затем запускается PID, и в этот момент ошибка составляет 6000 ... поэтому PID дает максимальный выход, который будет 32767. Но я могу установить только PWM таймера от 0 до 200.

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

Ответы (4)

Нет необходимости масштабировать. Вам нужно ограничить выходной сигнал ПИД-регулятора 0% и 99% и выяснить, какие факторы работают лучше всего. Есть I*R, всевозможные помехи, ускорения, поэтому напряжение не имеет строгой зависимости от скорости. На самом деле иногда может показаться, что никакой связи вообще нет. Итак, вы делаете PI или PID и настраиваете его. Лучшей практикой является также повсеместное использование единиц СИ, но не обязательно.

Кстати, и это очень важно. Вы должны построить профиль движения. Что в случае управления скоростью означает, что вы должны постепенно увеличивать скорость в соответствии с ускорением. В противном случае вы получите перерегулирование и очень нестабильное поведение или плохой контроль, если вы уменьшите усиление, чтобы успокоить систему.

Вместо «вам нужно ограничить выходной сигнал ПИД-регулятора от 0% до 99%» я бы сформулировал так: «используйте выходной сигнал ПИД-регулятора, зажатый между 0 и 199». Я думаю, что это делает его более ясным и более конкретным для случая ОП.
Может быть. Надеюсь, он достаточно независим, чтобы исследовать тему самостоятельно.
@GregoryKornblum "Кстати, и это очень важно. Вы должны построить профиль движения. Что в случае управления скоростью означает, что вы должны постепенно увеличивать скорость в соответствии с ускорением. В противном случае вы получите перерегулирование и очень нестабильное поведение или плохой контроль если вы уменьшите усиление, чтобы успокоить систему».
@GregoryKornblum Привет, я знаю, что это старый вопрос, но хотел бы кое-что спросить. Я работаю над преобразованием PID в PWM, и у меня возникли некоторые проблемы, и когда я прочитал то, что вы написали в комментарии выше, у меня возник вопрос. Вы предлагаете, чтобы каждый цикл сканирования ПИД-контура ограничивал скорость изменения рабочего цикла ШИМ максимальной скоростью изменения? У меня проблемы с чрезмерным выбросом, независимо от того, что я делаю, и я думаю, что время цикла ПИД-регулятора может быть слишком медленным, но то, что вы упомянули, может быть одним из способов решить эту проблему?
@ David777 нет, я не это говорю. Но чтобы ответить на ваш вопрос, мне нужно лучше понять, что вы делаете.
@GregoryKornblum Я только что опубликовал вопрос, если вы хотите взглянуть.
О, чувак, это слишком долго. Если хотите, напишите мне gregoryk на veriqube-canada.com, и завтра я найду время поболтать. Я не думаю, что вы можете получить то, что вам нужно, задав один вопрос. Кажется, вам нужно более подробное объяснение.

Обычно выход функции PID представляет собой число от 0,0 до 1,0 (0-100%), вы можете умножить его на период вашего таймера, чтобы получить значение рабочего цикла.

Но если вы используете целочисленную математику, выход вашей функции PID будет от -32768 до 32767, тогда у вас будет от -1,0 до 1,0 с разрешением 1/32767.

В вашем случае разделите 16-битный вывод со знаком на 163.

Выходной сигнал ПИД-регулятора в основном представляет собой требуемое увеличение МОЩНОСТИ, чтобы проложить путь к требуемой уставке — подумайте о круиз-контроле в автомобиле: когда скорость падает ниже уставки, подается больше акселератора. Кривая крутящего момента на большинстве двигателей постоянного тока следует параболическая форма, поэтому при высоких и низких оборотах ваш «ускоритель» должен быть соответственно увеличен. Кривые крутящего момента, конечно, изменяются с входным напряжением, поэтому хорошей идеей для стабилизации системы было бы использование регулятора напряжения, который поможет исключить из системы хотя бы одну движущуюся цель.

ШИМ не изменяет скорость двигателя напрямую, он изменяет напряжение на двигателе, сохраняя при этом крутящий момент. Единственный способ надежно и точно перевести рабочий цикл ШИМ в скорость двигателя — это построить график самостоятельно. Я бы сказал, сделайте как минимум 5 точек и нарисуйте скорость в зависимости от рабочего цикла на графике.

Я не понимаю. В конце я должен изменить значение ШИМ, чтобы изменить скорость, так как же этот график поможет?
Вы устанавливаете ШИМ на 20%, 40%, 60%, 80%, 100% по очереди и измеряете скорость двигателя. Это позволит вам построить график, показывающий отношение ШИМ к скорости двигателя.
Это не было бы решением... из-за изменения напряжения BUS на двигателе этот график был бы бессмысленным. например, в один день 12 В, а в другой день 11 В ... хуже, если на батареях
Ах да, так что вход в двигатель везде разный! Это делает его более сложным: поэтому вам нужно иметь простой контур управления в программном обеспечении, управляющем им. Вам нужно будет ввести желаемую скорость и либо текущую скорость, либо напряжение подачи. Затем проведите его через алгоритм управления, вы, вероятно, можете просто использовать пропорциональное управление, если только ваша установка не заряжается очень быстро.