Počítání pulsů pomocí Arduino Uno

Pokouším se počítat pulsy z generátoru vln pomocí Arduino Uno. Generátor průběhu je nastaven na následující nastavení:

  • Typ průběhu: pulzní
  • frekvence: 20 Hz (50ms)
  • amplituda: 3,0 Vpp
  • Offset: 0V
  • Width = 5ms

Zatím se na mém sériovém monitoru zobrazuje pouze 0 s.

Zde je to, co jsem zatím vyzkoušel:

1) Používání pulseIn () a pulseInLong () -> žádný úspěch

2) Zkontrolujte zapojení -> Použitý multimetr ke kontrole a jsou správně připojeny.

3) Připojte osciloskop a zkontrolujte, zda se generuje průběh -> Průběh se generuje, jak je znázorněno na obrázcích níže.

Poznámka: Průběh generátor je součástí osciloskopu:

Generátor vln

Schéma připojení

Můj kód je uveden níže:

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

Komentáře

  • Nevím ' nevím, jestli bude výchozí vstupní bu t musíte použít pinMode(pin, mode)?
  • Je " nízký " část křivky při 0 V nebo při -1,5 V?
  • Z fotografie oboru ' je nízká úroveň signálu -1,5 voltu a vysoká úroveň je 1,5 voltu. 1,5 voltu je pravděpodobně příliš nízké napětí, aby ho Arduino rozpoznalo jako logické vysoké.
  • Chcete-li být laskaví ke vstupům Arduina, měli byste nastavit generátor signálu na 5 Vpp a změnit offset na + 2,5 voltu, takže signál se přepíná mezi 0 a + 5 V (za předpokladu, že Arduino Vcc je 5 voltů.) Digitální vstupy na mikrokontroléru by neměly být negativní.
  • No, změnil jsem zpoždění na 250 ms, proto jsem viděl result = 5, ale teď jsem to změnil zpět na 500 ms a teď vidím result = 10, můžete vysvětlit, jak zkontrolovat, zda je počet pulzů správný?

Odpověď

  1. Jak uvedl Peter Bennett a další, zpočátku jste nastavili 3Vpp nebo pulz střídavý + 1,5V až -1,5v . Podle elektrických charakteristik řadiče Arduino není zaručeno, že se 1,5 V bude číst jako „1“. Mělo by být alespoň 0,6 Vcc. Pin irq nedokáže rozpoznat přechody okrajů, místo toho bude stále číst „0“. A neměli byste také napájet -ve napětí na I / O piny, aby nedošlo k poškození !!
  2. Frekvence pulsů je 20 Hz nebo 20 pulsů za sekundu. Se zpožděním 500 ms počítáte, kolik pulzů se vyskytne za půl sekundy, takže result by měla mít hodnotu 10. To je to, co se zobrazuje na sériovém monitoru.

Odpověď

Od „fotka rozsahu, nízká úroveň signálu je 1,5 voltu a vysoká úroveň 1,5 voltu. 1,5 voltu je pravděpodobně příliš nízké napětí, aby jej Arduino rozpoznalo jako logické vysoké.

Také záporné napětí může poškodit digitální vstupy Arduino. Vstupy na většině digitálních integrovaných obvodů jsou navrženy tak, aby přijímaly vstupy mezi zemí a kladným napájecím napětím.

Pokud je Arduino provozováno z +5 Voltů, měli byste nastavit generátor signálu na 5 Vpp s offsetem +2,5 V, aby byl signál udržován v Arduinu. “ Limity vstupního napětí.

Aby bylo možné jej rozpoznat jako logické vysoké, vstupní napětí musí být nad 0,7 Vcc nebo 3,5 voltu – nižší napětí nemusí být rozpoznáno jako vysoké, takže nespustí přerušení.

Komentáře

  • Nastavil jsem to na 5Vpp, ale posun + 2,5V způsobí kolísání počtu počtů a bez posunu mám konzistentní čtení počtu pulzů, to se očekává? Myslím, že ano
  • Zkontrolujte vstupní úrovně v Arduinu. Nízká úroveň by měla být na (nebo velmi blízko) zemi, zatímco vysoká úroveň by měla být blízko kladného napájení Arduino ', které předpokládám je 5 voltů.

Odpověď

IRQcount resetujete pokaždé přes smyčku.

Komentáře

  • Myslím, že ' je v pořádku. Vynulujte počítadlo, povolte přerušení, odložte a poté vytiskněte počet přerušení na konci zpoždění.
  • To ' to není problém.
  • Co jsou jednotky na delay ()? ' t programuji Audrino, ale je to klíště nebo ns?
  • @ mjh2007 milisekund, takže ' rozhodně dost dlouhý.
  • Arduino delay() je v ms.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *