Ich versuche, Impulse von einem Wellenformgenerator mit einem Arduino Uno zu zählen. Der Wellenformgenerator ist auf die folgenden Einstellungen eingestellt:
- Wellenformtyp: Impuls
- Frequenz: 20 Hz (50 ms)
- Amplitude: 3,0 Vpp
- Offset: 0 V
- Breite = 5 ms
Bisher werden auf meinem seriellen Monitor nur 0 angezeigt.
Hier ist das, was ich bisher versucht habe:
1) Verwenden von pulsIn () und pulsInLong () -> kein Erfolg
2) Überprüfen Sie die Kabelverbindungen -> Verwenden Sie das Multimeter zum Überprüfen von und Sie sind ordnungsgemäß angeschlossen.
3) Schließen Sie ein Oszilloskop an, um festzustellen, ob die Wellenform generiert wird -> Die Wellenform wird wie in den folgenden Abbildungen gezeigt generiert.
Hinweis: Die Wellenform Der Generator ist Teil des Oszilloskops:
Mein Code wird unten angezeigt:
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); }
Kommentare
- Ich ' weiß nicht, ob dies standardmäßig der Fall ist Eingabe bu t müssen Sie
pinMode(pin, mode)
verwenden? - Ist die " niedrig " Teil Ihrer Wellenform bei 0 V oder -1,5 V?
- Auf dem ' Scope-Foto beträgt der niedrige Pegel des Signals -1,5 Volt und der hohe Pegel beträgt 1,5 Volt. 1,5 Volt sind wahrscheinlich eine zu niedrige Spannung, um vom Arduino als logisch hoch erkannt zu werden.
- Um die Arduino-Eingänge zu schonen, sollten Sie den Signalgenerator auf 5 Vss einstellen und den Offset auf + ändern 2,5 Volt, also schaltet das Signal zwischen 0 und + 5 V um (vorausgesetzt, der Arduino Vcc beträgt 5 Volt). Die digitalen Eingänge am Mikrocontroller sollten nicht negativ angesteuert werden.
- Oh, ich verstehe, ich habe die Verzögerung auf geändert 250 ms, deshalb habe ich result = 5 gesehen, aber jetzt habe ich es wieder auf 500 ms geändert und jetzt sehe ich result = 10, können Sie erklären, wie man prüft, ob die Impulszahl korrekt ist?
Antwort
- Wie Peter Bennett und andere betonten, hatten Sie anfangs 3 Vpp oder einen Impuls zwischen + 1,5 V und -1,5 V eingestellt . Gemäß der Elektrischen Eigenschaften des Arduino-Controllers wird nicht garantiert, dass 1,5 V als „1“ gelesen werden. Sie sollte mindestens 0,6 Vcc betragen
irq
Pin kann keine Kantenübergänge erkennen, sondern liest immer eine „0“. Außerdem sollten Sie keine Spannung an die E / A-Pins anlegen, um Beschädigungen zu vermeiden !! - Die Impulsfrequenz beträgt 20 Hz oder 20 Impulse pro Sekunde. Mit einer Verzögerung von 500 ms zählen Sie, wie viele Impulse pro halbe Sekunde auftreten, also
result
sollte den Wert 10 haben. Dies wird auf dem seriellen Monitor angezeigt.
Antwort
Von Auf dem Scope-Foto beträgt der niedrige Pegel des Signals -1,5 Volt und der hohe Pegel 1,5 Volt. 1,5 Volt sind wahrscheinlich eine zu niedrige Spannung, um vom Arduino als logisch hoch erkannt zu werden.
Außerdem können die digitalen Arduino-Eingänge durch die negative Spannung beschädigt werden. Die Eingänge der meisten digitalen ICs sind für die Aufnahme ausgelegt Eingänge zwischen Masse und der positiven Versorgungsspannung.
Wenn der Arduino mit +5 Volt betrieben wird, sollten Sie den Signalgenerator auf 5 Vss mit einem Offset von +2,5 Volt einstellen, um das Signal im Arduino zu halten. “ s Eingangsspannungsgrenzen.
Um als logisch hoch erkannt zu werden, muss die Eingangsspannung über 0,7 Vcc oder 3,5 Volt liegen. Niedrigere Spannungen werden möglicherweise nicht als hoch erkannt und lösen daher keinen Interrupt aus.
Kommentare
- Ich habe es auf 5 Vpp eingestellt, aber der + 2,5 V-Versatz verursacht Schwankungen in der Anzahl der Zählungen und ohne den Versatz habe ich a konsistente Pulszählung, wird das erwartet? Ich würde es mir vorstellen
- Überprüfen Sie die Eingangspegel am Arduino. Der niedrige Pegel sollte auf (oder sehr nahe an) Masse liegen, während der hohe Pegel nahe an der positiven Versorgung des Arduino ' liegen sollte, von der ich annehme, dass sie 5 Volt beträgt.
Antwort
Sie setzen IRQcount jedes Mal durch die Schleife zurück.
Kommentare
- Ich denke, dass ' in Ordnung ist. Stellen Sie den Zähler auf Null, aktivieren Sie die Interrupts, verzögern Sie und drucken Sie dann die Anzahl der Interrupts am Ende der Verzögerung aus.
- Das ' ist kein Problem.
- Was sind die Einheiten bei delay ()? Ich programmiere Audrino nicht ', aber ist das Ticks oder ns?
- @ mjh2007 Millisekunden, also ' Es ist definitiv lang genug.
- Arduino
delay()
ist in ms.