ساخت پروژه
0 محصولات نمایش سبد خرید

هیچ محصولی در سبد خرید نیست.

آموزش تایمرها و شمارنده‌ها در میکروکنترلر AVR ایجاد تأخیرهای دقیق و سیگنال‌های PWM

آموزش تایمرها و شمارنده‌ها در میکروکنترلر AVR ایجاد تأخیرهای دقیق و سیگنال‌های PWM

آموزش تایمرها و شمارنده‌ها در میکروکنترلر AVR ایجاد تأخیرهای دقیق و سیگنال‌های PWM ، تایمرها و شمارنده‌ها از مهم‌ترین ابزارهای میکروکنترلرهای AVR هستند که به طراحان امکان مدیریت زمان، ایجاد تأخیرهای دقیق و تولید سیگنال‌های متنوع را می‌دهند. این قابلیت‌ها برای بسیاری از کاربردها، از جمله کنترل سیستم‌های مکانیکی، تولید سیگنال PWM برای کنترل موتور و حتی اندازه‌گیری فرکانس، ضروری هستند. در این مقاله، به صورت کامل و با مثال‌های کاربردی، نحوه استفاده از تایمرها و شمارنده‌ها را بررسی خواهیم کرد و روش‌های ایجاد تأخیرهای دقیق زمانی و تولید سیگنال‌های پایدار را آموزش می‌دهیم.


بخش اول: آشنایی با تایمرها و شمارنده‌ها در AVR

تایمرها و شمارنده‌ها چیستند؟

تایمرها در AVR مدارات سخت‌افزاری داخلی هستند که برای اندازه‌گیری زمان یا شمارش پالس‌ها استفاده می‌شوند. عملکرد این ابزارها به وسیله کلاک سیستم کنترل می‌شود و می‌توانند در مدهای مختلف تنظیم شوند:

  • تایمر داخلی: برای اندازه‌گیری زمان مشخص.
  • شمارنده خارجی: برای شمارش پالس‌های ورودی.

ویژگی‌های تایمرها

  • دقت بالا: امکان تنظیم برای تولید سیگنال‌های دقیق.
  • چند منظوره: می‌توان از آن‌ها برای ایجاد تأخیر، شمارش، تولید PWM و حتی اندازه‌گیری پالس‌های خارجی استفاده کرد.
  • مدهای کاری مختلف: تایمرها معمولاً شامل مدهای نرمال، CTC (Clear Timer on Compare Match)، و Fast PWM هستند.

انواع تایمرها در AVR

  1. تایمر/شمارنده 8 بیتی: می‌تواند تا 255 شمارش کند (2^8 – 1).
  2. تایمر/شمارنده 16 بیتی: ظرفیت بالاتری دارد و می‌تواند تا 65535 شمارش کند (2^16 – 1).

بخش دوم: محاسبات زمانبندی و تأخیرهای دقیق

یکی از مهم‌ترین کاربردهای تایمرها در AVR، ایجاد تأخیرهای دقیق زمانی است. برای این منظور، ابتدا باید پارامترهای زیر را محاسبه کنیم:

  • فرکانس کلاک سیستم fclk​
  • مقدار پری‌اسکیلر Prescaler، که ضریب کاهش فرکانس است.
  • تعداد شمارش Ticks، که معین‌کننده تعداد پالس‌های مورد نیاز برای دستیابی به زمان مورد نظر است.
مقاله پیشنهادی  راه‌اندازی و برنامه‌نویسی میکروکنترلر STM32 نصب و راه‌اندازی STM32CubeIDE و نوشتن اولین برنامه

فرمول اصلی

T=1fclk×Prescaler×TicksT = \frac{1}{f_{\text{clk}}} \times \text{Prescaler} \times \text{Ticks}

که در آن:

  • T: زمان تأخیر (بر حسب ثانیه)
  • fclk​: فرکانس کلاک (بر حسب هرتز)
  • Prescaler: مقدار پری‌اسکیلر
  • Ticks: تعداد شمارش تایمر

مثال اول: ایجاد تأخیر 1 میلی‌ثانیه با تایمر 8 بیتی

فرض کنید یک میکروکنترلر AVR با فرکانس کاری fclk=16 MHz داریم و می‌خواهیم یک تأخیر 1 میلی‌ثانیه ایجاد کنیم.

مراحل:

  1. انتخاب تایمر: تایمر 8 بیتی مناسب است.
  2. انتخاب پری‌اسکیلر: مقدار 64 انتخاب می‌شود، چرا که مقدار شمارش در محدوده تایمر 8 بیتی قرار می‌گیرد.
  3. محاسبه زمان هر Tick:
Ttick=116,000,000×64=4μsT_{\text{tick}} = \frac{1}{16,000,000} \times 64 = 4 \, \mu\text{s}

4. محاسبه تعداد Tickها:

Ticks=1ms4μs=250\text{Ticks} = \frac{1 \, \text{ms}}{4 \, \mu\text{s}} = 250

کد برنامه:

#include <avr/io.h>
#include <util/delay.h>

void delay_1ms() {
    TCNT0 = 0;          // مقدار اولیه تایمر
    TCCR0B = (1 << CS01) | (1 << CS00); // پری‌اسکیلر = 64
    while (TCNT0 < 250); // انتظار تا تکمیل شمارش
    TCCR0B = 0;          // توقف تایمر
}

int main() {
    DDRB |= (1 << PB0); // تنظیم پین به عنوان خروجی
    while (1) {
        PORTB ^= (1 << PB0); // تغییر وضعیت LED
        delay_1ms();         // تأخیر 1 میلی‌ثانیه
    }
}

بخش سوم: تولید سیگنال PWM با تایمر

یکی دیگر از کاربردهای رایج تایمرها، تولید سیگنال PWM است. این سیگنال‌ها برای کنترل موتورهای DC، تنظیم روشنایی LEDها و حتی مخابرات استفاده می‌شوند.

مد Fast PWM

در این مد، تایمر به صورت پیوسته از 0 تا مقدار مشخصی (OCRn) شمارش می‌کند و سپس مجدداً از صفر شروع می‌شود. Duty Cycle سیگنال به مقدار OCRn وابسته است.

فرمول فرکانس سیگنال:

fPWM=fclkPrescaler×(1+TOP)f_{\text{PWM}} = \frac{f_{\text{clk}}}{\text{Prescaler} \times (1 + \text{TOP})}

که در آن:

  • fPWM​: فرکانس سیگنال
  • TOP: مقدار بیشینه شمارش تایمر

مثال دوم: تولید سیگنال PWM با Duty Cycle 50% و فرکانس 1 کیلوهرتز

مراحل:

  1. انتخاب تایمر 16 بیتی: به دلیل نیاز به دقت بالا.
  2. انتخاب پری‌اسکیلر 8: برای محدوده مناسب شمارش.
  3. محاسبه مقدار OCRn:
مقاله پیشنهادی  آموزش ساخت ربات مسیریاب با میکروکنترلر AVR از طراحی تا پیاده‌سازی کامل
TOP=fclkfPWM×Prescaler1TOP = \frac{f_{\text{clk}}}{f_{\text{PWM}} \times \text{Prescaler}} – 1
TOP=16,000,0001,000×81=1999TOP = \frac{16,000,000}{1,000 \times 8} – 1 = 1999

کد برنامه:

#include <avr/io.h>

void pwm_init() {
    DDRB |= (1 << PB1); // پین PWM به عنوان خروجی
    TCCR1A = (1 << COM1A1) | (1 << WGM11); // مد Fast PWM
    TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); // پری‌اسکیلر = 8
    ICR1 = 1999;      // مقدار TOP
    OCR1A = 999;      // Duty Cycle = 50%
}

int main() {
    pwm_init();
    while (1) {
        // سیگنال PWM به طور خودکار تولید می‌شود
    }
}

نکات مهم و چالش‌های عملی

  1. خطای کریستال کلاک: برای کاربردهای حساس به زمان، استفاده از کریستال خارجی به جای کلاک داخلی توصیه می‌شود.
  2. مدیریت وقفه‌ها: در سیستم‌های چندوظیفه‌ای، وقفه‌های زیاد می‌توانند باعث تأخیرهای ناخواسته شوند.
  3. بررسی خروجی با اسیلوسکوپ: برای اطمینان از صحت سیگنال، خروجی تایمر را با ابزارهایی مانند اسیلوسکوپ بررسی کنید.

نتیجه‌گیری

تایمرها و شمارنده‌ها در AVR ابزارهایی بسیار قدرتمند و انعطاف‌پذیر هستند. از ایجاد تأخیرهای دقیق گرفته تا تولید سیگنال‌های PWM، این واحدها نقش حیاتی در پروژه‌های الکترونیکی دارند. با تسلط بر نحوه محاسبه و تنظیم تایمرها، می‌توانید سیستم‌های پیچیده و دقیقی طراحی کنید که نیازهای متنوعی را برآورده کنند.


امیدواریم این مقاله به شما کمک کرده باشد تا درک عمیق‌تری از این موضوع پیدا کنید و بتوانید پروژه‌های خود را با دقت بیشتری اجرا کنید.


آموزش تایمرها و شمارنده‌ها در میکروکنترلر AVR ایجاد تأخیرهای دقیق و سیگنال‌های PWM


مطلب پیشنهادی

آموزش شبیه‌ سازی مدار های الکترونیکی با نرم‌ افزار های الکترونیک

آموزش تولید PWM با استفاده از تایمرهای AVR

امتیاز دادن به مطلب
0
دیدگاه‌های نوشته

*
*