реклама на сайте
подробности

 
 
> Опрос валкодера, Дребезг
Anjey_N
сообщение Nov 14 2007, 09:49
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Все привет!
Вопрос такой:
В системе стоит механический валкодер. Опрашиваю его я вот так

signed char ReadEncoder(void)
{
register signed char temp = 0;
encoder = (~PIN_Coder & 0x03);//i?iaa?yai PD0,PD1
if(status != encoder)
{
switch(encoder)
{
case 0:
if(status == 1) temp = 1;
else if(status == 2) temp = -1;
break;
case 1:
if(status == 3) temp = 1;
else if(status == 0) temp = -1;
break;
case 2:
if(status == 0) temp = 1;
else if(status == 3) temp = -1;
break;
case 3:
if(status == 2)temp = 1;
else if(status == 1) temp = -1;
break;
}
status = encoder;
}
return temp;
}
Єту программку скачал с нета. При медленном вращении валкодера показания на индикаторе меняются стабильно, а при быстром вращении - не изменяются.
Похоже на дребезг контактов. Как можно от этого избавиться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kirill Frolov
сообщение Nov 15 2007, 17:06
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(Anjey_N @ Nov 14 2007, 12:49) *
Вопрос такой:
В системе стоит механический валкодер. Опрашиваю его я вот так


Суть вопроса вот какая. Частота опроса входного сигнала должна быть минимум вдвое больше его частоты с которой он изменяется. Это очевидный факт. Но реализовать это в случае многократного пересечения валкодером края одной метки, когда он колеблется возле этого самого края сложно... И не нужно!. Тем более, если валкодер обрабатывается аппаратным прерыванием (к вопросу о том как прибору сделать "DoS" путём перепиливания тупой ножёвкой жгута проводов...)

Решение, вкратце таково: алгоритм модифицируется таким образом, что при прохождении края какой-либо метки в одном направлении её прохождение в обратном направлении попросту не фиксируется (запрещается прерывание, например). А фиксируется только прохождение следующего края метки в том же направлении (+1 к позиции) или прохождение не только что пройденного, а предшествующего ему края метки в обратном направлении (-2 к позиции). Может смутно объяснил. Советую просто расписать код Грея в круге и тогда легко будет понять как это работает, и что для реализации алгоритма достаточно запретить (допустим, валкодер имеет два выхода) прерывание от того выхода, который вызвал вот прямо сейчас прерывание -- т.е. поочерёдно разрешается прерывание от первого или второго выхода.

Алгоритм полностью решает проблему "дребезга", когда валкодер колеблется на краю метки (быстрая смена +1, -1, +1, -1...) -- не имея возможности его, валкодер, опрашивать с достаточно большой частотой можно потерять в точности, или же, используя прерывания легко заблокировать весь микроконтроллер исключительно в процессе обработки прерываний от валкодера. С описанным алгоритмом подобных проблем нет.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anjey_N   Опрос валкодера   Nov 14 2007, 09:49
- - psw   похоже, что я писал этот кусок как часто опраши...   Nov 14 2007, 13:24
|- - Anjey_N   Цитата(psw @ Nov 14 2007, 17:24) похоже, ...   Nov 14 2007, 16:35
|- - Anjey_N   Валкодеры, их два, подключены по такой схеме Дли...   Nov 15 2007, 08:27
|- - Alex B._   Обязательно нужно через фильтр пропускать отсчеты....   Nov 15 2007, 08:40
|- - alexander55   Цитата(Anjey_N @ Nov 15 2007, 11:27) Опро...   Nov 15 2007, 08:44
|- - Anjey_N   Цитата(alexander55 @ Nov 15 2007, 12:44) ...   Nov 15 2007, 15:24
|- - Anjey_N   Спасибо, думаю   Nov 16 2007, 08:25
- - Anjey_N   Мне тут посоветовали применить компъютерную мышь...   Nov 16 2007, 15:45
- - 676038   Мой опыт смотри здесь: http://electronix.ru/forum/...   Nov 16 2007, 19:39
|- - Anjey_N   Ходил по ссылке, читал. Так вы закончили этот прое...   Nov 17 2007, 15:33
- - 676038   По ссылке выше во вложении есть весь проект на С (...   Nov 17 2007, 18:29
|- - Anjey_N   Цитата(676038 @ Nov 17 2007, 22:29) По сс...   Nov 18 2007, 17:44
- - Anjey_N   Я тут провёл один эксперимент. На макетке собрал с...   Nov 20 2007, 15:29
- - Anjey_N   Провёл следующий эксперимент. Результаты те же, пр...   Nov 20 2007, 17:54
- - 676038   Позволю себе маленькие замечания по коду: - При ин...   Nov 20 2007, 20:03
- - Anjey_N   Цитата(676038 @ Nov 21 2007, 00:03) А теп...   Nov 21 2007, 08:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016