Jump to content

    

Кнопки и помехи

Приветствую!

 

В двух словах - есть, допустим, панель с кнопками (несколько десятков), и разбросаны они на площади примерно 30x30 сантиметров.

Панель эту нужно опрашивать и выдавать инфу по определенному интерфейсу наружу. Кнопки можно объединять матрицей или вести индивидуально на МК.

Длинные линии, идущие от кнопок к МК, как антенны, бывает, ловят импульсные помехи (даже с сильной подтяжкой). Поэтому отличить помеху от реального нажатия становится проблематично.

Раздумываю над организацией вменяемой помехозащищенности при опросе таких кнопок. Ложные срабатывания мне ни к чему...

Идея с фильтрацией выборок при сканировании мне не очень нравится, поскольку длительности помех особо не известны - пока не замерял, но точно знаю, что они есть:spiteful:

В то же время хочу сделать хорошую отзывчивость кнопок - не гуд держать палец на кнопке, пока отработает какой-то там программный фильтр и примет решение - норм нажатие или помеха.

 

Есть идейка параллельно на все кнопки запустить линию Tx UART-передатчика в МК, а на Rx подать сигнал с мультиплексора, объединяющего оставшиеся выводы с кнопок.

То есть получается механизм эхо-локации - выбрали мультиплексором опрашиваемую кнопку, отправили на нее какой-нибудь вменяемый символ (а лучше последовательность) и ждем его на приеме. Приняли его же - кнопка нажата пользователем с вероятностью 99%... Приняли мусор - помехи, не реагируем.

 

Может, изобретал кто-нибудь такой велосипед... Поделитесь впечатлениями. Ну или идею саму покритикуйте. Спасибо!

Share this post


Link to post
Share on other sites

Откройте клавиатуру от компьютера и посмотрите как она устроена.

Share this post


Link to post
Share on other sites
54 минуты назад, HardEgor сказал:

Откройте клавиатуру от компьютера и посмотрите как она устроена.

Под рукой донора нет, но... чего я там не видел?

Обычная матрица "строки-столбцы" и контроллер. Схемы из интернета лишний раз это подтверждают.

И что я должен понять из этого? Реализации помехозащиты с этой стороны не видать, как бы. Да и есть ли она? Вряд ли.

В ноутбуке у меня клавиатура помещена в металлический каркас, чтобы от со стороны материнки не наводилось ничего.

Ну и стандартная китайская "капелька" контроллера клавы - как работает? Только осциллографом смотреть. Полагаю, все стандартно: опрос матрицы.

Контроллер выдает наружу скан-коды (нажата-отпущена). Но закодировать я и сам смогу, как мне нужно.

Вопрос именно в помехозащищенном считывании первичных сигналов с самих кнопок:wink:

Share this post


Link to post
Share on other sites

Что-то усложняете Вы. Защитите от дребезга (простой программной фильтрацией), защитите от электромагнитной наводки по входу (RC-цепочки). Ну еще и выходные линии от статики.

Share this post


Link to post
Share on other sites
1 час назад, Arlleex сказал:

импульсные помехи ... Поэтому отличить помеху от реального нажатия становится проблематично

Если длительность помехи у Вас совпадает с длительностью нажатия (неведомым чудищем, не иначе), отличить одно от другого можно только по разнице энергий — помеха в среднем 30 ампер, поэтому коммутируемый кнопками ток должен быть хотя бы вдвое больше.

Share this post


Link to post
Share on other sites
1 час назад, rx3apf сказал:

Что-то усложняете Вы...

Возможно, да.

 

44 минуты назад, Plain сказал:

Если длительность помехи у Вас совпадает с длительностью нажатия (неведомым чудищем, не иначе), отличить одно от другого можно только по разнице энергий — помеха в среднем 30 ампер, поэтому коммутируемый кнопками ток должен быть хотя бы вдвое больше.

Огонь:biggrin:

 

Значит, самое простое, все-таки, программный фильтр. Лап в МК полно, хоть к каждой кнопке индивидуальную ножку.

Share this post


Link to post
Share on other sites
14 часов назад, Arlleex сказал:

Под рукой донора нет, но... чего я там не видел?

Обычная матрица "строки-столбцы" и контроллер. Схемы из интернета лишний раз это подтверждают.

И что я должен понять из этого? Реализации помехозащиты с этой стороны не видать, как бы. Да и есть ли она? Вряд ли.

Вы ничего не пишите про характер помехи и т.д., поэтому считаем в нормальном офисном помещении.

А  клавиатуры для компьютеров почему-то работают и никаких помех не ловят, но можно навести  - поднести мобильник в процессе вызов  и увидеть влияние.

Share this post


Link to post
Share on other sites

недавно замутил драйвер для кнопок

uint32_t GPIO_GetButtons(void)
{
    int i;
    uint32_t key = 0;
    uint32_t but;
    
    uint32_t port_val = BUT_PORT->IDR;
    
    for (i = 0; i < MAX_BUT; i++)
    {
        if (port_val & button[i].mask)
            but = 1;
        else
            but = 0;
        
        if ( (but == button[i].trig_level) && (button[i].state == 0)) 
        {
            button[i].debounce_on++;
            if (button[i].debounce_on > KEY_DEBON_MAX)
            {
                button[i].debounce_on = 0;
                button[i].state = 1;
                key |= (1 << button[i].position);
            }
        }
        else if (but == 0)
        {
            button[i].debounce_off++;
            if (button[i].debounce_off > KEY_DEBOFF_MAX)
            {
                button[i].debounce_off = 0;
                button[i].state = 0; 
            }
        }
    }
    
    return key;
}

работает хорошо. параметрами можно настроит фильтровку под любые шумы.

Share this post


Link to post
Share on other sites
28 минут назад, HardEgor сказал:

Вы ничего не пишите про характер помехи и т.д., поэтому считаем в нормальном офисном помещении.

Помехи от коммутации 250кВт двигателя.

Я хочу переделать существующее решение (которое глючит и ловит эти самые помехи).

Может быть действительно не стоит так загоняться и сделать входной RC-фильтр и программную отбраковку ложных сигналов.

 

50 минут назад, HardEgor сказал:

А  клавиатуры для компьютеров почему-то работают и никаких помех не ловят, но можно навести  - поднести мобильник в процессе вызов  и увидеть влияние.

Никакого влияния, как показала практика:smile:

 

3 минуты назад, jenya7 сказал:

недавно замутил драйвер для кнопок

У меня тоже есть подобные, и в 10 раз компактнее... Но да ладно:to_become_senile:

Share this post


Link to post
Share on other sites
38 minutes ago, Arlleex said:

У меня тоже есть подобные, и в 10 раз компактнее... Но да ладно:to_become_senile:

в 10 раз компактнее? ну покажите

Share this post


Link to post
Share on other sites
43 минуты назад, Arlleex сказал:

Может быть действительно не стоит так загоняться и сделать входной RC-фильтр

Все что выходит наружу, должно иметь RC-фильтр.

Share this post


Link to post
Share on other sites
56 минут назад, jenya7 сказал:

недавно замутил драйвер для кнопок

Если программисту платят за количество написанных строк и стоит задача наплодить этих строк поболее, то да - нормальное решение.

Если же нужно просто получить нормально работающий, не реагирующий на дребезг код, то достаточно опрашивать кнопки например с частотой ~50Гц и писать результат опроса порта в переменную. И тогда функция будет выглядеть как:

uint32_t GPIO_GetButtons() { return lastButtons; }

А в функцию любого периодического прерывания/задачи вставить строчку: lastButtons = BUT_PORT->IDR вызывающуюся с нужной частотой.

Всё. Это даже не в 10 раз меньше....

Share this post


Link to post
Share on other sites
38 минут назад, Arlleex сказал:

Никакого влияния, как показала практика:smile:

Вот-вот, а там в эфир до 2Вт на 2ГГц в импульсе улетает и клавиатура даже не замечает :) Потому что там пленочные контакты пленкой экранируется и видимо еще и фильтрация есть программная. У меня была кнопочная клавиатура - она нормально ловила помеху от мобильника.

Share this post


Link to post
Share on other sites
9 минут назад, HardEgor сказал:

У меня была кнопочная клавиатура - она нормально ловила помеху от мобильника.

А если уменьшить сопротивления резисторов подтяжки?

Share this post


Link to post
Share on other sites
29 minutes ago, Vasily_ said:

Все что выходит наружу, должно иметь RC-фильтр.

Практика это подтверждает (ИМХО конечно :))

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now