聯(lián)系寶融
寶融國際有限公司
華南區(qū):0755-82020106
華北區(qū):0532-85989359
華東區(qū):021-64825012
E-Mail:sales@brgcn.com
基于GD32F103 MCU四旋翼飛行器第二步:整體方案 試飛效果
基于GD32F103 MCU四旋翼飛行器第二步:整體方案 試飛效果
前言:
近幾年四軸飛行器的市場已經(jīng)慢慢火起來了,大家也都或多或少的從各個方面接觸到了四軸,其中作為商品應(yīng)用的最廣泛的領(lǐng)域就是航拍。說白了,目前四軸還是處于玩具的階段,無非就是誰家玩具做的好,誰家做的壞而已。從技術(shù)上來講,這是受限于算法、載重、續(xù)航、智能控制等等,從環(huán)境上來講,還是受限于各方面的安全性。GD32系列MCU的高性能處理能力提高了代碼執(zhí)行效率,從而使算法的控制更快速有效,加上明顯的價格優(yōu)勢,目前在飛行器市場已經(jīng)有了較高的知名度。
本系列的主要目的就是提供一個基于GD32 MCU的四軸飛行器基本方案設(shè)計,傳感器方面只使用了慣性傳感器,未使用氣壓計、超聲波、光流傳感器、攝像頭動態(tài)捕捉等。
軟件方面目前的功能:
1.開啟傳感器低通濾波98Hz,濾掉電機震動對加速度計和陀螺儀的影響;
2.磁力計現(xiàn)場校準,代碼直接完成,不需要PC干預(yù)。換個地方飛不用再帶個電腦做校準了;
3.陀螺儀零偏自校準;
4.加速度計零偏和靈敏度校準;
4.代碼時間片管理,姿態(tài)融合500Hz,PID控制200Hz;
5.9DOF的慣性傳感器數(shù)據(jù)融合算法;
6.標準的位置式PID控制,控制參數(shù)采用kp,Ti,Td;
7.固定航向模式。日后加入可控航向。
8.串口在線調(diào)試,使用藍牙無線傳輸,支持在線參數(shù)保存和讀取,采用GD32F103內(nèi)部Flash來保存參數(shù),不用外擴存儲芯片,也方便調(diào)試PID參數(shù)和磁力計校準。
9.飛行模式:x模式
硬件方面見下圖:
下面這張是自己設(shè)計的飛控板第二版,兼容F10x/F2xx/F4xx系列MCU,外擴4個PWMin外接遙控接收機,4個PWMout外接motor,4個PWM備用,1個DCMI攝像頭接口,1個USART接藍牙模塊,1個SPI可接SPI nand flash,1個I2C接口可外接其他傳感器,1個TF卡插槽用于存儲視頻。
正面:
反面:
下面這張是整機:兩個白色軸中間是機頭,右邊白色軸上是之前做的藍牙模塊,整機標配:450機架,980kv電機,好盈20A電調(diào),11.1V-3S動力電池,7通道接收機,鋰電池低壓報警器,槳是1047。
下面這張是調(diào)PID的時候:此時yaw、pitch和roll的PID都調(diào)的差不多了,已經(jīng)很穩(wěn)了。
飛行截圖:
下面這張是試飛時墜機的原因:螺絲松了,軸也摔彎了,因為當時未找到合適的槳夾,用螺絲代替的。電機轉(zhuǎn)動時,有兩個軸必須要使用逆向的螺紋,這樣才能保證螺絲越轉(zhuǎn)越緊,我只能說電機廠家在設(shè)計電機時就應(yīng)該配備逆向螺紋電機和正向螺紋電機,方便小客戶。
下面這張是飛控板被摔后的,萬幸可以修復(fù):
今天飛了3次,目前電池充滿續(xù)航也就20分鐘不到,這次是失敗的例子,就放上來了,目前的情況是飛的還算平穩(wěn),不過基本都是被它牽著鼻子走,畢竟標準PID只能保證平穩(wěn)飛起來,操控性能不好。槳的螺絲松了也是個大的教訓(xùn),一定要用槳夾。
下面說一些各種技術(shù)上的東西,個人感覺還是有點用的,包括PID、整機等等。
PID:
PID分兩種,位置式和增量式,我采用的是位置式,將Ki和Kd用Ti和Td的形式來表達,并帶入到式2-3中,ek=角度的期望-傳感器輸出的角度,所用的PID三個參數(shù)是:Kp、Ti、Td。公式如圖所示:
四軸PID控制的目的就是將接收到的遙控的控制信號(一般有油門THR、升降舵ELE(對應(yīng)pitch)、副翼Ail(對應(yīng)roll)、方向舵RUD(對應(yīng)yaw))與飛控板本身計算得出pitch、roll、yaw做比較,分別得出它們之間的誤差值,然后將Kp、Ti、Td與這個誤差值結(jié)合得出PID輸出(PID_pitch、PID_roll或者PID_yaw),再將這三個PID輸出與油門結(jié)合在一起算出送到每一個電調(diào)的PWM數(shù)值,從而控制每一個電機的轉(zhuǎn)動。
PID參數(shù)的調(diào)試我是用的土辦法,分別對俯仰、翻滾和偏航做PID調(diào)試,x模式下先同時上Kp和Td,光靠Kp是穩(wěn)不住四軸的,調(diào)的差不多了上Ti消除靜態(tài)誤差。在調(diào)這三個參數(shù)時,要相輔相成,切忌把某一個參數(shù)固定下來,因為它們之間都會相互影響。
我們還需要考慮三個問題,這三個問題都是圍繞《讓自己的四軸怎樣轉(zhuǎn)動》:
1. 飛行時是使用“+”模式還是使用“x”模式
2. 四個電機分別該如何旋轉(zhuǎn),是逆時針還是順時針
3. 每個電機該怎樣旋轉(zhuǎn)才能讓我們的四軸上升、下降、左翻、右翻、上仰、俯沖、左轉(zhuǎn)頭或者右轉(zhuǎn)頭
對于第一個問題來說:
一般“+”模式比較好操作,也比較好調(diào)節(jié)PID的那三個參數(shù),而“x”模式飛行起來比較靈活,可以做很多復(fù)雜動作,但是比較難操作,這里我用的是“x”模式,對于新手來說,包括我,雖然“x”模式難一些,不過最多也就是需要時間來學(xué)習(xí)和熟練罷了,其實也沒什么難的。
對于第二個問題:
首先要確定飛控板的xyz軸正方向如何放置,然后確定4個電機的旋轉(zhuǎn)方向分別是什么,我定義的方式如下圖,Y正方向為四軸前進方向:
M1、M2、M3、M4分別為4個電機,其中M1和M4順時針旋轉(zhuǎn),M2和M3逆時針旋轉(zhuǎn)。
對于第三個問題:
還是看上圖,我定義三點:
1.xyz軸的正方向為:y指向正北,x指向東,z指向天;
2.繞y旋轉(zhuǎn)是roll,繞x旋轉(zhuǎn)是pitch,繞z旋轉(zhuǎn)是yaw;
3.Yaw北偏西為正,pitch往上為正,roll“右翼”下沉為正。
令:“+”表示增加該電機的旋轉(zhuǎn)速度,“-”表示減小該電機的旋轉(zhuǎn)速度,那么“x”模式下的控制規(guī)律如下:
最后得出每個電機需要的PWM輸出計算公式:
其中Limit_PWMOUT函數(shù)是限制PWM的輸出,根據(jù)電調(diào)的PWM占空比來確定。
還有一點需要注意的,就是槳葉的安裝,槳葉是分正反漿的,通俗的說,安裝時要保證4個槳葉轉(zhuǎn)動時都是往下吹風(fēng)的。
四軸零件之間的接線與簡單說明:
4個電調(diào)的正負極需要并聯(lián)(紅色連一起,黑色連1一起),并接到電池的正負極上;
電調(diào)3根黑色的電機控制線,連接電機,交換任意兩根黑色的連線,可改變電機轉(zhuǎn)動方向,以此來改變槳的旋轉(zhuǎn)方向;
電調(diào)有個BEC輸出,共3根線,紅、黑線用于輸出5v的電壓,給飛行控制板供電,另外一根線用于接收飛行控制板的PWMout信號;
遙控接收器連接在飛行控制器的PWMin上,輸出遙控信號給飛控板,并同時從飛行控制板上得到5v供電;
關(guān)于PWMin和PWMout:
對于我的天地飛7通遙控+WFT07接收機來說,遙控發(fā)送給接收機的信號是PPM,而接收機輸出的信號是標準的PWM。
對于接收機來說,我們只需要關(guān)心它輸出的高電平時間,也就是PWMin,不用管占空比,因此TIM_Period設(shè)定為 0xFFFF。我的WFT07接收機的PWM周期是20ms,高電平是1ms~2ms。
對 于給電調(diào)的輸入來說,也就是PWMout,要確定其占空比,一般根據(jù)自己的電調(diào)來確定這個占空比,我用的是好盈天行者20A,頻率為50~432hz,所 以我的PWM周期設(shè)定為2.5ms 頻率400hz,高電平持續(xù)時間限制在0.875ms~2.0ms,高電平一般在周期的20%~80%。
如何將遙控的PWMin轉(zhuǎn)化為期望的角度expect:
先看一個公式:e(t)=expect – measured,這是PID中的誤差e(t),等于遙控期望值減去傳感器的測量值。
而將遙控的PWMin轉(zhuǎn)化為期望的角度expect所達到的目的就是將PWMin轉(zhuǎn)化為expect,使expect的范圍大小(不是單位,PWMin的單位可以看成已經(jīng)是角度單位了)與measured的對應(yīng)起來,并限制expect的范圍,對新手來說好操控。
至于轉(zhuǎn)化,就是將PWMin通過一些加減乘除限定在一定范圍內(nèi),比如我將PWMin(Motor_Ail、Motor_Ele、Motor_Rud)限定在-25度到+25度內(nèi),而Motor_Thr保持原來的范圍,暫不做限定,可根據(jù)具體操作手感來做限定,如下圖,其中AilMiddle、EleMiddle、RudMiddle均為1500:
關(guān)于對PWMin的濾波:
將TIM_ICFilter設(shè)置為0x0B,濾掉1us以下脈沖干擾,防止誤進PWMin中斷,避免將干擾信號當作PWMin來接收。
最后:
試飛視頻和完整代碼見21ic上Gigadevice GD32 MCU的線上論壇:http://bbs.21ic.com/forum.php?mod=viewthread&tid=718442&page=1&extra=#pid4167670。代碼是針對的是GD32F103VCT6這款芯片的,系統(tǒng)時鐘108M,較高的系統(tǒng)時鐘意味著更快速度的運算效率,代碼是在《四軸飛行器第一步》的基礎(chǔ)上添改了很多東西,驗證無誤。至此四軸飛行器整體方案算是告一段落,希望能給大家?guī)韼椭?,敬請期待后續(xù)改進
前言:
近幾年四軸飛行器的市場已經(jīng)慢慢火起來了,大家也都或多或少的從各個方面接觸到了四軸,其中作為商品應(yīng)用的最廣泛的領(lǐng)域就是航拍。說白了,目前四軸還是處于玩具的階段,無非就是誰家玩具做的好,誰家做的壞而已。從技術(shù)上來講,這是受限于算法、載重、續(xù)航、智能控制等等,從環(huán)境上來講,還是受限于各方面的安全性。GD32系列MCU的高性能處理能力提高了代碼執(zhí)行效率,從而使算法的控制更快速有效,加上明顯的價格優(yōu)勢,目前在飛行器市場已經(jīng)有了較高的知名度。
本系列的主要目的就是提供一個基于GD32 MCU的四軸飛行器基本方案設(shè)計,傳感器方面只使用了慣性傳感器,未使用氣壓計、超聲波、光流傳感器、攝像頭動態(tài)捕捉等。
軟件方面目前的功能:
1.開啟傳感器低通濾波98Hz,濾掉電機震動對加速度計和陀螺儀的影響;
2.磁力計現(xiàn)場校準,代碼直接完成,不需要PC干預(yù)。換個地方飛不用再帶個電腦做校準了;
3.陀螺儀零偏自校準;
4.加速度計零偏和靈敏度校準;
4.代碼時間片管理,姿態(tài)融合500Hz,PID控制200Hz;
5.9DOF的慣性傳感器數(shù)據(jù)融合算法;
6.標準的位置式PID控制,控制參數(shù)采用kp,Ti,Td;
7.固定航向模式。日后加入可控航向。
8.串口在線調(diào)試,使用藍牙無線傳輸,支持在線參數(shù)保存和讀取,采用GD32F103內(nèi)部Flash來保存參數(shù),不用外擴存儲芯片,也方便調(diào)試PID參數(shù)和磁力計校準。
9.飛行模式:x模式
硬件方面見下圖:
下面這張是自己設(shè)計的飛控板第二版,兼容F10x/F2xx/F4xx系列MCU,外擴4個PWMin外接遙控接收機,4個PWMout外接motor,4個PWM備用,1個DCMI攝像頭接口,1個USART接藍牙模塊,1個SPI可接SPI nand flash,1個I2C接口可外接其他傳感器,1個TF卡插槽用于存儲視頻。
正面:
反面:
下面這張是整機:兩個白色軸中間是機頭,右邊白色軸上是之前做的藍牙模塊,整機標配:450機架,980kv電機,好盈20A電調(diào),11.1V-3S動力電池,7通道接收機,鋰電池低壓報警器,槳是1047。
下面這張是調(diào)PID的時候:此時yaw、pitch和roll的PID都調(diào)的差不多了,已經(jīng)很穩(wěn)了。
飛行截圖:
下面這張是試飛時墜機的原因:螺絲松了,軸也摔彎了,因為當時未找到合適的槳夾,用螺絲代替的。電機轉(zhuǎn)動時,有兩個軸必須要使用逆向的螺紋,這樣才能保證螺絲越轉(zhuǎn)越緊,我只能說電機廠家在設(shè)計電機時就應(yīng)該配備逆向螺紋電機和正向螺紋電機,方便小客戶。
下面這張是飛控板被摔后的,萬幸可以修復(fù):
今天飛了3次,目前電池充滿續(xù)航也就20分鐘不到,這次是失敗的例子,就放上來了,目前的情況是飛的還算平穩(wěn),不過基本都是被它牽著鼻子走,畢竟標準PID只能保證平穩(wěn)飛起來,操控性能不好。槳的螺絲松了也是個大的教訓(xùn),一定要用槳夾。
下面說一些各種技術(shù)上的東西,個人感覺還是有點用的,包括PID、整機等等。
PID:
PID分兩種,位置式和增量式,我采用的是位置式,將Ki和Kd用Ti和Td的形式來表達,并帶入到式2-3中,ek=角度的期望-傳感器輸出的角度,所用的PID三個參數(shù)是:Kp、Ti、Td。公式如圖所示:
四軸PID控制的目的就是將接收到的遙控的控制信號(一般有油門THR、升降舵ELE(對應(yīng)pitch)、副翼Ail(對應(yīng)roll)、方向舵RUD(對應(yīng)yaw))與飛控板本身計算得出pitch、roll、yaw做比較,分別得出它們之間的誤差值,然后將Kp、Ti、Td與這個誤差值結(jié)合得出PID輸出(PID_pitch、PID_roll或者PID_yaw),再將這三個PID輸出與油門結(jié)合在一起算出送到每一個電調(diào)的PWM數(shù)值,從而控制每一個電機的轉(zhuǎn)動。
PID參數(shù)的調(diào)試我是用的土辦法,分別對俯仰、翻滾和偏航做PID調(diào)試,x模式下先同時上Kp和Td,光靠Kp是穩(wěn)不住四軸的,調(diào)的差不多了上Ti消除靜態(tài)誤差。在調(diào)這三個參數(shù)時,要相輔相成,切忌把某一個參數(shù)固定下來,因為它們之間都會相互影響。
我們還需要考慮三個問題,這三個問題都是圍繞《讓自己的四軸怎樣轉(zhuǎn)動》:
1. 飛行時是使用“+”模式還是使用“x”模式
2. 四個電機分別該如何旋轉(zhuǎn),是逆時針還是順時針
3. 每個電機該怎樣旋轉(zhuǎn)才能讓我們的四軸上升、下降、左翻、右翻、上仰、俯沖、左轉(zhuǎn)頭或者右轉(zhuǎn)頭
對于第一個問題來說:
一般“+”模式比較好操作,也比較好調(diào)節(jié)PID的那三個參數(shù),而“x”模式飛行起來比較靈活,可以做很多復(fù)雜動作,但是比較難操作,這里我用的是“x”模式,對于新手來說,包括我,雖然“x”模式難一些,不過最多也就是需要時間來學(xué)習(xí)和熟練罷了,其實也沒什么難的。
對于第二個問題:
首先要確定飛控板的xyz軸正方向如何放置,然后確定4個電機的旋轉(zhuǎn)方向分別是什么,我定義的方式如下圖,Y正方向為四軸前進方向:
M1、M2、M3、M4分別為4個電機,其中M1和M4順時針旋轉(zhuǎn),M2和M3逆時針旋轉(zhuǎn)。
對于第三個問題:
還是看上圖,我定義三點:
1.xyz軸的正方向為:y指向正北,x指向東,z指向天;
2.繞y旋轉(zhuǎn)是roll,繞x旋轉(zhuǎn)是pitch,繞z旋轉(zhuǎn)是yaw;
3.Yaw北偏西為正,pitch往上為正,roll“右翼”下沉為正。
令:“+”表示增加該電機的旋轉(zhuǎn)速度,“-”表示減小該電機的旋轉(zhuǎn)速度,那么“x”模式下的控制規(guī)律如下:
最后得出每個電機需要的PWM輸出計算公式:
其中Limit_PWMOUT函數(shù)是限制PWM的輸出,根據(jù)電調(diào)的PWM占空比來確定。
還有一點需要注意的,就是槳葉的安裝,槳葉是分正反漿的,通俗的說,安裝時要保證4個槳葉轉(zhuǎn)動時都是往下吹風(fēng)的。
四軸零件之間的接線與簡單說明:
4個電調(diào)的正負極需要并聯(lián)(紅色連一起,黑色連1一起),并接到電池的正負極上;
電調(diào)3根黑色的電機控制線,連接電機,交換任意兩根黑色的連線,可改變電機轉(zhuǎn)動方向,以此來改變槳的旋轉(zhuǎn)方向;
電調(diào)有個BEC輸出,共3根線,紅、黑線用于輸出5v的電壓,給飛行控制板供電,另外一根線用于接收飛行控制板的PWMout信號;
遙控接收器連接在飛行控制器的PWMin上,輸出遙控信號給飛控板,并同時從飛行控制板上得到5v供電;
關(guān)于PWMin和PWMout:
對于我的天地飛7通遙控+WFT07接收機來說,遙控發(fā)送給接收機的信號是PPM,而接收機輸出的信號是標準的PWM。
對于接收機來說,我們只需要關(guān)心它輸出的高電平時間,也就是PWMin,不用管占空比,因此TIM_Period設(shè)定為 0xFFFF。我的WFT07接收機的PWM周期是20ms,高電平是1ms~2ms。
對 于給電調(diào)的輸入來說,也就是PWMout,要確定其占空比,一般根據(jù)自己的電調(diào)來確定這個占空比,我用的是好盈天行者20A,頻率為50~432hz,所 以我的PWM周期設(shè)定為2.5ms 頻率400hz,高電平持續(xù)時間限制在0.875ms~2.0ms,高電平一般在周期的20%~80%。
如何將遙控的PWMin轉(zhuǎn)化為期望的角度expect:
先看一個公式:e(t)=expect – measured,這是PID中的誤差e(t),等于遙控期望值減去傳感器的測量值。
而將遙控的PWMin轉(zhuǎn)化為期望的角度expect所達到的目的就是將PWMin轉(zhuǎn)化為expect,使expect的范圍大小(不是單位,PWMin的單位可以看成已經(jīng)是角度單位了)與measured的對應(yīng)起來,并限制expect的范圍,對新手來說好操控。
至于轉(zhuǎn)化,就是將PWMin通過一些加減乘除限定在一定范圍內(nèi),比如我將PWMin(Motor_Ail、Motor_Ele、Motor_Rud)限定在-25度到+25度內(nèi),而Motor_Thr保持原來的范圍,暫不做限定,可根據(jù)具體操作手感來做限定,如下圖,其中AilMiddle、EleMiddle、RudMiddle均為1500:
關(guān)于對PWMin的濾波:
將TIM_ICFilter設(shè)置為0x0B,濾掉1us以下脈沖干擾,防止誤進PWMin中斷,避免將干擾信號當作PWMin來接收。
最后:
試飛視頻和完整代碼見21ic上Gigadevice GD32 MCU的線上論壇:http://bbs.21ic.com/forum.php?mod=viewthread&tid=718442&page=1&extra=#pid4167670。代碼是針對的是GD32F103VCT6這款芯片的,系統(tǒng)時鐘108M,較高的系統(tǒng)時鐘意味著更快速度的運算效率,代碼是在《四軸飛行器第一步》的基礎(chǔ)上添改了很多東西,驗證無誤。至此四軸飛行器整體方案算是告一段落,希望能給大家?guī)韼椭?,敬請期待后續(xù)改進