Jump to content

Archived

This topic is now archived and is closed to further replies.

Matrix

Decoder For Rotary Encoder :)

Recommended Posts

Matrix

Всем привет!

Очень нужна схема декодера для Rotary Encoder...

Нужно преобразовать импусы с энкодера в обыкновенные замыкания контактов, что бы подключить вместо кнопок к Mjoy.. такое возможно?

 

Спасибо.

Share this post


Link to post
Share on other sites
Valery_B
Всем привет!

Очень нужна схема декодера для Rotary Encoder...

Нужно преобразовать импусы с энкодера в обыкновенные замыкания контактов, что бы подключить вместо кнопок к Mjoy.. такое возможно?

 

Спасибо.

Не совсем понятен вопрос, но само применение Mjoy интересует, сам собираюсь делать. Если есть желаение, пожалуйста свяжитесь по valery_gb(собака)ptline.ru, обсудим эту тему.

 

С Уважением, Валерий.

Share this post


Link to post
Share on other sites
Matrix

Прочитал этот пост раз 10 уже ..

 

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

 

К сожаению, я не обладаю достаточными знаниями, что бы самостоятельно что то подобное разработать. я думал что у кого-нибудь есть разработки в этой области..типа Mjoy..

Share this post


Link to post
Share on other sites
Stranger

А энкодер у вас какой? Оптический? Механический? Тип?

Share this post


Link to post
Share on other sites
Matrix

Энкодер механический, 3315..

Купил самые простые что бы попробовать.

Share this post


Link to post
Share on other sites
Stranger

О какой конкретно схеме идет речь? К чему вы хотите подключить энкодер? Можете дать ссылку на MJoy?

Share this post


Link to post
Share on other sites
Matrix

http://www.mindaugas.com/projects/MJoy/Article.php

 

Схема очень простая... я сделал джойстик на 24 кнопки..

Было бы очень классно ,если можно подключит энкодер так, что бы при повороте в одну сторону на 1 щелчок срабатывала , например, кнопка 1, а в другою сторону кнопка 2..

Share this post


Link to post
Share on other sites
Stranger

Я вот чего подумал. А что если обратиться непосредственно к разработчику MJoy? Он здесь на форуме появлялся.

Дело в том, что все необходимые операции можно легко осуществить программным путем и подключить энкодер непосредственно к микроконтроллеру. В любом случае, для создания электронного интерфейса, нужно знать алгоритм сканирования матрицы кнопок. К сожалению автор не публикует исходный код своей программы, так что изменения могут быть внесены только им. Думаю он мог бы зарезервировать место для, скажем, 4 энкодеров вместо 8 кнопок. Его e-mail адрес опубликован на указанной вами странице. Если есть необходимость, могу предоставить простой алгоритм обработки сигналов энкодера.

Share this post


Link to post
Share on other sites
Matrix

Спасибо! попробую ему написать.

Share this post


Link to post
Share on other sites
Stranger

Если не сложно, держите нас в курсе. :unsure:

Share this post


Link to post
Share on other sites
Valery_B

А может, алгоритм сканирования знать и не надо, в любом случае на кнопке создается перепад напряжения, где больше, а где меньше, можно узнать тестером, собрать вместо кнопки ключ на КТ315 и открывать его импульсом от декодера. Если же ключ на полевике сделать, то вообще не важно, что куда идет, ему по барабану, куда сигнал пропускать.

 

Валерий.

Share this post


Link to post
Share on other sites
Stranger

Оно конечно, только собранной схемы у меня не имеется, как впрочем и исходника программы. Так что узнать кто есть кто (вход/выход) не представляется возможным. А полевик неподготовленный человек убьет в три секунды. Кроме того, меня терзают смутные сомнения по поводу отсутствия развязочных диодов в матрице.

 

P.S. Может схемку набросаете?

Share this post


Link to post
Share on other sites
Valery_B

Схема с сайта автора, думаю, ни чьих прав не нарушаю. А диоды там и не нужны, обычна на одной ноге устанавливается 0, состояние всех пересечений проверяется, если на какой либо из линий 0, то значит, кнопка нажата. На не нажатых должна быть единица. Затем проверяется следующая линия и так далее.

 

Само описание было на Сухой, но сейчас что-то Сухой не работает.

post-61-1099422450_thumb.jpg

Share this post


Link to post
Share on other sites
Matrix

Если я правильно понимаю, то матрица это кнопки :blink:

 

Без диодов невозможно будет нажимать несколько кнопок одновременно, а конкретно больше 6 штук.. :blink:

 

Вот нашёл ссылку на десодер на базе микроконтроллера PIC..автор Leo Lacava.

http://forums.avsim.net/dcboard.php?az=sho...ing_type=search

Решение интересное, файлик rd-pan16f есть :unsure:

 

Есть ещё Redec 0.9

 

http://hongkongfui.de/REDec/redec09b.pdf

 

I've bought an empty IC laboratory plate

the 3 CMOS, and the 2 resistors and have sold and link them with

small bridge-wire according to the sheme.

That works

 

Непонятно, какие сигналы появляются на выходе этого декодера. Лео говорит что его декодер выдаёт +5V в покое и GND когда крутишь энкодер.

Пока ещё не паял ничего из этого.. сайт чип-дипа отвалился... да и к тому же не знаю точно какие детальки покупать...

Share this post


Link to post
Share on other sites
Boriska

Попробую внести свои 5 копеек. :unsure:

Это фрагмент кода (HT-PICC), который работает у меня на PICе для ввода с энкодера. Энкодер используется PEC12, можно PEC16 или 3315, без разницы. Схема включения проста до безобразия, общий вывод энкодера на землю, сигнальные на 2 входа порта В (у него в PICах есть встроенные подтягивающие резисторы).

 

volatile signed char Twisted1;

#define MIN_STABLE 	 24 // Кол-во повторов для устранения дребезга (подбирается по вкусу)
#define ENC_AB_MASK     0b11000000 // Собственно 2 бита которые соответствуют энкодеру

void enc (unsigned char kbd) // на входе текущее состояние порта к которому подключен энкодер
{
byte_t sample;  
byte_t debounced;
static byte_t prev_sample;
static byte_t stable_count;
static byte_t prev_debounced;

sample  = (~kbd & ENC_AB_MASK) >> 6;


if (sample != prev_sample) {
    stable_count = 0;
    prev_sample = sample;
    return;
} 
else {
    if (stable_count < MIN_STABLE) {
	 stable_count++;
	 if (stable_count == MIN_STABLE) {
    	 debounced = sample;
	 }
     else {
	 return;
     }
    }
    else {
 return;
    }
}

 if ((debounced & 0x02) && !(prev_debounced & 0x02))
 if (debounced & 0x01) 
         Twisted1++;
    else 
         Twisted1--;
   
prev_debounced = debounced;
}
       

Функция вызывается в главном цикле и ей передается считаное значение порта В.

В итоге в переменной Twisted1 имеем число "щелчков" со знаком. Ее можно анализировать в другом месте программы и как-то использовать в своих целях.

У меня она передается через USB в комп, после чего обнуляется, таким образом я имею приращение со знаком в зависимости от направления вращения.

Немного сумбурно, но думаю, разобраться можно.

Share this post


Link to post
Share on other sites
Stranger

2 Valery_B:

Допустим, что справа расположены входы, на которые поочередно подается 0, а внизу выходы, с которых снимается состояние кнопок. Рассмотрим случай когда на линию PD0 подан уровень 0, а на все остальные входы 1. См. схему. Кнопки S4, S7 и S8 нажаты (отмечены зеленым). Каково будет состояние выходов? :unsure: (Подсказка: PB3=1; PB4=1; PB5=0; PD7=0! Хотя в верхнем ряду нажата только одна кнопка). Более того, выход PD1 будет принудительно посажен на 0, что вполне может угробить контроллер. И таких комбинаций сколько угодно. Для обратной ситуации (входы внизу, выходы справа) сказанное так же справедливо.

 

2 Matrix:

Непонятно, какие сигналы появляются на выходе этого декодера. Лео говорит что его декодер выдаёт +5V в покое и GND когда крутишь энкодер.
К сожалению скачать файл не удалось.

 

2 Boriska:

Примерно этот алгоритм я и имел ввиду. Фактически выполняется логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) над текущим стабильным значением фазы А и предыдущим стабильным значением фазы В (или наоборот), если состояние входов изменилось. Результат операции 1 или 0 соответствует направлению вращения оси энкодера.

post-61-1099434394_thumb.gif

Share this post


Link to post
Share on other sites
Matrix

Спаял сегодня redec 09b..

Всё работает... Когда не крутишь энкодер то контакты на выходе замкнуты.. сопротивление около 100Ом.. когда крутишь - сопротивление подскакивает до 300Ом.. джойстик Mjoy понимает это как отпускание кнопки.. только не всегда.. видимо разрывается не на долго..

Как увеличить время на которое прерывается цепь? впаивание сопротивления не помогает.

 

 

Схема вот тут: http://hongkongfui.de/REDec/redec09b.pdf

Share this post


Link to post
Share on other sites
Matrix

Или может быть я слишком быстро врашаю энкодер? у него всего 100 об минуту максимум?

Share this post


Link to post
Share on other sites
Stranger

Скорее всего проблема в дребезге контактов. Указанная вами схема не имеет соответствующей защиты. 100 оборотов в минуту это примерно 1.6 оборота в секунду. Не думаю, что вы вращаете энкодер с такой скоростью.

 

Да, почту получил. Спасибо. К сожалению еще не удалось взглянуть.

Share this post


Link to post
Share on other sites
Matrix

Дребезг это ложное срабатывание или несрабатывание?

 

У меня имеет место быть несрабатывание.. млжет быть интервал опроса у Mjoy большой?

вороде как я слышал что 10ms.

Share this post


Link to post
Share on other sites
Stranger

Дребезг это много ложных включений/выключений в момент смены состояния. Может приводить к остановке отсчета или случайному отсчету в ту или иную сторону.

 

А сколько импульсов на оборот имеет ваш энкодер? 10ms не так уж много. Как ни как 100 раз в секунду.

Share this post


Link to post
Share on other sites
Matrix

12 импульсов за оборот..

Энкодер фирмы bourns , модель PEC12-4220F-S0024.

Share this post


Link to post
Share on other sites
Stranger

Ну вот и посчитаем:

 

Дано:
  Максимальная скорость вращения, Vmax= 100об/мин
  Количество импульсов на оборот,   n=12

Найти:
  Длительность импульса t при максимальной скорости вращения.

Решение:
  Определим максимальную частоту следования импульсов fmax:
      fmax=Vmax*n=1200 импульсов в минуту или 1200/60=20Hz (импульсов в секунду)
  Определим длительность импульса, точнее его период:
      t=1/f=1/20=0.05s=50ms

Следовательно при интервале опроса 10ms за один период произойдет 5 опросов состояния, что вполне достаточно для уверенного распознавания состояния входа.

Share this post


Link to post
Share on other sites
Matrix

Значит дребезг.. а как он него избавится? может есть какая - нибудь схема?

Share this post


Link to post
Share on other sites

×
×
  • Create New...