Arduino -ajastinopetusohjelma

Arduino Timer Tutorial

Ajastimet ovat mikrokontrollerien olennainen ominaisuus, jonka avulla voit suorittaa tehtäviä tarkalla väliajoin luottamatta viiveisiin. Arduino UNO: ssa on kolme sisäänrakennettua laitteistoajasinta (ajastin0, ajastin1 ja ajastin2), jotka voidaan määrittää erilaisille toiminnoille, kuten PWM-signaalien, ajoitustapahtumien tai aikataulutehtävien luominen. Tämä opetusohjelma opastaa sinua ymmärtämään ja käyttämään Arduino -ajastimia.


Mitä tarvitset

  1. Arduino UNO (tai yhteensopiva lauta)
  2. LED ja 220-OHM-vastus (ajoituspohjaisiin esimerkkeihin)
  3. Leipälevy- ja hyppyjohdot
  4. Arduino IDE asennettu tietokoneellesi

Vaihe 1: Arduino -ajastimien ymmärtäminen

Arduino UNO: n ATMEGA328P -mikrokontrollerissa on kolme laitteistoajasinta:

Ajastin Bittisolu Ensisijainen käyttö
Ajastin 8-bittinen Millis (), Micros (), PWM nastailla 5, 6
Ajastin1 16-bittinen Servo -kirjasto, PWM nastailla 9, 10
Ajastin2 8-bittinen Sävy () -toiminto, PWM nastailla 3, 11

Ajastimien keskeiset piirteet

  • Ajastimet voivat tuottaa PWM -signaaleja.
  • Ajastimet voivat laukaista keskeytykset.
  • Ajastimia käyttävät sisäisesti arduino -toiminnot, kuten delay() ja millis().

Vaihe 2: Yksinkertaisen PWM -signaalin luominen

PWM (pulssin leveyden modulaatio) signaaleja käytetään yleisesti LED -kirkkauden tai moottorin nopeuden hallintaan. Käytä Tkerer0: tä PWM -signaalin luomiseen.

Esimerkki koodi: LED -kirkkauden hallinta PWM: llä

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

Vaihe 3: Ajastimien käyttäminen keskeytyksillä

Voit määrittää ajastimet laukaisemaan keskeytyksiä säännöllisin väliajoin. Esimerkiksi ajastin1 voidaan asettaa kytkemään LED joka sekunti.

Esimerkki Koodi: Ajastin1 keskeyttää

#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
}

Vaihe 4: Ajoittajan mittaus ajastimilla

Voit käyttää ajastimia tarkkojen kestojen mittaamiseen. Timer2 is suitable for small intervals because it is an 8-bit timer.

Example Code: Timer2 for Time Measurement

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

Step 5: Using Timer Libraries

To simplify working with timers, you can use libraries like TimerOne tai TimerThree.

Using the TimerOne Library

  1. Asenna Timerone -kirjasto Arduino IDE: hen.
  2. Käytä sitä aikataulut helposti:
#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
}

Ajastimien sovellukset

  1. Tarkat PWM -signaalit moottorin ohjaamiseksi
  2. Aikataulutehtävät estämättä koodia (esim. Monitehtävät)
  3. Tapahtumien ajanjaksojen mittaus
  4. Tarkkojen viivästysten luominen käyttämättä delay()
  5. Määräaikaiset toimenpiteet, kuten vilkkuvat LEDit tai tietojen lähettäminen

Vianetsintä

  • Ajastinkonfliktit: Varmista, että et käytä samaa ajastinta useisiin toimintoihin (esim. Servo -kirjasto ja PWM).
  • Keskeytykset eivät toimi: Tarkista, että keskeytykset ovat käytössä interrupts().
  • Odottamaton käyttäytyminen: Kaksois-tarkista prescaler ja vertaa vastaavia arvoja oikeaa ajoitusta varten.

Johtopäätös

Olet oppinut käyttämään Arduino -ajastimia PWM -signaalien, käsittelyn ja mittausajan luomiseen. Ajastimien hallitseminen avaa tehokkaita ominaisuuksia tehokkaiden ja tarkkojen Arduino -projektien luomiseksi. Kokeile erilaisia ​​kokoonpanoja ja käytä ajastimia seuraavan projektin optimoimiseksi!

Jätä kommentti

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.