Impulzusok számlálása az Arduino Uno használatával

Arduino Uno segítségével próbálok számlálni egy hullámforma-generátor impulzusait. A hullámforma-generátor a következő beállításokkal van beállítva:

  • Hullámforma típusa: impulzus
  • Frekvencia: 20 Hz (50ms)
  • Amplitúdó: 3.0 Vpp
  • Eltolás: 0 V
  • Szélesség = 5 ms

Eddig csak 0-kat jelenítek meg a soros monitoromon.

Itt az, amit eddig kipróbáltam:

1) A pulseIn () és a pulseInLong () használata -> sikertelenül

2) Ellenőrizze a vezetékek csatlakozását -> Használt multiméter az ellenőrzéshez megfelelően vannak csatlakoztatva.

3) Csatlakoztasson egy oszcilloszkópot, hogy lássa, generálódik-e a hullámforma -> A hullámforma az alábbi képeken látható módon jön létre.

Megjegyzés: A hullámforma generátor az oszcilloszkóp része:

Waveform Generator

Kapcsolódási rajz

A kódom az alábbiakban látható:

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); } 

Megjegyzések

  • Nem tudom ' input bu t kell használnia a pinMode(pin, mode) alkalmazást?
  • Alacsony a " " a hullámformád egy része 0 V-nál vagy -1,5 V-nál?
  • A ' hatókörű fotóból a jel alacsony szintje -1,5 volt. , és a magas szint 1,5 volt. 1,5 volt valószínűleg túl alacsony feszültség ahhoz, hogy az Arduino logikai magasnak ismerje el.
  • Ahhoz, hogy kedves légy az Arduino bemenetekkel szemben, a jelgenerátort 5 Vpp értékre kell állítania, és az eltolást + értékre kell állítania. 2,5 volt, így a jel 0 és + 5 V között vált (feltételezve, hogy az Arduino Vcc 5 volt.) A mikrovezérlő digitális bemeneteit nem szabad negatívan vezetni.
  • Ó, látom, a késleltetést megváltoztattam 250 ms ezért láttam az eredmény = 5 értéket, de most visszaváltoztam 500 ms-ra, és most az eredmény = 10-et látom. Meg tudná magyarázni, hogyan ellenőrizhető, hogy a pulzusszám helyes-e?

Válasz

  1. Amint Peter Bennett és mások rámutattak, kezdetben 3Vpp-t vagy egy impulzust váltott + 1,5V-ról -1,5v-ra. . Az Arduino vezérlő elektromos jellemzőinek megfelelően az 1,5 V-ot nem garantáltan “1” -nek kell olvasni. Legalább 0,6 Vcc-nek kell lennie. A irq tű nem ismeri fel az élátmeneteket, ehelyett “0” -ot olvas. Mindig nem szabad a feszültséget az I / O érintkezőkhöz is vezetnie a károk elkerülése érdekében !!
  2. Az impulzus frekvenciája 20 Hz vagy 20 impulzus másodpercenként. 500 ms késleltetéssel számolja, hogy hány impulzus fordul elő fél másodperc alatt, így result 10-es értéknek kell lennie. Ezt jelenik meg a soros monitoron.

Válasz

Feladó a “hatókörkép, a jel alacsony szintje 1,5 volt, a magas szint pedig 1,5 volt. 1,5 volt valószínűleg túl alacsony feszültség ahhoz, hogy az Arduino logikai magasnak ismerje el.

Az Arduino digitális bemeneteket károsíthatja a negatív feszültség. A legtöbb digitális IC bemenetét úgy tervezték, hogy bemenetek a föld és a pozitív tápfeszültség között.

Ha az Arduino +5 V feszültségről működik, akkor a jelgenerátort 5 Vpp értékre kell állítani, +2,5 V eltolással, hogy a jel az Arduino-n belül maradjon. ” s bemeneti feszültség határértékei.

Ahhoz, hogy logikusan magasnak lehessen felismerni, a bemeneti feszültségnek 0,7 Vcc vagy 3,5 V fölött kell lennie – az alacsonyabb feszültségeket nem lehet felismerni magasnak, ezért nem vált ki megszakítást.

megjegyzések

  • 5Vpp-re állítottam, azonban a + 2,5V eltolás ingadozásokat okoz a számlálások számában, és az eltolás nélkül van egy egyenletes pulzusszám-leolvasás, ez várható? azt hinném
  • Ellenőrizze az Arduino bemeneti szintjeit. Az Alacsony szintnek a talajon kell lennie (vagy ahhoz nagyon közel kell lennie), míg a Magas szintnek közel kell lennie az Arduino ' pozitív tápellátásához, amely feltételezem, hogy 5 volt.

Válasz

Az IRQcount-ot minden egyes alaphelyzetbe állítja.

Megjegyzések

  • Úgy gondolom, hogy a ' rendben van. Nullázza le a számlálót, engedélyezze a megszakításokat, késleltesse, majd nyomtassa ki a megszakítások számát a késleltetés végén.
  • Ez ' nem jelent problémát.
  • Melyek a késés () egységei? Nem ' nem programozom az Audrino-t, de ez kullancs vagy ns?
  • @ mjh2007 ezredmásodperc, tehát ' s határozottan elég hosszú.
  • Az Arduino delay() ms-ban van megadva.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük