Оглавление:

Учебное пособие по поворотному энкодеру с Arduino: 6 шагов
Учебное пособие по поворотному энкодеру с Arduino: 6 шагов

Видео: Учебное пособие по поворотному энкодеру с Arduino: 6 шагов

Видео: Учебное пособие по поворотному энкодеру с Arduino: 6 шагов
Видео: Шаговый двигатель + оптический энкодер 2024, Ноябрь
Anonim
Учебное пособие по поворотному энкодеру с Arduino
Учебное пособие по поворотному энкодеру с Arduino

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

Шаг 1: Импульсный поток поворотного энкодера

Импульсный поток поворотного энкодера
Импульсный поток поворотного энкодера

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

Шаг 2: Распиновка поворотного энкодера

Распиновка поворотного энкодера
Распиновка поворотного энкодера

Объяснение:

  • GND GND
  • + + 5В
  • Кнопка SW поворотного энкодера при нажатии
  • Данные DT
  • Данные CLK 2

Один из выводов DT или CLK должен быть подключен к ножке прерывания Arduino Uno, или оба вывода DT и CLK должны быть подключены к выводу прерывания.

Шаг 3: Схема

Схема
Схема
  • GND на GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Шаг 4: Код

Код
Код

В следующем руководстве, которое будет использоваться в качестве прерывания, будет PIN 2 Arduino Uno, а PIN 3 используется только как обычный вход.

#define encoder0PinA 2 # define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, ИЗМЕНИТЬ); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (кодировщик0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); если (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print («CCW»);

} lastValRotary = valRotary; Serial.println (""); задержка (250); } void doEncoder () {если (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }

В строке 10 скетча выше используется прерывание вывода 2 Arduino Uno. В "doEncoder" функция рассчитывается от углового энкодера. Если значение DT и CLK (прерывание вывода Arduino Uno) одинаково, тогда переменная "encoder0Pos" будет увеличиваться / добавляться, в дополнение к этому условию переменная "encoder0Pos" уменьшается.

Шаг 5: объяснение

Значение ValRotary - это количество выполненных шагов. Значение ValRotary получается делением значения считывания энкодера поворотного датчика на 2,5. В результате теста получено значение 2,5, поскольку один шаг поворотного энкодера может превышать 1, поэтому разделите его значение на 2,5 в соответствии с Perstep, а также добавлением задержки чтения.

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

Шаг 6: Вывод

Выход
Выход

1 = значение кнопки пуска поворотного переключателя, когда он не был нажат

Рекомендуемые: