首先,在工控開發上,我還是個新人,學習工控arduino也有4個月,雖然以前搞過軟體,但是C語言和硬體都是新手。這里來討論這個大題目也是因為度娘提供的資料太少,希望來這里拋磚引玉,尤其我不愛讀別人的代碼,一切都只有自己研究。
很多人覺得nano太小了,無法獨立完成飛控,據說apm就不是一塊arduino開發出來的。
雖然nano資源太小,但是如果節省起來使用,做個簡單的飛控還是有可能的。
很多人都想設計一個飛控,但是如何構建框架無處入手。
我設計了一個簡單飛控的框架,希望各路大神過來拍磚,如果連關注都不關注,那我也太失敗了。
先說一下設計目標:做一個簡易飛控,不是商業需求,能夠實作基本的飛行控制就可以了。比如提供穩定性和控制支持。
先列出來飛控設計內容串列
1、讀取六通道接識訓資料
2、讀取陀螺儀姿態資料
3、讀取其他傳感器資訊,比如GPS資訊
4、所有演算法實施
5、控制馬達或者舵機
目標程序:讀取接識訓控制要求,讀取陀螺儀姿態,結合兩者計算出馬達或舵機的動作。能夠實作就好,其他暫不考慮。
首先,整個框架是以接識訓為中心的,為什么?因為接識訓是主動資料源,所有其他任務都可以看作被動任務。我的意思是,接識訓的資料是由接識訓發送過來的,而不是我要求過來的,資料到達時如果我不接收,資料就過去了,出現資料丟幀。所以必須首先安排讀取接識訓資料。在接識訓資料完整獲取之后,再考慮抽時間處理其他任務。大概也是因為這個原因,據說APM就是使用了一個獨立的芯片來讀取接識訓資料。
值得慶幸的是,接識訓的幀頻率是60左右,就是說每一幀需要17毫秒,而讀取一幀六通道接識訓資料只需要4毫秒,大約留下13毫秒來處理其他事情,足夠了。
當你完整的讀取了接識訓資料,并省出來13毫秒來處理其他任務的時候,你的飛控就基本大功告成了(從框架來說)。
下面說一下舵機和馬達
舵機和馬達的控制頻率說是50,其實20-80都可以,稍微高一些好像動作更穩定,我試了試,60左右就可以作業的很好,所以就用接識訓的頻率了,每個接識訓的一幀動一次馬達。所以在剩下的13毫秒之內,可以抽出2-3個毫秒來控制所有的舵機和馬達。我試了,4-6個舵機都還挺穩定的。好了,我們還有10個毫秒。
其他的就好說了,讀取陀螺儀姿態計算用不了3毫秒,包括計算,計時再多兩個毫秒也還夠用(例如復雜運算)。
別的傳感器先不說了。
演算法實施主要是把接識訓資料和姿態合并處理后,得出所需要的馬達舵機資料,這個不費時間。
處理這些都可以在60HZ的范圍內,如果怕時間不夠,還可以用單雙數,單數程序接收處理姿態,雙數處理別的傳感器或者計算,這些按30HZ處理也是足夠的吧。
在這個基礎上,簡單基本的飛行動作大概就可以了。
如果要做自動飛行,只需要做個讀寫模塊提供一系列飛行資料
如果要做學習動作,只需要保存所有控制資料就可以了
已上各個模塊我都測驗過,基本都達到了使用要求。
接識訓資料漂移大約在16,可以湊合用了,基本穩定。
uj5u.com熱心網友回復:
使用PPM來讀取接識訓也是個辦法,剩余時間也足夠處理其他操作,但是讀出來的資料有點怪,還在進一步實驗中。我用的是樂迪接識訓,自帶PPM。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133471.html
標籤:單片機/工控
