Шаговые двигатели часто дороги для большого двигателя. Однако с помощью мощного стандартного двигателя постоянного тока и поворотного энкодера вы можете «имитировать» шаговый двигатель. Насколько точны ротационные энкодеры с Arduino только с базовым циклом и не так много другого кода? Будет ли он «пропускать пульс» и не записывать достаточно вращения часто? Как я могу справиться с этим с гораздо большим количеством кода? Есть лучший способ это сделать? Помогут ли прерывания? Есть ли какая-то схема, которая поможет с этой проблемой?
Примечание. Вероятно, оно не будет превышать 4 оборотов в секунду ... (Это может быть много, но если вы используете механизм типа ходового винта, скорость которого составляет всего 24 дюйма в минуту, если имеется 10 оборотов на дюйм линейного движения. )
источник
Ответы:
Прерывания - это то, что вы бы использовали в этой ситуации.
Упомянутые вами скорости достаточно медленны, так что вы, вероятно , сможете рассчитывать их внутри цикла, однако это не рекомендуется, поскольку для типичного цикла потребуется много тактовых циклов, и в зависимости от количества экземпляров в цикле Вы можете пропустить некоторые счета.
Для этого создаются прерывания, так как они могут быть вызваны в любое время, независимо от состояния цикла.
Существует функция с именем,
attachInterrupt()
которая будет принимать три аргумента.Ниже приведен пример для подсчета прерывания
Режимы следующие:
Более подробную информацию об использовании прерываний можно найти здесь .
В зависимости от используемого вами кодера, вам нужно будет адаптировать код к вашим потребностям и сделать еще несколько вычислений, чтобы определить вашу позицию, но это должно стать хорошей отправной точкой.
Редактировать Вот пример кода из Arduino Sandbox для использования поворотного энкодера.
источник
ISR_NAKED()
), вы можете пропустить автоматическое сохранение контекста C и без проблем вывести частоту прерываний 100-500 кГц, но в этот момент вы пишете сборку на C.ISR()
непосредственным использованием прерывания .Добавление некоторых ссылок на уже написанные библиотеки и примеры, чтобы сделать возможным сравнение между различными подходами и опытом со скоростью и восприимчивостью к пропущенным шагам.
Чтение вращающихся энкодеров: http://playground.arduino.cc/Main/RotaryEncoders
Квадратурный кодер слишком быстр для Arduino (с решением): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Библиотека Teensy Encoder: https://www.pjrc.com/teensy/td_libs_Encoder.html
Чтение поворотного энкодера на Arduino: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
источник