剖析計時方法|超時機制設計的兩種策略

Source: The 7 best work and productivity online timers – RescueTime


在MCU的實際應用中,為了增加訊號或整體的強健性(Robust),需要有能夠偵測非正常狀況下錯誤(Abnormal)的機制。這個機制在通訊中可以使用校驗碼驗證封包,但若連通訊本身都出狀況的時候,就需要有一個計時器來偵測超時。這也可以用來偵測任何有回授的系統是否有在時間內針對指令做出回應。

舉個簡易的風扇例子,常見的PWM風扇會有控制訊號與回授訊號,回授訊號用來給系統判斷風扇是否正常轉動,它是由磁鐵經過霍爾元件產生的電子訊號。當風扇轉動時,回授訊號會收到方波表示風扇正常轉動。詳細可以參考 Intel的PWM風扇規格書

當我現在要控制風扇,但回授訊號消失的時候,表示風扇可能故障、被東西卡住、控制訊號或回授訊號開路等,這種狀況發生我們就不該讓風扇繼續轉動。

但有時這種情況只是暫時性的,像風扇軸承老化導致需要比較多時間才能轉動、或者卡住的東西在啟動之後被風吹走了... 因此我們需要把時間加入判斷的因素。

有兩種方法可以針對回授訊號進行計時: 第一種是收到回授訊號的時候開始計數,當超過某個臨界值就判斷為風扇Failed;另一種是背景有一個計時器,收到回授訊號就reset這個計時器,當計時器超過某個臨界判斷風扇Failed。

這兩種方法都可以用,但我個人偏好第二種,若使用第一種方法,一個周邊就需要消耗一個Timer,第二種只要有個背景Timer,除了可以給風扇做Timeout計時之外,也可以幫其他東西計時ex. I2C, UART... 多組周邊共用計時器可以比較節省資源。

實作上,如果使用TI的C2000系列MCU,除了通用Timer之外,也可以用PWM Timer作為計時器的來源;若使用STM32系列的MCU,基本上Timer數量不成問題。這邊還有個小技巧,可以用最低優先權順序的Timer中斷作為計時器累加的ISR。這樣才可以避免Timeout中斷的事件搶占其他更重要的事情。

以上小小記錄最近的小功能。

Post a Comment

留個言吧

較新的 較舊