0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
1

Обработка энкодера

19.11.2014, 16:20. Показов 3708. Ответов 4
Метки нет (Все метки)

Имеется трёх импульсный энкодер (если это правильное название), т.е. датчик который имеет три линии сигнала и импульсы у него на линиях сдвинуты на 120 градусов(скважность импульсов 50%). Датчик стоит на валу ротора.
Мне нужно отслеживать текущее положение ротора и сравнивать с предыдущим. Всего получается шесть возможных комбинаций, комбинация 000b или 111b считаются ошибкой датчика.
Загвоздка в том что сочетание импульсов идёт не попорядку, а если перевести в десятичную систему счисления: 2,6,4,5,1,3,2.
Ну или в двоичной:
010
110
100
101
001
011
010
Направление вращения может быть любое, поэтому текущее положение нужно сравнивать с двумя, если не совпадёт то опять же ошибка датчика. Впринципе как сделать это с использованием кучи условий мне понятно, а может как нибудь можно битовыми операциями получать от текущего положения два крайних?
Такая мысль летает, но не могу пока описать в коде, что если в текущем положении одна единица нужно искать единицу в предыдущем положении слева или справа, для одного нуля тоже самое но искать нули.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 16:20
Ответы с готовыми решениями:

Миландр и модуль энкодера
Народ, не в курсе, есть ли у Милиндра контроллеры с аппаратной обработкой энкодера?

обработка инкрементального энкодера на прерываниях (asm)
Приветствую сообщество. Пытаюсь нарулить на ассемблере код обработки энкодера, оно вроде...

Подключение нульметки энкодера к AVR
Приветствую всех участников форума. Вопрос по схеме подключения нуль метки квадратурного...

У кого есть код для энкодера (с ускорением) ?
Быстро крутишь - больше шаг изменения,медленее - меньше. Поделитесь с обществом.

4
0 / 0 / 0
Регистрация: 09.10.2010
Сообщений: 107
19.11.2014, 16:27 2
http://iosyitistromyss.ru/avr-uchebnyj- ... koder.html
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
19.11.2014, 16:39 3
Это всё хорошо, но так я и сам могу сделать, да вообще-то и сделал, мне нужно другое.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
19.11.2014, 16:47 4
просто забить все переходы в таблицу

Код
//{1,3,2,6,4,5}
#define I 0     //invotyd state
#define P +1    //positive
#define S 0     //no change
#define N -1    //negative
#define E 0     //error

const s8 encTable[8][8] = {
{ I, I, I, I, I, I, I, I },
{ I, S, E, P, E, N, E, I },
{ I, E, S, N, E, E, P, I },
{ I, N, P, S, E, E, E, I },
{ I, E, E, E, S, P, N, I },
{ I, P, E, E, N, S, E, I },
{ I, E, N, E, P, E, S, I },
{ I, I, I, I, I, I, I, I }
}

#undef I
#undef P
#undef S
#undef N
#undef E

//
void Encoder(){
static u8 prevState = ReadPinState() & 0x07;
u8 currentState = ReadPinState() & 0x07;
pos += encTable[prevState][currentState];
prevState = currentState;
}
чтобы ошибки отлавливать, в таблицу можно вместо 0,+1, -1 забить для каждого состояния разные циферки 0,1,2,3,4 и потом из другого массива по полученному из таблицы индекса звать соответсвующую функцию.
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
19.11.2014, 16:57 5
_pv, блин точно как то сразу и не подумал что можно массив состояний сделать, спасибо, только элементы [4][5] и [4][6] местами поменять надо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2014, 16:57

Эмуляция энкодера.
Что бы проверить работу таймера в режиме энкодера я решил эмулировать на двух ножках AB сигналы....

Прерывание от энкодера
Всем привет. Понадобилось использовать энкодер в проекте. Подключил его к TYM1, все работает,...

Относительное значение с энкодера.
Есть энкодер и STM32F103. Настроен по таймеру. 1. Как получить значение относительное начала ...

Вывод положения энкодера на экран
Всем привет! Пытаюсь вывести показания энкодера на экран. Вот часть кода: #include "main.h" ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.