Начал разбираться с ПИДом, и что-то уперся сам не пойму во что. Объясните логику, плз.
Имеем - движок с энкодером, энкодер считает количество фронтов в одинаковый промежуток времени (actual). Мы задаем количество фронтов, которые надо крутить (target). Алгоритм сравнивает target vs actual, получаем ошибку (error). Если error положительная, то имеем недолет по оборотам, алгоритм задает некий положительный ШИМ, который по идее должен раскрутить движок, чтобы достичть желаемых оборотов (target). ЧТо происходит, когда у нас перелет (error < 0)??? Отключаем ШИМ, чтобы движок сам притормозил до нужных оборотов?
Вопрос возник, потому что перечитал аппноутов, в том числе микрочиповских. В частности, в одном из них два входа управляются одним и тем же ШИМ сигналом, только на один вход подается прямой ШИМ, а на второй - инвертированный. Мне это мозг разорвало окончательно - при таком раскладе, как я понимаю, активную часть периода движок тянет в одну сторону, а в неактивную - в другую. В предисловии к аппноуту скромно упоминаются "повышенные потери на ереключение". Нифига себе "повышенные потери". Да это ППЦ ИМХО.
Добавлено спустя 2 минуты 14 секунд:
Хм, только что дошло, что у меня движок малоинерционный, и он скорее похож не на мотор с редуктором из статьи из вики о ПИДах, а скорее на систему точного позиционирования. ВОт у меня его и качает тудыть-растудыть...
Добавлено спустя 3 минуты 14 секунд:
Вот так выглядит раскачка, причем идет она ниже target-уровня. И чем меньше p-коэффициент, тем сильнее отклонение от target.