Arduino Timer Tutorial

Arduino Timer Tutorial

Ang mga timer ay isang mahalagang tampok ng mga microcontroller, na nagpapahintulot sa iyo na magsagawa ng mga gawain sa tumpak na agwat nang hindi umaasa sa mga pagkaantala. Ang Arduino Uno ay may tatlong built-in na mga timer ng hardware (Timer0, Timer1, at Timer2) na maaaring mai-configure para sa iba't ibang mga pag-andar tulad ng pagbuo ng mga signal ng PWM, mga kaganapan sa tiyempo, o mga gawain sa pag-iskedyul. Ang tutorial na ito ay gagabay sa iyo sa pamamagitan ng pag -unawa at paggamit ng mga timer ng Arduino.


Ano ang kakailanganin mo

  1. Arduino uno (o isang katugmang board)
  2. LED at 220-OHM Risistor (para sa mga halimbawa na batay sa tiyempo)
  3. Mga wire ng tinapay at jumper
  4. Ang Arduino IDE ay naka -install sa iyong computer

Hakbang 1: Pag -unawa sa Arduino Timers

Ang Arduino Uno's ATMEGA328P Microcontroller ay may tatlong mga timer ng hardware:

Timer Bit resolusyon Pangunahing paggamit
Timer0 8-bit Millis (), micros (), PWM sa mga pin 5, 6
Timer1 16-bit Servo Library, PWM sa mga pin 9, 10
Timer2 8-bit Tono () function, PWM sa mga pin 3, 11

Mga pangunahing tampok ng mga timer

  • Ang mga timer ay maaaring makabuo ng mga signal ng PWM.
  • Ang mga timer ay maaaring mag -trigger ng mga pagkagambala.
  • Ang mga timer ay ginagamit sa loob ng mga pag -andar ng Arduino tulad ng delay() at millis().

Hakbang 2: Bumubuo ng isang simpleng signal ng PWM

Ang mga signal ng PWM (Pulse Width Modulation) ay karaniwang ginagamit upang makontrol ang LED na ningning o bilis ng motor. Gumamit ng Timer0 upang lumikha ng isang signal ng PWM.

Halimbawa ng code: LED control control na may PWM

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

Hakbang 3: Paggamit ng mga timer na may mga pagkagambala

Maaari mong i -configure ang mga timer upang ma -trigger ang mga pagkagambala sa mga regular na agwat. Halimbawa, ang Timer1 ay maaaring mai -set up upang i -toggle ang isang LED bawat segundo.

Halimbawa Code: Makagambala ang Timer1

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

Hakbang 4: Pagsukat ng oras sa mga timer

Maaari kang gumamit ng mga timer upang masukat ang tumpak na mga tagal. Ang Timer2 ay angkop para sa mga maliliit na agwat dahil ito ay isang 8-bit timer.

Halimbawa Code: Timer2 para sa pagsukat ng oras

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

Hakbang 5: Paggamit ng Mga Aklatan ng Timer

Upang gawing simple ang pagtatrabaho sa mga timer, maaari kang gumamit ng mga aklatan tulad ng Timerone o Timerthree.

Gamit ang library ng Timerone

  1. I -install ang library ng Timerone sa Arduino IDE.
  2. Gamitin ito upang mag -iskedyul ng mga gawain nang madali:
#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
}

Mga Aplikasyon ng Timers

  1. Bumubuo ng tumpak na mga signal ng PWM para sa kontrol ng motor
  2. Mga gawain sa pag -iskedyul nang walang pagharang ng code (hal., Multitasking)
  3. Pagsukat ng mga agwat ng oras para sa mga kaganapan
  4. Lumilikha ng tumpak na pagkaantala nang hindi gumagamit delay()
  5. Pamamahala ng mga pana -panahong pagkilos tulad ng kumikislap na mga LED o pagpapadala ng data

Pag -aayos

  • Mga Salungatan sa Timer: Tiyaking hindi mo ginagamit ang parehong timer para sa maraming mga pag -andar (hal., Servo library at PWM).
  • Hindi nagagambala hindi gumagana: Suriin na ang mga pagkagambala ay pinagana interrupts().
  • Hindi inaasahang pag -uugali: Double-check prescaler at ihambing ang mga halaga ng tugma para sa tamang tiyempo.

Konklusyon

Nalaman mo kung paano gamitin ang mga timer ng Arduino para sa pagbuo ng mga signal ng PWM, paghawak ng mga pagkagambala, at oras ng pagsukat. Ang mga mastering timer ay nagbubukas ng mga makapangyarihang tampok para sa paglikha ng mahusay at tumpak na mga proyekto ng Arduino. Eksperimento sa iba't ibang mga pagsasaayos at mag -apply ng mga timer upang ma -optimize ang iyong susunod na proyekto!

Mag -iwan ng komento

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.