Conteggio degli impulsi utilizzando Arduino Uno

Sto cercando di contare gli impulsi da un generatore di forme donda utilizzando un Arduino Uno. Il generatore di forme donda è impostato sulle seguenti impostazioni:

  • Tipo di forma donda: Impulso
  • Freq: 20 Hz (50 ms)
  • Ampiezza: 3.0 Vpp
  • Offset: 0V
  • Larghezza = 5 ms

Finora ottengo solo 0 visualizzati sul mio monitor seriale.

Qui è quello che ho provato finora:

1) Uso di pulseIn () e pulseInLong () -> nessun successo

2) Controlla i collegamenti del cablaggio -> Multimetro usato per controllare e siano collegati correttamente.

3) Collega un oscilloscopio per vedere se la forma donda viene generata -> La forma donda viene generata come mostrato nelle immagini seguenti.

Nota: la forma donda generatore fa parte delloscilloscopio:

Generatore di forme donda

Diagramma di connessione

Il mio codice è mostrato di seguito:

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

Commenti

  • Non ' non so se per impostazione predefinita sarà input bu Non è necessario utilizzare pinMode(pin, mode)?
  • Il " basso " parte della tua forma donda a 0 V o a -1,5 V?
  • Dalla foto ', il livello basso del segnale è -1,5 volt e il livello alto è di 1,5 volt. 1,5 volt è probabilmente un voltaggio troppo basso per essere riconosciuto come logico alto da Arduino.
  • Per essere gentili con gli ingressi di Arduino, dovresti impostare il generatore di segnale per 5 Vpp e cambiare loffset su + 2,5 volt, quindi il segnale passa tra 0 e + 5V (supponendo che Arduino Vcc sia 5 volt.) Gli ingressi digitali sul microcontrollore non dovrebbero essere pilotati in negativo.
  • Oh capisco, ho cambiato il ritardo in 250 ms è per questo che vedevo risultato = 5 ma ora lho cambiato di nuovo a 500 ms e ora vedo risultato = 10, puoi spiegare come controllare se il conteggio degli impulsi è corretto?

Risposta

  1. Come hanno sottolineato Peter Bennett e altri, inizialmente avevi impostato 3 Vpp, o un impulso che alternava + 1,5 V a -1,5 V . Secondo le caratteristiche elettriche del controller di Arduino , non è garantito che 1,5 V sia letto come “1”. Dovrebbe essere almeno 0,6 di Vcc. irq il pin non è in grado di riconoscere le transizioni dei bordi, invece legge sempre uno “0”. Inoltre, non è previsto che tu installi la tensione -ve anche ai pin I / O per evitare danni !!
  2. La frequenza degli impulsi è di 20 Hz o 20 impulsi al secondo. Con un ritardo di 500 ms, stai contando quanti impulsi si verificano ogni mezzo secondo, quindi result dovrebbe avere un valore 10. Questo è ciò che viene visualizzato sul monitor seriale.

Risposta

Da la “foto delloscilloscopio, il livello basso del segnale è -1,5 volt e il livello alto è 1,5 volt. 1,5 volt è probabilmente una tensione troppo bassa per essere riconosciuta come alta logica da Arduino.

Inoltre, gli ingressi digitali di Arduino possono essere danneggiati dalla tensione negativa Gli ingressi sulla maggior parte dei circuiti integrati digitali sono progettati per accettare ingressi tra Ground e la tensione di alimentazione positiva.

Se Arduino viene azionato da +5 Volt, è necessario impostare il generatore di segnale a 5 Vpp, con un offset di +2,5 volt per mantenere il segnale allinterno di Arduino ” s limiti di tensione di ingresso.

Per essere riconosciuta come alta logica, la tensione di ingresso deve essere superiore a 0,7 Vcc, o 3,5 volt – le tensioni inferiori potrebbero non essere riconosciute come alte, quindi non attiveranno un interrupt.

Commenti

  • Lho impostato su 5Vpp, tuttavia loffset di + 2.5V causa fluttuazioni nel numero di conteggi e senza loffset ho un lettura costante del conteggio degli impulsi, è previsto? Penso di sì
  • Controlla i livelli di input su Arduino. Il livello basso dovrebbe essere a (o molto vicino a) massa, mentre il livello alto dovrebbe essere vicino allalimentazione positiva di Arduino ', che presumo sia di 5 volt.

Risposta

Stai reimpostando il conteggio IRQ ogni volta attraverso il ciclo.

Commenti

  • Penso che ' sia OK. Azzera il contatore, abilita le interruzioni, ritarda e quindi stampa il numero di interruzioni alla fine del ritardo.
  • Questo ' non è un problema.
  • Quali sono le unità di ritardo ()? Non ' programma Audrino, ma è tic o ns?
  • @ mjh2007 millisecondi, quindi ' è decisamente abbastanza lungo.
  • Arduino delay() è in ms.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *