абсолютный оптический енкодер

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

Здраствуйте участники форума! недавно столкнулся с вот такой штукой

 http://www.autonics-ru.com/userdata/files/EP50S8.pdf  (EP50S8-360-2)

использую 3 первих бита (2.0 , 2.1, 2.2)

int bits[]={0,0,0};
int pin[]={13,12,11};

void setup() {
 Serial.begin(9600);
  pinMode(11, INPUT);
  pinMode(12, INPUT);
  pinMode(13, INPUT);
}
void loop() {

 for(int i=0; i<=3; i++)
{
bits[i]=digitalRead(pin[i]);
}
Serial.print(bits[0]);
Serial.print(bits[1]);
Serial.print(bits[2]);
 Serial.println("   ");
 delay(100);
}

получаю при вращении  :

вправо             влево

000                 111

001                 110

010                 101

011                 100

100                 011

101                 010

110                 001

111                 000

теперь, не могу составить правильно програму которая оприделяла текущее положение.

Може кто поможет ?)) буду очень благодарен!

 

Logik
Offline
Зарегистрирован: 05.08.2014

А приведеные значения не оно? Или это не на полный оборот?

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

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

 

Logik
Offline
Зарегистрирован: 05.08.2014

Еще раз, приведенные последовательности состояний - это один шаг или один оборот?

И всеже что надо "не могу составить правильно програму которая оприделяла текущее положение." или "нужно подщитивать сколько шагов зделал туда и назад."?

Невозможно чего конкретно советовать по задаче с неясным условием и неопределенным вопросом.

 

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

1 шаг

нужно опредилить точное положение енкодера по 3м битам(тоесть по 3м ключам )

градацию я зделаю сам, как описать  функцию которая показивает в какю сторону он крутит и последствии ++ или --

Logik
Offline
Зарегистрирован: 05.08.2014

Сохраняете прошлое состояние и текущее. Если вычесть из текущего прошлое то есть 3 варианта: получили 1, значить крутим вправо, получили -1 то крутим влево а если 0 то крутим куда крутили ранше или  вообще перестали крутить. Учитывать перенос т.е. должно быть 000-111=1. Так направление определяем и запоминаем.

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

спасибо! буду пробовать

 

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

Можливо комусь пригодиться

int a;
int b;
int c;
int t;
bool static b1, b2, b3;
void setup() {
 Serial.begin(9600);

  pinMode(12, INPUT);
  pinMode(13, INPUT);
  a=digitalRead(13);
  b=digitalRead(12);
 
}

void loop() {
b1 = digitalRead(13);
b2 = digitalRead(12);


if(b1!=a)
   {
    
      if(b2==b)
      {
       t++;
       Serial.println(t);
      }
      if(b2!=b)
      {
      t--;
      Serial.println(t);
      b2 = digitalRead(12);
      }
      a=digitalRead(13);
   }

}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ve3yn4ik, зачем подключать 3 провода, если используете только 2 ? :)

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

в начале думал понадобиться 3, потом вияснилось что хватит 2 .

Logik
Offline
Зарегистрирован: 05.08.2014

А скока их всего? Только постиг смысл "использую 3 первих бита (2.0 , 2.1, 2.2)"

Похоже он куда интересней чем просто...

Почитал пдф. их 10 штук прикольный девайс. еще и IP67. Но 32мА. Скока стоит и где брали? И помоему он не для счета шагов вобще нужен.

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

там 9 битна ситема, да интересна тем что очень точная при исползивании всех.

мне попался Белоруский 5д кинотеатр с дохлой електроникой,востанавливать не брался так как сгорел мк (ADUC7024 BSTZ62). Исползуеться для оприделения положения вала редуктора, которий поднимает платформу.      Редуктор крутит 3х фазний двигатель под управлением фазопреобразователя. Оригинальной прошивки нету, вот переделал под атмегу , сейчас витравливаю плату для установки. Смотрел на офф. сайте такой енкодер стоит 300 уе. В Украине он почемуто стоит 2400 грн.

В последствии управления фазопреобразователем возникла проблема , скорость вращения двигателя  зависит от установлених параметров : повишением напряжения от 0 до 5В , или изменением сили тока  от 0 до 20 мА.

сейчас сижу и ломаю голову как ето реализовать.