Подскажите пожалуйста,как считывать показания с китайских энкодеров моторов?
- Войдите на сайт для отправки комментариев
Пытаюсь научиться работать с дисковыми энкодерами. Может где-то были темы?
Заказал данный датчик:
Задача: взять 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; }
http://www.arduino.ru/Reference/AttachInterrupt
Так у тебя программа ровно это и делает: когда фронт меняется с HIGH на LOW и наоборот - срабатывает прерывание, в чём проблема-то? Можешь поставить RISING вместо CHANGE в вызов attachInterrupt - и прерывание будет срабатывать только когда фронт нарастает, когда он будет падать - прерывание будет курить бамбук.
Из описания
>Выходной сигнал: 5vp-p два Квадратура выходной сигнал
Там можно организовать реверсивный счет с учетом направления.
Тут всю темку можно почитать
https://habrahabr.ru/post/280486/#comment_9662286