藍橋杯嵌入式 PWM模式

2021-10-01 20:55:32 字數 2075 閱讀 2932

如何把定時器設定成pwm模式,從而產生相應頻率,相應占空比的pwm波

藍橋杯主要考的定時器也就三個

tim1

,tim2

,tim3

tim3

如何配置

pwm波

對應通道一,

pa7對應通道

2

#ifndef __pwm_h

#define __pwm_h

#include "stm32f10x.h"

void tim3_pwm_init(u16 pwm_fre,u8 ch1_duty,u8 ch2_duty);

#endif

#include "pwm.h"

void tim3_pwm_init(u16 pwm_fre,u8 ch1_duty,u8 ch2_duty)

stm32f1的主頻是72mhz,那麼在我們不分頻的情況下,tim3的主頻也是72m,那麼72m的計數速度我們覺得太快了,同時也不方面我們進行計算,所以讓tim3的時鐘進行72分頻,那麼分頻係數就是72 - 1。分頻後我們的定時器將以1m的速度進行計數,那麼這個計數值是非常方面計算的。能換算一下,1mhz的計數頻率,我們換算成週期那麼就是1us,也就是說我們的計數值是每過1us加一。我們在初始化函式裡傳入乙個入口引數代表我們設定的頻率值(單位是hz),我們把頻率值換算成計數值,也就是1000000/pwm_fretim_pulse則代表的是你的電平翻轉值我們畫乙個簡圖,假設我們的計數值為2000,pulse為1000

當我們的計數值到2000後就會清零不斷的進行向上計數,假如當前計數值小於pulse,那麼輸出的為高電平,假如當前技術值大於pulse,那麼輸出就為低電平,這樣的能夠實現50%占空比的pwm波了。

就簡單的來說,pulse就是用來設定你的占空比的,我們只需要把pulse設定成 計數值x 占空比就可以了

我們先把頻率設定成1000hz,pa6產生40%占空比的方波,pa7產生80%占空比的方波

那麼再來設定成5000hz,pa6產生10%占空比的方波,pa7產生30%占空比的方波

#include "stm32f10x.h"

#include "lcd.h"

#include "pwm.h"

u32 timingdelay = 0;

void delay_ms(u32 ntime);

//main body

int main(void)}//

void delay_ms(u32 ntime)

使用pwm模式有乙個缺點:同一定時器中,不同的通道下,輸出的頻率固定,占空比可變。也就是說,假如我們通道1輸出1khz方波,那麼通道同樣也是1khz 方波。這種pwm模式在對於我們日常的控制使用上是沒有問題的,但是你看藍橋杯歷年賽題的時候,會看到許多題目要你使用乙個定時器,不同通道上讓你產生不同頻率,不同占空比的方波,甚至還有題目讓你產生相位不同的方波,那麼在這種情況下顯然pwm模式時達不到這種效果的,我們就要換一種方式stm32韌體庫v3.5\stm32f10x_stdperiph_lib_v3.5.0\project\stm32f10x_stdperiph_examples\tim\pwm_output

藍橋杯嵌入式 USART

乙個是串列埠 1 pa9,pa10 乙個是串列埠 2 pa2,pa3 我們的藍橋杯嵌入式開發板並不能直接使用串列埠 1rxbuf 是用來儲存串列埠的接收資料的,rxover 為接收串列埠結束標誌位,rxcunt 為串列埠接收計數值 ifndef usart h define usart h incl...

藍橋杯嵌入式 LCD

include stm32f10x.h include lcd.h include stdio.h u8 string 20 u8 temp 30 float ao 3.81 u32 timingdelay 0 void delay ms u32 ntime main body int main v...

藍橋杯嵌入式 RTC

bkp裡是關於備份暫存器的庫函式,pwr裡是關於電源管理的庫函式 ifndef rtc h define rtc h include stm32f10x.h void rtc init u8 hh,u8 mm,u8 ss endif include rtc.h void rtc init u8 hh...