Насколько я могу получить Arduino с помощью поворотных энкодеров?

Шаговые двигатели часто дорогие для большого двигателя. Однако с мощным стандартным двигателем постоянного тока и поворотным датчиком вы можете «имитировать» шаговый двигатель. Насколько точны роторные энкодеры с Arduino только с базовым циклом и не так много другого кода? Будет ли это «пропустить импульс» и не регистрировать достаточно частого вращения? Как я могу справиться с этим гораздо большим количеством кода? Есть лучший способ сделать это? Помогут ли прерывания? Есть ли какая-то схема, которая поможет в решении этой проблемы?

Примечание. Вероятно, это не будет превышать 4 оборотов в секунду ... (Это может быть много, но если вы делаете механизм с винтовым винтом, который будет составлять всего 24 дюйма в минуту, если есть 10 оборотов на дюйм линейного движения.)

14 голосов | спросил Anonymous Penguin 4 MaramTue, 04 Mar 2014 06:50:55 +04002014-03-04T06:50:55+04:0006 2014, 06:50:55

2 ответа


10

Прерывания - это то, что вы использовали бы в этой ситуации.

Скорости, о которых вы упомянули, достаточно медленны, когда вы возможно могли бы считать это внутри цикла, однако это не рекомендуется, так как типичный цикл займет много тактов , и в зависимости от количества instuctiuons за цикл, вы можете пропустить некоторые подсчеты.

Для этой цели выполняются прерывания, так как они могут запускаться в любое время независимо от состояния цикла.

Существует функция с именем attachInterrupt(), которая будет принимать три аргумента.

  1. Вывод прерывания
  2. Процедура обслуживания прерываний
  3. Режим

Ниже приведен пример подсчета прерывания

volatile int myCounter = 0;

void setup(){
    attachInterrupt(0, count, RISING);
}

void count(){
    myCounter++;
}

Режимы:

  

LOW, CHANGE, RISING, FALLING

Более подробную информацию об использовании прерываний можно найти здесь .

В зависимости от используемого кодировщика вам потребуется настроить код, который вам нужен, и выполнить еще несколько вычислений, чтобы определить вашу позицию, но это должно быть хорошей отправной точкой.

Edit Здесь приведен пример кода из Arduino Sandbox для использования вращающегося энкодера.

ответил Matt Clark 4 MaramTue, 04 Mar 2014 07:26:23 +04002014-03-04T07:26:23+04:0007 2014, 07:26:23
3

Добавление некоторых ссылок на уже написанные библиотеки и примеры, чтобы обеспечить сравнение между различными подходами и опытом со скоростью и восприимчивостью к отсутствующим шагам.

Чтение вращающихся энкодеров: 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- кодер-на-Arduino /

ответил gwideman 9 AMpWed, 09 Apr 2014 07:22:53 +040022Wednesday 2014, 07:22:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132