دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد PWM(بخش دوم)
2018-12-13 10:53:29
جلسه بیست و یکم _ نحوه راه اندازی PWM و برنامه آن در محیط Keil
در این جلسه قصد داریم تا یک LED به پایه PWM فعال شده متصل نماییم و شدت نور آن را کنترل نماییم. در ابتدا به سراغ معرفی توابع و دستورات مربوط به PWM می رویم و پس از آن برنامه مربوط به کنترل نور LED را توضیح می دهیم.
در ابتدا به سراغ فایل main.c می رویم :
htim1 استراکچر مربوط به تنظیمات تایمر مورد نظر می باشد.
معرفی تابع مربوط به تنظیم شرایط تایمر می باشد.
تابع مربوط به تنظیمات تایمر را می توانید در تصویر بالا مشاهده نمایید که مطابق با تنظیمات انجام شده در نرم افزار STM32CubeMX این پارامترها مقدار دهی شده است.
حال به سراغ توابع مورد استفاده در این برنامه می رویم:
از این تابع برای فعال سازی واحد PWM استفاده می شود و دارای 2 آرگومان ورودی می باشد که آرگومان اول اشاره گر به استراکچر تابع مورد نظر می باشد و آرگومان دوم با توجه به اینکه کدام کانال از PWM را استفاده می کنیم نام کانال مورد نظر را به تابع ارسال می کنیم.
از این ماکرو برای تنظیم Duty Cycle استفاده می شود و بجای عبارت __HANDLE__ اشاره گر به استراکچر تایمر مورد نظر را قرار می دهیم و بجای عبارت __CHANNEL__ کانال خروجی PWM مورد نظر را قرار می دهیم و بجای __COMPARE__ عدد مورد نظر را قرار می دهیم که تغییر این عدد در Duty Cycle اثر می گذارد که نحوه محاسبه آن را می توانید در زیر مشاهده نمایید:
حال به سراغ برنامه کنترل شدت نور LED می رویم :
در ابتدا با استفاده از دستور HAL_TIM_PWM_Start ، قسمت PWM کانال 1 از تایمر 1را فعال می کنیم و وارد یک حلقه بی نهایت می شویم که درون آن یک حلقه for وجود دارد که با توجه به شرایط حلقه مقدار Duty_cycle از 0 تا 255 تغییر می کند تغییرات این رجیستر بصورت دیتا هر 10 میلی ثانیه در CHANNEL قرار می گیرد و با توجه به این موضوع Duty Cycle از 0 درصد تا 100 درصد قابل تغیر است، این تغییرات موجب می شود تا LED از حالت خاموش تا روشنایی تغییر نور دهد. این روند مدام تکرار می شود از نور LED از خاموش شروع می شود و تا بیشترین نوردهی می رسد و مجددا خاموش می شود.
در انتها می توانید شماتیک مربوط به این جلسه و برنامه (keil , STM32CubeMX) آنرا دانلود نمایید.