Jeg prøver at tælle impulser fra en bølgeformgenerator ved hjælp af en Arduino Uno. Bølgeformgeneratoren indstilles til følgende indstillinger:
- Bølgeformtype: Impuls
- Freq: 20 Hz (50ms)
- Amplitude: 3,0 Vpp
- Offset: 0V
- Width = 5ms
Indtil videre får jeg kun 0er vist på min serielle skærm.
Her er det, jeg har prøvet indtil videre:
1) Brug af pulseIn () og pulseInLong () -> ingen succes
2) Kontroller ledningsforbindelser -> Brugt multimeter til at kontrollere og de er korrekt tilsluttet.
3) Tilslut et oscilloskop for at se, om bølgeformen genereres -> Bølgeformen genereres som vist på billederne nedenfor.
Bemærk: Bølgeformen generator er en del af oscilloskopet:
Min kode vises nedenfor:
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); }
Kommentarer
Svar
- Som Peter Bennett og andre påpegede, havde du oprindeligt indstillet 3Vpp eller en puls alternerende + 1,5V til -1,5v . I henhold til Elektriske egenskaber ved Arduinos controller , kan 1,5 V ikke garanteres at blive læst som “1”. Det skal være mindst 0,6 Vcc. Derfor er din
irq
pin kan ikke genkende kantovergange, i stedet læses det “0” hele tiden. Og det er ikke meningen, at du også skal køre -ve spænding til I / O-benene for at undgå skader !! - Pulsfrekvensen er 20 Hz eller 20 impulser pr. sekund. Med 500ms forsinkelse tæller du, hvor mange impulser der opstår pr. halvt sekund, så
result
skal være af værdi 10. Det er det, du får vist på seriel skærm.
Svar
Fra “scope-billedet, signalets lave niveau er -1,5 volt, og det høje niveau er 1,5 volt. 1,5 volt er sandsynligvis for lav spænding til at blive anerkendt som en logik High af Arduino.
Arduino digitale indgange kan også blive beskadiget af den negative spænding. Indgangene på de fleste digitale ICer er designet til at acceptere indgange mellem jord og den positive forsyningsspænding.
Hvis Arduino betjenes fra +5 volt, skal du indstille signalgeneratoren til 5 Vpp med en +2,5 volt forskydning for at holde signalet inden for Arduino ” s indgangsspændingsgrænser.
For at blive anerkendt som en logik High skal indgangsspændingen være over 0,7 Vcc eller 3,5 volt – lavere spændinger genkendes muligvis ikke som High, så det udløser ikke en afbrydelse.
Kommentarer
- Jeg har indstillet det til 5Vpp, men + 2.5V offset forårsager udsving i antallet af tællinger og uden forskydningen har jeg en konsekvent aflæsning af pulsantal, forventes det? det ville jeg tro
- Kontroller inputniveauerne på Arduino. Det lave niveau skal være på (eller meget tæt på) jorden, mens det høje niveau skal være tæt på Arduino ' s positive forsyning, som jeg antager er 5 volt.
Svar
Du nulstiller IRQcount hver gang gennem løkken.
Kommentarer
- Jeg tror, at ' er OK. Nulstill tælleren, aktiver afbrydelser, forsink og udskriv derefter antallet af afbrydelser i slutningen af forsinkelsen.
- At ' ikke er et problem.
- Hvad er enhederne med forsinkelse ()? Jeg programmerer ikke ' Audrino, men er det kryds eller ns?
- @ mjh2007 millisekunder, så det ' er bestemt længe nok.
- Arduino
delay()
findes i ms.
pinMode(pin, mode)
?