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