一、什么是PWM?
PWM(脈沖寬度調制)是一種用于控制電子設備的技術。它通過調整信號的脈沖寬度來控制電壓的平均值。PWM常用于調節電機速度、控制LED亮度、產生模擬信號等應用。
二、PWM的原理
PWM的基本原理是通過以一定頻率產生的脈沖信號,通過調整脈沖的寬度(占空比)來模擬電壓的不同電平。占空比是指脈沖高電平的時間占整個周期的比例。通過調整占空比,可以在輸出端產生不同的電平,從而實現對電機、LED等設備的精確控制。
例如,對于一個50%占空比的PWM信號,脈沖的高電平時間占整個周期的一半,這將導致輸出電平的平均值為一半的電壓。通過調整占空比,你可以在0%到100%的范圍內控制輸出電平的變化。
三、PWM模式以及輸出PWM原理
ARR: 自動重裝載寄存器的值。
CCRx: 捕獲/比較寄存器的值。
PWM波周期或頻率由ARR決定,PWM波占空比由CCRx決定
(1)PWM模式1
在向上計數時,一旦CNT<CCRx 時輸出為有效電平,否則為無效電平。
在向下計數時,一旦CNT>CCRx 時輸出為無效電平,否則為有效電平。
如:
當CNT < CCRx,IO輸出1。
當CNT >= CCRx,IO輸出0。
當CNT <=CCRx,IO輸出1。
當CNT > CCRx,IO輸出0。
(2)PWM模式2
在向上計數時,一旦CNT>CCRx 時輸出為有效電平,否則為無效電平。
在向下計數時,一旦CNT<CCRx 時輸出為無效電平,否則為有效電平。
如:
當CNT < CCRx,IO輸出0。
當CNT >= CCRx,IO輸出1。
當CNT <= CCRx,IO輸出0。
當CNT > CCRx,IO輸出1。
四、配置PWM輸出實驗步驟
實驗內容:將PC6復用為TIM3通道1,輸出pwm。注:stm32的pwm輸出引腳是使用的IO口的復用功能。
具體代碼:
void PWM_Init_TIM3_CH1(u16 ccr)
{//1.初始化PC6引腳RCC->AHB1ENR |=(0x01 <<2); //開啟GPIOC的時鐘GPIOC->CRL &= 0XF0FFFFFF;//PC6清0GPIOA->CRL |= 0X0B000000;//復用功能輸出(推挽50MHz輸出)//2.初始化基本定時器配置RCC->APB1ENR |= 1 << 1; //使能TIM3時鐘 TIM3->SMCR &=~(0x07 << 0); //選擇內部時鐘源TIM3->CR1 &=~(0x03<<5); //邊沿對齊TIM3->CR1 &=~(0X01<<4); //設置為向上計數模式TIM3->CR1 |=(0x01 <<7); //有影子,緩沖。TIM3->ARR = 99;//設定計數器主動重裝值(決定PWM的頻率)TIM3->PSC = 7199;//預分頻器 0為不分頻 //3.初始化輸出通道TIM3->CCR1 =ccr; //寫入比較值TIM3->CCMR1 &=~(0x03 << 0) ; //通道配置為輸出功能TIM3->CCMR1 |=(0x01 << 3); //有影子TIM3->CCMR1 &=~(0x01 <<7); //OC1Ref不受ETRF輸入影響。TIM3->CCMR1 &= ~(0x07 <<4); TIM3->CCMR1 |=(0x06 <<4); //PWM模式1TIM3->CCER &=~(0x01 <<1); //實際波形=參考波形。 不反相TIM3->CCER |= (0x01 << 0);//輸入/捕獲1輸出使能TIM3->EGR |=(0x01 <<0); //產生更新事件,將上面配置更新到影子寄存器TIM3->CR1 |= (0X01 << 0);//使能定時器3
}
主函數:
int main()
{//pwm范圍為0-ARR。 高低電平隨著pwm模式不同而不同。//如比較值為90,pwm模式1向上計數,低于比較值90時,為高電平。PWM_Init_TIM3_CH1(90); while(1){}}