تعد أجهزة ضبط الوقت ميزة أساسية في متحكمها ، مما يتيح لك أداء المهام على فترات زمنية دقيقة دون الاعتماد على التأخير. يحتوي Arduino UNO على ثلاثة أجهزة مضمنة للأجهزة (Timer0 و Timer1 و Timer2) التي يمكن تكوينها لمختلف وظائف مثل إنشاء إشارات PWM أو أحداث التوقيت أو مهام الجدولة. سوف يرشدك هذا البرنامج التعليمي من خلال فهم واستخدام أجهزة توقيت Arduino.
ماذا ستحتاج
- Arduino Uno (أو لوحة متوافقة)
- مقاوم LED و 220 أوم (للأمثلة المستندة إلى التوقيت)
- الأسلاك الأسلاك والبلوز
- Arduino IDE مثبتة على جهاز الكمبيوتر الخاص بك
الخطوة 1: فهم أجهزة توقيت Arduino
يحتوي متحكم Arduino Uno's Atmega328p على ثلاثة أجهزة أجهزة:
مؤقت | قرار بت | الاستخدام الأساسي |
---|---|---|
Timer0 | 8 بت | millis () ، micros () ، pwm على المسامير 5 ، 6 |
Timer1 | 16 بت | مكتبة المؤازرة ، PWM على دبابيس 9 ، 10 |
Timer2 | 8 بت | وظيفة () وظيفة ، PWM على دبابيس 3 ، 11 |
الميزات الرئيسية للوقت
- يمكن لتوقيتات توليد إشارات PWM.
- يمكن أن تؤدي أجهزة ضبط الوقت إلى الزراعة.
- يتم استخدام أجهزة ضبط الوقت داخليًا بواسطة وظائف Arduino مثل
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 كل ثانية.
Example Code: Timer1 Interrupt
#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
}
Step 4: Measuring Time with Timers
يمكنك استخدام أجهزة ضبط الوقت لقياس فترات دقيقة. 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: استخدام مكتبات المؤقت
لتبسيط العمل مع أجهزة ضبط الوقت ، يمكنك استخدام مكتبات مثل توقيت أو توقيت.
باستخدام مكتبة 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()
- إدارة الإجراءات الدورية مثل وميض المصابيح أو إرسال البيانات
استكشاف الأخطاء وإصلاحها
- صراعات الموقت: تأكد من عدم استخدام الموقت نفسه لوظائف متعددة (مثل مكتبة المؤازرة و PWM).
-
المقاطعات لا تعمل: تحقق من تمكين المقاطعات مع
interrupts()
. - سلوك غير متوقع: تحقق من prescaler ومقارنة قيم المطابقة للتوقيت الصحيح.
خاتمة
لقد تعلمت كيفية استخدام أجهزة توقيت Arduino لتوليد إشارات PWM ، والتعامل مع المقاطعات ، وقياس الوقت. يتقن أجهزة ضبط الوقت ميزات قوية لإنشاء مشاريع Arduino فعالة ودقيقة. قم بتجربة تكوينات مختلفة وتطبيق أجهزة ضبط الوقت لتحسين مشروعك التالي!