ПИД-регулятор, часть 2, лирическая

После того, как механика была готова, я полез в интернет. Погуглил, почитал, покодил.
Программная “модель” вполне себе заработала, и даже коэффициенты подобрать удалось.
Но при попытке зашить это всё в Arduino, что-то пошло не так. Вроде бы всё работало, обороты считались, ПИД выдавал какие-то значения… Но, подобрать коэффициенты так, чтобы обороты стабилизировались, не удавалось.


Сначала я подумал, что это шум с энкодера. Ибо раскраска была ручная и неравномерная. Переписал счётчик оборотов, проверил. Потыкал осциллографом 😉 Поправил код ещё…
И лишь через сутки раздумий заметил странность: обороты вели себя как-то очень подозрительно. Вроде бы должны были расти при увеличении значений PWM (на драйвере/моторе), но, на самом деле нет. График выглядел горбом!
Подивившись такому результату я сновал полез смотреть на Arduino осциллографом.
Поначалу всё выглядело неплохо:
Oscillogram

Но стоило мне прибавить оборотов, как начался цирк!
Oscillogram

Оказалось, что напряжение на компараторе слишком мало, и сигнал с оптопары не всегда “доставал” до нужного места! А самое удивительное, что проявлялось это только на больших оборотах!
Oscillogram

В итоге сутки мучительных поисков закончились банальной заменой резистора в делителе 🙂
Optocouple