目錄
- 一. 引言
- 二. UCOS-III作業系統簡介
- 三. 設計水下四旋翼的多任務系統
- 四. 硬體電路設計
一. 引言
上一篇我們寫了四旋翼的飛行原理,這一篇我們繼續做準備作業,主要是講解一下作業系統,我們的代碼是基于作業系統實作的,為什么要用作業系統呢?你的電腦可以同時運行多個程式,得益于作業系統的運轉,對于單片機來說是一樣的,使用作業系統的單片機可以同時運行多個程式,你能忍受你的電腦同時只能運行Word或瀏覽器或其他什么東東的單個程式嗎?顯然不能,那么為什么你可以忍受單片機只有一個main函式呢?因為在此之前你的功能單一簡單,或者是你不知道還有作業系統這個東西,如果你一直都讓你心愛的板子裸奔的話,從今天開始希望你能給它裝備上強大的武器——嵌入式作業系統,它可以最大限度的發揮CPU的性能,實作多任務運行,在實時性要求高的場合它是最為適用的,
如果之前沒有作業系統基礎的童鞋不要氣餒,作業系統很難,但是你不需要糾結于難的部分,只把它當成一個工具就行了,就像你用電腦,你需要明白Win10系統內部怎么運行么?你需要自己去實作win10系統么?答案是不需要,會用就行了!手里邊有STM32的板子的建議去學一下原子哥的FreeRTOS或UCOS-III作業系統的教程,邊學邊練,實在不會也沒關系,后面的文章我會淡化作業系統,它只是一個框架,我們更關注的是核心代碼部分,
二. UCOS-III作業系統簡介
嵌入式作業系統有很多,常用的有FreeRTOS和UCOS-II、UCOS-III作業系統,筆者不做過多研究與講解,只簡單介紹它的使用,使用作業系統首先一件事是移植作業系統,移植的程序會稍微麻煩,不同的板子會不一樣,本專案使用的自主開發的基于STM32F767IGT芯片的主控器,筆者直接使用了正點原子的阿波羅開發板移植好的工程模板,可以點擊下載,
作業系統的知識點很多,我們重點需要理解任務的創建、掛起、洗掉,任務調度,任務優先級,時間片輪轉調度等內容,在我的代碼里面沒有使用信號量與訊息傳遞機制,使用的都是全域變數,實際上很不規范也不安全,這種設計方法不推薦使用,以筆者的體會,STM32的作業系統不好用,技術要求很高,使用嵌入式作業系統只是一個過渡,筆者后期將會將主要演算法集中于樹莓派、英偉達等高性能Linux主板上,將STM32作為驅動板,這種上下層控制器的好處是用戶只需專注于應用與演算法,不需要耗費過多精力于底層實作,當然硬體成本也會高出許多,
三. 設計水下四旋翼的多任務系統
下面我們設計水下四旋翼的多任務系統,四旋翼是一個典型的完整的機器人架構,包含了實作一個機器人所需的全部核心要素,從通信、傳感、控制、電源到硬體電路、機械等,如果你從頭到尾搭建起了一個四旋翼(包括自己寫代碼與除錯),你將能夠勝任一般的機器人設計應用場合了,
這里我們創建5個任務,開始任務(StartTask),通信任務(RadioLinkTask),傳感任務(SensorTask),姿態控制任務(StabilizationTask),資料傳輸任務(TransmissionTask),系統的層次如圖所示,如我之前說的,作業系統只是一個工具,我們的核心是在應用層——應用程式,作業系統能夠向下最大程度的發揮CPU的功能,向上最高效最穩定的實作用戶的應用程式,開始任務負責創建其他所有任務,完事之后將自己掛起(就是自己不再起作用了),通信任務(RadioLinkTask)負責與遙控器通訊,決議遙控器的資料、按照指令動作,傳感任務(SensorTask)負責決議所有傳感器的資料,包括原始資料讀取、濾波、融合,姿態控制任務(StabilizationTask)負責三軸姿態角與高度環的PID計算,輸出控制量并進行電機控制,資料傳輸任務(TransmissionTask)包括上傳和下傳——上傳四旋翼的所有當前狀態(姿態、油門、電量等資訊),同時決議地面站下傳的資料進行相應動作或調整引數,

整個工程的代碼量較大,檔案較多,他們的關系我大致表示如下:

四. 硬體電路設計
其實這一節應該放在上面,先設計硬體再設計軟體,不過無所謂啦,硬體電路的介紹主要是列出使用的器件和使用的STM32的板載資源,如下表所示是使用的硬體清單,

這里面5個電機是不一定的,其中四個垂直電機是作為四旋翼,提供垂直動力并調整姿態,前面我們講了四旋翼的飛行原理,四旋翼依靠俯仰運動或滾轉運動,可以提供前后向或左右向的水平分力從而實作前后運動或左右運動,那么對于水下四旋翼是不是也是這樣的呢,答案是否定的!!! 因為水下的阻力非常大,四旋翼一般只有30度左右的角度變化范圍,提供的水平分力非常有限,你會發現水下四旋翼想要實作水平運動非常困難,筆者自己做過實驗,它在原地俯仰、滾轉,就是不動,暈!!所以,需要設定一個水平電機,當然可以是兩個、三個、四個,都行,水下的四旋翼不像空中要嚴格控制重量,因為你只需要設計機器人的自重與浮力抵消就行了,這樣你可以用很大的電池,筆者自己就用了一個10000MAH的大電池,續航非常持久,
這里面機架部分請自行設計,簡單起見可以去淘寶買機器人專用的密封艙,然后自己設計機架,不然密封會很難做,
繼電器的作用是為了安全起見,因為四旋翼的電流較大,普通的開關承受不了那么大的電流,
多芯水密連接器是為了充電用,這樣不充電的時候擰上母堵頭密封,充電的時候擰下母堵頭插上對插線就可以充電, 水密連接器長這個樣子:

硬體連接示意圖如圖所示,

如果你不是做水下四旋翼只想做空中的四旋翼,上面的硬體框架與軟體框架你一樣可以用的,只不過不需要考慮防水、密封等,反而簡單多了,
從下一章開始我們開始寫代碼,依次實作遙控器通信、傳感器資料融合、姿態控制、資料傳輸等功能,都看到這里了,點個贊再走唄!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/260386.html
標籤:其他
上一篇:Java全堆疊學習路線
