Je suis entrain de réalisé un projet de régulation numerique d'un moteur CC,J'essai maintenant juste de récupéré la position via l'encodeur optique,et je recontre un probleme bizzare avec mon arduino,il est trés trés sensible ce qui mène à un comportement vraiment incompréhensible ! ] =(
Le probleme c'est qu'il :
1/ Ne detecte pas vraiment l'état haut,il suffit de mettre un fil sans tension est l'interreption se déclanche !!!!!
2/ Quand la routine de l'interreption se lance ca reste dedans !!!
Voila le code qui est très basique pour le tout premier test des interreptions avec cette carte,
et avec le pull-down interne ,digitalWrite(PinCoder,LOW); , ça ne change rien ?
Pour le blocage dans la boucle Inc_decoder() déclare l'interruption en RISING (changement sur front montant) attachInterrupt(PinCoderInterp,Inc_decoder,RISING);
ça devrait résoudre le problème du blocage
L'opto sur la photo est t-il câblai correctement ? Les niveaux logiques sont ils bien en sortie (0v / 5v) ? J'ai comme un gros doute.
Sur la photo c'est l'arduino qui alimente l'opto ? Je ne vois aucun fil de masse reliant les deux montages ?
Pour ce qui est du /cata aucun risque un atmega alimenté correctement avec des niveaux de 5v max ne risque rien (normalement ^^).
Si il s'alimente en +5V / 3.3V, je te recommande chaudement de l'alimenter par l'Arduino.
En effet, si deux rails d'alimentation n'ont pas la même référence, tu peux te retrouver très facilement avec une différence de potentiel entre les deux.
Comment est alimenté ton Arduino en USB, par un ordinateur fixe ou un ordinateur portable ?
Quelle est cette alimentation 5V à laquelle tu as connecté ton opto ? Un transformateur ?
Je te conseille donc d'alimenter ton opto par l'Arduino.
En suite, dans ton montage, je te conseille également d'enlever la résistance de 10kOhms.
En effet, dans ton opto, tu dois détecter si le transistor (récepteur) est passant ou bloqué.
Pour cela, tu dois relier le "+" du récepteur au 5V, le "-" du récepteur à une résistance de 100/150Ohms, et enfin, mettre cette résistance au GND.
Tu brancheras ensuite le "-" du récepteur sur la pin2 de l'Arduino, ce qui aura pour effet de mettre la résistance de 100/150Ohms en parallèle, et donc d'y appliquer sa tension.
Ainsi, tu devrais détecter un état haut sur ton entrée PIN2 si il n'y a pas d'obstacles, et un état bas si le faisceau est coupé.
comme dit plusieurs fois les masses doivent être reliées
la 10K est trop élevée. Pour détecter des mouvements rapides il faut placer une résistance de faible valeur. Sinon le RC formé par cette résistance et les capacités parasites (cablâge, capa de sortie de l'optocoupleur, ...) risque de poser problème.
Après que la résistance soit tiré au plus comme tu le fais ou la masse comme le propose snootlab cela n'a pas grande importance.
Néanmoins il y a un autre point à considérer c'est la fréquence à laquelle tu vas recevoir des interruptions lorsque ton moteur va tourner. Il faut faire attention au fait que si le moteur tourne vite tu vas recevoir des IT en permanence et tu n'auras peut être pas le temps de les traiter.
Oui vous aviez raison,cette fois je l'ai alimenté avec l'arduino ^^
Je vais maintenant essayé le disque de l'encodeur avec le moteur,j’espère que ça marchera parce que la fréquence pour une vitesse max. 3800 tr/min (72 trous de disque) est 4,6khz ...
la 10K est trop élevée. Pour détecter des mouvements rapides il faut placer une résistance de faible valeur
Pouvez-vous me dire quelle valeur de résistance je dois utiliser ?
Parce que vous aviez raison il ne détecte pas les changements rapide.
Autour des 470 ohms devrait faire l'affaire mais au vu de ta seconde question je ne suis pas certain.
MRCpp:
... à une résistance de 100/150Ohms, et enfin, mettre cette résistance au GND.
J'ai utilisé ce montage mais la tension de sortie est très faible pour être détectée par l'arduino ...
Avec mon premier montage ça marche très bien mais pour une valeur de 100 Ohms la tension de la sortie varie entre 4,9v et 4,5 au lieu de 0
Manifestement la sortie de ta fourche n'est pas saturée c'est pourquoi la tension ne varie pas entre 0 et +5V.
Quelle est la référence de ce composant? Cela pourrait aider à la compréhension du problème
En regardant la datasheet du composant on voit que le transfert de courant entre l'entrée et la sortie n'est que de 2.5% au maximum.
Donc avec ton montage il passe environ 17mA dans la diode LED de la fourche. Ce qui fait que tu ne peux pas récupérer plus de 0,4mA sur le transistor de sortie. Cela explique le faible niveau lorsque la résistance est basse.
Il faudrait déjà augmenter le courant dans la LED. La doc donne 60mA maximum.
Le transfert de courant minimum est de 1.25% donc avec 60mA dans la LED au pire tu récupères 0.75mA dans le récepteur.
Pour la résistance il faudrait donc qu'elle fasse qq kOhms pour bien faire.