Управление двигателем / положением по медленной шине
Кажется, я загнал себя в угол со следующей проблемой: я пытаюсь управлять двигателем на роботе через медленное шинное соединение на основе RS485. К сожалению, у меня нет доступа к прошивке на двигателе, поэтому я застрял с текущей настройкой.
Самая большая проблема заключается в том, что я могу контролировать только заданную скорость двигателя. Хотя я могу восстановить его абсолютное положение с помощью встроенного энкодера, в микропрограмме самого двигателя нет встроенной функции позиционирования.
Вторая проблема заключается в том, что соединение с шиной действительно медленное, несколько неловкий протокол требует 25 мс для полного цикла - возможно ли управление таким способом с помощью регулировки скорости?
Я попробовал наивный метод оценки позиции на 25 мс вперед, вычитая текущую позицию и деления на 25 мс, чтобы вычислить скорость, необходимую для следующей желаемой позиции. Тем не менее, это плохо колеблется на определенных скоростях при нацеливании на фиксированную позицию, я полагаю, из-за большого времени цикла, производящего много перерегулирования.
Может быть, PID-контроллер мог бы помочь, но я не уверен, каким будет целевое значение - каждый PID, который я использовал до сих пор, использовал фиксированную цель. Трудно представить себе полностью движущуюся цель (то есть позицию), по крайней мере, для меня.
Какой обычный способ справиться с такой ситуацией? Может быть, объединить наивный подход и добавить ПИД-контроль только на дополнительный срок смещения? Или мне нужно покупать разные моторы?
1 ответ
Если вы хотите сохранить преимущества rs485 (у него есть несколько положительных моментов), то вам, вероятно, придется переосмыслить способ управления этим двигателем. Может быть проще изменить управление двигателем, так что вам нужно всего лишь отправить некоторые числовые данные в качестве "конечной позиции" и оставить это на ваше умное управление, чтобы справиться с этим. В этой ситуации ваше общение по RS485 минимально.
Я всегда склонен думать о том, чтобы держать "мозги" там, где они нужны в промышленных условиях, чтобы вы не использовали свой IO, или когда-нибудь вы в конечном итоге столкнетесь с такими бегемотами, как промышленный Ethernet.