Question:
Anti-rebond matériel de la matrice de clés avec un minimum de composants passifs
DEKKER
2018-02-12 18:09:21 UTC
view on stackexchange narkive permalink

J'ai récemment acheté cette matrice de clavier 4x4 bon marché.Il n'a que les boutons poussoirs et rien d'autre donc je veux y ajouter un anti-rebond approprié.La suppression des rebonds dans les logiciels est quelque chose que je veux éviter car cela prend une certaine puissance de traitement de mon application.

enter image description here

Je sais que le anti-rebond peut être fait en utilisant une résistance et un condensateur (ai-je raison?) ou un déclencheur schmit (qui nécessite un autre IC, je suppose et est hors de question pour moi), donc la question est de savoir si je devrai ajouter R/ C pour chaque clé, ou puis-je m'en tirer avec une seule paire R / C par ligne ou par colonne?

Des suggestions?

Je suppose que vous êtes (dans le pire des cas) prêt à souder sur le module lui-même, si une solution multiplexée n'est pas possible?
@pipe oui je vais souder la solution sur la face inférieure de la même carte en utilisant des composants SMD ... du moins c'est le plan!
L'anti-rebond devrait fonctionner non seulement avec de nouvelles clés, mais également avec des clés anciennes avec des centaines ou des milliers de frappes.
Je pense que vous devriez revoir la question de l'anti-rebond des logiciels.Il existe des techniques qui utilisent très peu de cycles.L'ajout de résistances et / ou de capuchons à un clavier de lecture peut avoir des résultats imprévisibles.Si vous avez encore besoin d'aide pour ce faire, vous devez nous fournir plus d'informations, la vitesse de balayage et le temps minimum requis pour appuyer sur les touches.
C'est un problème XY.Veuillez expliquer pourquoi l'interrogation des boutons est à votre avis trop complexe.
Je suis d'accord avec DEKKER pour dire que réduire le code en ajoutant des composants matériels est toujours une bonne idée.IMO, 0,01 ou même 0,1 uF cap ou varistor avant une résistance ne donnera pas de résultat inattendu.Mais cela doit être testé.
La numérisation du micrologiciel et le rebond d'une petite matrice de touches devraient prendre moins de 1% de la bande passante d'un petit micro fonctionnant à quelques MHz.Cela peut augmenter la latence dans le pire des cas si le processeur n'a pas d'interruptions de priorité imbriquées.C'est pourquoi pratiquement toutes les applications pratiques d'une telle matrice de clés utilisent la suppression du rebond du firmware.
Si le rebond d'une matrice 4x4 est trop gourmand en calcul, vous faites quelque chose de mal.
Le débounçage logiciel peut être aussi simple que d'interroger le clavier pas plus rapidement que toutes les X ms, où X est le temps maximal d'anti-rebond.
dédier un microcontrôleur séparé pour l'interface clavier.si vous avez également un écran LCD, utilisez le même contrôleur pour cela
Découvrez la puce HT16K33
Notez peut-être que l'anti-rebond logiciel nécessite un signal électrique pouvant être traité par le circuit d'entrée du contrôleur.Des transitoires rapides dans la plage ns peuvent se produire pendant le rebond et peuvent causer des problèmes sur les circuits d'entrée.Le débouncing logiciel n'est pas un remplacement équivalent au débouncing matériel.
Cinq réponses:
Andy aka
2018-02-12 18:38:52 UTC
view on stackexchange narkive permalink

Soyons clairs à ce sujet. Si vous avez une matrice de clavier, vous utilisez déjà la puissance de traitement pour appliquer des tensions logiques séquentielles aux lignes ou aux colonnes, puis relisez les colonnes ou les lignes afin de déterminer le bouton enfoncé.

Ainsi, chaque fois que vous obtenez un "résultat", c'est-à-dire que vous détectez qu'un bouton a été enfoncé, vous marquez cet événement comme "en attente" et quelque temps plus tard (10 à 20 ms) vous vérifiez à nouveau si le bouton appuie vous avez marqué comme "en attente" peut être considéré comme "réel".

Le temps de traitement supplémentaire dont cela a besoin est très peu dans le plus grand schéma à mon avis et si vous êtes si proche de la limite à laquelle votre processeur peut fonctionner, alors obtenez un processeur plus grand / plus rapide ou augmentez la vitesse d'horloge.

L'utilisation de Rs et Cs peut fonctionner mais, dans tous les cas, cela produira une sortie "lente" qui devra être déclenchée schmitt pour nettoyer le front lent vers un front rapide qui convient à la logique qui suit. Vous pouvez bien sûr vous en tirer, mais vous avez alors une solution fixe sans flexibilité.

Après avoir dit tout ce qui précède, vous pourriez également avoir besoin de condensateurs de chaque ligne de matrice à la terre pour éviter les problèmes ESD / EMC.

Cela dépend de ce que l'on entend par lent.Un déclencheur shmitt semble simple sur un schéma, mais sur un PCB, il ajoute de nombreuses connexions et traces.Je testerais d'abord si c'est vraiment nécessaire.Si oui, je rechercherais un circuit intégré de déclenchement quad shmitt (ou octal s'il existe) pour économiser de l'espace sur la carte et le nombre de composants.
Vous avez raison ... Je recherche de toute façon des boutons dans le firmware donc un peu plus de cycles perdus ne ferait pas trop de mal!ce problème EMC est un point intéressant auquel je n'ai même pas pensé.Merci
Pouvez-vous s'il vous plaît donner un indice sur la taille du condensateur pour CEM et pourquoi cette valeur particulière?aussi des résistances?
100 pF devrait être correct.Pas de véritable calcul ou théorie, juste de bonnes pratiques.
N'oubliez pas non plus les pull ups ou les pull down sur les entrées.
MCG
2018-02-12 18:21:12 UTC
view on stackexchange narkive permalink

Pour obtenir les meilleures performances anti-rebond, il serait probablement préférable d'avoir un R / C pour chaque bouton.Cependant, vous devriez toujours obtenir des résultats décents avec un par ligne / colonne.Cela dépend de la gravité de la situation.Si vous voulez le faire avec le minimum de composants, pourquoi n'essayez-vous pas d'abord d'en faire un par ligne / colonne, puis de prendre des mesures et de voir si le résultat est assez bon pour votre application?

Si les résultats ne correspondent pas à ce que vous vouliez, ajoutez-en sur chaque bouton, puis réessayez.

Graham
2018-02-13 00:35:27 UTC
view on stackexchange narkive permalink

En tant qu'ingénieur logiciel embarqué de longue date, je dois dire que votre hypothèse selon laquelle le debouncing va réduire la puissance de traitement de mon application est tout simplement incorrecte. Cela ne sera jamais vrai pour un micrologiciel écrit avec compétence.

Naturellement, le debouncing nécessitera un certain traitement. Cependant, le traitement est trivial, et pour les entrées de l'utilisateur se produira à un taux de mise à jour si faible qu'il sera totalement négligeable. Si vous deviez anti-rebondir les entrées avec des taux de mise à jour en dizaines de kHz, peut-être que le traitement pour le anti-rebond serait important, mais une pression humaine sur les boutons n'a pas besoin de quelque chose comme ce type de résolution. Dans votre cas, l'échantillonnage à 100 Hz serait facilement assez rapide, et vous pourriez presque certainement l'abaisser jusqu'à 10 Hz sans affecter sérieusement votre interaction utilisateur.

Si vous essayez de faire un traitement d'entrée dans une boucle de contrôle principale fonctionnant à des dizaines de kHz, bien sûr, la puissance de traitement sera nulle. La solution correcte est d'écrire un firmware qui ne le fait pas de cette façon, de ne pas utiliser une solution matérielle pour corriger un anti-pattern logiciel. Une utilisation appropriée des minuteries et des priorités d'interruption vous donnera ce dont vous avez besoin.

Vous pouvez optimiser le traitement en vous assurant que la relecture se fait sur un seul port d'E / S. En supposant que vous définissez des niveaux sur les colonnes et que vous relisez les lignes, alors vous bit-AND, bit-shift et bit-OR pour construire une valeur 16 bits pour les 16 broches. XOR avec la valeur de 16 bits précédente, et si ce n'est pas zéro, quelque chose a changé. Un algorithme anti-rebond simple consiste simplement à définir un compteur sur une valeur si les broches changent d'état, à choisir un état si les broches ont conservé leur état et que le compteur est à zéro, et à décrémenter si ce n'est pas zéro.

Vous devez vérifier qu'un seul bouton est enfoncé, bien sûr. Si vous avez un processeur ARM, l'ARM dispose d'une instruction pour signaler le nombre de bits définis, ce qui est idéal pour cela. Il suffit de mentionner pour une optimisation supplémentaire.

Michel Keijzers
2018-02-12 18:50:09 UTC
view on stackexchange narkive permalink

Afaik, il y a des CI qui peuvent anti-rebond "automatiquement", par exempleMC14490, appelé Switch Debouncer.

Cela vous évitera d'avoir besoin de puissance du processeur, mais coûtera un peu d'espace supplémentaire pour le câblage / PCB.

Ils coûteront également une grosse somme d'argent.Ces anti-rebondisseurs sont terriblement chers.
@Fredled: Large comme "probablement moins de 10 $".Je suis d'accord que c'est beaucoup d'argent pour ce qu'il fait, mais pour un projet à exécution unique, cela vaut peut-être la peine de gagner du temps ... pour un projet avec une série de milliers, ce serait une autre affaire :-)
Chez AliExpress 2 euros, donc probablement environ le double dans les `` meilleurs '' endroits.
le MC14490 semble être inutilisable pour les claviers matriciels
Je suis désolé d'entendre ... je n'ai pas essayé moi-même (même pas sur un interrupteur normal).Je me demande quel est le problème, car tout signal devrait pouvoir être déboncé par lui.
Anthony X
2018-02-13 08:30:30 UTC
view on stackexchange narkive permalink

Le véritable anti-rebond implique l'ajout d'hystérésis.Vous ne pouvez pas faire cela avec des composants passifs, par exemplerésistances et condensateurs.C'est là qu'interviennent un logiciel ou une solution de composant actif (loquet).

Je suis d'accord si vous visez un signal parfait.Cependant, si vous recherchez une solution peu coûteuse et peu coûteuse, les composants passifs peuvent donner un résultat acceptable.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...