dccharacter писал(а):Почему колебания. Потому что движок абсолютно неинертный. Соответственно при недолете мы ШИМим - и за время до следующего обновления движок успевает сильно перелететь, проверяем - ошибка отрицательная, ставим ШИМ в ноль (даже не в обратную сторону!!!! просто в ноль) - и он успевает оттормозиться.
Можно увеличивать частоту, но, соответственно падает число тиков, которые успевает энкодер натикать за период обновления. Можно движок взять побольше - поинертнее.
Ааа, ну тогда полюбому надо частоту регулятора повышать. Пусть будет меньше тиков, но управление станет плавнее. По крайней мере попробовать стоит. Дело в том, что регулятору можно давать задание в нецелых тиках
Щас попробую объяснить на пальцах. Вот у нас сейчас пусть частота регулирования 30 Гц, задание 57 тиков и скорость тоже 57 тиков. А теперь берем и увеличиваем частоту в 10 раз, до 300 Гц, и число с энкодера перед подачей на регулятор умножаем тоже на 10. За 1/30 секунды энкодер даст 57 тиков, которые раскидаются по циклам 1/300 секунды как 6-6-5-6-6-5-6-6-5-6 или подобным образом. На регулятор в качестве ОС будет подано 7 раз 60 и 3 раза 50. Интеграл 7 раз получит приращение ki*(57-60), в целом -ki*21, а 3 раза ki*(57-50), в целом ki*21. Т.е. за 10 циклов вернется в свое исходное состояние. Пропорционал тоже выдаст 3 раза 7*kp и 7 раз -3*kp на мотор, который массой ротора успешно это усреднит в 0. Дифференциалу от такой скачки будет немного хреновато, но в принципе там на нем фильтр есть, ну а среднее у него тоже будет 0. Таким образом, получаем, что дискретность по скорости не ухудшилась, регулятор как держал 57 тиков за 1/30 сек, так и держит, а скорость отработки возмущений возросла в 10 раз. То есть если с энкодера пришло вдруг 7 тиков - ШИМ уменьшится уже в следующую 1/300 секунды, система не будет дожидаться пока пройдет 1/30 и натикает 70 с лишним тиков.
До бесконечности такое проделывать нельзя конечно, заканчивать надо когда шум от этих ступенек с энкодера, прошедший через регулятор, превысит выигрыш, получаемый от снижения колебаний.
Как минимум - попробуй так сделать и посмотри что получится.