生活随笔
收集整理的這篇文章主要介紹了
STM32入门笔记——PWM
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PWM概述
1、什么是PWM
PWM是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。PWM信號仍然是數字的,因為在給定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復脈沖序列被加到模擬負載上去的。通的時候即是直流供電被加到負載上的時候,斷的時候即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以使用PWM進行編碼。
簡單來說 : PWM即脈沖寬度調制,PWM是一種利用數字信號對模擬電路控制的方式。
2、10系列的PWM知識
工作原理:在其定時器相應寄存器計數時,會將其值與比較寄存器(CCRX)中的值進行比較。計數器值大于比較寄存器時,輸相應電平。在其小于比較寄存器時輸出相反電平。
工作過程:輸出什么有效電平由PWM模式和輸出輸入極性決定
這里預裝載值變化意思是:在你變動比較寄存器的時刻,定時器還在計數。比如最大值時100,你將比較值從50調整到80。調整的時刻計數器正好在70.那么在其計數到80時,要不要響應對比這個值。就由ARPE決定。當其為1,則本次響應。若其=0,則本次不響應,等下一周期再響應。
其他引腳詳情參考對應芯片資料。
PWM實際操作
庫函數配置步驟
這里需要注意:GPIO配置是PB5的部分映射
通過更改ccrx寄存器值改變占空比
代碼如下
void TM3_PWM_Init(u16 arr
,u16 psc
)
{GPIO_InitTypeDef GPIO_InitStructure
; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure
; TIM_OCInitTypeDef INITTIM_
; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3
, ENABLE
); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB
| RCC_APB2Periph_AFIO
, ENABLE
); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3
, ENABLE
); GPIO_InitStructure
.GPIO_Pin
= GPIO_Pin_5
; GPIO_InitStructure
.GPIO_Mode
= GPIO_Mode_AF_PP
; GPIO_InitStructure
.GPIO_Speed
= GPIO_Speed_50MHz
;GPIO_Init(GPIOB
, &GPIO_InitStructure
);TIM_TimeBaseStructure
.TIM_Period
= arr
; TIM_TimeBaseStructure
.TIM_Prescaler
=psc
; TIM_TimeBaseStructure
.TIM_ClockDivision
= 0; TIM_TimeBaseStructure
.TIM_CounterMode
= TIM_CounterMode_Up
; TIM_TimeBaseInit(TIM3
, &TIM_TimeBaseStructure
); TIM_ITConfig(TIM3
,TIM_IT_Update
,ENABLE
); INITTIM_
.TIM_OCMode
= TIM_OCMode_PWM2
; INITTIM_
.TIM_OCPolarity
= TIM_OCPolarity_High
; INITTIM_
.TIM_OutputState
= TIM_OutputState_Enable
; INITTIM_
.TIM_OCPolarity
= TIM_OCPolarity_High
; TIM_OC2Init(TIM3
,&INITTIM_
); TIM_OC2PreloadConfig(TIM3
,TIM_OCPreload_Enable
); TIM_Cmd(TIM3
, ENABLE
); int main(void){ u16 led0pwmval
=0;u8 dir
=1; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2
); uart_init(115200); LED_Init(); TM3_PWM_Init(899,0); while(1){delay_ms(10); if(dir
)led0pwmval
++;elseled0pwmval
--; if(led0pwmval
>300)dir
=0;if(led0pwmval
==0)dir
=1; TIM_SetCompare2(TIM3
,led0pwmval
); }
}
}
總結
以上是生活随笔為你收集整理的STM32入门笔记——PWM的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。