STM32 四軸無人機設計 遙控器PPM訊號

2021-10-19 14:13:54 字數 1600 閱讀 5493

由於時間原因,我使用的遙控器是直接買的成品,富斯i6x+ia6b接收機,據說是一代神控,富斯的遙控器總共有ibus模式、sbus模式、ppm模式。我使用的是ppm模式。

ppm訊號其實就是很多個pwm訊號綜合到一起,形成一路pwm訊號的形式叫做ppm訊號。

ppm訊號一幀資料分為低電平(0.5ms)+高電平(0.5ms-1.5ms),高電平長度與pwm占空比成正比。因為一幀訊號最多要2ms,訊號週期為20ms,所以理論一次ppm訊號可以傳送10幀資料,但是由於要確定幀頭訊號,所以要加入同步幀,真正的ppm訊號裡面最多有9幀資料幀。

根據ppm的傳送原理,我們很輕易就可以想到通過測量電平的時間就可以獲得ppm訊號的資料幀。有兩種方法(1)根據gpio的高電平輸入同時開始定時器計時,(2)使用tim定時器的輸入捕獲功能。

因為無人機屬於比較危險的玩具,一旦失去控制後果不堪設想,從安全角度出發我使用比較穩妥的定時器輸入捕獲方法

定時器輸入捕獲的初始化不在贅述,在stm32基礎篇有詳細介紹。直接看ppm訊號的接收,儲存。

uint16_t ppm_sample_cnt=0;

uint32_t ppm_time=0;

uint16_t ppm_okay=0;

uint16_t ppm_databuf[8]

=;uint8_t tim2_ch2_capture_sta=0;

/**

* 功能:tim2_ch1中斷服務函式,接收ppm訊號儲存在ppm_databuf中

* 入口引數:

* 返回值:

*/void

tim2_irqhandler

(void)if

(ppm_time>

7000

)//識別到幀尾

tim_oc2polarityconfig

(tim2,tim_icpolarity_rising)

; tim2_ch2_capture_sta=0;

//清掉標誌位準備開始下一次上公升沿和下降沿檢測

}else

}tim_clearitpendingbit

(tim2, tim_it_cc2|tim_it_update)

;//清除中斷標誌位,一定不要忘,要不然下次進不了中斷

}

因為ppm訊號最長為2ms,但是空白資料幀會超過2ms,所以我們只需要判斷有乙個資料超過2ms即可認定為是上一次ppm訊號的最後一幀,即刻開始接收最新的ppm訊號的第一幀,因為我的遙控器是十通道,但是我還用不到這麼多,所以設計接收八通道,預留兩個通道備用。

最後接收到的ppm資料幀儲存在ppm_databuf[8]這個陣列中。

ppm訊號是現在多通道控制領域比較常見的一種序列訊號,但是它也有乙個重大的缺點,就是最快需要20ms才能接收一次資料。這也就是訊號頻率只有50hz。對於一些高精度儀器不可用,ibus和sbus是並行多通道資料傳輸方案,在頻率上優於ppm,所以後期可以公升級訊號模式。

無人機知識之遙控器

遙控器想必大家都接觸過,電視遙控器 玩具車遙控器等等。無人機遙控器更是操控無人機必不可少的部分。下面我以匿名飛控售賣的遙控器富斯 fs i6s 為例介紹一下無人機遙控器的基本特點和引數。遙控器的乙個通道對應被控制的乙個量,如乙個通道控制油門,乙個通道控制公升降,乙個通道控制航向,所以通道越多能控制的...

無人機遙控器改裝 硬體部分

原創博文,非本人允許,嚴禁 本文針對有動手能力的人,不想動手的請繞道 本是破產的無人機,因為不銷售遙控器了,所以遙控 被炒得老高,大傷我們玩家的心 特製作一款可正常匹配無人機的遙控器,後還會發軟體篇 遙控成本50元左右 破產遙控器乙個 15元 arduino pro mini 2張 10元 20元 ...

STM32 紅外遙控器

紅外 原理 遙控器作為發射器,發射38khz的載波,接收器在接收到載波時為低電平 按照nec protocol的pwm,該協議的特點 1 8位位址和8位指令長度 2 位址和命令分兩次傳送,並有傳送位址和命令反碼,便於校驗,確保傳輸的準確 3 pwm脈衝位置調製,以發射紅外載波的占空比來表示 0 和 ...