- Датчик частоты вращения...2020-06-20
- не могу опознать энкодер2015-05-20
-
- mHalls.c VLLV(85 знак., 09.04.2022 19:59, ссылка, ссылка)
- а готово - очень просто (у меня по 2 каналам в пульте). Прерывание от таймера через 100-200 мксек. Смотрим бит порта. Дребезг? Смотрим уверенное замыкание/размыкание (обычно 2-3 раза). Потом - принятие решения ( по счету). Так можно и двух канальный режим (направление вращения - когда замыкание одного канала при замыкании в другом). Я ничего не поменял за 20 лет (начиная с обычного 8-битника) - Лaгyнoв(30.03.2022 20:36)
- Алгоритмов много, но у всех один и тот же недостаток - они
дребезго-неустойчивые. А чтобы побороть этот недостаток, приходится
делать опрос не по изменению статуса, а по таймеру, т.е. без
таймера не обойтись. Но есть позитивный момент - опрос можно
запихнуть в обработчик прерывания системного таймера. Кто знает
дребезго-устойчивый алгоритм, прошу им и со мной поделиться. Kceния(2 знак., 30.03.2022 18:53 - 19:06, картинка, картинка)
- Типа "корреляционного". По событию (прерывание по изменению
состояния) идет опрос с подсчетом считанных состояний. Если,
скажем, из 15 опросов 5 - 0 и 10 - 1, то считаем, что устойчивое
состояние - 1. - reZident(30.03.2022 19:04)
- Я электрик. saifullin2(141 знак., 31.03.2022 07:45)
- Пробовала - результат плохой, т.к. этот способ не может отличить
настоящий "строб" от дребезга. Отсюда и неясность с тем, сколько
реальных шагов сделал энкодер. В общем, не понравился мне этот
метод - хочу другого (с периодическим опрашиванием). - Kceния(30.03.2022 19:15)
- Есть еще неплохой алгоритм по прерываниям с портов: 113(253 знак., 18.04.2022 13:48)
- Вы видимо просто не умеете "готовить" :-) - reZident(30.03.2022 23:28)
- Можно на триггере RS или Шмидта. Один корпус придется добавить.
Заодно и защита от статики на корпус энкодера. WhiteFace(2 знак., 30.03.2022 21:11, , ссылка, ссылка)
- Мне интересна задача не в плане избавления от дребезга с помощью
насаждения дополнительных электрических элементов, а чисто в
алгоритмическом плане, как задача обнаружения шагов на фоне
дребезга. Тем более что эта задача наверняка имеет алгоритмическое
решение, поскольку я сама без труда могу это делать чисто
зрительно, лишь глядя на график логического анализатора. Более
того, здесь имеет место ситуация, формально аналогичная выделению
полезного сигнала из шума, т.к. в Kceния(182 знак., 30.03.2022 23:22)
- Нужно перейти к цифрам. Если период опроса в два раза выше ширины
импульса дребезга - все просто. Cкpипaч(398 знак., 31.03.2022 09:05)
- Вот именно. Можно фильтровать шум в цифре, но для этого потребуется непозволительно много ресурсов для такой второстепенной задачи. При быстром вращении ручного энкодера импульсы идут с частотой более килогерца, а дребезг в десятки раз выше. RC цепочки + триггеры Шмитта (которые во многих процах встроены на каждом входе), и будет надежно работать самый тупой алгоритм, не отжирающий практически ничего из ресурсов - Yurasvs(31.03.2022 13:29)
- Не. Всё не так. Фильтровать дребезг -- словно уговаривать хулигана.
Нужна задержка на время дребезга. Типа "упс, чё-то дёрнулось, а
ну-ка ну-ка, посмотрим. Ага, дёрнулось". - Бapбoc(30.03.2022 23:31)
- Да, где так. Нужно в течении какого-то времени ждать повторяющихся
значений (по минимуму - 2 раза подряд, а лучше 3 раза подряд).
Такое событие принимать за истинное значение уровня, а дальше ждать
такого же истинного уровня противоположной "полярности". Т.е. без
счета времени (или без строгой периодичности опросов) здесь не
обойтись, т.к. с помощью прерываний по фронтам невозможно
подсчитывать число повторяющихся значений. - Kceния(30.03.2022 23:44)
- Без таймера программно дребезг не давится никак, можно аппаратно, как Yurasvs gпредложил, но тогда нужен самодельный триггер Шмидта с большим гистерезисом. Или опрашивать таймером в несколько раз быстрее, чем минимальное время перехода и мажоритарка. - Andreas(31.03.2022 09:11)
- Это вам, сударыня, не приходилось клавку опрашивать. - Бapбoc(30.03.2022 23:53)
- Бог миловал :) - Kceния(31.03.2022 00:11)
- А если там биения? Сколько смотреть-то? По мне - если энкодер
дребезжит (или то, что его приводит во вращение), то он (или вся
конструкция в целом) выбран не соответственно задаче. Забарывание
дребезга должно срабатывать раз в тысячу импульсов. Или в миллион
импульсов. Но никак на каждом шаге. - POV(30.03.2022 23:35)
- Так энкодеры бывают разные
голубые красные. Оптические не дребезжат. Видел диск энкодера с кодом Грэя на десять бит? Красивая штучка. Изячная. - Бapбoc(30.03.2022 23:51)- А вот у моего энкодера, если питания на (+) не подавать, а A и B
подпирать только подтяжкой от контроллера (PULL_UP), то шум очень
сильный. Если подать на (+) 3.3V, то шум заметно уменьшается, а
если подать на (+) 5V, то становится совсем редким. Впечатление
такое, что шум возникает из-за плохого контакта, тогда как более
высокое напряжение этот промежуток пробивает. Kceния(1 знак., 31.03.2022 00:22, картинка)
- Если есть проблемы с контактом, имеем смысл поднимать ток вплоть до
10мА. Не имею большой статистики, но полагаю, что не обязательно
большое напряжение, важно, чтобы обеспечивался ток. Nikolay_Po(101 знак., 31.03.2022 12:43)
- Угу, когда паяют перед отмывкой такое бывает. - Andreas(31.03.2022 12:53)
- вы когда нибудь интересовались сопротивлением PULL_UP-ов? ну а это
можно в .... отлить - Впечатление такое, что шум возникает из-за плохого контакта,
тогда как более высокое напряжение этот промежуток пробивает. - m16(31.03.2022 00:31)
- Да, у меня это 30 К. А в энкодере стоят 10 К. - Kceния(31.03.2022 01:15)
- Если есть проблемы с контактом, имеем смысл поднимать ток вплоть до
10мА. Не имею большой статистики, но полагаю, что не обязательно
большое напряжение, важно, чтобы обеспечивался ток. Nikolay_Po(101 знак., 31.03.2022 12:43)
- А вот у моего энкодера, если питания на (+) не подавать, а A и B
подпирать только подтяжкой от контроллера (PULL_UP), то шум очень
сильный. Если подать на (+) 3.3V, то шум заметно уменьшается, а
если подать на (+) 5V, то становится совсем редким. Впечатление
такое, что шум возникает из-за плохого контакта, тогда как более
высокое напряжение этот промежуток пробивает. Kceния(1 знак., 31.03.2022 00:22, картинка)
- Так энкодеры бывают разные
- Да, где так. Нужно в течении какого-то времени ждать повторяющихся
значений (по минимуму - 2 раза подряд, а лучше 3 раза подряд).
Такое событие принимать за истинное значение уровня, а дальше ждать
такого же истинного уровня противоположной "полярности". Т.е. без
счета времени (или без строгой периодичности опросов) здесь не
обойтись, т.к. с помощью прерываний по фронтам невозможно
подсчитывать число повторяющихся значений. - Kceния(30.03.2022 23:44)
- Глаза аналоговые. А разрешения (скорости обработки фронтов) МК
хватит? Вон УАРТ считает 16 тактов чтобы принять решение об уровне
сигнала. Значит надо безо всяких прерываний по фронту делать
выборку (и обработку) с порта с частотой в 16 раз выше максимальной
частоты импульсов... впрочем, это КО говорит, не я. - POV(30.03.2022 23:27)
- А почему бы его и не использовать? - ILYAUL(30.03.2022 23:50)
- Нужно перейти к цифрам. Если период опроса в два раза выше ширины
импульса дребезга - все просто. Cкpипaч(398 знак., 31.03.2022 09:05)
- Триггер лейтенанта Шмидта. Крымский вариант триггера Шмитта. :) - Argon(30.03.2022 22:40)
- Мне интересна задача не в плане избавления от дребезга с помощью
насаждения дополнительных электрических элементов, а чисто в
алгоритмическом плане, как задача обнаружения шагов на фоне
дребезга. Тем более что эта задача наверняка имеет алгоритмическое
решение, поскольку я сама без труда могу это делать чисто
зрительно, лишь глядя на график логического анализатора. Более
того, здесь имеет место ситуация, формально аналогичная выделению
полезного сигнала из шума, т.к. в Kceния(182 знак., 30.03.2022 23:22)
- Типа "корреляционного". По событию (прерывание по изменению
состояния) идет опрос с подсчетом считанных состояний. Если,
скажем, из 15 опросов 5 - 0 и 10 - 1, то считаем, что устойчивое
состояние - 1. - reZident(30.03.2022 19:04)
- Опрашиваем почаще, берём 2 бита текущего состояния и 2 бита
предыдущего, по этому 4-х битному индексу из таблицы извлекаем
приращение кординаты. ЫЫyкпy(541 знак., 30.03.2022 18:33)
- кузяво - SciFi(30.03.2022 18:46)
- Да, хорошо, но даже весьма крутой алгоритм не справится с
раздолбанным или загрязненным китайским энкодером, у которого
контакты замкнутой в данный момент фазы рандомно теряют контакт в
абсолютно произвольное время (то есть дребезжать может не только в
момент переключения, а вообще в любой произвольный момент, пока
контакты замкнуты). Такая фигня наблюдается весьма нередко, причем
даже у новых энкодеров, которые долго лежали на складе, приводит к
ложным шагам в Yurasvs(313 знак., 30.03.2022 20:02)
- А на этот случай алгоритм принятия решения усложняется путем учета
предыдущего "отфильтрованного" состояния - болтается энкодер вокруг
прежнего состояния или все-таки пытается пытается перейти в новое? ABГ(224 знак., 11.04.2022 14:33)
- уже затолкано в файле выше VLLV(1 знак., 11.04.2022 18:54, картинка)
- А на этот случай алгоритм принятия решения усложняется путем учета
предыдущего "отфильтрованного" состояния - болтается энкодер вокруг
прежнего состояния или все-таки пытается пытается перейти в новое? ABГ(224 знак., 11.04.2022 14:33)
- Да, хорошо, но даже весьма крутой алгоритм не справится с
раздолбанным или загрязненным китайским энкодером, у которого
контакты замкнутой в данный момент фазы рандомно теряют контакт в
абсолютно произвольное время (то есть дребезжать может не только в
момент переключения, а вообще в любой произвольный момент, пока
контакты замкнуты). Такая фигня наблюдается весьма нередко, причем
даже у новых энкодеров, которые долго лежали на складе, приводит к
ложным шагам в Yurasvs(313 знак., 30.03.2022 20:02)
- кузяво - SciFi(30.03.2022 18:46)
- Энкодер не измерительный.Просто ручка управления по меню бегать.Те
требования к нему смешные. - PlainUser(30.03.2022 17:12)
- Лет 20 назад такое на пик делал, задачка ни о чем 2 пина с прерываниями по одному из фронтов, по одному прерыванию с задержкой состояние другого пина читаем и наоборот. Задержка больше чем, предполагаемый джиттер, скажем 5 мс. Для страховки можно RC цепи по входам поставить. - Visitor(30.03.2022 17:39)
- у меня сделано так. наружу ничего не выдается, т.к. смотрел через отладчик сколько насчитал. делал для ручного счета СМД компонентов, скорость перемещения ленты не сильно большая была Andrey190(684 знак., 30.03.2022 16:14)
- "Библиотека" это круто звучит для такой задачи )) делается вот
как-то так POV(1 знак., 30.03.2022 15:41, ссылка)
- В этой "библиотеке" не понятно как влияет на принятие решения
значение encoder[num].err. Возможно оно как-то учитывается в
функции enc_check(), но ее реализации нет в архиве. - mmc(30.03.2022 20:20)
- Никак, просто для сведения. В мои задачах ошибки больше 1 не
случается (иногда на старте, т.к. неизвестно предыдущее состояние).
По сути служит для обнаружения дребезга или косяка по прошивке,
которая не успевает своевременно отрегулировать на фронт... POV(91 знак., 30.03.2022 20:38)
- Я использую свою реализацию того же алгоритма, что в Вашей в
библиотеке. Это лучший алгоритм из того, что я пробовал. У меня
используются китайские энкодеры, они дребезжат очень сильно. С этим
алгоритмом по крайней мере у меня нет ошибок определения
направления вращения. Но он какой-то тормозной: не реагирует на
единственный щелчок энкодера, ему надо несколько щелчков, чтобы
обнаружить вращение. Возможно из-за сильного дребезга, то есть
большого количества ошибок. Не mmc(16 знак., 30.03.2022 20:54)
- Да нет, с чего бы... POV(35 знак., 30.03.2022 21:01, ссылка)
- а какой там средний период импульсов? В микросекундах? - Лaгyнoв(30.03.2022 21:00)
- Это зависит от того с какой скоростью вращать ось энкодера. Вращать
можно очень медленно или быстро. В моем энкодере на полный оборот
оси происходит 16 щелчков контактов. Поэтому, если делать один
оборот в секунду (быстрее уже сложновато), получается период около
63 мс. Некоторые индивидумы могут вращать и быстрее. mmc(623 знак., 30.03.2022 21:33)
- у нас два вида датчиков расхода. Есть еще местами древние на герконах. Но там обычно один импульс на литр и соответственно период не менее 500 мсек. Для датчиков с числом импульсов 100-120 на литр и расходом до 100 л/минуту средний период - до 5 мсек. Хотя именно средний, потому как сильная детонация и промежутки могут меньше 2 мсек при длине импульса до 0,8 мсек. И везде я программно опрашиваю уровень с выхода. Состояние считается верным, если не менее 3 раз подряд. Для Лaгyнoв(83 знак., 31.03.2022 08:42)
- Всё с точностью до наоборот. Опрос энкодера должен происходить РЕЖЕ, чем длительность дребезга. Точно так же, как и опрос кнопок. Опрос с частотой ниже дребезга и является искомой защитой от дребезга. Можно канешна добавить ранее упомянутый тут фильтр - такой же, как в приемниках УАРТов. Но это дело вкуса. Обнаружение вращения (щелчков) делается на очень простой машине состояний (16 значений). Быстрое вращение энкодера будет приводить к пропускам, но это не имеет значения. my504(94 знак., 31.03.2022 08:09)
- Это зависит от того с какой скоростью вращать ось энкодера. Вращать
можно очень медленно или быстро. В моем энкодере на полный оборот
оси происходит 16 щелчков контактов. Поэтому, если делать один
оборот в секунду (быстрее уже сложновато), получается период около
63 мс. Некоторые индивидумы могут вращать и быстрее. mmc(623 знак., 30.03.2022 21:33)
- Я использую свою реализацию того же алгоритма, что в Вашей в
библиотеке. Это лучший алгоритм из того, что я пробовал. У меня
используются китайские энкодеры, они дребезжат очень сильно. С этим
алгоритмом по крайней мере у меня нет ошибок определения
направления вращения. Но он какой-то тормозной: не реагирует на
единственный щелчок энкодера, ему надо несколько щелчков, чтобы
обнаружить вращение. Возможно из-за сильного дребезга, то есть
большого количества ошибок. Не mmc(16 знак., 30.03.2022 20:54)
- Никак, просто для сведения. В мои задачах ошибки больше 1 не
случается (иногда на старте, т.к. неизвестно предыдущее состояние).
По сути служит для обнаружения дребезга или косяка по прошивке,
которая не успевает своевременно отрегулировать на фронт... POV(91 знак., 30.03.2022 20:38)
- Во , шо-то в этом роде на EXTI и хотелось. - PlainUser(30.03.2022 17:20)
- В этой "библиотеке" не понятно как влияет на принятие решения
значение encoder[num].err. Возможно оно как-то учитывается в
функции enc_check(), но ее реализации нет в архиве. - mmc(30.03.2022 20:20)
- Я у Леонида Ивановича драл, могу посмотреть только поздно вечером. - VLLV(30.03.2022 15:37)
- Находил вот это.Но чем там закончилось не очень понял. PlainUser(1 знак., 30.03.2022 17:28, ссылка)
- Спасибо. Я думал, это эпичное обсуждение уже в Пустыне было. - Toчкa oпopы(30.03.2022 22:21)
- Находил вот это.Но чем там закончилось не очень понял. PlainUser(1 знак., 30.03.2022 17:28, ссылка)
- А что за энкодер что он с таймером? Неужто дребезг программно
устраняют? - POV(30.03.2022 15:27)
- У stm32 бывает таймер с режимом энкодера. Сам считает фронты
туда-сюда как надо. - SciFi(30.03.2022 15:30)
- Именно так.Я думал все в курсе. - PlainUser(30.03.2022 17:14)
- о какой! - POV(30.03.2022 15:31)
- Дребезг не устранит, конечно. А ты бери оптический энкодер, а не
механический. - SciFi(30.03.2022 15:32)
- Только такими и пользуюсь. - POV(30.03.2022 15:35)
- Боурнс? Чота других толковых не нашёл. - mse homjak(30.03.2022 19:54)
- Эммм... да их валом. Вон хоть русские skb-is.ru - POV(30.03.2022 20:34)
- Это промышленные, слишком жырно. Пользую Боурн со 128 импульсами на оборот. Но даже они по цене стали кусучими. - mse homjak(30.03.2022 22:57)
- Эммм... да их валом. Вон хоть русские skb-is.ru - POV(30.03.2022 20:34)
- Боурнс? Чота других толковых не нашёл. - mse homjak(30.03.2022 19:54)
- Только такими и пользуюсь. - POV(30.03.2022 15:35)
- Дребезг не устранит, конечно. А ты бери оптический энкодер, а не
механический. - SciFi(30.03.2022 15:32)
- У stm32 бывает таймер с режимом энкодера. Сам считает фронты
туда-сюда как надо. - SciFi(30.03.2022 15:30)