STM32微控制器PWM輸出學習

2021-10-10 19:22:32 字數 3521 閱讀 5156

pwm原理:

pwm表示脈衝寬度調製,它是一系列脈衝,這些脈衝將以方波的形式出現。也就是說,在任何給定的時間點,波型要麼是高電平或者是低電平。對於pwm訊號我們需要關注兩個與之相關的重要引數,乙個是pwm占空比,另乙個是pwm訊號的頻率。

占空比 =接通時間 / (接通時間 + 斷開時間)

也就是說,通過控制從0%到100%的占空比,我們可以控制pwm訊號的「接通時間」,從而控制訊號的寬度。由於我們可以通過調節脈衝訊號的寬度控制接通時間,所以將這種控制方式稱為「脈衝寬度調製」。

頻率 = 1 / 總持續時間

總持續時間 = 接通時間 + 斷開時間

pwm訊號的頻率決定了pwm完成乙個訊號週期的速度。週期是指pwm訊號完成乙個接通和關閉的時間。

【微控制器stm32】通用定時器的pwm輸出原理

當cnt小於ccrx時,timx_chx通道輸出低電平;

當cnt等於或大於ccrx時,timx_chx通道輸出高電平。

pwm的通道概覽未寫完

pwm輸出的模式區別

通過設定暫存器timx_ccmr1的oc1m[2:0]位來確定pwm的輸出模式:

pwm模式1:在向上計數時,一旦timx_cnttimx_ccr1時通道1為無效電平(oc1ref=0),否則為有效電平(oc1ref=1)。

pwm模式2:在向上計數時,一旦timx_cnttimx_ccr1時通道1為有效電平,否則為無效電平。

注意:pwm的模式只是區別什麼時候是有效電平,但並沒有確定是高電平有效還是低電平有效。這需要結合ccer暫存器的ccxp位的值來確定。

***pwm的計數模式***向上或向下計數

自動載入的預載入暫存器

pwm相關配置暫存器

捕獲/比較模式暫存器1(timx_ccmr1)

捕獲/比較使能暫存器(timx_ccer)

pwm相關配置庫函式

1個輸出初始化函式

void tim_oc1init(tim_typedef* timx, tim_ocinittypedef* tim_ocinitstruct);

void tim_oc2init(tim_typedef* timx, tim_ocinittypedef* tim_ocinitstruct);

void tim_oc3init(tim_typedef* timx, tim_ocinittypedef* tim_ocinitstruct);

void tim_oc4init(tim_typedef* timx, tim_ocinittypedef* tim_ocinitstruct);

作用:在四個通道中選擇乙個,初始化pwm輸出模式、比較輸出極性、比較輸出使能、比較值ccrx的值。

1個引數設定函式

void tim_setcompare1(tim_typedef* timx, uint16_t compare1);

void tim_setcompare2(tim_typedef* timx, uint16_t compare2);

void tim_setcompare3(tim_typedef* timx, uint16_t compare3);

void tim_setcompare4(tim_typedef* timx, uint16_t compare4);

作用:在四個通道中選擇乙個,設定比較值。通常在初始化函式中已經設定了比較值,此函式用於除初始化之外的修改。

2個使能函式

void tim_oc1preloadconfig(tim_typedef* timx, uint16_t tim_ocpreload);

void tim_oc2preloadconfig(tim_typedef* timx, uint16_t tim_ocpreload);

void tim_oc3preloadconfig(tim_typedef* timx, uint16_t tim_ocpreload);

void tim_oc4preloadconfig(tim_typedef* timx, uint16_t tim_ocpreload);

void tim_arrpreloadconfig(tim_typedef* timx, functionalstate newstate);

作用:前者在四個通道中選擇乙個,使能輸出比較預裝載,後者使能自動重裝載的預裝載暫存器允許位。

pwm的一般步驟

初始化io口為復用功能輸出。呼叫函式:gpio_init();

這裡我們是要把pb5用作定時器的pwm輸出引腳,所以要重對映配置,所以需要開啟afio時鐘。同時設定重對映。呼叫函式:rcc_apb2periphclockcmd();gpio_pinremapconfig();

初始化定時器。呼叫函式:arr,psc等:tim_timebaseinit();

初始化輸出比較引數。呼叫函式:tim_oc2init();

使能預裝載暫存器。呼叫函式:tim_oc2preloadconfig();

使能定時器。呼叫函式:tim_cmd();

不斷改變比較值ccrx,達到不同的占空比效果。呼叫函式:tim_setcompare2()。

下面按照這個一般步驟來進行乙個簡單的pwm輸出程式:

//pwm輸出初始化

//arr:自動重灌值

//psc:時鐘預分頻數

//psc:時鐘預分頻數

void

tim3_pwm_init

(u16 arr,u16 psc)

int

main

(void

)}

note:

關鍵引數設定:

初始化時鐘引數結構體中:

tim_timebasestructure.tim_period = arr

自動重裝載暫存器的值arr

tim_timebasestructure.tim_prescaler =psc

分頻係數

輸出的pwm頻率 hz

pwm輸出舒適化函式

tim_ocinitstructure.tim_pulse =arr * duty(pluse脈寬)

pwm占空比 = duty(≤100%)

STM32微控制器PWM輸出測試

stm32微控制器pwm輸出測試 環境 主機 xp 開發環境 mdk4.23 mcu stm32f103cbt6 說明 使用內部8m晶振,倍頻到64m供給tim3定時器,pa6 通道1 上產生640k,50 方波 源 初始化時鐘 初始化rcc時鐘 void init rcc void 初始化io口和...

微控制器學習(一) 微控制器基礎 STM32

io四種輸入工作模式 io四種輸出工作模 stm32有8個16位定時器 stm32具有強大的異常響應系統,它把能夠打斷當前 執行流程的事件分為異常 exception 和中斷 interrupt 並把它們用乙個表管理起來,編號為 3 6的中斷向量定義為系統異常,編號從7到19的為外部中斷。中斷向量控...

stm32微控制器Pwm輸出對頻率,定時器的理解

32微控制器外接了乙個8m的晶振,經過9倍的倍頻後,pll鎖相環輸出72mhz的頻率。這即系統的主頻。定時器中 tim3 init u16 arr,u16 psc 這個初試函式中,arr是自動重裝載值,psc是可程式設計預分頻器。他們共同設定什麼時候該溢位 比如arr 899,psc 0 就表示沒有...