הדרכה לטיימר ארדואינו

Arduino Timer Tutorial

טיימרים הם תכונה חיונית של בקרי מיקרו, ומאפשרים לך לבצע משימות במרווחים מדויקים מבלי להסתמך על עיכובים. ל- Arduino UNO שלושה טיימרים מובנים חומרה (TIMER0, TIMER1 ו- TIMER2) שניתן להגדיר לפונקציות שונות כמו יצירת אותות PWM, אירועי תזמון או משימות תזמון. מדריך זה ינחה אותך באמצעות הבנה ושימוש בטיימרים של Arduino.


מה תצטרך

  1. Arduino uno (או לוח תואם)
  2. נגן LED ו- 220-OHM (לדוגמאות מבוססות תזמון)
  3. חוטי לחם וגשר
  4. Arduino IDE המותקן במחשב שלך

שלב 1: הבנת טיימרים של ארדואינו

לבקר המיקרו של Arduino UNO של Arduino UNO יש שלושה טיימרים לחומרה:

שָׁעוֹן עֶצֶר רזולוציית סיביות שימוש ראשוני
טיימר 0 8 סיביות מיליס (), מיקרו (), PWM על סיכות 5, 6
טיימר 1 16 סיביות ספריית סרוו, PWM על סיכות 9, 10
TIMER2 8 סיביות פונקציה () פונקציה, PWM על סיכות 3, 11

מאפייני מפתח של טיימרים

  • טיימרים יכולים לייצר אותות PWM.
  • טיימרים יכולים להפעיל הפרעות.
  • טיימרים משמשים באופן פנימי על ידי פונקציות ארדואינו כמו delay() וכן millis().

שלב 2: יצירת אות PWM פשוט

אותות PWM (אפנון רוחב דופק) משמשים בדרך כלל לבקרת בהירות LED או מהירות המנוע. בואו נשתמש ב- Timer0 כדי ליצור אות PWM.

קוד דוגמה: בקרת בהירות LED עם 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);
  }
}

שלב 3: שימוש בטיימרים עם הפרעות

באפשרותך להגדיר טיימרים להפעלת הפרעות בפרקי זמן קבועים. לדוגמה, ניתן להגדיר Timer1 כדי להחליף LED בכל שנייה.

קוד דוגמה: 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
}

שלב 4: מדידת זמן עם טיימרים

אתה יכול להשתמש בטיימרים כדי למדוד משך זמן מדויק. Timer2 מתאים למרווחים קטנים מכיוון שהוא טיימר של 8 סיביות.

קוד דוגמה: TIMER2 למדידת זמן

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: שימוש בספריות טיימר

כדי לפשט את העבודה עם טיימרים, אתה יכול להשתמש בספריות כמו טיימרון אוֹ Timerthere.

באמצעות ספריית Timerone

  1. התקן את ספריית Timerone ב- Arduino IDE.
  2. השתמש בו כדי לתזמן משימות בקלות:
#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
}

יישומי טיימרים

  1. יצירת אותות PWM מדויקים לבקרת מנוע
  2. תזמון משימות ללא חסימת קוד (למשל, ריבוי משימות)
  3. מדידת מרווחי זמן לאירועים
  4. יצירת עיכובים מדויקים מבלי להשתמש delay()
  5. ניהול פעולות תקופתיות כמו מהבהב נוריות LED או שליחת נתונים

פתרון בעיות

  • סכסוכי טיימר: וודא שאתה לא משתמש באותו טיימר עבור פונקציות מרובות (למשל, ספריית סרוו ו- PWM).
  • הפרעות לא עובדות: בדוק שהפרעות מופעלות interrupts().
  • התנהגות בלתי צפויה: בדוק כפול מראש והשווה ערכי התאמה לתזמון נכון.

מַסְקָנָה

למדת כיצד להשתמש בטיימרי Arduino כדי לייצר אותות PWM, טיפול בהפרעות וזמן מדידה. שליטה בטיימרים פותחת תכונות עוצמתיות ליצירת פרויקטים יעילים ומדויקים של ארדואינו. התנסו בתצורות שונות והחלו טיימרים כדי לייעל את הפרויקט הבא שלכם!

השאירו תגובה

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.