STM32高級(jí)定時(shí)器深度解析:從互補(bǔ)PWM到電機(jī)控制實(shí)戰(zhàn)
1. 項(xiàng)目概述為什么高級(jí)定時(shí)器是STM32的“王牌”玩過(guò)STM32的朋友都知道定時(shí)器是它的核心外設(shè)之一從基礎(chǔ)的SysTick到通用定時(shí)器再到今天要聊的高級(jí)定時(shí)器功能層層遞進(jìn)。如果說(shuō)通用定時(shí)器是“瑞士軍刀”那高級(jí)定時(shí)器就是一把功能齊全、精度極高的“數(shù)控機(jī)床”。它絕不僅僅是“能計(jì)更多數(shù)”那么簡(jiǎn)單而是STM32在電機(jī)控制、數(shù)字電源、高精度信號(hào)生成等復(fù)雜應(yīng)用場(chǎng)景下的“王牌”硬件。很多新手甚至一些有經(jīng)驗(yàn)的開(kāi)發(fā)者對(duì)高級(jí)定時(shí)器的理解可能還停留在“TIM1和TIM8”這兩個(gè)編號(hào)上或者只知道它能產(chǎn)生帶死區(qū)的PWM。這其實(shí)大大低估了它的價(jià)值。在我經(jīng)手的多個(gè)無(wú)刷電機(jī)驅(qū)動(dòng)和開(kāi)關(guān)電源項(xiàng)目中能否吃透高級(jí)定時(shí)器直接決定了系統(tǒng)性能的上限和調(diào)試的難易程度。它集成了互補(bǔ)輸出、剎車(chē)保護(hù)、編碼器接口、重復(fù)計(jì)數(shù)等一整套“組合拳”其設(shè)計(jì)初衷就是為了應(yīng)對(duì)那些對(duì)時(shí)序、同步、安全有嚴(yán)苛要求的工業(yè)級(jí)應(yīng)用。簡(jiǎn)單來(lái)說(shuō)如果你做的項(xiàng)目涉及到電機(jī)控制FOC/BLDC需要六路互補(bǔ)PWM并且中間要插入可調(diào)的死區(qū)時(shí)間防止上下橋臂直通。開(kāi)關(guān)電源/逆變器需要高精度、高同步性的PWM信號(hào)來(lái)控制功率開(kāi)關(guān)管。數(shù)字信號(hào)處理需要精確的定時(shí)觸發(fā)ADC采樣比如用于交流采樣或過(guò)零檢測(cè)。復(fù)雜協(xié)議生成需要生成特定數(shù)目、特定模式的脈沖串單脈沖模式、重復(fù)計(jì)數(shù)。那么通用定時(shí)器很可能就“力不從心”了你必須請(qǐng)出高級(jí)定時(shí)器這位“專家”。接下來(lái)我將結(jié)合寄存器操作和標(biāo)準(zhǔn)庫(kù)/HAL庫(kù)的視角把這套復(fù)雜但精密的系統(tǒng)拆解清楚讓你不僅能配置更能理解其背后的設(shè)計(jì)邏輯從而在項(xiàng)目中游刃有余。2. 高級(jí)定時(shí)器的核心架構(gòu)與功能模塊拆解高級(jí)定時(shí)器在STM32F1系列中通常是TIM1和TIM8在F4/F7/H7等系列中數(shù)量更多之所以“高級(jí)”是因?yàn)樗谕ㄓ枚〞r(shí)器計(jì)數(shù)、PWM、輸入捕獲、輸出比較的基礎(chǔ)上集成了幾個(gè)專為功率控制設(shè)計(jì)的關(guān)鍵模塊。我們可以把它想象成一個(gè)配備了專用協(xié)處理器的超級(jí)定時(shí)器。2.1 時(shí)基單元一切計(jì)時(shí)的基石時(shí)基單元是定時(shí)器的心臟高級(jí)定時(shí)器在此與通用定時(shí)器類似但多了一個(gè)關(guān)鍵寄存器RCR重復(fù)計(jì)數(shù)器寄存器。這是第一個(gè)容易被忽略的“高級(jí)”特性。核心寄存器TIMx_PSC預(yù)分頻器TIMx_ARR自動(dòng)重裝載寄存器TIMx_RCR重復(fù)計(jì)數(shù)器。工作原理時(shí)鐘源經(jīng)過(guò)PSC分頻得到計(jì)數(shù)器時(shí)鐘CK_CNT。計(jì)數(shù)器CNT根據(jù)計(jì)數(shù)模式向上、向下、中央對(duì)齊在0到ARR值之間循環(huán)計(jì)數(shù)。每次CNT達(dá)到ARR值或0取決于模式時(shí)會(huì)生成一個(gè)更新事件UEV。更新事件會(huì)觸發(fā)中斷、DMA請(qǐng)求并重置PSC、ARR等影子寄存器。重復(fù)計(jì)數(shù)器RCR的妙用這是實(shí)現(xiàn)“N個(gè)PWM周期后觸發(fā)一次更新”的關(guān)鍵。RCR的值設(shè)為N-1那么計(jì)數(shù)器需要完成N個(gè)完整的計(jì)數(shù)周期從0到ARR或一個(gè)中央對(duì)齊周期后才會(huì)產(chǎn)生一次真正的更新事件。這對(duì)于需要批量處理的應(yīng)用極其有用。例如在電機(jī)控制中你可以設(shè)置每64個(gè)PWM周期即64個(gè)電氣角度才計(jì)算一次新的FOC參數(shù)并更新占空比從而大幅減輕CPU中斷負(fù)擔(dān)。注意RCR只影響更新事件的生成不影響單個(gè)PWM周期的輸出。CNT在每個(gè)PWM周期內(nèi)依然正常計(jì)數(shù)和比較。2.2 輸出比較與PWM生成從基礎(chǔ)到互補(bǔ)輸出比較是定時(shí)器的核心輸出功能高級(jí)定時(shí)器在此提供了更強(qiáng)大的控制能力。通道靈活性每個(gè)高級(jí)定時(shí)器通常有4個(gè)獨(dú)立的通道CH1-CH4每個(gè)通道都可以獨(dú)立配置為輸入捕獲或輸出比較模式。在輸出比較模式下可以生成PWM、單脈沖、強(qiáng)制輸出等多種信號(hào)。關(guān)鍵寄存器TIMx_CCRx捕獲/比較寄存器TIMx_CCMRx捕獲/比較模式寄存器。PWM生成原理以PWM模式1為例當(dāng)CNT CCRx時(shí)輸出有效電平通常為高當(dāng)CNT CCRx時(shí)輸出無(wú)效電平。通過(guò)修改ARR值改變PWM頻率修改CCRx值改變占空比?;パa(bǔ)輸出與死區(qū)插入這是高級(jí)定時(shí)器最標(biāo)志性的功能。每個(gè)通道如CH1可以衍生出一對(duì)互補(bǔ)的輸出信號(hào)CHx和CHxN例如TIM1_CH1和TIM1_CH1N?;パa(bǔ)邏輯在正常的PWM周期內(nèi)CHx和CHxN的電平通常是反相的。一個(gè)為高時(shí)另一個(gè)為低。死區(qū)的必要性在驅(qū)動(dòng)H橋或半橋電路時(shí)控制上管和下管的信號(hào)絕對(duì)不能有“同時(shí)導(dǎo)通”的瞬間否則會(huì)造成電源直通短路燒毀MOS管。死區(qū)時(shí)間就是在互補(bǔ)信號(hào)切換時(shí)插入的一段兩者都為無(wú)效電平通常為低的“安全區(qū)”。死區(qū)生成模塊高級(jí)定時(shí)器內(nèi)部集成了硬件死區(qū)生成器由TIMx_BDTR寄存器的DTG位控制。你只需要配置一個(gè)時(shí)間值通常以ns或us為單位硬件會(huì)自動(dòng)在CHx和CHxN的邊沿處插入這段延遲無(wú)需軟件干預(yù)精度和可靠性極高。配置要點(diǎn)使能互補(bǔ)輸出前必須通過(guò)TIMx_CCER寄存器使能CCxNE位。死區(qū)時(shí)間需要根據(jù)你使用的功率器件的開(kāi)關(guān)特性導(dǎo)通延遲、關(guān)斷延遲來(lái)精確計(jì)算一般留出1.5-2倍的安全余量。2.3 剎車(chē)與斷路功能系統(tǒng)的緊急制動(dòng)剎車(chē)功能是高級(jí)定時(shí)器為工業(yè)安全設(shè)計(jì)的一道“防火墻”。它允許外部特定信號(hào)如過(guò)流、過(guò)壓、過(guò)熱傳感器的輸出直接、快速地關(guān)閉定時(shí)器的所有輸出通道將其置于一個(gè)已知的安全狀態(tài)通常為無(wú)效電平或預(yù)定義的電平。剎車(chē)源硬件剎車(chē)輸入BKIN引腳最高優(yōu)先級(jí)信號(hào)有效時(shí)立即動(dòng)作。時(shí)鐘失效事件當(dāng)系統(tǒng)時(shí)鐘安全檢測(cè)CSS檢測(cè)到HSE時(shí)鐘失效時(shí)觸發(fā)。軟件剎車(chē)通過(guò)設(shè)置TIMx_BDTR寄存器的BKE位來(lái)模擬。剎車(chē)響應(yīng)當(dāng)剎車(chē)事件發(fā)生時(shí)定時(shí)器會(huì)立即禁止所有輸出MOE主輸出使能位被硬件清零。將輸出強(qiáng)制置為復(fù)位狀態(tài)或用戶預(yù)設(shè)的“空閑狀態(tài)”通過(guò)OSSI位配置。計(jì)數(shù)器停止計(jì)數(shù)可選。產(chǎn)生剎車(chē)中斷通知CPU處理故障。應(yīng)用場(chǎng)景在電機(jī)驅(qū)動(dòng)中當(dāng)電流采樣電路檢測(cè)到短路電流會(huì)立即拉高BKIN引腳硬件在幾十納秒內(nèi)關(guān)閉所有PWM輸出保護(hù)電機(jī)和驅(qū)動(dòng)電路。這個(gè)響應(yīng)速度是軟件中斷無(wú)法比擬的。2.4 編碼器接口與霍爾傳感器接口高級(jí)定時(shí)器通常內(nèi)置了正交編碼器接口和與TIMx_CH1/2/3引腳復(fù)用的霍爾傳感器接口。編碼器接口可以將定時(shí)器配置為編碼器模式自動(dòng)根據(jù)編碼器的A、B相信號(hào)增減計(jì)數(shù)器CNT。無(wú)需外部中斷即可輕松讀取電機(jī)轉(zhuǎn)速和位置。高級(jí)定時(shí)器在此模式下的性能與通用定時(shí)器一致?;魻杺鞲衅鹘涌谟糜跓o(wú)刷直流電機(jī)BLDC的換相。三個(gè)霍爾傳感器的輸入可以映射到TIMx_CH1/2/3定時(shí)器能自動(dòng)產(chǎn)生換相信號(hào)并觸發(fā)相應(yīng)的中斷來(lái)通知CPU進(jìn)行下一步換相操作簡(jiǎn)化了BLDC六步換相的軟件邏輯。3. 核心功能配置與寄存器級(jí)實(shí)操理解了架構(gòu)我們進(jìn)入實(shí)戰(zhàn)。這里以STM32F103的TIM1生成帶死區(qū)的互補(bǔ)PWM為例我會(huì)混合寄存器操作和標(biāo)準(zhǔn)庫(kù)函數(shù)進(jìn)行講解讓你看清庫(kù)函數(shù)背后的本質(zhì)。3.1 初始化時(shí)基與重復(fù)計(jì)數(shù)器首先我們需要搭建定時(shí)器的“時(shí)鐘骨架”。// 使用標(biāo)準(zhǔn)庫(kù)示例 void TIM1_Base_Init(u16 arr, u16 psc, u16 rcr) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 開(kāi)啟TIM1時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // 時(shí)基單元配置 TIM_TimeBaseStructure.TIM_Period arr; // 自動(dòng)重裝載值A(chǔ)RR TIM_TimeBaseStructure.TIM_Prescaler psc; // 預(yù)分頻器PSC TIM_TimeBaseStructure.TIM_ClockDivision 0; // 時(shí)鐘分頻與死區(qū)濾波有關(guān)通常為0 TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_CenterAligned1; // 中央對(duì)齊模式常用干電機(jī)控制 TIM_TimeBaseStructure.TIM_RepetitionCounter rcr; // 重復(fù)計(jì)數(shù)器RCR !!!關(guān)鍵配置!!! TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure); }參數(shù)計(jì)算示例假設(shè)系統(tǒng)時(shí)鐘為72MHz要生成20kHz的PWM周期50us并使用中央對(duì)齊模式。中央對(duì)齊模式下計(jì)數(shù)器從0計(jì)數(shù)到ARR再遞減到0為一個(gè)完整周期。因此計(jì)數(shù)頻率應(yīng)為PWM_Freq * 2。目標(biāo)計(jì)數(shù)頻率 20kHz * 2 40kHz。定時(shí)器時(shí)鐘源若為72MHz則所需分頻系數(shù) PSC 72MHz / 40kHz - 1 1799。在中央對(duì)齊模式下ARR的值決定了PWM的“峰值”分辨率。例如設(shè)置ARR 1000則計(jì)數(shù)器會(huì)在0-1000-0之間變化PWM分辨率約為1000級(jí)。RCR根據(jù)需求設(shè)置如果不需要重復(fù)計(jì)數(shù)特性設(shè)為0。3.2 配置PWM輸出、互補(bǔ)與死區(qū)接下來(lái)配置輸出通道這是核心。void TIM1_PWM_Init(u16 ccr1, u16 ccr2, u16 ccr3, u16 deadtime) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; // 輸出比較通道配置 TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; // PWM模式1 TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; // 使能主輸出CH1 TIM_OCInitStructure.TIM_OutputNState TIM_OutputNState_Enable; // 使能互補(bǔ)輸出CH1N TIM_OCInitStructure.TIM_Pulse ccr1; // 初始捕獲/比較值即初始占空比 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; // 主輸出高電平有效 TIM_OCInitStructure.TIM_OCNPolarity TIM_OCNPolarity_High; // 互補(bǔ)輸出高電平有效 TIM_OCInitStructure.TIM_OCIdleState TIM_OCIdleState_Set; // 剎車(chē)或空閑時(shí)輸出狀態(tài) TIM_OCInitStructure.TIM_OCNIdleState TIM_OCNIdleState_Reset; TIM_OC1Init(TIM1, TIM_OCInitStructure); // 初始化通道1 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能CCR1預(yù)裝載 // 同理配置通道2和通道3... (TIM_OC2Init, TIM_OC3Init) // 通常三相電機(jī)需要3對(duì)互補(bǔ)PWM即CH1/1N, CH2/2N, CH3/3N。 // 剎車(chē)和死區(qū)寄存器配置 (BDTR: Break and Dead-Time Register) TIM_BDTRInitStructure.TIM_OSSRState TIM_OSSRState_Enable; TIM_BDTRInitStructure.TIM_OSSIState TIM_OSSIState_Enable; TIM_BDTRInitStructure.TIM_LOCKLevel TIM_LOCKLevel_1; // 鎖定級(jí)別防止誤寫(xiě) TIM_BDTRInitStructure.TIM_DeadTime deadtime; // 死區(qū)時(shí)間值 !!!核心參數(shù)!!! TIM_BDTRInitStructure.TIM_Break TIM_Break_Enable; // 使能剎車(chē)功能 TIM_BDTRInitStructure.TIM_BreakPolarity TIM_BreakPolarity_High; // 剎車(chē)輸入高電平有效 TIM_BDTRInitStructure.TIM_AutomaticOutput TIM_AutomaticOutput_Enable; // 自動(dòng)輸出使能 TIM_BDTRConfig(TIM1, TIM_BDTRInitStructure); }死區(qū)時(shí)間計(jì)算deadtime參數(shù)是一個(gè)8.7位格式的數(shù)字高8位為整數(shù)部分低7位為小數(shù)部分但通常只用整數(shù)部分。其具體時(shí)間由定時(shí)器的內(nèi)部時(shí)鐘tDTS決定。tDTSTIMxCLK/ (TIMx_CR1.CKD系數(shù))。通常CKD為00tDTS等于定時(shí)器輸入時(shí)鐘。 死區(qū)時(shí)間T_dtgDTG[7:0] * tDTS當(dāng)DTG[7:5]0xx時(shí)。例如tDTS為1/72MHz ≈ 13.89ns要插入500ns的死區(qū)則deadtime 500ns / 13.89ns ≈ 36。實(shí)際配置時(shí)需要查數(shù)據(jù)手冊(cè)中的詳細(xì)公式表不同范圍系數(shù)不同。3.3 使能輸出與啟動(dòng)計(jì)數(shù)器高級(jí)定時(shí)器的輸出需要顯式使能一個(gè)**主輸出MOE**位這是最后一步。// 使能TIM1的主輸出MOE位 TIM_CtrlPWMOutputs(TIM1, ENABLE); // 使能TIM1計(jì)數(shù)器 TIM_Cmd(TIM1, ENABLE);實(shí)操心得順序很重要一定要先配置好所有參數(shù)特別是BDTR最后再使能MOE和計(jì)數(shù)器。如果順序反了可能會(huì)在使能的瞬間輸出不期望的脈沖導(dǎo)致功率電路誤動(dòng)作。這是一個(gè)經(jīng)典的“坑”。4. 高級(jí)應(yīng)用場(chǎng)景與模式解析掌握了基礎(chǔ)配置我們來(lái)看看高級(jí)定時(shí)器如何解決實(shí)際問(wèn)題。4.1 單脈沖模式OPM與重復(fù)計(jì)數(shù)器的聯(lián)動(dòng)單脈沖模式用于產(chǎn)生一個(gè)精確可控的脈沖串。結(jié)合重復(fù)計(jì)數(shù)器RCR可以產(chǎn)生精確數(shù)量的脈沖。配置方法設(shè)置TIMx_CR1.OPM1使能單脈沖模式。在TIMx_RCR中寫(xiě)入需要的脈沖個(gè)數(shù)減一N-1。配置一個(gè)通道為PWM輸出模式。啟動(dòng)計(jì)數(shù)器通過(guò)軟件或外部觸發(fā)。工作流程計(jì)數(shù)器啟動(dòng)后會(huì)連續(xù)輸出N個(gè)完整的PWM脈沖然后在第N個(gè)脈沖結(jié)束后計(jì)數(shù)器自動(dòng)停止CEN位硬件清零。這對(duì)于步進(jìn)電機(jī)驅(qū)動(dòng)、發(fā)送指定數(shù)量的脈沖包非常有用。與通用定時(shí)器的區(qū)別通用定時(shí)器也能通過(guò)軟件在中斷里計(jì)數(shù)并關(guān)閉輸出來(lái)模擬但高級(jí)定時(shí)器用硬件實(shí)現(xiàn)精度更高不占用CPU資源且與剎車(chē)、死區(qū)等功能無(wú)縫集成。4.2 定時(shí)器同步與ADC觸發(fā)高級(jí)定時(shí)器可以作為其他定時(shí)器或ADC的“主設(shè)備”實(shí)現(xiàn)精準(zhǔn)的硬件級(jí)同步。主從模式通過(guò)TIMx_SMCR寄存器配置。例如可以將TIM1的更新事件UEV作為觸發(fā)輸出TRGO連接到TIM2的觸發(fā)輸入ITRx這樣TIM1每次更新TIM2就同步啟動(dòng)或復(fù)位一次實(shí)現(xiàn)多個(gè)定時(shí)器的相位同步。觸發(fā)ADC采樣這是高精度數(shù)據(jù)采集的關(guān)鍵??梢耘渲肨IM1的更新事件或某個(gè)通道的比較匹配事件作為ADC的外部觸發(fā)源。例如在電機(jī)FOC控制中需要在PWM周期中心點(diǎn)中央對(duì)齊模式的計(jì)數(shù)器為0時(shí)采樣相電流以消除開(kāi)關(guān)噪聲。只需將TIM1的更新事件連接到ADC的觸發(fā)線硬件就能在精確的時(shí)刻自動(dòng)啟動(dòng)ADC轉(zhuǎn)換軟件只需等待轉(zhuǎn)換完成中斷去讀取數(shù)據(jù)即可采樣時(shí)刻的抖動(dòng)極小。4.3 互補(bǔ)PWM與剎車(chē)在電機(jī)驅(qū)動(dòng)中的實(shí)戰(zhàn)以一個(gè)典型的三相逆變橋驅(qū)動(dòng)為例配置初始化TIM1中央對(duì)齊模式通道1/2/3配置為帶互補(bǔ)輸出和死區(qū)的PWM。連接TIM1_CH1/2/3連接上橋臂驅(qū)動(dòng)CH1N/2N/3N連接下橋臂驅(qū)動(dòng)。保護(hù)將電流采樣比較器的輸出連接到TIM1_BKIN引腳。當(dāng)電流超過(guò)閾值硬件剎車(chē)立即動(dòng)作所有6路PWM輸出被強(qiáng)制置為無(wú)效狀態(tài)如下橋全開(kāi)上橋全關(guān)實(shí)現(xiàn)短路制動(dòng)或自由停車(chē)。控制在更新中斷或由RCR控制的減速更新中斷中運(yùn)行FOC算法計(jì)算新的電壓矢量并更新TIM1_CCRx寄存器來(lái)改變占空比。由于開(kāi)啟了預(yù)裝載占空比的改變會(huì)在下一個(gè)PWM周期生效避免了當(dāng)前周期中間改變占空比導(dǎo)致的脈沖畸形。5. 調(diào)試技巧與常見(jiàn)問(wèn)題排查高級(jí)定時(shí)器功能復(fù)雜調(diào)試時(shí)容易遇到各種“詭異”現(xiàn)象。以下是我總結(jié)的幾個(gè)常見(jiàn)坑點(diǎn)和排查思路。5.1 無(wú)輸出或輸出異常現(xiàn)象可能原因排查步驟完全無(wú)輸出1. 時(shí)鐘未使能。2. GPIO未正確配置為復(fù)用推挽輸出。3.主輸出MOE未使能最容易被遺忘。4. 剎車(chē)輸入有效鎖定了輸出。1. 檢查RCC_APB2PeriphClockCmd。2. 檢查GPIO初始化代碼模式應(yīng)為GPIO_Mode_AF_PP。3. 確認(rèn)調(diào)用了TIM_CtrlPWMOutputs(ENABLE)。4. 檢查BKIN引腳電平或TIMx_BDTR.BKE位。只有主輸出(CHx)無(wú)互補(bǔ)輸出(CHxN)1. 互補(bǔ)輸出使能位CCxNE未設(shè)置。2. 死區(qū)時(shí)間設(shè)置過(guò)大導(dǎo)致互補(bǔ)信號(hào)全程為無(wú)效電平。1. 檢查T(mén)IM_OCInitStructure.TIM_OutputNState和TIMx_CCER.CCxNE位。2. 減小TIMx_BDTR.DTG值或用示波器觀察死區(qū)效應(yīng)。PWM頻率或占空比不對(duì)1. PSC和ARR計(jì)算錯(cuò)誤。2. 計(jì)數(shù)模式理解有誤向上、向下、中央對(duì)齊。3. CCRx值大于ARR值。1. 重新計(jì)算時(shí)鐘樹(shù)確認(rèn)定時(shí)器實(shí)際輸入時(shí)鐘頻率。2. 明確需求邊沿對(duì)齊模式頻率 CK_CNT/(ARR1)中央對(duì)齊模式頻率 CK_CNT/(2*ARR)。3. 確保CCRx ARR。5.2 死區(qū)時(shí)間不生效或效果不對(duì)問(wèn)題配置了死區(qū)時(shí)間但用示波器測(cè)量CHx和CHxN發(fā)現(xiàn)沒(méi)有死區(qū)或者死區(qū)時(shí)間與計(jì)算值不符。排查確認(rèn)互補(bǔ)輸出已使能這是死區(qū)生效的前提。檢查極性配置如果CHx和CHxN的極性都設(shè)為高有效那么死區(qū)插入的是“低電平安全區(qū)”。確保你的電路理解和極性配置匹配。精確計(jì)算DTG值死區(qū)時(shí)間計(jì)算公式分段且非線性。務(wù)必查閱對(duì)應(yīng)型號(hào)的《參考手冊(cè)》中“定時(shí)器”章節(jié)的BDTR寄存器描述里面有詳細(xì)的DTG[7:0]位域與死區(qū)時(shí)間的對(duì)應(yīng)公式表。不要憑感覺(jué)估算。示波器測(cè)量技巧使用示波器的上升沿/下降沿觸發(fā)并打開(kāi)兩個(gè)通道的精細(xì)延遲測(cè)量功能直接測(cè)量從CHx下降沿到CHxN上升沿之間的時(shí)間或反之這就是實(shí)際的死區(qū)時(shí)間。5.3 剎車(chē)功能誤觸發(fā)或無(wú)效誤觸發(fā)系統(tǒng)一上電PWM就被關(guān)閉。原因BKIN引腳默認(rèn)可能為浮空或上拉被噪聲誤觸發(fā)或者剎車(chē)極性配置錯(cuò)誤。解決在GPIO初始化時(shí)將BKIN引腳配置為帶上拉或下拉的輸入模式明確其空閑電平。根據(jù)傳感器輸出邏輯正確配置TIMx_BDTR.BKP極性位。無(wú)效發(fā)生故障時(shí)PWM沒(méi)有關(guān)閉。原因TIMx_BDTR.BKE位未使能剎車(chē)后MOE被清零但故障解除后軟件沒(méi)有重新使能MOE需要先清除剎車(chē)標(biāo)志位TIMx_SR.BIF。解決確保BKE1。在剎車(chē)中斷服務(wù)程序中處理完故障后需要先讀取TIMx_SR或調(diào)用TIM_GetFlagStatus來(lái)清除BIF標(biāo)志然后再設(shè)置TIMx_BDTR.MOE重新使能輸出。5.4 重復(fù)計(jì)數(shù)器RCR使用注意事項(xiàng)更新事件中斷頻率降低使能RCR后你會(huì)發(fā)現(xiàn)更新中斷UEV產(chǎn)生的頻率變成了原來(lái)的1/(RCR1)。這是正常現(xiàn)象因?yàn)镽CR就是在“過(guò)濾”更新事件。影子寄存器更新時(shí)機(jī)在RCR不為0的情況下你對(duì)ARR、PSC、CCRx等寄存器的寫(xiě)入只是寫(xiě)入了預(yù)裝載寄存器。真正的更新影子寄存器生效要等到RCR計(jì)數(shù)到0的那個(gè)更新事件發(fā)生時(shí)。這意味著修改參數(shù)后輸出可能不會(huì)立即改變會(huì)有最多RCR1個(gè)PWM周期的延遲。在編寫(xiě)控制算法時(shí)要考慮這個(gè)延遲。吃透高級(jí)定時(shí)器是邁向STM32高階應(yīng)用的必經(jīng)之路。它不再是一個(gè)簡(jiǎn)單的計(jì)時(shí)工具而是一個(gè)可編程的數(shù)字脈沖引擎和系統(tǒng)保護(hù)單元。最好的學(xué)習(xí)方式就是找一個(gè)開(kāi)發(fā)板按照上述步驟用示波器一個(gè)個(gè)信號(hào)去觀察、去驗(yàn)證。當(dāng)你看到那六路整齊、帶死區(qū)的互補(bǔ)PWM波形在屏幕上穩(wěn)定出現(xiàn)時(shí)當(dāng)你配置的剎車(chē)功能成功在過(guò)流時(shí)切斷輸出時(shí)你對(duì)它的理解就會(huì)從手冊(cè)上的文字變成實(shí)實(shí)在在的工程能力。

相關(guān)新聞

# BOSS直聘企業(yè)管理系統(tǒng)后端實(shí)現(xiàn)詳解:從注冊(cè)到審核的完整流程

# BOSS直聘企業(yè)管理系統(tǒng)后端實(shí)現(xiàn)詳解:從注冊(cè)到審核的完整流程

一、前言在BOSS直聘這類招聘平臺(tái)中,企業(yè)管理是核心功能之一。企業(yè)用戶從注冊(cè)到審核通過(guò),需要經(jīng)過(guò)一系列完整的流程。本文將詳細(xì)介紹如何使用 FastAPI Tortoise ORM Redis 技術(shù)棧,實(shí)現(xiàn)企業(yè)管理系統(tǒng)的后端核心功能,包括&#xff1…

2026/7/29 3:06:00 閱讀更多
植物冠層參數(shù)全解析:從LAI測(cè)量到遙感反演的技術(shù)實(shí)踐

植物冠層參數(shù)全解析:從LAI測(cè)量到遙感反演的技術(shù)實(shí)踐

1. 項(xiàng)目概述:從“綠蓋子”到精準(zhǔn)數(shù)據(jù)每次路過(guò)一片農(nóng)田、一片果園,或者一片人工林,我們第一眼看到的往往是那一片郁郁蔥蔥的“綠蓋子”,這就是植物的冠層。對(duì)于大多數(shù)人來(lái)說(shuō),冠層就是植物的“頭發(fā)”和“衣服”&#xff…

2026/7/29 3:06:00 閱讀更多
faster-whisper-GUI:免費(fèi)開(kāi)源的離線語(yǔ)音識(shí)別工具,讓語(yǔ)音轉(zhuǎn)文字變得簡(jiǎn)單高效

faster-whisper-GUI:免費(fèi)開(kāi)源的離線語(yǔ)音識(shí)別工具,讓語(yǔ)音轉(zhuǎn)文字變得簡(jiǎn)單高效

faster-whisper-GUI:免費(fèi)開(kāi)源的離線語(yǔ)音識(shí)別工具,讓語(yǔ)音轉(zhuǎn)文字變得簡(jiǎn)單高效 【免費(fèi)下載鏈接】faster-whisper-GUI faster_whisper GUI with PySide6 項(xiàng)目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 在當(dāng)今數(shù)字時(shí)代,…

2026/7/29 3:06:00 閱讀更多
python爬取貝殼中二手房的數(shù)據(jù)

python爬取貝殼中二手房的數(shù)據(jù)

前言:通過(guò)代碼爬取貝殼中二手房的數(shù)據(jù),以此給更多需要了解爬蟲(chóng)或者二手房信息的人提供便利。 第一部分:爬取地址 1.1貝殼首頁(yè)地址 jiujiang.ke.com 第二部分:爬取數(shù)據(jù) 2.1輸入要爬多少頁(yè) int(input(輸入一共要多少頁(yè)&#xf…

2026/7/29 4:26:03 閱讀更多
從零吃透C語(yǔ)言數(shù)組基礎(chǔ)!告別新手報(bào)錯(cuò),小白看完直接上手

從零吃透C語(yǔ)言數(shù)組基礎(chǔ)!告別新手報(bào)錯(cuò),小白看完直接上手

從零吃透C語(yǔ)言數(shù)組基礎(chǔ)!告別新手報(bào)錯(cuò),小白看完直接上手 ** 學(xué)完C語(yǔ)言函數(shù)之后,我本以為自己已經(jīng)入門(mén)了,寫(xiě)個(gè)簡(jiǎn)單計(jì)算、循環(huán)代碼都不在話下。結(jié)果沒(méi)過(guò)兩天就遇到了新難題:需要一次性存儲(chǔ)幾十個(gè)學(xué)生的成績(jī),挨…

2026/7/29 4:26:03 閱讀更多
學(xué)習(xí)日記 7.28

學(xué)習(xí)日記 7.28

在機(jī)器學(xué)習(xí)的學(xué)習(xí)之路上,線性回歸和邏輯回歸是兩塊重要的基石。今天我們將通過(guò)兩個(gè)實(shí)戰(zhàn)案例,從理論到代碼,全面掌握這兩種算法的應(yīng)用:案例一:多元線性回歸 —— 根據(jù)體重和年齡預(yù)測(cè)血壓收縮壓;案例二&#…

2026/7/29 4:26:03 閱讀更多
AI數(shù)字人口播訓(xùn)練全周期,從唇形同步誤差<0.3幀到通過(guò)抖音AIGC白名單認(rèn)證

AI數(shù)字人口播訓(xùn)練全周期,從唇形同步誤差<0.3幀到通過(guò)抖音AIGC白名單認(rèn)證

更多請(qǐng)點(diǎn)擊: https://intelliparadigm.com 第一章:AI數(shù)字人口播訓(xùn)練全周期概覽 AI數(shù)字人口播訓(xùn)練是一項(xiàng)融合語(yǔ)音合成、表情驅(qū)動(dòng)、語(yǔ)義理解與多模態(tài)對(duì)齊的系統(tǒng)性工程,其全周期涵蓋數(shù)據(jù)準(zhǔn)備、模型微調(diào)、驅(qū)動(dòng)策略設(shè)計(jì)、實(shí)時(shí)渲染優(yōu)化及效果評(píng)估五…

2026/7/29 4:26:03 閱讀更多
極驗(yàn)3代點(diǎn)選驗(yàn)證碼逆向:從抓包到生成加密w參數(shù)的完整實(shí)戰(zhàn)

極驗(yàn)3代點(diǎn)選驗(yàn)證碼逆向:從抓包到生成加密w參數(shù)的完整實(shí)戰(zhàn)

1. 項(xiàng)目概述:為什么我們要啃下極驗(yàn)3代點(diǎn)選這塊硬骨頭?如果你做過(guò)爬蟲(chóng),尤其是需要處理登錄、注冊(cè)或者高頻數(shù)據(jù)抓取,那你一定對(duì)“極驗(yàn)”這個(gè)名字不陌生。它就像一道橫在數(shù)據(jù)洪流前的智能閘門(mén),而其中的點(diǎn)選驗(yàn)證碼&#xf…

2026/7/29 4:26:03 閱讀更多
嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

1. 項(xiàng)目背景與硬件選型解析當(dāng)我們需要在嵌入式設(shè)備與云端建立安全連接時(shí),硬件平臺(tái)的選擇直接影響著整個(gè)系統(tǒng)的性能和可靠性。這個(gè)項(xiàng)目中選用的A5000顯卡和TM4C123GH6PZ微控制器組合,恰好覆蓋了從邊緣計(jì)算到云端協(xié)同的全鏈路需求。NVIDIA RTX A5000作為?!?/p>

2026/7/29 4:16:02 閱讀更多
面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個(gè)月,我在重構(gòu) AlgoMooc 網(wǎng)站過(guò)程中,發(fā)現(xiàn)一個(gè)問(wèn)題:在 Claude Code 里把一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,結(jié)果可能比 1 個(gè) agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過(guò)來(lái)的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫(huà)渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫(huà)渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂(lè)應(yīng)用,模擬了真實(shí)擲骰子的過(guò)程。應(yīng)用投擲兩個(gè)骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號(hào)直觀展示每個(gè)骰子的點(diǎn)數(shù),并伴有快速滾動(dòng)的動(dòng)畫(huà)效果?!?/p>

2026/7/29 0:15:24 閱讀更多