Подскажите пожалуйста,как считывать показания с китайских энкодеров моторов?

Евгений 79
Евгений 79 аватар
Offline
Зарегистрирован: 15.06.2014

Пытаюсь научиться работать с дисковыми энкодерами. Может где-то были темы?

Заказал данный датчик:

http://ru.aliexpress.com/item/Photoelectric-Speed-Sensor-Encoder-Coded-Disc-code-wheel-for-Freescale-Smart-car/1893691656.html

Задача: взять XL мотор от Lego Technic и данный датчик для того,чтобы получить мотор как в Lego Mindstorms для работы в среде Arduino.

Вот такой мотор програмируется в среде Lego:

http://vselego.ru/upload/resize_cache/iblock/18f/2392_1600_1de500b2f3ea4f5e6dead7bc5f81937fd/18f39e44b1b7d41eb1bd6198d8ed0e91.jpg  - программа Lego Mindstorms считает обороты двигателя с точностью до градуса.

Мой XL мотор от Technic:

https://lh3.googleusercontent.com/--9kbJ_9fbGM/UYnTghbnqdI/AAAAAAAAJ3s/Jpa9QwvLLP4/s635/Photo%25252005.08.2012%25252C%2525209%25253A52.jpg - к нему на вал приделываю диск для энкодера.

Написал первую программу, при срабатывании attachInterrupt программа просто считает циклы, а мне нужно,чтобы при смене с LOW на HIGH она увеличивала значение переменной только на 1 и ожидала смены с HIGH на LOW:

#include <SoftwareSerial.h>

int pin = 3;                                                
int encoder = 0;//начальное значение шагов энкодера
 
void setup()
{
  pinMode(pin, INPUT);
  attachInterrupt(1, Probeg, CHANGE);
  Serial.begin(9600);
}
 
void loop()
{
  Serial.println(encoder);
}
 
void Probeg() //пробег
{
  encoder = encoder+1;
}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Так у тебя программа ровно это и делает: когда фронт меняется с HIGH на LOW и наоборот - срабатывает прерывание, в чём проблема-то? Можешь поставить RISING вместо CHANGE в вызов attachInterrupt - и прерывание будет срабатывать только когда фронт нарастает, когда он будет падать - прерывание будет курить бамбук.

diakin
diakin аватар
Offline
Зарегистрирован: 04.06.2016

Из описания
>Выходной сигнал: 5vp-p два Квадратура выходной сигнал
Там можно организовать реверсивный счет с учетом направления.

Тут всю темку можно почитать
https://habrahabr.ru/post/280486/#comment_9662286