آموزش STM32 با توابع LL قسمت بیست و یکم: راه‌اندازی PWM

0
239
آموزش STM32 با توابع LL قسمت بیست و یکم: راه‌اندازی PWM
راه‌اندازی PWM

در بخش‌های قبلی با تایمرها آشنا شدیم و برخی کاربردهای آن‌ها را دیدیم. یکی دیگر از کاربردهای تایمر، حالت PWM (Pluse width Modulation) یا همان مدولاسیون پهنای پالس است. در این بخش با نحوه استفاده از این حالت آشنا خواهیم شد.

مدولاسیون پهنای پالس

همانطور که در شکل بالا مشخص است، به وسیله PWM میتوانیم از طریق کنترل Duty Cycle یا زمان on بودن و off بودن موج مربعی، ولتاژ متوسطی که اعمال می‌کنیم را کنترل کنیم. این عمل کاربردهای بسیار زیادی دارد که از جمله آن‌ها می‌توان به کنترل شدت روشنایی، کنترل سرعت موتور و .. اشاره کرد.

در ادامه این آموزش با چگونگی کنترل شدت روشنایی یک LED آشنا می‌شویم.

 

 ایجاد پروژه

مراحل ساخت پروژه را مانند قبل طی می‌کنیم، کلاک و دیباگ را تنظیم می‌کنیم. سپس تایمر1 را به صورت زیر در حالت PWM تنظیم می‌کنیم:

 ایجاد پروژه
تنظیم تایمر1 در حالت PWM.

بعد از تنظیم تایمر، بقیه بخش‌ها را نیز مانند گذشته تنظیم می‌کنیم و وارد محیط Keil می‌شویم.

 

نوشتن کد

برای استفاده از PWM قبل از هر چیز ، باید شمارنده و خروجی تایمر1 را فعال کنیم، همچنین متغیرهای مورد نیاز را تعریف کنیم؛

 LL_TIM_EnableCounter(TIM1); //Enable Timer1's counter
LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1); //Enable channel1 of Timer1(PWM)
LL_TIM_EnableAllOutputs(TIM1); //Enable Timer1's outputs
uint32_t Max = LL_TIM_GetAutoReload(TIM1) + 1; //Get the value of Timer1's ARR
uint8_t count = 10; //Number of steps

درون متغیر Max مقدار رجیستر ARR به اضافه یک را قرار داده‌ایم. اکنون به وسیله این مقدار، میتوانیم تعیین کنیم که به چه Duty Cycle ای نیاز داریم. به وسیله کد زیر، شدت نور LED به آرامی زیاد میشود تا به بیشترین مقدار خود برسد و این عمل تکرار می‌شود. همانطور که توضیح داده شد این عمل از طریق مدولاسیون پهنای پالس و کنترل میانگین ولتاژ اعمال شده به LED انجام می‌شود؛

 for (int i = 0; i < count; i++)
{
LL_TIM_OC_SetCompareCH1(TIM1, i * (Max / count)); //Set Duty cycle 
LL_mDelay(120);
}

در بخش بعدی در مورد نحوه ایجاد شکل موج‌های مختلف توسط تایمر در حالت PWM صحبت خواهیم کرد.

لینک پروژه در گیت هاب

 

 

منبع:سیسوگ

مطلب قبلیآموزش STM32 با توابع LL قسمت بیستم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)
مطلب بعدیکار با ماژول M65

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید