傳統的遙控器接收機是採用多路PWM的方式進行輸出的,遙控器中有多少個通道,接收機中就有多少路PWM輸出,例如下圖中的遙控器有6個可用通道,其接收機也有6個PWM輸出通道與之對應:

此接收機除了PWM輸出之外還有S.BUS協議輸出方式,關於S.BUS我們已經在上一節中介紹過了,這裡不再贅述。下面我們主要針對PWM信號輸出來做講解。

接收機的1-7個PWM輸出通道,都是以PWM的形式輸出的,這就需要飛控能夠採集並解析這些PWM信號,並為飛控所用。我們知道PWM信號所表示的數值就是高電平持續時間佔用整個周期時長的百分比,例如下圖所示:

接收機輸出的PWM與之前章節中講述的電調需要接收的PWM完全一致。只不過我們需要使用飛控程序來讀取接收機輸出的PWM信號值。我們以第一個通道的PWM為例,講述飛控程序對其處理的具體方法:

(1)檢測引腳由低點平變為高電平的時刻,並記錄當前時間t0,表示高電平開始;

(2)檢測引腳由高電平變為低點平的時刻,並記錄當前時間t1,表示高電平結束;

(3)繼續檢測引腳由低點平變為高電平的時刻,並記錄當前時間t2,表示一個PWM周期結束;

(4)計算高電平時常 = t1 - t0;

(5)計算整個PWM周期 = t2 - t0;

(6)計算PWM占空比 = 高電平時常 / PWM周期

在STM32系列中,我們可以為GPIO引腳設置成PWM採集模式,並通過採集寄存器來讀取當前PWM的周期和PWM占空比。

每一個遙控器通道都需要一個PWM採集器進行採集,但是對於STM32來說不可能使用多個定時器來採集多個通道的PWM,這對於STM32的資源來說十分浪費。因此採用的就是PPM編碼。PPM編碼是PWM的擴展協議,可以在一個管腳中傳輸多路PWM信號。

PPM的頻率通常是50Hz,周期長度20ms,每一個周期中可以存放最多10路PWM信號,每一路PWM的周期為2ms,如下圖所示:

使用STM32的管腳中斷配合定時器中的計數可以準確的捕獲一個周期內的PPM信號中的高低電平變化,每2ms就是一路PWM信號的周期。


推薦閱讀:
相关文章