Î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:
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
Răspuns
- 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 !! - 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.
pinMode(pin, mode)
?