Teller pulser ved hjelp av Arduino Uno

Jeg prøver å telle pulser fra en bølgeformgenerator ved hjelp av en Arduino Uno. Bølgeformgeneratoren er satt med følgende innstillinger:

  • Bølgeformtype: Puls
  • Freq: 20 Hz (50ms)
  • Amplitude: 3,0 Vpp
  • Offset: 0V
  • Width = 5ms

Så langt får jeg bare 0s vist på min serielle skjerm.

Her er det jeg har prøvd så langt:

1) Bruke pulseIn () og pulseInLong () -> ingen suksess

2) Sjekk ledningsforbindelser -> Brukt multimeter for å sjekke og de er riktig tilkoblet.

3) Koble til et oscilloskop for å se om bølgeformen genereres -> Bølgeformen genereres som vist på bildene nedenfor.

Merk: Bølgeformen generator er en del av oscilloskopet:

Waveform Generator

Tilkoblingsskjema

Koden min 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

  • Jeg vet ikke ' om det vil være standard inngang bu t trenger du å bruke pinMode(pin, mode)?
  • Er " lav " del av bølgeformen din ved 0V, eller ved -1,5V?
  • Fra ' omfangsbildet er signalets lave nivå -1,5 volt , og det høye nivået er 1,5 volt. 1,5 volt er sannsynligvis for lav spenning til å bli gjenkjent som en logikk High av Arduino.
  • For å være snill mot Arduino-inngangene, bør du stille signalgeneratoren til 5 Vpp, og endre forskyvningen til + 2,5 volt, så signalet bytter mellom 0 og + 5V (forutsatt at Arduino Vcc er 5 volt.) De digitale inngangene på mikrokontrolleren skal ikke kjøres negativt.
  • Jeg skjønner, jeg endret forsinkelsen til 250 ms, det er grunnen til at jeg så resultatet = 5, men nå endret jeg det tilbake til 500 ms, og nå ser jeg resultatet = 10, kan du forklare hvordan du sjekker om pulstallet er riktig?

Svar

  1. Som Peter Bennett og andre påpekte, hadde du i utgangspunktet satt 3Vpp, eller en puls alternerende + 1,5V til -1,5v . I henhold til De elektriske egenskapene til Arduinos Controller er ikke 1,5V garantert å bli lest som «1». Det bør være minst 0,6 av Vcc. irq pin kan ikke gjenkjenne kantoverganger, i stedet står det «0» hele tiden. Og du skal ikke kjøre -ve spenning til I / O-pinnene også for å unngå skade !!
  2. Pulsfrekvensen er 20 Hz eller 20 pulser per sekund. Med 500ms forsinkelse teller du hvor mange pulser som oppstår per et halvt sekund, så result bør ha verdi 10. Det er det du får vist på seriell skjerm.

Svar

Fra «scope-bildet, signalets lave nivå er -1,5 volt, og det høye nivået er 1,5 volt. 1,5 volt er sannsynligvis for lav spenning til å bli gjenkjent som en logikk høy av Arduino.

Også, Arduino digitale innganger kan bli skadet av den negative spenningen. Inngangene på de fleste digitale IC-er er designet for å akseptere innganger mellom jord og den positive forsyningsspenningen.

Hvis Arduino betjenes fra +5 volt, bør du stille signalgeneratoren til 5 Vpp, med en +2,5 volt forskyvning for å holde signalet innenfor Arduino » s inngangsspenningsgrenser.

For å bli gjenkjent som en logikk High, må inngangsspenningen være over 0,7 Vcc, eller 3,5 volt – lavere spenninger blir kanskje ikke gjenkjent som High, så det vil ikke utløse et avbrudd.

Kommentarer

  • Jeg har satt den til 5Vpp, men + 2.5V-forskyvningen forårsaker svingninger i antall tellinger og uten forskyvningen har jeg en jevnlig pulstelling, er det forventet? jeg vil tro det
  • Sjekk inngangsnivåene på Arduino. Det lave nivået skal være på (eller veldig nær) bakken, mens det høye nivået skal være nær Arduino ' s positive forsyning, som jeg antar er 5 volt.

Svar

Du tilbakestiller IRQ-antall hver gang gjennom løkken.

Kommentarer

  • Jeg tror at ' er OK. Null telleren, aktiver avbrudd, forsink og skriv ut antall avbrudd på slutten av forsinkelsen.
  • At ' ikke er et problem.
  • Hva er enhetene med forsinkelse ()? Jeg programmerer ikke ' t Audrino, men er det flått eller ns?
  • @ mjh2007 millisekunder, så det ' er definitivt lenge nok.
  • Arduino delay() er i ms.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *