Nouvelles:

Bienvenue au Forum de discussion Électro-Bidouilleur! Inscrivez-vous pour participer aux discussions!: 
https://forum.bidouilleur.ca/index.php?action=signup Les demandes d'inscription sont révisées quotidiennement.

Menu principal

Tachymètre et Raspberry

Démarré par clement, Mai 12, 2017, 01:47:27 PM

« précédent - suivant »

clement

Bonjour à  tous,

Je souhaite partager avec vous la recherche et le développement d'un petit circuit éléctrique qui semblera sans doute simple à  certains, mais qui reste douteux à  mes yeux.

Le sujet: utiliser un Raspberry Pi pour "lire" les RPM d'un moteur.  (À partir de là  j'ai déjà  perdu une partie de l'auditoire "anti-raspberry" ;-) )

Concrètement, j'ai un moteur, équipé d'un "trigger coil" (c'est une pièce de l'alternateur qui donne une impulsion à  chaque tour moteur, par effet Hall), je souahite "lire" le signal émit par cette pièce afin de connaitre le RPM du moteur. Les courbes caractéristiques des impulsions sont les suivantes:



Ces courbes sont ce qu'elles sont et le but est de les traiter afin de les rendre lisible par un Raspberry. Le nombre de RPM maxi est de 8000RPM, ainsi un port GPIO du Raspberry fera parfaitement l'affaire en terme de rapidité. Le premier problème auquel je suis confronté c'est bien entendu la tension... un port GPIO de Raspberry accèpte 3.3V

Je mets donc immédiatement de côté la solution "100 ohms" qui donne des tensions à  l'impulsion autour de 80V à  6000RPM. Le circuit devra donc avoir une impédance de 100 Kohms.
J'ai donc créé ce circuit dont je vais expliquer mes choix:



La courbe "6000RPM à  100 Kohms" indique une tension "peak" d'environ 12V, la loi d'ohms me permet de connaitre l'intensité qui en résulte: U = R x I; U / R = I ; 12 / 100^3 = ce qui donne 12uA
On peut alors calculer la "puissance" de l'impulsion: P = U x I; P = 12 x 12⁻⁶; P = 144uW
Pour ma part j'ai choisi de commencer par une résistance de 10 Kohms, ainsi le courant parcourant R16 est de: P = R x I²; √(P / R) = I; √(144⁻⁶ / 10³) = 120uA
La tension au borne de R16 sera alors de U = R x I; U = 10³ x 120⁻⁶ = 1.2V  (j'ai l'impression qu'il y a une incohérence ici... où est mon erreur ?)
La diode D6 permet de supprimer la composante négative du signal source, je me demande si 1.2V ne serait pas une valeur trop faible... R16 est peut-être superflue ? Qu'en pensez-vous ?
Continuons tout de même... nous arrivons à  R17 et D7 qui permet de limiter la tension à  3.3V afin d'être sûr de ne jamais excéder la tension maxi du port GPIO du raspberry. Cependant notre précédent calcul nous donnait 1.2V... raison deplus pour douter de l'utilité de R16. Aussi la diode D6 ayant un "Forward voltage" de 0.6V, la tension traversant R17 est de 1.2V - 0.6V = 0.6V  (suis-je correct ?)

Afin que le port GPIO du Raspberry "détecte" les peak il va me falloir amplifier ce 0.6V afin d'obtenir 3.3V.  Le problème avec tous ça c'est que ce calcul (si il est juste) est valable uniquement quand le moteur tourne ) 6000RPM. mais lorsque le moteur tourne à  500RPM tous les calculs vont changer... ça devient un petit casse-tête pour moi !

Que pensez-vous de ma méthode de calcul ? est-telle correcte ? totalement fausse ? suis-je parti dans la mauvaise direction ? Que me conseillez-vous ?

Bien cordialement,
Clément

Électro-Bidouilleur

Je vais laisser d'autres vous alimenter en réponses pour le moment. Mais la première chose que je ferais serait d'utiliser un opto-coupleur. Le RPi est fragile, et les impulsions semblent trop "incontrôlées" pour en tirer l'énergie pour produire une belle impulsion 0-3,3V.

clement

Un opto-coupleur est en effet une protection parfaite. La diode Zener 3.3V (D7) n'est pas une protection aussi fiable quand il s'agit de "limiter" une tension ?
Il reste tout même un filtrage à  faire car le "bruit" du signal varie entre -2 et +2 V, ce qui suffirait à  déclencher l'optocoupleur. Hors je veux que seul les "peak" atteingnent le port GPIO.

Un filtre passe bas semble tout indiqué mais je ne vois pas comment m'y prendre...
Aussi je n'arrive pas à  reproduire ce signal "pulse + noise" dans un simulateur de circuit ce qui rend la recherche de la "solution miracle" très difficile.

clement

Le sujet ne semble pas emballer grand monde  ;)

Pour ceux qui sont découragé à  la lecture de mon "grand" message, voici un résumé, peut-être vous trouverez plus ludique de m'aider comme ça:

Un alternateur envoie des pulsations sur un fil dont la courbe caractéristique est dans mon premier message de ce topic. Je souhaite afficher les RPM issu de ces pulsations sur un RPi.
Il y a 2 problèmes: 1) il faut que le signal soit de 3.3V lorsqu'une pulsation est détecté  2) il faut que les parasites entre les pulsations soit supprimé pour être certains de ne pas puluer le comptage des RPM.

hmmm résumé en 2 lignes... c'est ça  :D
Je pense avoir la solution pour limiter les pulsations à  3.3V par contre je n'ai pas la solution pour la partie "filtrage"... Un petit coup de pouce ?

Bien cordialement,
Clément

Multiman78

metttre un entré un AOP en comparateur pour faire un joli signal... Après je sais pas

Janpolanton

Bonjour,
Avez-vous regardé ce même problème avec les utilisateurs Arduino
Il y a plusieurs sujets sur internet.

clement

Je vais voir ce que "mettre en entrée un AOP en comparateur" veut dire concrètement avec une recherche sur Google ;-) merci pour l'idée

Oui j'ai cherché sur Internet, en effet il y a plusieurs sujets similaire mais en fait très différents. En effet on trouve des topics sur des forums et même des vidéos à  tour de bras concernant les RPM et arduino, sauf que toutes ces "démonstrations" de "comment on fait" sont basés sur des ventilateurs... des capteurs à  effet Hall alimenté en 5V... des circuits dont ils maitrisent 100% des composants (facile de mesurer un signal lorsque l'on a choisi comment le générer :-) )

Dans mon cas je n'ai pas le choix du capteur, il est intégré au moteur et le moteur coûte plusieurs millers d'euro, il m'est impossible d'ajouter un capteur car le moteur est spécifique, je n'ai donc pas la maitrise du signal émit par le moteur qui envoit des impulsions de 60V (bien loin des 5V) et qui contient des parasites de plusieurs volts (2V...3V). Les projets arduino n'ont pas à  se soucier de tout cela, ils ont acheté un joli capteur à  effet hall, qu'ils ont proprement alimenté en 5V et qui leur fournir un signal parfait pour une lecture presque direct, qui ne contient pas de parasites... bref ils ont des conditions idéales :-)

La partie code source n'est absoluement pas un problème pour moi, c'est vraiment la partie électronique et "comment fabriquer d'un signal joli pour le RPi" qui me pose soucis.

Janpolanton

Comme on ne connait ni le type de moteur (électrique, thermique) ni la finalité de votre projet, difficile de répondre...
Certains projets arduino sont pour un moteur thermique avec des pointes à  + de 100V et des parasites...

clement

C'est un moteur thermique.

La finalité du projet est décrite dans mon premier message: connaître les RPM du moteur, le régime moteur si vous préférez.

Pourriez vous me donner un lien vers le projet arduino dont vous parlez ? ça me sera certainement utile :-)

Janpolanton

Bonjour,
j'ai fait une simple recherche gogol avec les mots clé "trigger coil rpm filter arduino"

clement

Bonsoir,

Pensez-vous que ce circuit est correct pour attaquer un GPIO de RPi ?  http://tinyurl.com/khr38yj

Le signal éléctrique venant du moteur se trouve à  gauche et le port GPIO se trouve à  droite. Il me faudra donc détecter le front descendant pour mesurer les RPM.

Bien cordialement,
Clément

Électro-Bidouilleur

Comme suggéré précédemment, je crois que vous devriez trouver une façon d'insérer un opto-coupleur, plutôt que de tenter d'y arriver avec ce circuit. Il est très probable que le signal réel ne ressemble pas au diagramme fourni. L'environnement alternateur est très débridé. Votre RPi risque bien de ne pas aimer.

Quant au filtrage, un simple circuit RC devrait faire l'affaire compte tenu de la largeur de l'impulsion d'intérêt. Il est possible que cela ne marche pas comme prévu du premier coup. Vous ferez des corrections de filtrage par la suite.

clement

#12
J'ai donc ajouté un optocoupleur et un filtre passe bas avec R14 = 47k et C14 = 22nF
La fréquence de coupure est donc de:  1 / 2*Ï€*R*C  soit 1 / 2 x Ï€ x 47x10³ x 22x10⁻⁹ = 153.9 Hz

Les pulsations du moteur étant maximum de 8000RPM ça me donne une fréquence maximum de 8000 / 60 = 133.3 Hz 
Mon filtre conserve donc la bande passante basse qui m'intéresse.  Suis-je correct ? mes calculs et mon raisonnement est-il bon ?

Le port GPIO recevra une tension de 3.3V et la résistance R15 limitera le courant tel que: I = U / R soit I = 3.3 / 4.7x10³ = 0.7 mA 
Je suis donc certains de ne pas "griller" le port GPIO mais n'est-ce pas une valeur trop faible ? Avec une résistance de 1K on arrive à  3.3 mA, que me conseillez vous ?

La diode zener D7 limite la tension à  3.3V, est-ce trop faible ? Avec une si petite tension l'optocoupleur aura-t-il assez de tension pour "éclairer" la diode inclut dans l'optocoupleur ?
Dois-je ajouter une résistance sur la borne 1 de l'optocoupleur pour limiter le courant de la diode de l'optocoupleur ? ou bien la résistance R14 du filtre passe bas fait déjà  l'affaire ?

La diode D6 est là  pour supprimer la composante négative du signal, est-elle correctement placé ? dois-je la mettre en série entre R16 et R17 au lieu d'être comme elle est actuellement ?

Si vous avez d'autres conseil, n'hésitez pas.

Bien cordialement,
Clément

Électro-Bidouilleur

Pour l'opto-coupleur, parlez de courant d'allumage, pas de tension. Votre circuit doit produire suffisamment de courant pour allumer la DEL de l'opto-coupleur. àŠtes vous certain qu'il y a suffisamment de courant de disponible pour cela? La diode zener 3.3V risque de vous nuire, en effet.

À mon avis, la zener pourrait être retirée si le choix de résistances est bien fait. Limitez le courant pour les crètes les plus larges au maximum permis dans l'opto et cela devrait suffire. MAis j'ai quand même des doutes sur le courant disponible venant des impulsions.

Gardez la diode D6 telle quelle.

L'entrée CMOS du Rpi ne consomme à  peu près pas de courant. La 4.7K me semble appropriée.

clement

Cette après midi j'ai pu tester mon montage en condition réel, le filtre choisi est correcte, il élimine la grande majorité des parasites. C'est la première bonne nouvelle.
La suppression de la composante négative fonctionne bien avec D6 telle quelle, seconde bonne nouvelle.

Malheureusement je n'ai pas pu essayer avec l'optocoupleur, cependant j'ai vu dans un projet similaire au miens et utilisant le même moteur thermique l'utilisation d'un AOP en comparateur.
Aussi, Bertrand, je pense que vous avez raison par rapport au courant et c'est la raison pour laquelle je souhaite mettre un LM358 (contient 2 AOP) qui recevra le signal filtré dans le premier AOP en mode suiveur, ce qui permettra de donner du courant, puis le deuxième AOP sera en mode comparateur avec une tension de "threshold" (c'est comme ça qu'on dit?) à  2.5V. Les AOP seront alimenté en 5V, je devrais donc avoir un joli signal carré.
Finalement je pourrait mettre l'optocoupleur après ces 2 étages d'AOP afin d'attaquer le port GPIO avec une isolation parfaite et une tension 3.3V tel que je le fait déjà .

Je vais remplacer la Zener 3.3V par une Zener 5.6V avec d'avoir un meilleur rapport signal/bruit.

Merci pour vos conseils précieux.

Bien cordialement,
Clément