טיימרים הם תכונה חיונית של בקרי מיקרו, ומאפשרים לך לבצע משימות במרווחים מדויקים מבלי להסתמך על עיכובים. ל- Arduino UNO שלושה טיימרים מובנים חומרה (TIMER0, TIMER1 ו- TIMER2) שניתן להגדיר לפונקציות שונות כמו יצירת אותות PWM, אירועי תזמון או משימות תזמון. מדריך זה ינחה אותך באמצעות הבנה ושימוש בטיימרים של Arduino.
מה תצטרך
- Arduino uno (או לוח תואם)
- נגן LED ו- 220-OHM (לדוגמאות מבוססות תזמון)
- חוטי לחם וגשר
- 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
- התקן את ספריית Timerone ב- Arduino IDE.
- השתמש בו כדי לתזמן משימות בקלות:
#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
}
יישומי טיימרים
- יצירת אותות PWM מדויקים לבקרת מנוע
- תזמון משימות ללא חסימת קוד (למשל, ריבוי משימות)
- מדידת מרווחי זמן לאירועים
- יצירת עיכובים מדויקים מבלי להשתמש
delay()
- ניהול פעולות תקופתיות כמו מהבהב נוריות LED או שליחת נתונים
פתרון בעיות
- סכסוכי טיימר: וודא שאתה לא משתמש באותו טיימר עבור פונקציות מרובות (למשל, ספריית סרוו ו- PWM).
-
הפרעות לא עובדות: בדוק שהפרעות מופעלות
interrupts()
. - התנהגות בלתי צפויה: בדוק כפול מראש והשווה ערכי התאמה לתזמון נכון.
מַסְקָנָה
למדת כיצד להשתמש בטיימרי Arduino כדי לייצר אותות PWM, טיפול בהפרעות וזמן מדידה. שליטה בטיימרים פותחת תכונות עוצמתיות ליצירת פרויקטים יעילים ומדויקים של ארדואינו. התנסו בתצורות שונות והחלו טיימרים כדי לייעל את הפרויקט הבא שלכם!