Bizzare mon arduino ??!!

Bonjour,

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 ! ]:slight_smile: =(

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,

#define PinCoder 2
#define PinCoderInterp 0

int dec=0;

void setup()
{
  pinMode(PinCoder,INPUT);
  //digitalWrite(PinCoder,LOW);
  attachInterrupt(PinCoderInterp,Inc_decoder,HIGH);
  
  Serial.begin(9600);
  
}

void loop(){}

void Inc_decoder()
{
 dec++;
 Serial.println(dec);
}

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

Merci pour votre réponse mais le probleme est toujours là, =(

Toujours l'incrémentation et l'envoi serial vers le pc des données (via moniteur)

et toujours juste en mettrant le fil sur pin2 il y a envoi des données à 0v !!

C'est possible mon arduino est au paradis maintenant ?

Image :

testSensor.jpg

Bonjour,

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 ^^).

Merci pour la réponse,

L'opto sur la photo est t-il câblai correctement ?

Normalement oui puise que j'ai deux niveaux 0/5V

Les niveaux logiques sont ils bien en sortie (0v / 5v) ?

Oui : 5 V => quand un obstacle se présente.
0 => quand il y a rien.

Sur la photo c'est l'arduino qui alimente l'opto ?

Bhei non ... j'alimente l'opto. avec une alimentation DC avec 5v,vous pouvez voir les pinces....

Donc de l'opto. à l'arduino (alimenté avec le port usb) je branche juste la sortie de l'opto (0/5v),c'est tout...

Un petit schéma avec les valeurs serait plus parlant.

Bonjour,

Voila le schéma,

PS : même quand je branche la pin d'alimentation 5v sur la pin2 ça donne rien !!!!!

schémaOpto.jpg

il faudrait pas mettre les masses en commun ? (le - de l'opto avec le GND de l'arduino)

Bonjour,

Quelle est la référence de l'opto ?

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 ?


Stéphane

C'est clair qu'il faut déjà que tu relies les masse entre l'opto et l'Arduino.

Merci beaucoup tous pour vos réponses ça,

Quelle est la référence de l'opto ?

TCST1300.

par un ordinateur fixe ou un ordinateur portable ?

Ordinateur portable HP.

Quelle est cette alimentation 5V à laquelle tu as connecté ton opto ? Un transformateur ?

Non une petite station d'alimentation,photo en bas,

alimentation.jpg

Bonjour,

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é.


Stéphane

Mais ce qui est sûr avant toute chose, c'est qu'il faut mettre les masses en commun. D'après le schéma c'est tout à fait normal que ça ne marche pas.

2 remarques sur le schéma:

  • 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.

Enfinnnnn !!!!!!!!! ça marche à merveille !!!!!

Vraiment un grand merci à vous !!

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.

... à 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étecte 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

MRCpp:

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

Bonjour,

Quelle est la référence de ce composant?

C'est le TCST1300.

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.

Désolé pour le retard et merci pour votre réponse,

J'ai deux résistances de 1k,donc pour une alimentation de 5v sur l'émetteur il faut ~80 Ohms pour avoir un courant de 60 mA,

Je vais faire des tests,et je vous tiens au courant,

Merci encore,