Arduino időzítő bemutatója

Arduino Timer Tutorial

Az időzítők a mikrovezérlők alapvető jellemzői, lehetővé téve a feladatok elvégzését pontos időközönként anélkül, hogy a késésekre támaszkodnának. Az Arduino UNO-nak három beépített hardver-időzítője van (Timer0, Timer1 és Timer2), amelyek különféle funkciókhoz konfigurálhatók, például PWM jelek előállítása, időzítési események vagy feladatok ütemezése. Ez az oktatóanyag vezeti Önt az Arduino időzítők megértésén és használatán.


Mire lesz szüksége

  1. Arduino UNO (vagy egy kompatibilis tábla)
  2. LED és 220-OHM ellenállás (időzítésen alapuló példákhoz)
  3. Kenyérlemez és jumper vezetékek
  4. Arduino IDE telepítve a számítógépére

1. lépés: Az Arduino időzítők megértése

Az Arduino UNO ATMEGA328P mikrovezérlőjének három hardver időzítője van:

Időzítő Bit felbontás Elsődleges használat
Időzítő0 8 bites Millis (), micros (), PWM az 5., 6. csapon
Időzítő1 16 bites Szervo könyvtár, PWM a 9., 10. csapokon
Időzítő2 8 bites Tone () függvény, PWM a 3., 11. csapokon

Az időzítők legfontosabb jellemzői

  • Az időzítők PWM jeleket generálhatnak.
  • Az időzítők megszakításokat válthatnak ki.
  • Az időzítőket az arduino funkciók, például delay() és millis().

2. lépés: Egyszerű PWM jel előállítása

A PWM (impulzusszélesség -moduláció) jeleket általában használják a LED fényerejének vagy a motor sebességének szabályozására. Használjuk az Timer0 -ot PWM jel létrehozásához.

Példa kód: LED -es fényerő -vezérlés PWM -mel

#define ledPin 6 // Pin 6 uses Timer0 for PWM

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(ledPin, brightness); // Increase brightness
    delay(10);
  }

  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(ledPin, brightness); // Decrease brightness
    delay(10);
  }
}

3. lépés: Időzítők használata megszakításokkal

Konfigurálhatja az időzítőket a megszakítások rendszeres időközönként történő kiváltására. Például az Timer1 beállítható, hogy másodpercenként váltson egy LED -et.

Példa kód: Timer1 megszakítás

#define ledPin 13 // Built-in LED

void setup() {
  pinMode(ledPin, OUTPUT);

  // Configure Timer1
  noInterrupts(); // Disable interrupts during setup
  TCCR1A = 0;     // Clear Timer1 control registers
  TCCR1B = 0;
  TCNT1 = 0;      // Initialize counter value to 0

  OCR1A = 15624;  // Compare match register (1Hz at 16MHz with 1024 prescaler)
  TCCR1B |= (1 << WGM12); // CTC mode
  TCCR1B |= (1 << CS12) | (1 << CS10); // 1024 prescaler
  TIMSK1 |= (1 << OCIE1A); // Enable Timer1 compare interrupt

  interrupts(); // Enable interrupts
}

ISR(TIMER1_COMPA_vect) {
  digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}

void loop() {
  // Main loop does nothing; timer handles the LED
}

4. lépés: Az idő mérése az időzítőkkel

Az időzítők segítségével mérheti a pontos időtartamokat. Az Timer2 kis időközönként alkalmas, mivel ez egy 8 bites időzítő.

Példa kód: Timer2 az időméréshez

volatile unsigned long overflowCount = 0;

void setup() {
  Serial.begin(9600);

  // Configure Timer2
  noInterrupts();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;

  TCCR2B |= (1 << CS22); // Prescaler 64
  TIMSK2 |= (1 << TOIE2); // Enable Timer2 overflow interrupt

  interrupts();
}

ISR(TIMER2_OVF_vect) {
  overflowCount++;
}

void loop() {
  unsigned long timeElapsed = overflowCount * 16.384; // Each overflow = 16.384ms
  Serial.print("Time elapsed: ");
  Serial.print(timeElapsed);
  Serial.println(" ms");
  delay(1000);
}

5. lépés: Időzítő könyvtárak használata

Az időzítőkkel való munka egyszerűsítéséhez használhat olyan könyvtárakat, mint Időzítő vagy Időtartam.

Az időzítő könyvtár használata

  1. Telepítse az időzítő könyvtárat az Arduino IDE -be.
  2. Használja azt a feladatok egyszerű ütemezéséhez:
#include <TimerOne.h>
#define ledPin 13

void toggleLED() {
  digitalWrite(ledPin, !digitalRead(ledPin));
}

void setup() {
  pinMode(ledPin, OUTPUT);
  Timer1.initialize(1000000); // Set timer to 1 second (1,000,000 microseconds)
  Timer1.attachInterrupt(toggleLED); // Attach the interrupt function
}

void loop() {
  // Main loop does nothing; Timer1 handles the LED
}

Az időzítők alkalmazásai

  1. Pontos PWM jelek generálása a motorvezérléshez
  2. A feladatok ütemezése blokkolási kód nélkül (például multitasking)
  3. Az események időintervallumának mérése
  4. Pontos késések létrehozása nélkül delay()
  5. Periodikus műveletek kezelése, például villogó LED -ek vagy adatok küldése

Hibaelhárítás

  • Időzítő konfliktusok: Győződjön meg arról, hogy nem használja ugyanazt az időzítőt több funkcióhoz (például a Servo Library és a PWM).
  • Megszakítja a nem működik: Ellenőrizze, hogy a megszakítások engedélyezve vannak -e interrupts().
  • Váratlan viselkedés: Ellenőrizze duplán az PresCaler-t, és hasonlítsa össze a megfelelő időzítéshez való egyeztetési értékeket.

Következtetés

Megtanulta, hogyan kell használni az Arduino időzítőket a PWM jelek előállításához, a megszakítások kezeléséhez és az idő méréséhez. Az időzítők elsajátítása nagy teljesítményű funkciókat nyit a hatékony és pontos Arduino projektek létrehozásához. Kísérletezzen különböző konfigurációkkal, és alkalmazza az időzítőket a következő projekt optimalizálásához!

Hagyj egy megjegyzést

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.