Lors d'une réunion pour un projet particulier, on m'a demandé de réfléchir à la façon de détecter une pression sur un bouton avec un MCU. La détection doit consommer le moins d'énergie possible. Au premier coup d'œil, j'ai pensé au circuit typique avec un pull-up ou un pull-down:
simuler ce circuit - Schéma créé à l'aide de CircuitLab
Je ne prends pas en compte certaines fonctionnalités anti-rebond ici, car cela dépasse la portée de cette question. Dans les deux cas, lorsque le bouton est enfoncé, la valeur de courant totale qui circule dépend de la valeur de la résistance. Pour le minimiser (le courant), je pourrais augmenter la valeur de la résistance mais pas autant car, si j'ai raison, cela dépend aussi de la valeur de fuite de la broche d'entrée. De plus, une grande résistance récupérerait lentement.
Ma question est la suivante: quelles sont les façons intelligentes de détecter un bouton enfoncé qui ne consomme pas d'énergie (généralement pour une application à forte consommation d'énergie)? Existe-t-il des méthodes qui consomment à peine lorsque vous appuyez sur le bouton?
la source
Réponses:
Une méthode à faible courant que j'ai utilisée une fois consistait à connecter un commutateur entre deux broches d'E / S de microcontrôleur.
Une E / S a été configurée comme sortie (SWO). Le second a été configuré comme une entrée (SWI) avec son pull-up interne programmable activé.
L'état de commutation a été échantillonné rarement (toutes les 10 ms) par une routine d'interruption logicielle. La séquence de lecture était: conduire SWO bas, lire SWI, conduire SWO haut.
Cela signifiait qu'un interrupteur pressé ne tirait que le courant de descente SWI à travers lui-même et SWO pendant moins de 1 us pendant le balayage, tandis qu'un interrupteur non pressé ne tirait aucun courant. Ce tirage actuel pour <1 us toutes les 10 ms a entraîné une consommation moyenne moyenne de courant infime.
la source
Un bouton SPDT ( S ingle P ole D ouble T hrow) serait votre bouton ultra efficace.
Source: http://www.ni.com/white-paper/3960/en/
Dans votre cas, le 1P irait au MCU, le 1T au VCC, le 2T au GND.
la source
Combien de temps le bouton sera-t-il enfoncé? S'il ne s'agit pas d'un interrupteur à bascule (qui conserve son état) mais d'un interrupteur momentané, le courant circulant lorsque le bouton est enfoncé est largement hors de propos en raison du court laps de temps pendant lequel le bouton est réellement fermé.
L'un ou l'autre des deux circuits que vous montrez est OK, cela n'a pas d'importance.
Vous pouvez supposer que la fuite d'entrée et / ou le courant dans une entrée MCU est négligeable . Tous les MCU sont de nos jours en technologie CMOS et ont un courant d'entrée pratiquement nul. Alors arrêtez d'y penser, ce n'est pas là.
Au lieu d'utiliser une résistance externe, vous pouvez également utiliser la résistance de pull-up interne intégrée dans de nombreuses entrées du MCU. Cette résistance peut avoir une valeur relativement faible (50 kohm peut-être), donc un petit courant passera lorsque le bouton sera enfoncé.
Vous pouvez utiliser en toute sécurité même une résistance de 1 Mohm pour un pull-up / pull-down. Seulement dans des environnements très "sales" (électriquement parlant), vous pourriez avoir besoin d'une valeur inférieure. Vous pouvez également placer un condensateur de 100 nF en parallèle avec le commutateur pour supprimer les interférences provenant d'autres circuits à proximité.
Conseil de pro: réservez une place pour un tel condensateur sur le PCB, mais ne montez pas de capuchon. encore. En cas de problème: placez-le et voyez si cela peut vous aider.
Pour détecter l'état du commutateur, utilisez l' interrogation (comme dans la réponse de TonyM) ou utilisez une interruption . Cela dépend de l'application qui est la meilleure pour la consommation d'énergie (du MCU).
la source
Une méthode que j'ai utilisée tire parti de la nature capacitive des entrées CMOS.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
Dans le circuit au-dessus du commutateur, lorsqu'il est fermé, il permet à la résistance de rappel de charger / décharger les capacités d'entrée du GPIO jusqu'au niveau de la terre.
L'astuce avec ce circuit est d'utiliser la nature bidirectionnelle d'un GPIO pour maintenir l'entrée chargée à un niveau logique élevé lorsque le commutateur est ouvert.
La routine de commande tourne périodiquement la broche à un niveau élevé ou active brièvement le pull-up, suffisamment longtemps pour maintenir une charge des capuchons. La broche d'entrée agit alors comme un bit de mémoire dynamique et, avec la plupart des appareils, maintiendra cette charge pendant une durée considérable et utilisable.
Lorsqu'il est correctement configuré, si le bouton est enfoncé, la charge sur la broche se décharge plus rapidement que le taux de rafraîchissement. Cette condition peut ensuite être détectée dans le cadre de l'algorithme de rafraîchissement comme une lecture avant l'opération de rafraîchissement, ou utilisée pour déclencher une interruption.
L'alimentation est brièvement utilisée pendant l'impulsion de rafraîchissement, à la fois pour recharger les condensateurs et à travers la résistance et l'interrupteur si elle est fermée. Cependant, la longueur de l'impulsion de rafraîchissement est courte et la fréquence d'interrogation fait que le courant de rafraîchissement est relativement insignifiant.
De toute évidence, cette méthode est active. Si le micro est mis en veille, l'état de l'interrupteur sera indéterminé au réveil. Le premier cycle de rafraîchissement après le réveil doit ignorer la broche lue. De plus, cette méthode ne doit pas être utilisée pour réveiller le micro. Avant d'aller au lit, il est également sage d'activer la broche comme sortie basse pour la garer dans un état de courant nul.
Pour lire plus de commutateurs statiques, comme les commutateurs DIP de configuration, une routine dédiée peut être utilisée plutôt qu'un cycle de rafraîchissement continu. Après la lecture, les broches GPIO doivent ensuite être "parquées" dans un état de sortie faible actif (courant nul) pour éviter le problème des entrées flottantes.
REMARQUE: cette technique souffre un peu de la sensibilité au bruit si les longueurs de trace sont longues et traversent une zone bruyante. En tant que tel, R1 doit être proche de la broche d'entrée. Cependant, je ne le recommanderais pas pour brancher un interrupteur à une certaine distance du panneau avant, sauf si vous ajoutez une capacité supplémentaire près de la broche.
la source
Si votre bouton est un interrupteur piézo, la seule puissance requise est celle générée en appuyant sur le bouton.
Par exemple: R2 / C1 récupère l'énergie produite en appuyant sur le piézo. D1 empêche la tension C1 de devenir trop élevée. R1 draine C1 lorsque le bouton est relâché. Le MCU GPIO doit être en entrée, pas de mode pull. Voilà, le bouton détecte avec un courant nul de l'alimentation.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
la source
Si l'appareil doit pouvoir rester indéfiniment dans l'un ou l'autre état, l'utilisation d'un commutateur SPDT sera l'approche la plus faible, car un circuit statique peut être conçu pour ne tirer aucun courant au-delà de sa propre fuite interne et de celle du commutateur. Un avantage supplémentaire des commutateurs SPDT est qu'ils peuvent être rebondis presque parfaitement, quelle que soit la rapidité avec laquelle ils sont actionnés ou la taille des contacts, à condition qu'un seul contact cesse de rebondir avant que l'autre ne se lise comme fermé.
Il existe deux bonnes approches pour câbler de tels commutateurs:
simuler ce circuit - Schéma créé à l'aide de CircuitLab
La première approche nécessite une résistance de moins que la seconde, mais la seconde sera plus tolérante au chevauchement entre les deux pôles (elle attirera un courant plus élevé que d'habitude, mais ne mettra pas un court-circuit à travers l'alimentation). Notez que si le commutateur peut entrer dans un état qui est modérément résistif pendant une période de temps prolongée, cela pourrait brûler beaucoup plus de courant que d'habitude, mais pendant l'utilisation normale, aucune des résistances ne transportera de courant significatif, sauf pendant le bref instant entre la moment où le commutateur change d'état et la sortie répond.
la source
Utilisez le pull-up interne du microcontrôleur et lorsque la presse est détectée, désactivez le pull-up. Ensuite, réactivez-le brièvement pour vérifier l'état du bouton.
la source