由於本人不是自動/電氣專業,所以對這方面不太熟,希望了解的朋友可以指出錯誤。長期更新。
TIM觸發ADC的采樣時刻
電機的電流采樣,在用於電流環時,有兩種采樣方式:
- 瞬時電流,采集真實的每個PWM周期上高電平到來時的電流,采集周期和控制周期短(us),響應快,程序較復雜。
- 平均電流,一直采集總線采樣電阻上的電流,然后做平均處理,得到的結果基本和供電電源上電流一樣,控制周期較長(ms),程序較簡單。
FOC驅動算法需要的就是實時采集真實的電流(瞬時電流),方波驅動做PID控制時,瞬時和平均都有人做,主要看控制對象和目的,選擇合適就可以了。
需要注意的是:
過流保護是采的瞬時電流,因為開通和關斷瞬間存在一個電流峰值,除此之外,如果電機短路,電機實際上就相當於一個很小的電阻(零點幾歐~幾歐),電流會非常大,假設這個時候mos管是打開的,因為這個過程是非常短的(ns-us),供電電源部分上的是平均電流,即使有保險絲,也可能反應不過來的,這個時間也是單片機根本處理不過來的(如果進行平均電流采樣,由於要准確性可能采集多點進行平均,處理時間可能在ms級別),所以瞬時電流保護通常是純硬件實現,然后給軟件一個中斷,告訴單片機,已經觸發了瞬時電流保護,單片機再判斷是下一個周期的時候讓PWM再打開嘗試,還是直接關閉PWM輸出。
這里主要討論一下方波驅動時瞬時電流采樣。
瞬時電流的采樣,並不能隨機采樣,一般是通過定時器去觸發ADC進行采樣,並且需要在特定的時間窗口進行采樣。
MCU輸出PWM到裂變橋,是由延時的,我們可以用示波器比較出來。供參考的數值是大部分這個延時在2us左右。所以我們就不能用MCU的上升沿來采樣,因為可能采到的是0。
所以需要確定ADC的觸發時刻。窗口時間的確定分為兩個情況:
在占空比大時候:
-
在MCU輸出的控制PWM的高電平的中間進行采樣。
當PWM占空比比較大的時候,我們可以選擇中間時刻采樣,可以確保檢流電阻上是流過電流的。這種方法本質就是延時一段時間,避開干擾區。在MOS開通瞬間有一個開通干擾,參考數值是干擾大概也在2us左右,所以需要等待一定時間,等電流穩定。需要避開干擾區測量。
進行觸發的定時器需要和輸出PWM的定時器同步輸出。
在互補輸出的時候,還有死區時間。采樣窗口需要綜合考慮干擾,死區時間與高電平時間的相對大小。 -
第二種方法,利用延時特性,在輸出控制PWM的下降沿采樣。
簡單,不需要根據MCU輸出的PWM計算觸發時刻,避開了干擾區,保證准確性。
假設使用TIM1的CH4去觸發ADC采樣,因為這個CH4輸出的PWM就是全時域的,所以需要初始就一直開着,初始化的時候給定一個很小的占空比即可(因為電機還沒轉起來),后面啟動電機轉動的時候再根據另外三個互補通道的占空比,更改CH4的占空比配置。
以上兩種方法都是在控制PWM的ON期間采樣。規律:高電平時間越短,ADC采樣窗口越往后靠。
在占空比小時候:
干擾區和高電平時間可以相提並論,加上系統延時,在PWM-ON期間可能都采不到檢流電阻上波形。即使在下降沿采樣,也可能采到干擾區,怎么辦?
在BLDC開發筆記8中提到,我們可以采集續流階段相電流檢流電阻上電流,此時方法就和占空比大的時候類似,但是是在輸出控制PWM-off階段檢測。
具體還是實際測試波形為准。