Каскадные ПИД-регуляторы положения и скорости двигателя постоянного тока

Я пытаюсь построить робота с дифференциальным приводом, питаемым от двух двигателей постоянного тока. Сначала я применил ПИД-регулятор для независимого управления скоростью каждого двигателя. Оценили TF, используя System Identification Toolbox MATLAB, системы с разомкнутым контуром, получив скорость каждого энкодера колес в зависимости от сигнала PWM, подаваемого микроконтроллером Arduino. Все прошло хорошо, и я успешно определил коэффициенты усиления ПИД-регулятора для этого контроллера.

Сейчас я пытаюсь контролировать точное (угловое) положение двигателя постоянного тока. Я думал в каскадировании ПИД-регулятора на входе другого уже реализовано. Таким образом, я могу указать позицию для первого контроллера, который сможет генерировать выходное задание для второго (скорости) контроллера, чтобы он генерировал соответствующий сигнал значения ШИМ для соответствующего управления двигателем постоянного тока.

Это будет работать? Это хороший подход? Или я должен попытаться реализовать другой контроллер, который выводит сигнал ШИМ в ответ на опорный сигнал положения?

Какую обратную связь вы используете для двигателей?
На данный момент вопрос не имеет особого смысла. Как вы можете контролировать угловое положение двигателя при скорости, отличной от нулевой? Если вы хотите, чтобы двигатель перемещался из одного положения в другое с использованием определенного профиля скорости, это обычно реализуется с помощью контура управления положением и подачи на него временной последовательности положений, сгенерированных генератором профиля.
Привет @Andyaka ! Я использую инкрементальные позиционные энкодеры на эффекте Холла.
Возможно, я опоздал, но ваш подход правильный, кроме того, вы можете каскадировать контроллер крутящего момента, чтобы реагировать на возмущения нагрузки, а также вы можете использовать оптимальный подход для расчета коэффициентов усиления контроллеров.

Ответы (2)

Ваш подход должен работать. Это также самый простой способ решить проблему.

Вы всегда можете разработать контроллер положения, который управляет непосредственно двигателями, но будет сложнее понять, как его настроить. И я понимаю, что у вас есть показания и положения, и скорости, так почему бы не использовать две петли?

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

Вы должны быть осторожны с несколькими деталями:

  1. Если два двигателя постоянного тока работают параллельно, вы должны найти способ, чтобы они не мешали друг другу (например, принудительное распределение нагрузки ). Однако вы, должно быть, столкнулись с этой проблемой уже в петле скорости.
  2. Внешний контур (управление положением) должен быть намного медленнее, чем контур скорости. Если бы он работал в том же темпе или быстрее, у вас была бы петля положения, сильно натягивающая петлю скорости, не давая ей времени среагировать, и у вас были бы сильные взаимодействия или даже нестабильность. Я предлагаю вам максимально ускорить внутреннюю (скорость), а затем настроить внешнюю.
  3. Внешняя петля здесь должна быть вашей «точной». Внутренний должен просто быть быстрым в реакции, а не точным. Я бы предложил контроллер P или PD для внутреннего и PI или PID для внешнего.

Дополнительный совет: поскольку это касается робота, я бы принял во внимание упреждающую связь с ссылкой на позицию .

Если вы хотите контролировать позицию, контролируйте позицию. Не вижу смысла в промежуточном регуляторе скорости. Это сделает вещи более сложными и трудными для настройки.

Поскольку у вас, по-видимому, есть декодеры положения, ваш контур управления должен напрямую контролировать положение. Затем этот контур управления может сильнее управлять двигателем, когда он находится далеко от желаемого положения, и меньше, когда он находится близко. Если все сделано правильно, это неявно приведет к хорошему скоростному профилю для перехода из одного положения в другое.

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