AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
20.04.2013, 14:39
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
_Ross_, два дебильных вопроса:
1) Как часто перекрываются датчики?
2) Зачем второе прерывание по входу?
Ответьте сначала на эти вопросы, главным образом себе.
|
|
|
|
21.04.2013, 21:08
|
#12
|
Временная регистрация
Регистрация: 12.02.2010
Сообщений: 69
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Спасибо. По таймеру красиво, только вот мне не удаётся проверяя сразу 2 датчика понять кто из них первый, это теряется на этапе между опросом по таймеру и анализом данных в цикле. А реверс нужен.
omercury, максимум 7 раз в секунду.
А при реализации из первого поста могло за секунду и 20 насчитать.
Вот код без прерываний, в его основе то что в какой-то момент оба датчика имеют одинаковое состояние (оба смотрят в прорезь на диске) а затем выясняется в сторону какого из них объект ушёл.
Код:
|
Cycle:
sbic PIND,3
rjmp Cycle
sbic PIND,2
rjmp Cycle
rjmp schet ; Это выполняется только при "0" и "0"
schet:
rcall Delay ; Задержка
inc stat
cpi stat,5 ; Тут многократная проверка состояния
brlo Cycle
sbic PIND,3 ; Теперь ожидание затенения
rjmp prs
sbic PIND,2 ; Одного из датчиков
rjmp prr
rjmp schet
prr:
rcall Delay
inc stat1
cpi stat1,8 ; Тоже многократная проверка
brlo schet
rjmp chn ; Переход на подпрограмму счёт назад
Вторая подпрограмма по метке prs аналогична этой. |
Используемые регистры очищаются в подпрограммах счёта.
Собственно, уверен что от ложных срабатываний это не избавит полностью, так, если именно с этой средней точки начнётся какая-то вибрация вперёд-назад ещё неизвестно куда будет счёт. Нужна критика и если не трудно-информация как же это в мире-то решается.
Последний раз редактировалось _Ross_; 21.04.2013 в 21:11.
|
|
|
|
22.04.2013, 01:30
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Сообщение от _Ross_
|
максимум 7 раз в секунду.
А при реализации из первого поста могло за секунду и 20 насчитать.
|
Могло и 200 и 2000 и 20000.
Не в этом суть. На второй вопрос не ответили.
(подсказка - квадратурный энкодер, картинка...)
|
|
|
|
22.04.2013, 08:44
|
#14
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,087
Сказал спасибо: 2,565
Сказали Спасибо 11,899 раз(а) в 5,972 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
_Ross_, не понял устройство датчика, но, думаю, обычный вариант. Тогда должно быть четыре состояния:
1. Оба темные
2. Первый светлый, второй - темный
3. Оба светлые
4. Первый темный, второй - светлый
Если при проверках по прерыванию (по изменению состояния) состояния изменяются, скажем, 1-2-3 - норма, 1-2-1-2 (или подобным образом) - дребезг.
Думается, лучше развить эту мысль, чем воевать с временами (при разных скоростях - разные времена, сложный алгоритм).
ПС Это просто мысль, не конкретный алгоритм.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.04.2013, 08:53
|
#15
|
Временная регистрация
Регистрация: 12.02.2010
Сообщений: 69
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Интересно, именно на вибрацию на границе учёта я и наткнулся, портит показания.
Думаю, я не стану изменять значение счётчика пока не пройдёт полный цикл изменений.
Есть вариант с изменением условий прерываний с фронта на спад.
Сейчас получаю ошибки положения при резких рывках туда-сюда несмотря на то что я сделал учёт только после цикла "оба открыты"- "оба закрыты". Нужно всё-же полностью контролировать ситуацию.
Последний раз редактировалось _Ross_; 22.04.2013 в 10:50.
|
|
|
|
22.04.2013, 11:51
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Попробуйте делать счет отслеживая корректные изменения состояния датчиков. Примерно так
00 - › 01 - › 11 - count up
00 - › 10 - › 11 - cont down
__________________
misterdi<@>i.ua
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
22.04.2013, 12:00
|
#17
|
Временная регистрация
Регистрация: 12.02.2010
Сообщений: 69
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Спасибо, этим я сейчас и занят.
Задача понятна - По сути мне нужно считывать состояние 2-х входов и возможно 4 их состояния отличных друг от друга.
Переход от 1 к 3 возможен только через 4 или 2
1-4-3 счёт назад например и 1-2-3 вперёд при этом такие штуки как 1-2-1-2-1-2-3 должны обрабатываться как 1-2-3
|
|
|
|
22.04.2013, 13:35
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Так и не дождался ответа.
Попробую развить мысль в одно лицо.
Картинка как раз для этого случая, воспользуемся.
Работаем по событиям (Events) на первом датчике, второй для контроля направления.
1) Простейший случай:
- положение 1, оба датчика освещены, на входах "0" (датчики замыкают на "землю");
- переход в положение 2, перекрывается датчик-1 и линия переходит в "1" - происходит Event posedge(положительный перепад). Проверяем датчик-2, на нем по прежнему "0" - значит происходит вращение вправо. Если бы было "1" - значит было бы вращение влево. Однозначно!
2)Чуть сложней, с подавлением дребезга:
- положение 1, оба датчика освещены, на входах "0" (датчики замыкают на "землю");
- переход в положение 2, перекрывается датчик-1 и линия переходит в "1" - происходит Event posedge(положительный перепад). Проверяем датчик-2, на нем по прежнему "0" - значит происходит вращение вправо. Запоминаем состояние датчика-2 в двух флагах (флаг-1 и флаг-2) и запускаем таймаут. Если в течение отсчёта таймаута произошло ещё одно такое же событие(положительный перепад) и состояние датчика-2 изменилось на противоположное (проверяем по флагу-2), то это однозначно интерпретируется как дрожание счётного механизма. Происходит перезапуск таймаута, сохранение положения датчика-2 только в флаг-2 и ожидание следующего события. Это действие может происходить сколь угодно большое количество раз - на работу устройства оно не оказывает совершенно никакого влияния. Если за время таймаута происходит ещё одно событие (уже третье), но состояние флага-2 и датчика-2 на этот раз совпали, то это следует интерпретировать как реверс счётного механизма. Выполняем инверсию флага-1 и делаем переход на анализ его состояния и исполнение описанного в следующем предложении.
Если же вышел таймаут до прихода следующего события, то анализируется флаг-1 и производятся необходимые действия в соответствии с логикой программы. Далее происходит сброс флагов и наступает ожидание следующего события.
В соответствии с таким алгоритмом работы счёт может выполняться на весьма высокой скорости, даже с резкой сменой направления, задержки появляются только при многократном "дрожании" счётного механизма.
Можно, конечно, анализировать все четыре состояния датчиков, но нужно ли?
Последний раз редактировалось omercury; 22.04.2013 в 13:37.
|
|
|
Сказали "Спасибо" omercury
|
|
|
22.04.2013, 20:15
|
#19
|
Временная регистрация
Регистрация: 12.02.2010
Сообщений: 69
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Мне кажется, 4 состояния дали бы мне некую амплитудную фильтрацию вибрации датчика. По времени там диапазон возможных скоростей и вибраций частично пересекается.
В вашем описании алгоритма я кажется всё понял. Только пока он не функционирует но это я очевидно что-то упустил.
Цитата:
|
Если в течение отсчёта таймаута произошло ещё одно такое же событие(положительный перепад) и состояние датчика-2 изменилось на противоположное (проверяем по флагу-2), то это однозначно интерпретируется как дрожание счётного механизма.
|
То есть оно будет работать как маятник пока не закончится дребезг? Перезапись обратного значения, перезапуск таймера...
Цитата:
|
Если за время таймаута происходит ещё одно событие (уже третье), но состояние флага-2 и датчика-2 на этот раз совпали, то это следует интерпретировать как реверс счётного механизма.
|
А если у меня таймаут такой что за его длительность никак не может произойти такого смещения?
|
|
|
|
22.04.2013, 20:30
|
#20
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,087
Сказал спасибо: 2,565
Сказали Спасибо 11,899 раз(а) в 5,972 сообщении(ях)
|
Re: Алгоритмы фильтра дребезга avr
Сообщение от _Ross_
|
А если у меня таймаут такой что за его длительность никак не может произойти такого смещения?
|
А если вообще без времен, а только анализ состояний? Правильная последовательность - движение, неправильная - дребезг. И никаких заморочек типа "а какая скорость?" и тому подобного.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:29.
|
|