Оптический энкодер высокой точности

tw911
Offline
Зарегистрирован: 22.10.2013

Есть энкодер, воот такой примерно http://www.truetex.com/heds.pdf

Только мой называется qeds, а так по сути то же самое. Никак не могу его заставить правильно показывать сколько делений он в одну сторону делает, и сколько в другую, наприме выводим счетчик, при повороте по часовй стрелке прибавляем его значение на 1, при обратном убавляем. Энкодер весьма точный, в нем наверное дырочек 300 наоборот. Сидит на двигателе.

На деле рисует вот такой график, снимал на с1-55

 

 

Вот такой код по моим подсчетам должен считать только в одну сторону, а получается в обе. Не понятно, хотя может я уже загнался.

01int a,b;
02int phase = 0;
03int count=0;
04 
05void setup() {
06 
07  Serial.begin(9600);
08  pinMode(3, INPUT);
09  pinMode(4, INPUT);
10}
11 
12void loop() {
13  a = digitalRead(3);
14  b = digitalRead(4);
15//  if(phase==0 && i==HIGH){
16//  phase=1;
17//  Serial.println("Phase 1");
18//  }
19  if(a==HIGH && b==LOW && phase==0){
20    phase=1;
21    Serial.println("Phase 2");
22  }
23  if(a==HIGH && b==HIGH && phase==1){
24    phase=2;
25    Serial.println("Phase 3");
26  }
27  if(a==LOW && b==HIGH && phase==2){
28    count=count+1;
29    phase=0;
30    Serial.println(count);
31  }
32}

 

Клапауций
Offline
Зарегистрирован: 10.02.2013
tw911
Offline
Зарегистрирован: 22.10.2013

Да видел я это, библиотека работает на прерываниях, а назначение третьего вывода? Что он делает и для чего нужен?

Клапауций
Offline
Зарегистрирован: 10.02.2013

tw911 пишет:
Да видел я это, библиотека работает на прерываниях

можно не использовать прерывания #define ENCODER_DO_NOT_USE_INTERRUPTS

tw911 пишет:
а назначение третьего вывода? Что он делает и для чего нужен?

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

tw911
Offline
Зарегистрирован: 22.10.2013

Энкодер оптический. В нем аж 2000 секций на оборот оказалось.  Нулем не ошибся.

Клапауций
Offline
Зарегистрирован: 10.02.2013

tw911 пишет:

Энкодер оптический. В нем аж 2000 секций на оборот оказалось.  Нулем не ошибся.

Что это меняет принципиально?

Если бы было меньше или больше, то что?

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

поищите на форуме тему, уже мусолили эти енкодеры как только можно... у вас еще не сильно точный, у меня был 90000 на оборот,

пришлось плату на счетчиках и триггерах делать, чтобы успевал считать :)

 

tw911
Offline
Зарегистрирован: 22.10.2013

Michal пишет:

пришлось плату на счетчиках и триггерах делать, чтобы успевал считать :)

 

А можно про это поподробнее.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

та пролема тут была описана

ну мое решение было такое. Сразу оговариваюсь, что несовсем корректно, есть некоторые огрехи, но для моей задачи хватило.

Схема форум размер сжал :(

по схеме... на логике и триггерах выделяются фронты по каждому из 3 каналов и формируются сигналы +, - и сброс для 24-разрядного счетчика, который собран из 6ти 74193(чо было под рукой). Для фиксации показаний стоят 3 регистра, по STB защелкиватся показание счетчика в регистрах. Ну и мега для обеспечения  SPI итерфейса и корректировки результата.

Датчик ЛИР-158БТ 90000-05-ПИ от ленинградского СКБ ИС

Потом была куплена Ардуина Due и платка была забыта. Cortex может аппаратно работать с инкрементными датчиками :)