Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.12.2008, 18:31
|
|
Частый гость
Регистрация: 18.03.2008
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Победить дребезг мышиного колеса.
Имеем в виде мышиного колеса квадратурный энкодер с жутким дребезгом, ибо механика. Какой должен быть алгоритм победы над дребезгом?
У меня раз в 500мкс проверяется состояние линий колеса. При "1" инкрементируется счётчик, при "0" декрементируется. При достижении счётчиком 0 или 10 поднимается флаг, что на ноге 0 или, соответственно 1. На каждой ноге свой счётчик и флаг. По прерыванию от фронта одной из линий проверяется второй флаг, так как первый уже "1", прерывание разрешено только после того как этот канал был стабильно "0". Далее увеличиваем переменную, ради которой всё затевалось (ну или уменьшаем, если второй канал = "0")
И всё равно этот жуткий дребезг не победил. Может кто подскажет?
Прикрепленный файл: 480110.zip
|
|
|
|
02.12.2008, 20:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Обычно время подавления дребезга 10-15 мС, можно смело делать до 50мС дискомфорта не ощушается.
|
|
|
|
02.12.2008, 21:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.03.2005
Сообщений: 1,056
Сказал спасибо: 1
Сказали Спасибо 250 раз(а) в 174 сообщении(ях)
|
|
|
|
|
02.12.2008, 22:29
|
|
Прописка
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Я делал счетчик оборотов (а потом и валкодер), и столкнулся с подобной проблемой, но потом ...
ну вобщем вот код на "10 строк"...
Прикрепленный файл: 3266191.rar
__________________
Если мы вам не подходим, вы нам вовсе не нужны! ![Сомнение](images/smilies/icon_neutral.gif)
Услышал и забыл, увидел и запомнил, сделал и понял! ![Горд собой](images/smilies/icon_dovl.gif)
Нейрон - штука тонкая! ![Одобряю](images/smilies/icon_true.gif)
Чудес на свете не бывает!
|
|
|
|
03.12.2008, 00:11
|
|
Частый гость
Регистрация: 18.03.2008
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо за инфу, поизучаю. А 50мс это много. Крутил колесо на экран осцилла, получалось до 300 Гц, если очень крутануть, ну 150, если просто быстро. Обычная скорость 50Гц (чуть выше среднего).
---------------
А код на "10 строк" надо расшифровывать ![Весело](images/smilies/icon_laugh.gif) Я в АВэЭрах дуб дубом. Вот кабы ПИК
Прикрепленный файл: 3266191.rar
|
|
|
|
03.12.2008, 01:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от vladikas2008
|
Спасибо за инфу, поизучаю. А 50мс это много. Крутил колесо на экран осцилла, получалось до 300 Гц, если очень крутануть, ну 150, если просто быстро. Обычная скорость 50Гц (чуть выше среднего).
---------------
А код на "10 строк" надо расшифровывать Я в АВэЭрах дуб дубом. Вот кабы ПИК
|
Значит тебе за глаза зватит 10 милисек для срабатывания.
Алгоритм 1:
По таймеру ( сажем 0,5-1 милисек ) считываеш стостояние ОБОИХ ЛИНИЙ,
сравниваеш с ПРЕДЫДЦЩИМ СОСТОЯНИЕМ,
если НЕ РАВНЫ в счётчик записываеш время срабатывания (например 10 милисек/0,5-1 милисек=2010)
если РАВНЫ то декремент счётчика
если СЧЁТЧИК = 0, значит сработало.
сравниваеш состояние предыдущего срабатывания и текущее, если равны то грузим счётчик новый временем и вываливаемся..
если не равны - значит изменилось состояние, вычисляем что изменилось и в какую сторону, рулим флагами для внешних программ, или чего то там делаем...
сохраняем новое стостояние..
Прикрепленный файл: 3266191.rar
|
|
|
|
03.12.2008, 14:47
|
|
Частый гость
Регистрация: 18.03.2008
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
У меня примерно так же, один фиг дребезг не победил. Ладно, на смежной ветке посоветовали апликуху почитать микрочиповскую по энкодерам, сейчас занят этим. Будут положительные результаты, сообщу, а пока не будем приумножать сущностей.
|
|
|
|
03.12.2008, 18:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от vladikas2008
|
У меня примерно так же, один фиг дребезг не победил.
|
если дребезга много... то ещё алгоритм...
три счётчика...
один считает одну ногу, другой другую ногу, третий все проходы.....
ИИЦИАЛИЗАЦИЯ: Общий счётчик настроить на время 1/3 от минимального требуемого времени срабатывания. Счётчики ног сбрасываеш.
РАБОТА:
общий счётчик-1
если нога=0 счётчик не считает,
если равна 1 то считает +1,
когда общий счётчик=0, анализируем состояние счётчиков ног.
если счётчик ноги › 1/2 общего счётчика,значит нога=1
Если счётчик ноги ‹ 1/2 общего счётчика,значит нога=0
сравнение в предыдущим состоянием входных линий.
Инициализация для следующеего цикла.
|
|
|
|
04.12.2008, 12:26
|
|
Частый гость
Регистрация: 18.03.2008
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Последний алгоритм работает на ура, большое спасибо.
---------
Только вопрос, почему общий счётчик настраивается на 1/3 минимального времени?
|
|
|
|
04.12.2008, 13:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от vladikas2008
|
Последний алгоритм работает на ура, большое спасибо.
---------
Только вопрос, почему общий счётчик настраивается на 1/3 минимального времени?
|
для надёжности.... что бы успел сработать хотя бы бы раз, за необходимое время...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:00.
|
|