En apportant récemment des améliorations au Yocto-PWM-Rx dans le cadre de notre précédent article, nous avons réalisé que ce module avait considérablement évolué depuis sa conception, afin de couvrir des scénarios d'utilisation plus larges qu'initialement prévu. Pour vous aider à vous y retrouver parmi toutes les possibilités, nous vous proposons ici un petit résumé des différents modes de fonctionnement.
Décodage d'un signal à impulsions variables (PWM)
Le fonctionnement de base du Yocto-PWM-Rx est le décodage de signaux encodés dans des impulsions périodiques de longueur variable. La fréquence est normalement constante, et la valeur utile est codée dans le rapport de cycle (duty cycle), c'est-à-dire le rapport entre la durée de l'impulsion et la durée de la période complète. Dans quelques cas plus rares, c'est la durée absolue de l'impulsion qui encode la valeur transmise.
Signal PWM pur
Pour ce mode de fonctionnement, le Yocto-PWM-Rx peut travailler avec des fréquences allant de 0.1Hz à 250kHz. La valeur lue est rafraîchie 50 fois par seconde. Le signal attendu en entrée est une alternance claire d'impulsions à fréquence régulière. Les paramètres correspondants sont:
- pwmReportMode: PWM_DUTYCYCLE ou PWM_PULSEDURATION
- debounce: 0 ms (désactivé)
- bandwidth: 16'000 kHz (i.e. 16 MHz, la valeur par défaut correspondant au maximum)
L'interface de configuration du Yocto-PWM-Rx permet de convertir directement le rapport de cycle décodé en une grandeur physique correspondante si nécessaire.
Décodage d'un signal carré à fréquence variable (FM)
Certains capteurs plus simples encodent une valeur non pas dans le rapport de cycle, mais directement dans la fréquence du signal (modulation de fréquence). Le Yocto-PWM-Rx peut aussi décoder ce genre de signaux, et fournir une mesure instantanée de la fréquence d'un signal fait d'alternances régulières haut/bas, mais dont la fréquence varie.
Signal carré
Pour ce mode de fonctionnement, le Yocto-PWM-Rx peut aussi travailler avec des fréquences allant de 0.1Hz à 250kHz. La valeur lue est rafraîchie 50 fois par seconde. Les paramètres correspondants sont:
- pwmReportMode: PWM_FREQUENCY
- debounce: 0 ms (désactivé)
- bandwidth: 16'000 kHz, en tous cas pour les fréquences supérieures à 25kHz. En dessous de 10kHz, on pourrait choisir de baisser la bandwidth à 1'000kHz, voire 100kHz, moins pour des fréquences de moins de 1kHz.
Décodage d'un signal bruité à fréquence variable
Lorsque le signal mesuré est issu d'un contact mécanique tel qu'un interrupteur à lame souple, on ne peut pas s'attendre à ce qu'il soit fait d'alternances régulières. Au mieux il y aura des rebonds à haute fréquence, et au pire il y aura même des déclenchements multiples comme décrit dans notre article précédent. Si la périodicité du signal reste clairement visible par la présence de plateaux stables durant chaque période, le Yocto-PWM-Rx pourra néanmoins en mesurer la fréquence.
Signal périodique complexe
Pour ce mode de fonctionnement, le Yocto-PWM-Rx peut travailler avec des fréquences allant de 0.1Hz à 25kHz seulement. La valeur lue est rafraîchie 50 fois par seconde. Les paramètres correspondants sont:
- pwmReportMode: PWM_FREQUENCY
- debounce: 0 ms (désactivé)
- bandwidth: 1'000 kHz typiquement. Pour une fréquence de base en dessous de 2kHz, on peut baisser la bandwidth à 100kHz, voire 10kHz ou moins pour des fréquences de moins de 500Hz.
Notez qu'il n'y a pas besoin d'activer explicitement le décodage du signal bruité: c'est le fonctionnement normal du module pour les signaux jusqu'à un maximum de 25kHz.
Mesure de la fréquence moyenne d'impulsions irrégulières
Toutes les estimations de fréquences décrites ci-dessus sont calculées sur la base de la mesure de la période. Certaines applications basées sur la détections d'événements quasi-aléatoires comme les compteurs Geiger génèrent des fréquences irrégulières qu'il vaut mieux mesurer par décompte sur un temps donné. C'est pourquoi vous pouvez aussi choisir un mode de décompte par seconde (CPS), et un mode de décompte par minute (CPM), celui-ci étant en réalité une estimation du compte par minute basé sur un décompte durant les six dernières secondes.
Impulsions lentes
Pour ce mode de fonctionnement, le Yocto-PWM-Rx peut travailler avec des fréquences allant de 10CPM à 250'000CPS seulement. La valeur lue est rafraîchie une fois par seconde. Les paramètres correspondants sont:
- pwmReportMode: PWM_CPS ou PWM_CPM
- debounce: 0 ms (désactivé)
- bandwidth: 16'000 kHz (i.e. 16 MHz, la valeur par défaut correspondant au maximum)
Notez qu'à la demande d'utilisateurs désirant travailler avec les unités CPS et CPM mais en utilisant l'estimation de fréquence instantanée basée sur la mesure de la période, il existe aussi deux modes hybrides PWM_FREQ_CPS et PWM_FREQ_CPM dont le fonctionnement est en tout point identique au mode PWM_FREQUENCY. La seule différence est l'unité utilisée pour exprimer la fréquence mesurée.
Décompte d'impulsions à haute fréquence
Parfois, plutôt que de mesurer la fréquence des impulsions il est utile simplement de les compter. Il est possible de configurer le Yocto-PWM-Rx comme un compteur d'impulsions permettant de mesurer des impulsions de quelques centaines de nanosecondes seulement. Le module peut compter tous les flancs (montant et descendants), ou chaque impulsion.
Impulsions rapides
Le compteur est initialisé au démarrage du module, et à l'appel de la méthode reset(). La valeur lue est rafraîchie 50 fois par seconde. Les paramètres correspondants sont:
- pwmReportMode: PWM_EGDECOUNT ou PWM_PULSECOUNT
- debounce: 0 ms (désactivé)
- bandwidth: 16'000 kHz (i.e. 16 MHz, la valeur par défaut correspondant au maximum)
Décompte d'impulsions lentes
Si l'on désire compter des impulsions lentes issues d'un relais électromécanique un d'un interrupteur mécanique par exemple, il faut activer la protection contre les rebonds, sinon une seule commutation peut entraîner plusieurs dizaines de micro-impulsions. Avec la protection contre les rebonds, toutes les oscillations qui suivent un flanc sont ignorées jusqu'à la fin de la période de debounce.
Impulsion avec rebonds
Le compteur est initialisé au démarrage du module, et à l'appel de la méthode reset(). Les paramètres correspondants sont:
- pwmReportMode: PWM_EGDECOUNT ou PWM_PULSECOUNT
- debounce: 25 ms (valeur typique pour un relais)
- bandwidth: n/a kHz (paramètre ignoré, toujours 100kHz)
Décompte de périodes bruitées
De même que nous avons permis la mesure de la fréquence pour des signaux bruités à fréquence variable, nous avons ajouté la possibilité de compter le nombre de cycles détectés, indépendamment du nombre de flancs. Comme pour la mesure de fréquence, cette fonction n'est possible que pour des fréquences ne dépassant pas 25kHz seulement.
Le compteur est initialisé au démarrage du module, et à l'appel de la méthode reset(). La valeur lue est rafraîchie 50 fois par seconde. Les paramètres correspondants sont:
- pwmReportMode: PWM_PERIODCOUNT
- debounce: 0 ms (désactivé)
- bandwidth: 1'000 kHz typiquement. En dessous de 10kHz, on pourrait choisir de baisser la bandwidth à 1'000kHz, voire 100kHz, moins pour des fréquences de moins de 1kHz.
A toutes fins utiles, vous pouvez aussi utiliser la méthode complémentaire get_edgesPerPeriod() pour obtenir le nombre de flancs détectés lors de la dernière période. Si le signal d'entrée est un signal carré non bruité, le nombre de flancs sera deux. Plus le signal est bruité, plus ce nombre augmentera.
Lecture d'état avec filtre anti-rebond
Il est aussi possible d'utiliser le Yocto-PWM-Rx simplement pour lire la valeur d'entrée, après application du filtre anti-rebond.
Les paramètres correspondants sont:
- pwmReportMode: PWM_STATE
- debounce: 25 ms (valeur typique pour un relais)
- bandwidth: n/a kHz (paramètre ignoré, toujours 100kHz)
Décodeur de signal en quadrature
Finalement, il est aussi possible d'interpréter conjointement les deux entrées du Yocto-PWM-Rx pour décoder le signal produit par un compteur en quadrature. Il s'agit d'un double signal carré, déphasé de 90 degrés, permettant ainsi de différencier le sens de rotation.
Signal en quadrature
Pour utiliser le décodeur de quadrature, les deux entrées PWM peuvent être dans n'importe quel mode, mais avec les réglages suivants:
- debounce: 0 ms (désactivé)
- bandwidth: 16'000 kHz (i.e. 16 MHz, la valeur par défaut correspondant au maximum)
Il faut par contre activer le décodage à l'aide de la méthode set_decoding() sur l'objet quadratureDecoder. On peut alors utiliser celui-ci pour lire la valeur du compteur, ou lire la vitesse de changement du compteur. Notez que la protection contre les rebonds n'est pas pertinente pour un compteur en quadrature, car l'encodage en quadrature conduit à une annulation intrinsèque des éventuelles oscillations.
Conclusion
Sans prétendre remplacer un analyseur de signal numérique haut de gamme, le petit Yocto-PWM-Rx fournit rapidement la réponse à de nombreux scénarios courants d'analyse de signaux binaires avec un codage temporel. Si on y ajoute le fait qu'il supporte une large plage de tensions d'entrée (+/- 30V) et que son entrée est électriquement isolée, il gagne aisément sa place dans le tiroir des outils à tout faire du petit bricoleur en électronique...