Normal Topic Енкодер... (Прочитано 159 раз)
AlKoR
Гуру
*****
Вне Форума


GTLab - forever!

Сообщений: 1896
Местоположение: Московская область, Голицыно
Зарегистрирован: 23.07.2007
Енкодер...
21.01.2008 :: 16:27:57
Post Tools
Написал в С++ функцию обработки энкодера, но иногда срабатывает в нету сторону. Энкодер имеет оду особенность, он фиксируется только когда контакт1 и контакт2 разомкнуты, а если повернуть ручку, он будет выдавать такой код:

00 - изначально разомкнуты,
01 - если влево
10 - если влево

или наоборот
00 - изначально разомкнуты,
10 - если вправо
01 - если вправо

фрагмент кода:
{  // функция обрабатывает энкодер, подключенный к линиям порда Д 0 и 1
int val1=0;
int val2=0; //флаги срабатывания контакта энкодера
int d;
if (PIND.0 ==1 && PIND.1 == 0) val1=1;
if (PIND.0 ==0 && PIND.1 == 1) val2=1;
d=0;  //флаг выхода из цикла 
if(val1==1 ) //если пришел сигнал с первого контакта
{while (d==0) //пока не пришел сигнал с друого контакта, ждать его
       {if (PIND.0 ==0 && PIND.1 == 1 && val1 == 1 ) {val2=0; d++;}
        if (PIND.0 ==1 && PIND.1 == 0 && val2 == 1 ) {val1=0; d++;}
       }
}
if(val2==1 )//если пришел сигнал с второго контакта
{while (d==0)//пока не пришел сигнал с друого контакта, ждать его

       {
        if (PIND.0 ==0 && PIND.1 == 1 && val1 == 1 ) {val2=0; d++;}
        if (PIND.0 ==1 && PIND.1 == 0 && val2 == 1 ) {val1=0; d++;}
       }
}
if (val1==1) {return 1;} //если сработало по первому контакту, вернуть 1
if (val2==1) {return 2;}//если сработало по второму контакту, вернуть 2

if (val1==0 && val2==0) return 0; //если небыло сигнала, вернуть 0
val1=0; val2=0; обнуление флагов
}

Вроде, работоспособность такого решения большая, но ошибается... Правда, только один раз. Может быть, функция вызывается тогда, когда валкодер вращается? Помогите...
  

(Вложенный файл удалён)

Я - официальный воен категории "В" Улыбка&&хранилище гитарных схем&&http://guitarschems.ex6.ru/index.php
Наверх
ICQ  
IP записан
 
Alex_SG
Гуру
*****
Вне Форума



Сообщений: 3068
Местоположение: Челябинск
Зарегистрирован: 15.04.2005
Re: Енкодер...
Ответ #1 - 21.01.2008 :: 17:59:59
Post Tools
не много не верно. надо отслеживать не код, а фазу следования импульсов. тогда никаких проскакиваний не будет.
энкодеры этого типа при вращении выдают импульсы а не код. при вращении фронт одного приходт с опережением.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
AlKoR
Гуру
*****
Вне Форума


GTLab - forever!

Сообщений: 1896
Местоположение: Московская область, Голицыно
Зарегистрирован: 23.07.2007
Re: Енкодер...
Ответ #2 - 21.01.2008 :: 21:32:05
Post Tools
Для этого уже нужно работать с прерываниями МК, как я понимаю?

Но проблему решил - в начале поставил две строчки -
...
if (PINC.4==0) exit++;
if (PINC.5==0) exit++;
Стал работать как положено (доволен как слон).

Если не трудно, выложите фрагмент кода с отслеживанием по фронту, заранее спасибо.
  

(Вложенный файл удалён)

Я - официальный воен категории "В" Улыбка&&хранилище гитарных схем&&http://guitarschems.ex6.ru/index.php
Наверх
ICQ  
IP записан
 
Alex_SG
Гуру
*****
Вне Форума



Сообщений: 3068
Местоположение: Челябинск
Зарегистрирован: 15.04.2005
Re: Енкодер...
Ответ #3 - 22.01.2008 :: 04:11:17
Post Tools
эх, если бы я был програмером, то выложил бы Улыбка
а так - просто знаю как оно работает
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
shn
Участник


Re: Енкодер...
Ответ #4 - 22.01.2008 :: 07:48:28
Post Tools
Эх, если б я умел программить МК, то выложил бы... Улыбка

А так - да, прерывание юзать нужно. Вроде у МК есть прерывания по сигналу с порта (мне казалось, есть такая штука). Ну вот на него и вешать.
« Последняя редакция: 22.01.2008 :: 07:49:57 от »  

(Вложенный файл удалён)
Наверх
 
IP записан
 
AlKoR
Гуру
*****
Вне Форума


GTLab - forever!

Сообщений: 1896
Местоположение: Московская область, Голицыно
Зарегистрирован: 23.07.2007
Re: Енкодер...
Ответ #5 - 22.01.2008 :: 13:01:05
Post Tools
В конечном итоге количество внешних прерываний ограничено, поэтому желательно без них. Я пока мега8 пробую запрограмммировать.
  

(Вложенный файл удалён)

Я - официальный воен категории "В" Улыбка&&хранилище гитарных схем&&http://guitarschems.ex6.ru/index.php
Наверх
ICQ  
IP записан
 
shn
Участник


Re: Енкодер...
Ответ #6 - 22.01.2008 :: 13:27:09
Post Tools
Если энкодеров много, то можно использовать только одно прерывание. Простой сумматор со всех энкодеров (который выдает "1" при появлении сигнала хотя бы с одного энкодера), затем этот "суммированный" сигнал подается на отдельный порт, который вызывает прерывание. По прерыванию запускается процедура, считывающая сигналы со всех энкодеров и "выявляющая", который из них и куда был повернут.

Хм.. по правде сказать, я не совсем понимаю, как работает энкодер. Как регистрируется угол поворота? От него зависит задержка между импульсами или что?.. не совсем понимаю.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
AlKoR
Гуру
*****
Вне Форума


GTLab - forever!

Сообщений: 1896
Местоположение: Московская область, Голицыно
Зарегистрирован: 23.07.2007
Re: Енкодер...
Ответ #7 - 22.01.2008 :: 14:24:01
Post Tools
энкодер - по сути, это механический переключатель без ограничения вращения, при вращении ручки замыкает пару контактов, причем замыкание одного из них сдвинуто по углу вращения, вследствие чего он выдает последовательность , соответствующая вращению, например:
00
10
11
01
00

как видно, первый бит просто опаздывает на один шаг, если крутить ручку в одну сторону, и будет спешить, если в другую ... Аааа, ну наконец-то до меня дошло... Верно говорят, поставь правильно задачу - и она будет решена Улыбка
Хотя, с добавлением тех двух строчек, все работает без ошибок, как ни странно. Логика - страшная вещь, никогда не знаешь, куда она тебя заведет ...
  

(Вложенный файл удалён)

Я - официальный воен категории "В" Улыбка&&хранилище гитарных схем&&http://guitarschems.ex6.ru/index.php
Наверх
ICQ  
IP записан
 
AlKoR
Гуру
*****
Вне Форума


GTLab - forever!

Сообщений: 1896
Местоположение: Московская область, Голицыно
Зарегистрирован: 23.07.2007
Re: Енкодер...
Ответ #8 - 22.01.2008 :: 14:37:36
Post Tools
  

(Вложенный файл удалён)

Я - официальный воен категории "В" Улыбка&&хранилище гитарных схем&&http://guitarschems.ex6.ru/index.php
Наверх
ICQ  
IP записан
 
shn
Участник


Re: Енкодер...
Ответ #9 - 22.01.2008 :: 18:19:42
Post Tools
Спасибо за линк, все ясно стало сразу. Хм... там приведен и алгоритм обработки Подмигивание
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
 
  « Главная ‹ Раздел Наверх этой страницы