Possibilité que des parasites perturbent le fonctionnement d'une interruption ?

Bonjour à tous,

Je suis nouveau sur ce forum, mais il y a un "certain temps qu'ARDUINO me passionne ...

J'ai construis et je vole avec un MRC01 et j'ai tendance à mettre l'ARDUINO à bord :) J'ai fait des trucs élémentaires, trim de roulis (sur plusieurs machines), une jauge d'essence (très précise), un peu moins élémentaire un maintien d'altitude sur mon MCR qui ne marche pas mal du tout.

Je suis sur la réalisation de la commande de volets électriques, pour un ULM, qui me pose quelques soucis.

Je désire connaitre la position des volets avec un capteur optique (à fourche) "lisant" une roue crènelée entrainée par le moteur de commande des dits volets. Que du classique.

Pour rester classique la première idée est d'utiliser une interruption, c'est facile et élégant.

Sauf que, sur le banc d'essai que j'ai réalisé, cela ne marche pas ou plutôt cela marche trop bien, j'ai des rafales d'impulsions totalement inexpliquées. La proximité du moteur (à balais) ne laisse pas de doute sur l'origine des perturbations, mais c'est moins clair qu'il n'y parait.

En effet, si je fais tourner le moteur avec le capteur presque en place, mais pas en situation de compter, il ne se passe rien. Les impulsions parasites ne se produisent que lorsque il y a comptage, que lorsque l'interruption (RISING) est activée.

Plus étonnant, j'ai fait un essai sans utiliser d'interruption, et cela marche, pas de comptage fou !

On dirait que lorsque on lit la broche capteur avec un digitalRead(fourchePin) par ex, les parasites n'ont pas d'effet, mais que si on utilise cette broche pour l'interruption les variations de tension liées aux parasites (par rayonnement je pense) sont captées comme autant de signaux utiles.

Voilà où j'en suis, je ne suis pas inquiet car j'ai une solution que semble robuste, mais j'aimerai comprendre ...

Merci d'avance, Michel

PS : j'ai vu sur le forum que je ne suis pas le seul à m'envoyer en l'air avec un ARDUINO :)

Michel_RIAZUELO: Je désire connaitre la position des volets avec un capteur optique (à fourche) "lisant" une roue crènelée entrainée par le moteur de commande des dits volets. Que du classique. ... Sauf que, sur le banc d'essai que j'ai réalisé, cela ne marche pas ou plutôt cela marche trop bien, j'ai des rafales d'impulsions totalement inexpliquées. La proximité du moteur (à balais) ne laisse pas de doute sur l'origine des perturbations, mais c'est moins clair qu'il n'y parait.

En effet, si je fais tourner le moteur avec le capteur presque en place, mais pas en situation de compter, il ne se passe rien. Les impulsions parasites ne se produisent que lorsque il y a comptage, que lorsque l'interruption (RISING) est activée.

Plus étonnant, j'ai fait un essai sans utiliser d'interruption, et cela marche, pas de comptage fou !

PS : j'ai vu sur le forum que je ne suis pas le seul à m'envoyer en l'air avec un ARDUINO :)

Bonjour Donc tu n'utilise pas d'encodeur en quadrature mais simplement du comptage d'impulsion ? Pour de la position de volet , j'aurais eu tendance a passer par de l'encodage absolu, mais bon c'est ton choix. to capteur opto est cablé comment sur ton arduino , en logique positive ou negative ? comnien d'occultations par tour moteur ? vitesse max du moteur ?

et oui sur ce forum , il y en a qq uns qui adorent s'envoyer en l'air , dont "bibi" :grin:

Bonsoir Artouste et à tous,

Comme tu le dis, c'est pour faire simple que je vais me contenter, dans un premier temps, de compter (ou décompter selon le sens de la commande) des impulsions.

L'arbre de sortie d'un des 2 moteurs d'entrainement des vis sans fin (c'est un MCR ULC) sur lequel sera monté le disque crènelé tourne à environ 6 tours / secondes.

L'interruption est sur le mode RISING qui se produit quand la fourche du capteur optique est en cours d'obturation. Le nombre de créneau donne la résolution de la fixation des positions des volets et la largeur des créneaux la précision de la reproductibilité des positions. Un demi-tour de vis (2 créneaux) pour la définition des différentes positions est largement suffisant. 4 serait luxueux et cela ferait une fréquence de 24 Hz soit très en deçà de ce que peut traiter un UNO.

C'est pour cela qu'une solution à base d'un scan continu peut fonctionner (avec quelques précautions), sachant que le UNO n'assurera que cette tâche.

Voilà, tu sais tout et moi je ne sais pas pourquoi la solution lambda fonctionne alors qu'avec le même montage hard, la solution élégante avec une interruption ne fonctionne pas ...

J'ai remplacé le premier montage réalisé avec un seul transistor "tout bête" par un capteur tout fait intégrant un trigger de Schmitt en croyant régler mon pb ... sans succès.

Je pense que les parasites (s'ils sont les coupables) agissent en aval du capteur et peut-être faudrait-il essayer de mettre un trigger de Schmitt juste avant l'entrée de l'interruption.

Je prolonge un peu sur la raison principale du non choix du codage absolu. Le système en place actuellement est électromécanique, avec des micros-contacts, et il y a des petits soucis (un peu longs à expliquer et "hors sujet") pour le réglage des positions intermédiaires. Donc seront conservés les micros-contacts extrêmes (lisse et plein volets) et l'ARDUINO fera le reste.

Ce qui veut dire que le programme détectera les butées électriques (par arrêt du comptage avant la butée "numérique") et si besoin, recalera le compteur à chaque manœuvre. Comme avec un codage absolu, les butées "numériques" pourront agir dans le cas où un micro-contact "extrême" lâcherait. Cela fournirait une sécurité supplémentaire comparé à la solution actuelle où on va en butée mécanique avec les inconvénients associés.

Merci pour l'intérêt porté à cette question ... Michel

Michel_RIAZUELO: Voilà, tu sais tout et moi je ne sais pas pourquoi la solution lambda fonctionne alors qu'avec le même montage hard, la solution élégante avec une interruption ne fonctionne pas ...

J'ai remplacé le premier montage réalisé avec un seul transistor "tout bête" par un capteur tout fait intégrant un trigger de Schmitt en croyant régler mon pb ... sans succès.

Je pense que les parasites (s'ils sont les coupables) agissent en aval du capteur et peut-être faudrait-il essayer de mettre un trigger de Schmitt juste avant l'entrée de l'interruption.

bonjour si le fonctionnement en polling est satisfaisant, et compte tenu de la faible reccurence je penche plus pour de l'entrée en interruption "intempestive" due a l'alignement et au vibrations de l'equipage capteur/dents. test en mettant dans ta routine d'interruption un "pseudo debouncing" essaie un truc comme ça, c'est tout sauf beau de mettre du delay dans une routine d'int , mais c'est juste pour "voir" ;D valeur du delay() peut etre à adapter

void compteur() {  //routine sur interruption

  noInterrupts();
  impuls++; 
  delay(4);
  interrupts();  

}

Note au passage que si tu travaillais en quadrature , tu dispose de l'info de sens et tu evacue d'emblée un phenomene de "rebonds" puisque c'est un systeme autostable. si tu a un peu de place , il suffit juste de mettre une 2eme fourche dephasée de 90°

Bonjour Artouste et à tous,

… je penche plus pour de l’entrée en interruption “intempestive” due a l’alignement et aux vibrations de l’equipage capteur/dents.

Pour vérifier que la cause n’était pas à ce niveau, j’avais fait des tests d’obturation du faisceau lumineux volontairement “merdiques” sans observer de rebond. J’ai aussi fait un essai en entrainant la roue dentée à la main (sans moteur), et le comptage marche normalement avec la version “interruption”.

Michel

Michel_RIAZUELO: Bonjour Artouste et à tous,

... je penche plus pour de l'entrée en interruption "intempestive" due a l'alignement et aux vibrations de l'equipage capteur/dents.

Pour vérifier que la cause n'était pas à ce niveau, j'avais fait des tests d'obturation du faisceau lumineux volontairement "merdiques" sans observer de rebond. J'ai aussi fait un essai en entrainant la roue dentée à la main (sans moteur), et le comptage marche normalement avec la version "interruption".

Michel

Bonjour Je ne doute pas que tu sois meticuleux :grin: il y a long entre le capteur et l'entrée ? tu a essayé de mettre un tore ferrite? mais bon , l'ideal serait de regarder à l'oscillo la ligne en condition

Bonsoir Artouste et à tous,

Avec 1,5 m de câble entre le capteur et l'ARDIUINOn c'est pire qu'avec 30 cm (l'antenne est plus longue :confused: ). J'ai mis un câble blindé (blindage à la masse de l'ARDUINO) sans effet.

"mais bon , l'ideal serait de regarder à l'oscillo la ligne en condition"

Oui, cela permettrait d'avoir une idée de l'amplitude du signal parasite et s'il y a des chances pour qu'un trigger de schmitt au bout de la ligne signal (au raz de l'ARDUINO) calme le jeu.

L'idéal de l'idéal serait d'avoir un oscillo à mémoire ...

Michel