Numărarea impulsurilor folosind Arduino Uno

Încerc să număr impulsurile de la un generator de forme de undă folosind un Arduino Uno. Generatorul de forme de undă este setat la următoarele setări:

  • Tip de formă de undă: impuls
  • Frecvență: 20 Hz (50ms)
  • Amplitudine: 3,0 Vpp
  • Offset: 0V
  • Lățime = 5ms

Până acum, sunt afișate doar 0 pe monitorul meu serial.

Aici este ceea ce am încercat până acum:

1) Folosirea pulseIn () și pulseInLong () -> fără succes

2) Verificarea conexiunilor de cablare -> Multimetru folosit pentru a verifica și sunt conectate corect.

3) Conectați un osciloscop pentru a vedea dacă forma de undă este generată -> Forma de undă este generată așa cum se arată în imaginile de mai jos.

Notă: Forma de undă generatorul face parte din osciloscop:

Generator de formă de undă

Diagrama conexiunii

Codul meu este prezentat mai jos:

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

Comentarii

  • Nu ' nu știu dacă va fi implicit intrare bu Trebuie să utilizați pinMode(pin, mode)?
  • Este " scăzut " o parte a formei de undă la 0V sau la -1,5V?
  • Din fotografia de scop ', nivelul scăzut al semnalului este de -1,5 volți , iar nivelul ridicat este de 1,5 volți. 1,5 volți este probabil o tensiune prea mică pentru a fi recunoscută ca o valoare înaltă de către Arduino.
  • Pentru a fi amabil cu intrările Arduino, ar trebui să setați generatorul de semnal pentru 5 Vpp și să schimbați offsetul la + 2,5 volți, deci semnalul comută între 0 și + 5V (presupunând că Arduino Vcc este de 5 volți.) Intrările digitale de pe microcontroler nu ar trebui să fie conduse negativ.
  • Oh, văd, am schimbat întârzierea la 250 ms, de aceea am văzut rezultatul = 5, dar acum l-am schimbat înapoi la 500 ms și acum văd rezultatul = 10, puteți explica cum să verificați dacă numărul de impulsuri este corect?

Răspuns

  1. După cum au subliniat Peter Bennett și alții, inițial ați setat 3Vpp, sau un impuls alternativ + 1,5V la -1,5v . Conform Caracteristicile electrice ale controlerului Arduino , 1,5 V nu este garantat să fie citit ca „1”. Ar trebui să fie cel puțin 0,6 Vcc. irq pinul nu poate recunoaște tranzițiile de margine, în schimb citește un „0” în permanență. Și nu trebuie să conduceți tensiune -ve la pinii I / O pentru a evita deteriorarea !!
  2. Frecvența impulsului este de 20 Hz sau 20 de impulsuri pe secundă. Cu o întârziere de 500 ms, calculați câte impulsuri apar pe jumătate de secundă, deci result ar trebui să aibă valoarea 10. Asta este ceea ce afișați pe monitorul serial.

Răspuns

De la „fotografia de amplasare, nivelul scăzut al semnalului este de -1,5 volți, iar nivelul înalt este de 1,5 volți. 1,5 volți este probabil o tensiune prea mică pentru a fi recunoscută ca o valoare înaltă de către Arduino.

De asemenea, intrările digitale Arduino pot fi deteriorate de tensiunea negativă. Intrările de pe majoritatea circuitelor digitale sunt concepute să accepte intrări între masă și tensiunea de alimentare pozitivă.

Dacă Arduino funcționează de la +5 volți, ar trebui să setați generatorul de semnal pentru 5 Vpp, cu un offset de +2,5 volți pentru a menține semnalul în Arduino ” Limitele tensiunii de intrare.

Pentru a fi recunoscut ca o valoare logică ridicată, tensiunea de intrare trebuie să fie peste 0,7 Vcc sau 3,5 volți – tensiunile mai mici nu pot fi recunoscute ca fiind ridicate, deci nu va declanșa o întrerupere.

Comentarii

  • L-am setat la 5Vpp, totuși offsetul + 2,5V provoacă fluctuații în numărul de numărări și fără offset am un citirea consecventă a numărului de impulsuri, este de așteptat? aș crede așa
  • Verifică nivelurile de intrare la Arduino. Nivelul scăzut ar trebui să fie la (sau foarte aproape de) sol, în timp ce nivelul înalt ar trebui să fie aproape de sursa pozitivă Arduino ', care presupun că este de 5 volți.

Răspuns

Resetați IRQcount de fiecare dată prin buclă.

Comentarii

  • Cred că ' este OK. Puneți la zero contorul, activați întreruperile, întârziați și apoi imprimați numărul de întreruperi la sfârșitul întârzierii.
  • Aceasta ' nu este o problemă.
  • Care sunt unitățile cu întârziere ()? Nu ' programul Audrino, dar este căpușe sau ns?
  • @ mjh2007 milisecunde, deci ' Este cu siguranță suficient de lung.
  • Arduino delay() este în ms.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *