Comptage des impulsions en utilisant Arduino Uno

Jessaie de compter les impulsions dun générateur de formes donde en utilisant un Arduino Uno. Le générateur de forme donde est réglé sur les paramètres suivants:

  • Type de forme donde: Impulsion
  • Fréquence: 20 Hz (50ms)
  • Amplitude: 3,0 Vpp
  • Décalage: 0V
  • Largeur = 5ms

Jusquà présent, je nai que des 0 affichés sur mon moniteur série.

Ici est ce que jai essayé jusquà présent:

1) Utilisation de pulseIn () et pulseInLong () -> aucun succès

2) Vérifiez les connexions de câblage -> Multimètre utilisé pour vérifier et ils sont correctement connectés.

3) Raccordez un oscilloscope pour voir si la forme donde est en cours de génération -> La forme donde est générée comme indiqué dans les images ci-dessous.

Remarque: La forme donde générateur fait partie de loscilloscope:

Générateur de formes donde

Schéma de connexion

Mon code est affiché ci-dessous:

volatile int IRQcount; int pin = 2; int pin_irq = 0; //IRQ that matches to pin 2 int result = 0; void setup() { // put your setup code here, to run once: Serial.begin (115200); pinMode(2, INPUT); attachInterrupt(pin_irq, IRQcounter, FALLING); } void IRQcounter() { IRQcount++; } void loop() { // put your main code here, to run repeatedly: cli();//disable interrupts IRQcount = 0; sei();//enable interrupts delay(500); cli();//disable interrupts result = IRQcount; sei();//enable interrupts Serial.print(F("Counted = ")); Serial.println(result); } 

Commentaires

  • Je ne ' ne sais pas sil sera par défaut entrée bu Avez-vous besoin dutiliser pinMode(pin, mode)?
  • Le " est-il bas " partie de votre forme donde à 0 V ou à -1,5 V?
  • Daprès la photo de la portée ', le niveau bas du signal est de -1,5 volts , et le niveau élevé est de 1,5 volts. 1,5 volts est probablement une tension trop basse pour être reconnue comme une logique élevée par lArduino.
  • Pour être gentil avec les entrées Arduino, vous devez régler le générateur de signal sur 5 Vpp et changer le décalage sur + 2,5 volts, donc le signal bascule entre 0 et + 5V (en supposant que lArduino Vcc est de 5 volts.) Les entrées numériques du microcontrôleur ne doivent pas être dirigées négativement.
  • Oh je vois, jai changé le délai en 250 ms cest pourquoi je voyais result = 5 mais maintenant je lai changé à 500 ms et maintenant je vois result = 10, pouvez-vous expliquer comment vérifier si le nombre dimpulsions est correct?

Réponse

  1. Comme Peter Bennett et dautres lont souligné, vous aviez initialement réglé 3Vpp, ou une impulsion alternant + 1,5V à -1,5v . Selon les Caractéristiques électriques du contrôleur Arduino , il nest pas garanti que 1,5 V soit lu comme « 1 ». Il doit être au moins 0,6 de Vcc. La broche irq ne peut pas reconnaître les transitions de front, mais elle lit toujours un « 0 ». Et vous nêtes pas censé fournir une tension -ve aux broches dE / S pour éviter tout dommage. !!
  2. La fréquence des impulsions est de 20 Hz ou 20 impulsions par seconde. Avec un retard de 500 ms, vous comptez le nombre dimpulsions qui se produisent par demi-seconde, donc result doit avoir une valeur de 10. Cest ce que vous obtenez sur le moniteur série.

Réponse

De la « photo de la lunette, le niveau bas du signal est de -1,5 volts, et le niveau haut est de 1,5 volts. 1,5 volts est probablement une tension trop basse pour être reconnue comme une logique High par lArduino.

En outre, les entrées numériques Arduino peuvent être endommagées par la tension négative. Les entrées de la plupart des circuits intégrés numériques sont conçues pour accepter entrées entre la terre et la tension dalimentation positive.

Si lArduino fonctionne à partir de +5 Volts, vous devez régler le générateur de signal sur 5 Vpp, avec un décalage de +2,5 volts pour maintenir le signal dans lArduino  » s limites de tension dentrée.

Pour être reconnu comme un haut logique, la tension dentrée doit être supérieure à 0,7 Vcc, ou 3,5 volts – les tensions inférieures peuvent ne pas être reconnues comme un haut, donc ne déclenchera pas dinterruption.

Commentaires

  • Je lai réglé sur 5Vpp, mais le décalage + 2.5V provoque des fluctuations dans le nombre de comptages et sans le décalage jai un lecture constante du nombre dimpulsions, est-ce prévu? Je pense que oui
  • Vérifiez les niveaux dentrée sur lArduino. Le niveau bas doit être à (ou très proche de) la terre, tandis que le niveau haut doit être proche de lalimentation positive de lArduino ', qui, je suppose, est de 5 volts.

Réponse

Vous réinitialisez IRQcount à chaque fois dans la boucle.

Commentaires

  • Je pense que ' est OK. Remettez à zéro le compteur, activez les interruptions, retardez puis imprimez le nombre dinterruptions à la fin du retard.
  • Cela ' nest pas un problème.
  • Quelles sont les unités sur delay ()? Je ne programme ' t Audrino, mais est-ce que cest ticks ou ns?
  • @ mjh2007 millisecondes, donc cest ' est certainement assez long.
  • Arduino delay() est en ms.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *