21.08.2021, 04:38
|
|
Частый гость
Регистрация: 19.07.2021
Сообщений: 28
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
stm32 interrupt
Приветствую, есть stm32f103C8T6, к нему подключены 4 кнопки EXTI line 15:10 interrupts. Включены подтягивающие резисторы к плюсу. Так же параллельно каждой кнопки стоят конденсаторы 0.1мкф, для устранения дребезга. Но примерно раз в 10 нажатий на одну и ту же кнопку приходят ложные прерывания с какой-то другой кнопки. Уже и пробовал и отдельно резисторы ставить для подтяжки на 10к.Ом, не помогает. Так же заметил странную реакция на прикосновение к пинам к которым подключены эти кнопки, если просто прикасаться руками ничего не происходит, если взять пинцет, то срабатывает прерывание. Если же убрать конденсаторы, вроде бы все становится нормально, но конечно придется уже программно бороться с дребезгом, чего бы не хотелось т.к. очень важна скорость реакции на прерывания. Почему так может происходить? Все время на атмеги ставил конденсаторы и отлично помогали бороться с дребезгом.
|
|
|
|
21.08.2021, 09:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: stm32 interrupt
1. Использовать подтягивающие резисторы - плохая идея из-за их высокоомности.
2. RC подавление - тоже не идеально. Прерывание как настроено? На фронт, спад?
3. Смотри разводку и взаимное расположение линий от кнопок. У тебя достаточно высокоомная цепь. И реакция на касания - это вполне нормально.
Попробуй так:
|
|
|
Сказали "Спасибо" DanilinSA
|
|
|
21.08.2021, 10:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,731
Сказал спасибо: 2,439
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: stm32 interrupt
А,если 100к заменить на 1ком?
|
|
|
|
21.08.2021, 13:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
|
Re: stm32 interrupt
Сообщение от tester01
|
ставил конденсаторы и отлично помогали бороться с дребезгом
|
Так STM32 в несколько раз быстрее, вот и успевает.
Думаю, там не столько дребезг, сколько слишком пологий фронт, по нему прерывание может отработать несколько раз. Триггера Шмитта, насколько помню, там не предусмотрено. По первому срабатыванию запрещать прерывание на несколько мс.
|
|
|
|
21.08.2021, 13:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: stm32 interrupt
Нет, триггер Шмитта на дискретных входах есть. Хотя насчет гистерезиса ... надо смотреть.
Я не понял, на что автор ветки жалуется? На наличие дребезга или на помехи на линии от замыкания других кнопок?
|
|
|
|
21.08.2021, 15:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: stm32 interrupt
Не нужны никакие прерывания, чтобы кнопки или концевики обрабатывать! Достаточно в основном цикле вызывать обработчик, который и будет реагировать на события ( вот так, например). Поменяла кнопка состояние — все, в течение 50-100мс не реагируем на нее вообще никак, а спустя это время уже можно опять проверять.
Если провода к кнопкам очень длинные или много помех, то лучше внешнюю подтяжку сделать (вплоть до 1кОм, как выше советовали). Если и помех нет, и провода короткие, то внутренней подтяжки хватит.
P.S. Если там сильные индуктивные наводки, может, до кондера стоит еще и маленькую индуктивность эдак на 0.1мГн добавить?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
Эти 2 пользователя(ей) сказали Спасибо eddy за это сообщение:
|
|
|
21.08.2021, 23:48
|
|
Частый гость
Регистрация: 19.07.2021
Сообщений: 28
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 interrupt
Сообщение от DanilinSA
|
Прерывание как настроено? На фронт, спад?
|
На спад
Сообщение от pambaru
|
Думаю, там не столько дребезг, сколько слишком пологий фронт, по нему прерывание может отработать несколько раз.
|
Нет, дело именно в том что не от одной и той же кнопки приходит несколько прерываний, а еще и иногда от одной из кнопок которые вообще не трогал.
Сообщение от eddy
|
Если провода к кнопкам очень длинные или много помех, то лучше внешнюю подтяжку сделать (вплоть до 1кОм, как выше советовали). Если и помех нет, и провода короткие, то внутренней подтяжки хватит.
|
Провода не слишком длинные, 5-8 см. Пока все на макетке собрано.
|
|
|
|
21.08.2021, 23:56
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: stm32 interrupt
Сообщение от tester01
|
Пока все на макетке собрано.
|
Земля на кнопках, мне кажется, не очень.
Внешняя подтяжка не больше 30 кОм должна помочь. Или схема из второго поста.
Есть еще вариант. Емкость параллельно контактам достаточно большая, поэтому при замыкании кнопок вполне может возникать достаточно мощный ЭМ импульс, а контакт кнопки (сама железяка) выполнять роль излучателя (типа как в искровом телеграфе). Судя по фото, контакты кнопок расположены параллельно, а это наилучшее расположение для перекрестных наводок. Спасет десятикилоомник между кнопкой и конденсатором.
Удачи!
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 22.08.2021 в 01:13.
|
|
|
|
22.08.2021, 01:46
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: stm32 interrupt
Сообщение от eddy
|
Не нужны никакие прерывания, чтобы кнопки или концевики обрабатывать!
|
Вот это верный совет.
Реагировать надо не на нажатие, а на отпускание. И в тот момент мы уже должны знать, как долго кнопку держали нажатой и принимать решение, шум это или пользователь нервный.
|
|
|
|
22.08.2021, 03:11
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 722
Сказал спасибо: 363
Сказали Спасибо 803 раз(а) в 377 сообщении(ях)
|
Re: stm32 interrupt
Не помешало бы убедиться, что флаги Pending register (EXTI_PR) для подключенных кнопок своевременно и корректно очищаются. Для очистки достаточна просто запись 1 в бит(ы), без RMW.
И вообще проверить код.
Думается, прерывания от кнопок логичнее использовать для выхода из спячки и/или как сигнал о том, что пора приступить к их программной обработке, как исчерпывающе описал eddy, пост #6. Конечный автомат позволит реализовать достаточно изощренную логику: длинные/короткие/одновременные нажатия и т.п.
А сейчас вдруг причина окажется в лишнем контакте там, где его не должно быть Шутка
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:30.
|
|