四軸飛行器,又稱四旋翼飛行器,簡稱四軸、四旋翼。四軸飛行器的四個螺旋槳與電機直接相連,通過改變電機轉(zhuǎn)速獲得旋轉(zhuǎn)機身的力,從而調(diào)整自身姿態(tài)。
四軸的葉片轉(zhuǎn)速極高,有一定的危險性,一般不能在室內(nèi)飛,特別是在調(diào)試過程中更加不穩(wěn)定,輕則炸雞撞壞物品,重則傷到人。
我做四軸的主要目的是為了學(xué)習(xí)飛控算法,這個過程肯定少不了調(diào)試,為了安全,我選擇做一個小一點的,手掌那么大的四軸,葉片的威力比較小,價格也便宜,即使摔壞也不心疼。
這種小四軸一般采用PCB做機架,用720空心杯電機代替無刷電機,用MOS管代替電調(diào),電池采用3.7v鋰聚合物電池(尺寸跟手機電池差不多,但是放電電流要大很多),遙控用2.4G無線模塊,或者用藍牙連接手機,成本100左右,續(xù)航時間大概6-7分鐘,遙控距離在10米以內(nèi)。
選擇零件
四軸上最重要的就是飛控,所以第一步:選擇飛控。
市面上有許多現(xiàn)成飛控,也可以自己用電子元件做一個分控。有很多有名的開源飛控,例如KK,QQ,匿名,MultiWii/MWC,APM/PIX等。
KK、QQ飛控功能較少,只有基本的四軸飛行功能,甚至不支持GPS。
匿名飛控是國內(nèi)新出現(xiàn)的飛控,功能比以上兩個要多,價格也要貴很多。
MultiWii/MWC飛控是基于arduino的,支持GPS,能路線規(guī)劃,在線調(diào)試。
APM也是基于arduino的,功能更為齊全,硬件也更為復(fù)雜,飛控中有兩塊單片機,分別執(zhí)行不同功能。APM已將arduino的性能開發(fā)到極限,于是有了升級版PIX,從arduino轉(zhuǎn)到了STM32,處理速度提升了10倍,同樣用了兩塊不同型號的STM32協(xié)同運作,是目前已知的最好的開源飛控。
·
我打算自制飛控,選用我比較熟悉的arduino作為主控芯片。APM硬件結(jié)構(gòu)太復(fù)雜,因此選擇了MWC飛控。
這里說一句后話,如果打算學(xué)習(xí)飛控算法,還是選擇簡單的開源飛控比較好,MWC和APM/PIX都太復(fù)雜了,初學(xué)者并不能看懂這些代碼,另外推薦用STM32芯片,arduino的標(biāo)準(zhǔn)庫中并沒有時間中斷,要實現(xiàn)飛控的功能需要了解arduino更底層的知識,不會比想象中更簡單。
搜索各種MWC的資料,查找需要的零件:
包括備用件總共120元,比買現(xiàn)成的小四軸要稍貴一些,畢竟量產(chǎn)能降低成本。
我選用了arduino nano作為主控,體型還是有點偏大,用arduino mini更好。選擇nano是因為其帶自身帶有USB接口,可以直接用USB接口下程序,而mini要用下載器。
事后發(fā)現(xiàn)更好的選擇是mini Leonardo,nano和mini的芯片型號都是ATMEGA328P,只有一個串口,nano的USB是用另一塊芯片轉(zhuǎn)串口,不能跟串口同時使用,下載程序時要把跟串口相接的元件斷開,而Leonardo的芯片型號是ATMEGA32U4,自身帶有USB和串口,互不干擾。官方的Leonardo板型是跟UNO一樣的,國內(nèi)的廠家則把Leonardo做成了mini的板型,而且?guī)в蠻SB接口。值得注意的是,不確定飛控是否支持Leonardo,因為Leonardo的串口名是Serial1,而nano的串口名是Serial,可能需要修改代碼。
不要用低功耗的藍牙4.0模塊,低功耗的藍牙的傳輸速率不夠,數(shù)據(jù)會阻塞,有很大的延遲。
HC-05 與 HC-06的區(qū)別是 HC-05 可以做主機,也就是可以用 HC-05 連接其他的藍牙模塊,而 HC-06 只能作從機。四軸上的藍牙只做從機,HC-05 和 HC-06都可以用。
機架用的是淘寶已經(jīng)做好的PCB,上面不能貼元件。
電機是7mm*20mm的空心杯電機:
代碼編譯
選完零件后,MWC如何用呢?MWC不僅支持四軸,還支持六軸,還支持三軸,該如何把MWC配置成四軸模式,并且是空心杯四軸?這是MWC的官網(wǎng):http://www.multiwii.com/這是MWC的中文網(wǎng):http://www.multiwii.cn/
然而把這個網(wǎng)站看完之后,并不非常明白如何使用,胡亂摸索之后總結(jié)如下:首先去googlecode下載源代碼:https://code.google.com/p/multiwii/(需要翻墻)或者去github下載源代碼:https://github.com/multiwii/multiwii-firmware在googlecode下載的文件里除了源代碼還有電腦端的上位機,github只有源代碼。
下完源代碼之后,會看到一堆文件,初學(xué)者肯定會被嚇一跳,其實,只需看config.h這個文件,通過注釋或取消注釋其中的代碼配置飛控的模式。
config.h里全是英文說明,沒過四級的同學(xué)要頭大了,還好有萬能的網(wǎng)友已經(jīng)翻譯了。
這里面的代碼也非常多,如果只做空心杯小四軸的話就看我提取的關(guān)鍵點吧。(行數(shù)是原配置文件的行數(shù))。
行數(shù) | 代碼 | 解釋 |
39 | define QUADX | 設(shè)置成x四軸模式 |
72 | define MINCOMMAND 1000 | 電機最小命令,如果解鎖后電機轉(zhuǎn)速太快,減小這個值 |
76 | define I2C_SPEED 400000L | 設(shè)置I2C速率為400K,用于mpu6050 |
80 | //#define INTERNAL_I2C_PULLUPS | I2C內(nèi)部上拉,gy系列自帶上拉,保持默認(rèn)注釋 |
136 | define GY_521 | 啟用GY_521傳感器 |
204~206 | define FORCE_ACC_ORIENTATION(X, Y, Z) | 設(shè)置傳感器方向,如果傳感器的安裝方向跟四軸方向不同則需要設(shè)置 |
226 | define PID_CONTROLLER 2 | 選擇PID算法,1是老算法,2是新算法 |
232 | define ONLYARMWHENFLAT | 阻止飛行器傾斜時解鎖 |
237 | define ALLOW_ARM_DISARM_VIA_TX_YAW | 設(shè)定解鎖方式,默認(rèn)YAW解鎖,另一種是ROLL解鎖 |
500~503 | define SERIAL0_COM_SPEED 115200 | 調(diào)整串口速率,一般默認(rèn) |
520~526 | define GYRO_LPF_256HZ | 低通濾波器的頻率,保持默認(rèn) |
559 | define THROTTLE_ANGLE_CORRECTION 40 | 油門隨著角度補償,防止傾斜時高度下降 |
562 | define HEADFREE | 無頭模式,要給四軸配上指南針,四軸的前方保持為四軸到手機的連線方向 |
578 | define GYROCALIBRATIONFAILSAFE | 連續(xù)的陀螺儀校準(zhǔn),如果在校準(zhǔn)時被移動會自動重校準(zhǔn) |
592~603 | define FAILSAFE | 失控保護設(shè)置,啟用 |
640 | define INFLIGHT_ACC_CALIBRATION | 飛行時加速度計校準(zhǔn),能讓四軸穩(wěn)定在一定區(qū)域內(nèi) |
652 | define DEADBAND 6 | 在搖桿中點周圍引入一個死區(qū) |
878~885 | define BUZZER | 蜂鳴器設(shè)置,沒有添加蜂鳴器,保持注釋 |
877~911 | battery voltage monitoring | 電池電壓監(jiān)控,我沒有用這個功能,跳過 |
999 | define EXT_MOTOR_RANGE | 用于空心杯電機,要啟用 |
1020 | define MOTOR_STOP | 當(dāng)油門命令在低位時電機停轉(zhuǎn),按個人需要配置 |
配置完后,用arduino IDE打開 MultiWii.ino ,將程序上傳到arduino nano。
電路測試
各元件與arduino nano的連接:
名稱 | 針腳 |
左前電機 | PWM3 |
右前電機 | PWM10 |
左后電機 | PWM11 |
右后電機 | PWM9 |
THROTTLE/PPM | D2 |
ROLL | D4 |
PITCH | D5 |
YAW | D6 |
MODE | D7 |
功率針腳 | A2 |
電壓檢測 | A3 |
蜂鳴針腳 | D8 |
SDA | A4 |
SCL | A5 |
D2、D4、D5、D6、D7是PWM遙控器針腳,我是用藍牙接手機遙控,所以不需要接。arduino nano的硬件資料:http://kb.open.eefocus.com/index.php?title=Arduino_Nano
在面包板上連接電路測試:
我只接了nano、mpu6050和藍牙,電機用四個LED代替。
如何用手機遙控四軸?
下載手機端軟件,MWC只有安卓端的軟件,從這個網(wǎng)站下載:http://www.multiwii.com/wiki/index.php?title=Mods用安卓遙控需要用到的軟件是MultiWii EZ-GUI,要android4.4以上的系統(tǒng),這個軟件要到google play storm下載,一般國產(chǎn)手機沒有g(shù)oogle play storm,如何下載google play storm自行百度。
EZ-GUI如何用?
打開軟件后第一頁是四軸的儀表盤,能檢測四軸的各項數(shù)據(jù)
第二頁是對四軸的各種設(shè)置
第三頁是對EZ-GUI的設(shè)置
用手機的藍牙連接HC-06或HC-05后,到EZ-GUI第三頁進入【設(shè)置】,【SELECT BT DEVICE】選擇藍牙模塊,然后點紅箭頭,后面的默認(rèn)紅箭頭。
然后到首頁點右上角的【連接】,注意MPU6050要連上arduino nano,不然連接后會報錯。顯示連接成功后,把飛行器放在水平地面,到第二頁進入【校準(zhǔn)】,點擊【加速度計標(biāo)定】,等待校準(zhǔn)完成。如果有磁力計還要磁力計標(biāo)定。
之后就可以遙控起飛了。到第三頁,進入高級設(shè)置,進入【MODEL CONTROL】
然后就會看到這樣的界面:
右上角設(shè)置,可設(shè)置各滑塊的功能,THROTTLE是油門的意思
四軸一開始在鎖定狀態(tài),把油門調(diào)到最低,YAW到最右,保持一會兒就會解鎖,然后就能飛了;把油門調(diào)到最低,YAW最左,將會上鎖。(在網(wǎng)上某些地方把飛機可以飛的時候稱為”鎖定”,不能飛的時候稱為”解鎖”,不知是翻譯錯誤還是國外的思維方式不一樣)
我把各種元件插在面包板上,用LED代替電機測試,解鎖后,LED由滅變成亮,通過控制油門或方向,可以看到LED的亮度會發(fā)生變化。
硬件制作
這些是要用到的元件,以洞洞板作為基板固定所有的元件,然后用螺釘把洞洞板與機架連接。(當(dāng)然洞洞板需要裁剪,只用一小塊)
空心杯電機驅(qū)動電路:
SI2302的內(nèi)部電路圖:
這幅圖是crazyflie飛控板的電機驅(qū)動電路原理圖,同樣適用MWC飛控,肖吉特二極管BAT54用ss34替換(只要滿足電壓和電流以及通斷時間就行,ss34遠(yuǎn)遠(yuǎn)大于需求,只是因為跟MOS管在同一家店所以買了-_-),場效應(yīng)管pmv31xn用SI2302替換。因為忘記買貼片電阻,只好用普通電阻代替,這占了很大一部分面積。
場效應(yīng)管是用電壓控制電流,作用跟三級管類似(三極管是用電流控制電流),相比于三極管,場效應(yīng)管體積更小功率更大。
肖吉特二極管的作用是續(xù)流。電機是電感元件,有阻礙電流變化的特性,控制電機轉(zhuǎn)速的方法是用PWM信號控制場效應(yīng)管的通斷,當(dāng)場效應(yīng)管斷開時,電機兩端會產(chǎn)生極高的感應(yīng)電壓擊穿場效應(yīng)管,加上二極管后,電機的電流會通過二極管保持流通,防止電機產(chǎn)生過高的感應(yīng)電壓。
為了防止電機引起的電流波動干擾到arduino,我在arduino的電源處接了一個220uF的鉭電容。(其實沒什么卵用!)
下圖是焊接完后的背面,白色的是控制線,黑色和紅色的是接電機的線。電機驅(qū)動電源部分要接一個撥動開關(guān),防止arduino nano上電時不受控制的轉(zhuǎn),也用于失控時給電機斷電。
這是焊接完后的效果。不用在意MPU6050的方向,飛控里有一段代碼,可以配置任意方向的陀螺儀、加速度計和指南針。(槳買錯了,應(yīng)該一黑色正槳一黑色反槳,一紅色反槳一紅色正槳,通過顏色區(qū)分四軸的前后)
飛控板與機架的連接,在洞洞板上打了兩孔用螺絲固定在機架上,用兩個螺母把洞洞板墊高。
這是背面,電池將貼在這里。藍牙模塊并沒有焊在洞洞板上,而是由那根灰色的線單獨接出,并用可拆卸連接頭(例如杜邦頭或其他)連接藍牙模塊,這是因為藍牙會占用COM口,影響上傳程序。電源供電是將3.7V的電壓直接接在arduino的5V端口上,實驗證明可以正常運行。
電機用焊錫跟機架焊上,為了加固,我又在電機背面打了一層熱熔膠。
這時還不能飛,因為MPU6050的方向不是正確方向,需要修正方向。
取消config.h中204~206行的注釋,將程序上傳到arduino,打開MultiWiiConf.exe看陀螺儀和加速度的值,然后根據(jù)情況替換ROLL、PITCH、YAW或改變正負(fù)。左下角的ACC是加速度,GYRO是陀螺儀,MAG是指南針。
按下圖所示的方向旋轉(zhuǎn)四軸,加速度計相應(yīng)的值會增大,陀螺儀的值為正數(shù)。(后來再看這圖總感覺不對,Yaw,Roll,Pitch總得符合左手或右手定律吧,但是當(dāng)時測出來就是這樣。)
為了防止看不懂圖,再用語言說一遍:
使四軸的前方與你的前方一致;
當(dāng)四軸水平放置,ACC的Z值最大;
當(dāng)四軸向右翻滾90度,右側(cè)朝下,ACC的ROLL最大;
當(dāng)四軸向前翻滾90度,頭朝下,ACC的PITCH最大;
當(dāng)四軸水平順時針旋轉(zhuǎn),GYRO的YAW為正數(shù);
當(dāng)四軸向右翻滾,GYRO的ROLL為正數(shù);
當(dāng)四軸向前翻滾,GYRO的PITCH為正數(shù);
指南針我沒用,所以不調(diào)。
每調(diào)整一次,重新上傳一次程序,再觀察是否正確。全部調(diào)完后,看MultiWiiConf中右下的四軸仿真圖,如果仿真圖的轉(zhuǎn)動方向跟實際方向一致并反應(yīng)迅速,則全部正確;如果轉(zhuǎn)動方向跟實際方向不同,則GYRO的調(diào)整存在錯誤;如果轉(zhuǎn)動方向跟實際方向一致,但是四軸靜止時,仿真圖仍在緩慢轉(zhuǎn)動,則ACC調(diào)整錯誤。
試飛
終于,將要迎來起飛的時刻!
但是,把四軸解鎖,電機開始轉(zhuǎn),提高油門后四軸就失控了,電機一直狂轉(zhuǎn),跟手機的連接也斷開了,還好加了開關(guān)和失控保護,電機轉(zhuǎn)了一會就自動停了。
也許是電機干擾了藍牙通信,不得而知。
而且感覺四軸有點太重了,用稱不太精確的測了測重量,總重量70克。不知道這個重量是否能飛,比淘寶買的四軸要重很多。
總結(jié):
槳的顏色是用來區(qū)分四軸的前后的,所以要紅色各一正槳反槳,黑色各一正槳反槳。
一定要注意電源濾波,只加一個鉭電容并沒什么卵用,要學(xué)學(xué)電源濾波的知識。
要注意電池的重量,加大電池容量不一定會提升續(xù)航,畢竟電池重量也增加了,而且有可能飛不起來。
arduino最好選用leonardo的mini版型,leonardo自帶USB接口,所以有兩個串口,藍牙和上傳程序互不干擾。
arduino要選用3.3v的版型。
用洞洞板做四軸不太靠譜,太難焊接,而且焊錫走線增加了太多重量。洞洞板與機架固定用的螺絲也占了很大重量,不如直接做成機架與飛控一體的。
-
電機
+關(guān)注
關(guān)注
142文章
9087瀏覽量
146383 -
飛行器
+關(guān)注
關(guān)注
13文章
726瀏覽量
45643 -
四軸
+關(guān)注
關(guān)注
0文章
39瀏覽量
13516
原文標(biāo)題:從入門到放棄,我的自制小四軸之路......
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論