Pulssien laskeminen Arduino Unolla

Yritän laskea pulsseja aaltomuotogeneraattorista Arduino Unoa käyttämällä. Aaltomuodon generaattori asetetaan seuraaviin asetuksiin:

  • Aaltomuodon tyyppi: Pulssi
  • Taajuus: 20 Hz (50 ms)
  • Amplitudi: 3,0 Vpp
  • Siirtymä: 0 V
  • Leveys = 5 ms

Toistaiseksi sarjamittarissani näkyy vain 0 sekuntia.

Täällä on mitä olen kokeillut tähän mennessä:

1) pulseIn (): n ja pulseInLong (): n käyttö -> ei onnistu

2) Tarkista johdotus -> Käytetty yleismittari tarkistaaksesi ja ne on kytketty oikein.

3) Kytke oskilloskooppi nähdäksesi, muodostuuko aaltomuoto -> Aaltomuotoa kehitetään alla olevien kuvien mukaisesti.

Huomaa: Aaltomuoto generaattori on osa oskilloskooppia:

Aaltomuodon generaattori

Yhteyskaavio

Koodini näkyy alla:

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

Kommentit

  • En tiedä ' en tiedä onko se oletusarvoisesti tulo bu t tarvitseeko käyttää pinMode(pin, mode)?
  • Onko " matala " osa aaltomuodostasi jännitteellä 0 V tai -1,5 V?
  • ' -kuvakkeesta signaalin matala taso on -1,5 volttia , ja korkea taso on 1,5 volttia. 1,5 volttia on luultavasti liian matala jännite, jotta Arduino ei tunnista sitä logiikan suureksi.
  • Jotta olisit ystävällinen Arduino-tuloille, aseta signaaligeneraattori arvoon 5 Vpp ja vaihda siirtymä arvoksi + 2,5 volttia, joten signaali vaihtaa 0 ja + 5 V välillä (olettaen, että Arduino Vcc on 5 volttia.) Mikrokontrollerin digitaalisia tuloja ei pitäisi ohjata negatiivisiksi.
  • Voi kyllä, vaihdoin viiveeksi 250 ms siksi näen tuloksen = 5, mutta nyt muutin sen takaisin 500 ms: ksi ja nyt näen tuloksen = 10, voitko selittää, kuinka tarkistaa, onko pulssimäärä oikea?

vastaus

  1. Kuten Peter Bennett ja muut huomauttivat, alun perin olit asettanut 3Vpp tai pulssin, joka vaihteli + 1,5 V -1,5 v . Arduinon ohjaimen sähköisten ominaisuuksien mukaan 1,5 V: n ei voida taata olevan ”1”. Sen tulisi olla vähintään 0,6 Vcc. Siksi irq nasta ei tunnista reunasiirtymiä, vaan lukee koko ajan ”0”. Eikä sinun tarvitse ajaa -ve -jännitettä myös I / O-nastoihin vahingoittumisen välttämiseksi !!
  2. Pulssitaajuus on 20 Hz tai 20 pulssia sekunnissa. 500 ms viiveellä lasket kuinka monta pulssia esiintyy puoli sekuntia, joten result pitäisi olla arvoa 10. Sitä näytetään sarjavalvonnassa.

Vastaa

Lähettäjä ”laajuusvalokuva, signaalin matala taso on -1,5 volttia ja korkea taso 1,5 volttia. 1,5 volttia on luultavasti liian matala jännite, jotta Arduino ei tunnista sitä logiikan korkeaksi.

Myös negatiivinen jännite voi vahingoittaa Arduino-digitaalituloja.Useimpien digitaalisten piirien tulot on suunniteltu hyväksymään tulot maadoituksen ja positiivisen syöttöjännitteen välillä.

Jos Arduinoa käytetään +5 voltin jännitteellä, sinun tulisi asettaa signaaligeneraattori arvoon 5 Vpp +2,5 voltin siirtymällä, jotta signaali pysyy Arduinossa ” s tulojännitteen raja-arvot.

Jotta logiikka olisi korkea, tulojännitteen on oltava yli 0,7 Vcc tai 3,5 volttia – matalampia jännitteitä ei ehkä tunnisteta suuriksi, joten ne eivät aiheuta keskeytystä.

kommentit

  • Olen asettanut sen arvoksi 5 Vpp, mutta + 2,5 V: n siirtymä aiheuttaa vaihteluita lukumäärässä ja ilman siirtymää minulla on johdonmukainen pulssimäärä, onko sitä odotettavissa luulisin niin
  • Tarkista Arduinon tulotasot. Matalan tason tulisi olla (tai hyvin lähellä) maata, kun taas korkean tason tulisi olla lähellä Arduinon positiivista syöttöä ', jonka oletan olevan 5 volttia.

Vastaa

Nollaat IRQ-määrän joka kerta silmukan läpi.

Kommentit

  • Luulen, että ' on OK. Nollaa laskuri, ota keskeytykset käyttöön, viivästytä ja tulosta sitten keskeytysten määrä viiveen lopussa.
  • Että ' ei ole ongelma.
  • Mitkä ovat viiveen () yksiköt? En ohjelmoi Audrinoa ', mutta onko punkkeja vai ns?
  • @ mjh2007 millisekuntia, joten se ' on ehdottomasti riittävän pitkä.
  • Arduino delay() on ms.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *