AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
01.02.2016, 21:49
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Опрос энкодера 4 провода
Всем привет! Ковыряюсь с подрулевым джойстиком от Рено! Там энкодер у которого получается 4 вывода... немогу получить с него нормального опроса(( в просторах интернета нашел его схему и тоже люди разбирали:
https://h-a.d-cd.net/d1067d4s-960.jpg
Когда разобрал, понял что поочередно замыкаются три контакта на четвертый!
Получается примерно такой вид:
1-0-0
0-1-0
0-0-1
Побывал сделать опрос по двум контактам, исключив просто третий... кручу вправо нормально, кручу влево... часто проскальзывает что как бы вправо повернул+нужно делать одно лишее движение, т.к. исключил один контакт
Код:
Код:
|
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B) {val++;}
else {val--;}
encoder_A_prev = encoder_A; |
|
|
|
|
02.02.2016, 00:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Опрос энкодера 4 провода
Сообщение от neid_nnov
|
Побывал сделать опрос по двум контактам, исключив просто третий...
|
Ну да, почему бы не исключить... В Рено же дураки сидят, нафигачили лишнего...
Там для начала дребезг бешеный. А программа написана для учебного примера, не для жизни.
|
|
|
|
02.02.2016, 06:52
|
|
Прописка
Регистрация: 11.04.2009
Сообщений: 233
Сказал спасибо: 11
Сказали Спасибо 109 раз(а) в 66 сообщении(ях)
|
Re: Опрос энкодера 4 провода
ВСЕ входные сигналы на МК ВСЕГДА сначала надо ИНТЕГРИРОВАТЬ, затем принять решение об их состоянии - и только потом обрабатывать в программе.
Если этого не сделать, то будет работать как в китайских гамнитолах - с пропусками шагов и скачками в обратном направлении.
Касательно сабжа - включить глаза и голову.
|
|
|
|
02.02.2016, 20:01
|
|
Частый гость
Регистрация: 04.10.2014
Адрес: Курск
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 4 сообщении(ях)
|
Re: Опрос энкодера 4 провода
Чёто там неправильно. Должно быть типа синус-косинус или код Грея (который вроде есть в сишной библиотеке))
|
|
|
|
02.02.2016, 22:40
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Опрос энкодера 4 провода
Сообщение от Georg77
|
ВСЕ входные сигналы на МК ВСЕГДА сначала надо ИНТЕГРИРОВАТЬ, затем принять решение об их состоянии - и только потом обрабатывать в программе.
Если этого не сделать, то будет работать как в китайских гамнитолах - с пропусками шагов и скачками в обратном направлении.
Касательно сабжа - включить глаза и голову.
|
Вы знаете как его обработать, можете привести пример, пока сказали как воду пернулу все трое!)) Знал бы не писал бы на форуме!
|
|
|
|
02.02.2016, 22:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Опрос энкодера 4 провода
Сообщение от Georg77
|
ВСЕ входные сигналы на МК ВСЕГДА сначала надо ИНТЕГРИРОВАТЬ
|
СОВЕРШЕННО НЕОБЯЗАТЕЛЬНО! если программно обрабатывать дребезг. Ведь десяток строк кода стОит подешевле, чем даже одна RC-цепочка? Пользуюсь для этого поллингом раз в 10-15мс, и байт на кнопку: там счётчик-интегратор и биты состояния.
Сообщение от neid_nnov
|
сказали как воду пернулу все трое!)) Знал бы не писал бы на форуме!
|
Исполать вам, не пишите не засоряйте.
Кстати, вопросов вы не задавали, чё ж обижаетесь?
Собственно, все три ответа по существу...
|
|
|
|
15.02.2016, 20:40
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Опрос энкодера 4 провода
Сообщение от neid_nnov
|
Получается примерно такой вид:
1-0-0
0-1-0
0-0-1
|
Всем привет.
Если внимательно присмотреться, то получается обычное чередование кода. В данном случае (4-2-1). Если крутить энкодер в другую сторону, то наверняка код будет увеличиваться (1-2-4). Значит нужно завести сигналы в один порт, лучше с нулевого по второй пины, считать их регистр, оставить три младших разряда и просто сравнивать предыдущее число с текущим. Если, к примеру больше, то проводим инкремент, а если меньше, то декремент. Перед занесением в регистр нужно произвести интегрирование (я убедился, что это самый лучший метод) и по моему опыту интегрирование лучше производить в верх, а вниз сбрасывать счетчик интегратора сразу и без задержек. Тогда получается чистый сигнал даже в энкодерах со скользящим контактом. Когда-то я помогал Aviasined с энкодером для замены кнопок, так вот там в последних проэктах я применил этот способ интегрирования, и только после этого все заработало. https://kazus.ru/forums/showthread.php?t=109548
PS. Обратите внимание что при переходе на новый круг(после 4 идет 1 или после 1 идет 4 - то в этом случае - инкремент при уменьшении, а декремент при увеличении) Но можно использовать алгоритм на основе кода Грея. Я в этой же теме попутно выкладывал проект под названием encod.rar Будет лишь разница в переменных. не два бита, а три.
Прошу прощения. Указал не тот проект. Проект Servo.rar https://kazus.ru/forums/showthread.php?t=109548&page=8
Последний раз редактировалось МВА; 16.02.2016 в 21:29.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:30.
|
|