برای ساختن pwm از چهار کانال مقایسه و 3 کانال مکمل استفاده کرد که مجموع 7 کانال خروجی pwm هستش ولی برای pwm دلخواه از 4 کانال میشود استفاده کرد
در اول کار شما با دستور تایمر بیس اون و مقدار دهی میکنید مثل کد پایین
کد:
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 4095, 0);
در این دستور کانتر شما به صورت افزایشی و در پریود 4096 بارگزاری شده
حالا ما با دستور
کد:
TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 2047, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET,
TIM1_OCNIDLESTATE_RESET);
کانال مقایسه و کانال مکمل و به صورت خروجی در میاریم که مثلا در دستور بالا اگر پهنای پالس 1 ما تا مقدار 2048 هستش که دستور در خروجی TIME_CH1 ,TIM1_CHN ایجاد میشه و به این صورت ما موج pwm ساختیم
با کد پایین میتونید مقدار کانال 1 تایمر 1 و هر مقداری کمتر از مقدار سکل برگذاری کنید تا موج با پهنای مختلف ببنید در خروجی کانال یک
کد:
while(i<4095){
TIM1_SetCompare1(i);
Delay(500);
i++;
}
i=0;
در اخر من فایل مثال و قرار میدم تا بیشتر درک کنید