目錄
1.實(shí)驗(yàn)?zāi)康?/p>
2.實(shí)驗(yàn)效果
3.理論部分
3.1時(shí)鐘源
3.2時(shí)基單元
3.3輸入捕獲
4.程序流程
4.1GPIO初始化結(jié)構(gòu)體
4.2時(shí)基初始化結(jié)構(gòu)體
4.3輸出比較結(jié)構(gòu)體
4.4剎車和死區(qū)結(jié)構(gòu)體的初始化
5.程序源碼
1.實(shí)驗(yàn)?zāi)康?/h2>
使用高級定時(shí)器,輸出兩路互補(bǔ)的PWM輸出,需要有帶死區(qū)和不帶死區(qū)兩種情況
2.實(shí)驗(yàn)效果
圖1:不帶死區(qū)的兩路互補(bǔ)的PWM輸出
圖2 :帶死區(qū)的兩路互補(bǔ)的PWM輸出
3.理論部分
3.1時(shí)鐘源
內(nèi)部時(shí)鐘(基本定時(shí)器,通用定時(shí)器時(shí)鐘源來自PCLK1,但高級定時(shí)器的時(shí)鐘源來自PCLK2(72M))
實(shí)踐中幾乎無需使用:外部時(shí)鐘模式1、外部時(shí)鐘模式2
3.2時(shí)基單元
組成:
- 16bit預(yù)分頻PSC
16bit計(jì)數(shù)器CNT
8bit重復(fù)計(jì)數(shù)器RCR(高級定時(shí)器獨(dú)有)
16bit自動(dòng)重裝載寄存器ARR
3.3輸入捕獲
作用:對輸入信號的上升沿/下降沿/雙邊沿進(jìn)行捕獲,測量輸入信號的脈寬,和測量PWM的頻率,占空比
原理:當(dāng)捕捉到信號的跳變沿時(shí),將CNT的值所存到捕獲寄存器CCR中,然后把兩次的值相減,就可以得到脈寬或者頻率。
若脈寬時(shí)長超過你定時(shí)的時(shí)長,那么就溢出,此時(shí)我們就需要作額外的處理
PWM輸入的情況下,只有CH1,CH2可以同時(shí)測量周期和占空比,因?yàn)橹挥蠺I1FP1,TI2FP2可以觸發(fā)從模式控制器。選誰作從模式控制器的觸發(fā)測量的就是周期,剩下的一個(gè)寄存器就測量占空比。但是單純測量PWM的一個(gè)周期或占空比,可用四路
4.程序流程
4.1GPIO初始化結(jié)構(gòu)體
輸出PWM需用復(fù)用推挽輸出(GPIO_AF_PP)
1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
2、帶上拉輸入GPIO_IPU——IO內(nèi)部上拉電阻輸入
3、帶下拉輸入GPIO_IPD—— IO內(nèi)部下拉電阻輸入
4、模擬輸入GPIO_AIN ——應(yīng)用ADC模擬輸入,或者低功耗下省電
5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。
當(dāng)輸出為1時(shí),IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)? 低電平或不變。可以讀IO輸入電平變化,實(shí)現(xiàn)C51的IO雙向功能
6、推挽輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
7、復(fù)用功能的推挽輸出GPIO_AF_PP ——片內(nèi)外設(shè)功能(I2C的SCL,SDA)
8、復(fù)用功能的開漏輸出GPIO_AF_OD——片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)
4.2時(shí)基初始化結(jié)構(gòu)體
typedef struct
{
uint16_t TIM_Prescaler; //預(yù)分頻器
uint16_t TIM_CounterMode; //定時(shí)器的計(jì)數(shù)方式
uint16_t TIM_Period; //定時(shí)器的周期
uint16_t TIM_ClockDivision; //時(shí)鐘分頻因子
uint8_t TIM_RepetitionCounter; //配置重復(fù)計(jì)數(shù)器,僅高級定時(shí)器需要
} TIM_TimeBaseInitTypeDef;
?定時(shí)器的計(jì)數(shù)方式
向上計(jì)數(shù)(基本定時(shí)器僅有這一種)、向下計(jì)數(shù)、中心對齊計(jì)數(shù)
DIR=0,向上計(jì)數(shù)
DIR=1,向下計(jì)數(shù)
配置中心對齊需CMS和DIR寄存器配合使用
4.3輸出比較結(jié)構(gòu)體
typedef struct
{
uint16_t TIM_OCMode; //比較輸出模式選擇
uint16_t TIM_OutputState; //比較輸出使能
uint16_t TIM_OutputNState; //比較互補(bǔ)輸出使能
uint16_t TIM_Pulse; //脈沖寬度
uint16_t TIM_OCPolarity; //輸出極性
uint16_t TIM_OCNPolarity; //互補(bǔ)輸出極性
uint16_t TIM_OCIdleState; //空閑狀態(tài)下比較輸出狀態(tài)
uint16_t TIM_OCNIdleState; //空閑狀態(tài)下比較互補(bǔ)輸出狀態(tài)
} TIM_OCInitTypeDef;
1.比較輸出模式選擇,總共有八種,常用的為 PWM1/PWM2。它設(shè)定CCMRx 寄存器 OCxM[2:0]位的值。
2.比較輸出使能,決定最終的輸出比較信號 OCx 是否通過外部引腳輸出。它設(shè)定 TIMx_CCER 寄存器 CCxE/CCxNE 位的值。
3.TIM_OutputNState:比較互補(bǔ)輸出使能,決定 OCx 的互補(bǔ)信號 OCxN 是否通過外部引腳輸出。它設(shè)定 CCER 寄存器 CCxNE 位的值。
4.比較輸出脈沖寬度,實(shí)際設(shè)定比較寄存器 CCR 的值,決定脈沖寬度??稍O(shè)置范圍為 0 至 65535。設(shè)置脈沖即可設(shè)置占空比
5.比較輸出極性,可選 OCx 為高電平有效或低電平有效。它決定著定時(shí)器通道有效電平。它設(shè)定 CCER 寄存器的 CCxP 位的值。可設(shè)置占空比由高電平?jīng)Q定
6.比較互補(bǔ)輸出極性,可選 OCxN 為高電平有效或低電平有效。它設(shè)定 TIMx_CCER 寄存器的 CCxNP 位的值。
7.空閑狀態(tài)時(shí)通道輸出電平設(shè)置,可選輸出 1 或輸出 0,即在空閑狀態(tài)(BDTR_MOE 位為 0)時(shí),經(jīng)過死區(qū)時(shí)間后定時(shí)器通道輸出高電平或低電平。它設(shè)定CR2 寄存器的 OISx 位的值。
8.空閑狀態(tài)時(shí)互補(bǔ)通道輸出電平設(shè)置,可選輸出 1 或輸出 0,即在空閑狀態(tài)(BDTR_MOE 位為 0)時(shí),經(jīng)過死區(qū)時(shí)間后定時(shí)器互補(bǔ)通道輸出高電平或低電平,設(shè)定值必須與 TIM_OCIdleState 相反。它設(shè)定是 CR2 寄存器的 OISxN 位的值。
4.4剎車和死區(qū)結(jié)構(gòu)體的初始化
static void AdvancedTIM_BDTR_Init()
{
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;//空閑模式下的關(guān)閉狀態(tài)選擇
TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;//運(yùn)行模式下的關(guān)閉狀態(tài)選擇
TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_1;//鎖存配置
TIM_BDTRInitStructure.TIM_DeadTime=11;//死區(qū)時(shí)間
TIM_BDTRInitStructure.TIM_Break=TIM_Break_Enable;//斷路輸入使能控制
TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;//斷路輸入極性
TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;//自動(dòng)輸出極性
TIM_BDTRConfig(Advanced_TIM,&TIM_BDTRInitStructure);
}
死區(qū)時(shí)間的計(jì)算可以看看博客,講解的也是非常詳細(xì)的,對此不再贅述
這個(gè)結(jié)構(gòu)體,你只需關(guān)心 TIM_BDTRInitStructure.TIM_DeadTime=11 即可文章來源:http://www.zghlxwxcb.cn/news/detail-649602.html
5.程序源碼
高級定時(shí)器-兩路互補(bǔ)的PWM輸出(帶死區(qū)和剎車控制)文章來源地址http://www.zghlxwxcb.cn/news/detail-649602.html
到了這里,關(guān)于STM32學(xué)習(xí)筆記(4) 高級定時(shí)器-兩路互補(bǔ)的PWM輸出(帶死區(qū)和剎車控制)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!