一台可以操作的簡單四軸飛行器大致架構如下,由兩對正反槳、四顆無刷馬達、四個電子調速器、一顆電池、一個飛行控制以及一個接收機與遙控器所組成,這裡不探討額外的設備像是 GPS、FPV 等裝置。

四軸飛行器機身(Frame)

用來放置控制器、馬達、電池…等等的平台。通常我們會用對角馬達的軸距(M2M)來敘述機身的大小,如果對角馬達的兩個轉軸相距 250mm 的距離,則稱為 250 機身。

機身的大小,會影響螺旋槳的長度與馬達的選擇,進而影響到負載的大小,而機身的剛性(Stiffness),也會影響到馬達所產生的震動大小以及運動效能方面的影響。

Thingiverse 上的一個 250 機身的 3D 模型:http://www.thingiverse.com/thing:34552


圖片來源:http://www.thingiverse.com/make:94944

螺旋槳(Propeller)

安裝在馬達上,並透過馬達旋轉來產生推力的裝置。四軸中有兩對螺旋槳,一對螺旋槳順時針旋轉,另一對螺旋槳則是逆時針旋轉,並不是所有螺旋槳都一樣的,所以在購買的時候都會選擇正反槳。通常會用像 1045 或 10x4.5 的方式來分別不同規格的螺旋槳,其意思為直徑10 inch,螺距 4.5 inch。

在相同轉速下,螺旋槳越長,攻角越大,所提供的升力就越大,但所受到的阻力亦會越大,所以轉動大的槳需要扭力大的馬達。


圖片來源:http://www.rctigermotor.com/html/2013/prop_0904/26.html

無刷馬達(Brushless DC, BLDC)

轉動螺旋槳的裝置,與有刷馬達相比,無刷馬達具有扭力大、低耗損的優點,但由於其結構設計,必須加上一些電路與較為複雜的方法控制(換相),線圈的匝數,會影響到馬達的扭力與轉速,匝數越多扭力越大、轉速越低;匝數越少,扭力越小、轉速越快。

通常會使用 KV(No-load rpm per volt) 來表示一顆無刷馬達的匝數,KV 值表示電壓每升高 1V,空載轉速增加的數值,KV 越小匝數越多,KV 越大匝數越少,所以大的螺旋槳通常都會搭配低 KV 的馬達,小的螺旋槳會搭配高 KV 的馬達。


圖片來源:http://www.rctigermotor.com/html/2013/prop_0904/26.html

電子調速器(Electronic Speed Controller)

用來驅動無刷馬達的裝置,藉由此裝置可以簡化無刷馬達的控制,通常市售的電調只需輸入 PWM,並透過調整 PWM 的占空比即可控制無刷馬達轉速,但也有像是 I2C、CAN Bus 等方式控制的電子調速器。


圖片來源:http://autoquad.org/esc32/

鋰聚電池(Lithium polymer battery, Li-Po Battery)

提供控制板與馬達電源的來源,鋰聚合物本身的化學材料特性在正負極的跨壓大約 3.3~4.2V左右,使的單節(one cell)鋰聚電池的電壓平均大約為 3.7V 左右,若串聯兩節鋰電池,則有 7.4V 的電壓,我們通常會用 11.1V 3S 2200mAh 25C/35C, 來敘述一個鋰聚電池的規格,其表示輸出 11.1 V 電壓、最大放電 25C(2.2 * 25 = 55A)、瞬間放電 35C(2.2 * 35 = 77A)。

其實鋰聚電池雖然是一個很棒的電源來源,但從上速規格的電池,瞬間輸出可以達到 77 安培的電流,當電池充飽後瞬間輸出功率快達到 1000W,在安全性上面不容小覷,使用上需要小心,下面有一個影片在實驗不同外力下鋰聚電池的冒煙、膨脹、燃燒等情況。

Youtube - Lipo battery combustion test鋰聚合物(手機)電池燃燒實驗 by RC Mania
https://www.youtube.com/watch?v=eZxDC-whz14


圖片來源:https://traxxas.com/products/parts/batteries/powercellbatteries/lipo

飛行控制器(Flight Controller)

控制飛行器平衡、運動的裝置,這裡簡稱飛控板,飛控板是一個集成微控制器、感測器... 等的裝置,以人來比喻,就像是大腦和中樞神經,絕大部分的訊息都在這裡做處理,這也是四軸飛行器的核心控制部分。


圖片來源:https://pixhawk.org/modules/pixhawk

遙控器(Remote Controller)

遙控飛行器、給予飛行器控制指令的裝置,需要與接收機做搭配傳輸訊號。


圖片來源:http://www.futabarc.com/systems/futk9410-14sg/

上一篇 → 從零開始做四軸 (三) - 運動原理
下一篇 → 從零開始做四軸 (五) - 感測器原理

四軸飛行器具有以下優點:

1、體積小、重量輕

2、機構簡單

四軸飛行器與直升機最大的不同處在於,直升機透過主旋翼的傾斜與葉片攻角來實現不同的運動,並且靠尾旋翼來抵銷主旋翼產生的反作用力,這種設計使得直升機的機構較為複雜,同時當主旋翼無法工作時即無法飛行,產生升力,而四軸飛行器則透過四個旋翼來互相抵銷反作用力,並且透過不同的升力,來實現不同的運動,詳細會面會在說明,下面有一個影片,可以告訴你四軸飛行器的結構可以多簡單。

Youtube - diy drone it yourself v1 0
https://www.youtube.com/watch?v=TQhHO7UvazA

影片中可以看出來,飛行器只需要四個螺旋槳,放置間距與位置不要太誇張,基本上都可以平衡與飛行,一個四邊對稱的機構(正方形)與非對稱的機構(這裡指的是非正方形,像是梯形、長方形、平行四邊形)差別僅在於飛行器的模型複雜程度,將對稱機構的模型用在非對稱的機構上只是容易在控制上產生誤差,說白了就是不容易達到你想要的結果,非對稱的程度越大、就越效果就越差,所以大部分的四軸為了在控制上簡單,通常都會使用對稱的機構來簡化控制上的問題。

3、機動性高

下面有一個影片,可以告訴你四軸飛行器機動性如何,最高時速應該有超過 100 km/hr。

Youtube - minicp120 x2208 2000kv 6x4.5 hqprop kiss esc 18a nanowii 4s1800 40c
https://www.youtube.com/watch?v=8p5uDf9i_Yc

RC Groups - quadmovr's blog
http://www.rcgroups.com/forums/member.php?u=534985

4、演算法核心

並不是說其他都不重要,機構、螺旋槳等都會影響飛行器的效能,只是合理設計的簡單機構、螺旋槳等即可提供一個穩定飛行的平台,所以飛控板上的核心演算法就成主宰飛行器運動與平衡的主要部分,而任何的應用實現也在於此部分,這個人認為也是在學術上的一個研究優勢。

四軸飛行器飛行的原理:

飛行器的螺旋槳配置示意圖如下圖的左上角所示(本文默認使用 "x" 形配置,而非 "+" 形),兩兩對角的螺旋槳轉向剛好相反,透過這種配置,來互相抵銷旋轉上的力矩,在已經平衡的情況下,同時增加或減少四個旋翼的推力的話,可以做出上升與下降的動作,同時增加或減少相鄰的兩個旋翼的推力,可以做出前後左右運動的動作,若同時增加或減少對角旋翼的推力時,則可以做出順逆時針旋轉的動作,而任何的飛行運動都可以由上升、下降、前後左右、順逆時針旋轉的運動所組成。

上一篇 → 從零開始做四軸 (二) - 相關資訊
下一篇 → 從零開始做四軸 (四) - 飛行器組成

在說原理之前,要先了解知道四個螺旋槳的飛行器的中文、英文名稱,有助於找資料或文獻,中文說法大致有這些,四旋翼、四旋翼飛行器、四軸飛行器甚至是四軸,英文的話則是 Quadcopter、Quadrotor、Quadrocopter、Quadrotor Helicopter ...等等,可以 Vertical Take-Off and Landing(VTOL)的旋翼飛行器,其實就只是在強調有四個螺旋槳的直升機而已。

Wikipedia - Quadcopter上看到,最初的四軸飛行器是在 1907 由 Louis Breguet 設計的(天知道是真是假,有興趣自己去考證吧),假設訊息無誤的話,到現在也有百年的歷史了。

近十年的四軸飛行器發展迅速成長,個人認為很大部分都歸功於微機電(MEMS)與積體電路製程技術的提升,從原本高成本、大體積的感測器變成幾微米、低成本的 IC,使得飛行器體積縮小、造價降低,才得以廣泛研究。(此部分為個人想法,若有誤可以提出來)

第一次看到四軸相關的研究是 2012 年 Vijay Kumar 教授在 TED 上的演說,也是我開始做四軸的時候,Vijay Kumar 教授任教於美國的賓州大學,他的實驗室也做了很多有趣的東西。

之後也有另一位教授在 TED 上演講四軸飛行器,任職於瑞士蘇黎世聯邦理工的 Raffaello D'Andrea 教授,不過知名度似乎是這位教授較高,可能觀眾靠的比較近印象比較深刻吧... 哈哈。

也有與太陽馬戲團合作的影片,感覺這種合作方式頗不錯的,可以增加資金、增加研究內容、同時也增加知名度。

SPARKED: A Live Interaction Between Humans and Quadcopters
https://www.youtube.com/watch?v=6C8OJsHfmpI

幕後花絮 SPARKED: Behind the Technology
https://www.youtube.com/watch?v=7YqUocVcyrE

Raffaello D'Andrea 教授也做了很多有趣的專案,其中印象最深刻的是叫 Cubli 的專案,透過角動量平衡,這種技術在很多機器人平衡上都會用到。
http://raffaello.name/projects/cubli/

還有很多影片沒有放上來,因為真的是太多了,只放舊一點的影片,有興趣可以自己找找,最後,看了這麼多,其實只是想說明,四軸不是只能拿來空拍而已...,兩間頂級大學的研究室研究的東西真的很好,值得學習,想研究相關方向的人,可以多看兩間實驗室所發表的學術論文,畢竟已經累積了幾十年的成果。

"從零開始做四軸"除了是記錄自己的過程,方便自己再查閱,同時也提供分享給想研究四軸的人、想自己做一台而不是裝一台四軸的 Maker,這裡的 Maker 指的是了解電路、焊接、寫微控制器等多領域的人,畢竟一台四軸飛行器是跨了許多領域的結晶,像是控制、電子電路、數位邏輯、程式語言、機構、數學、物理、運動學 ... 等等,已經數不勝數了,還有最重要的"藝術"!沒錯,就是藝術!



以下有幾個 Github 上不錯的開源專案:

使用空心杯馬達(微型四軸)
https://github.com/bitcraze
https://github.com/HexAirbot

使用無刷馬達
https://github.com/PX4
https://github.com/pixhawk
https://github.com/multiwii
https://github.com/TauLabs
https://github.com/paparazzi
https://github.com/openpilot
https://github.com/diydrones
https://github.com/cleanflight
https://github.com/UrsusPilot

值得參考的資訊:
Build A Quadcopter From Scratch – Hardware Overview
http://blog.oscarliang.net/build-a-quadcopter-beginners-tutorial-1/

上一篇 → 從零開始做四軸 (一) - 構想
下一篇 → 從零開始做四軸 (三) - 運動原理

最近單晶片需要用到 IAP 的功能(可以參考基於 STM32 的 IAP 程式更新),不過之前電腦端是透過自己寫 Python 實現 .bin 檔案的傳輸,有時候重灌電腦後 Python 就被刪掉了,之後後還要再找符合相對應版本的 pySerial,蠻麻煩的,所以就想說直接用 C 語言來取代之前寫的 Python 功能。

STEP 1

先下載 RS232 for Windows Librery → http://www.teuniz.net/RS-232/
將 RS-232.tar.gz 解壓縮,只需要 rs232.c 和 rs232.h 即可。


STEP 2

建立一個 C 語言的專案,來撰寫程式,個人是使用 Code::Blocks
http://www.codeblocks.org/

選擇 Empty project 即可

新增一個 .c 檔,存在專案目錄下,
我是命名成 main.c,然後加入 main.c, rs232.c rs232.h 到專案。

在 main 裡面加入 #include "rs232.h" 後,就可以使用 rs232 library 的功能了

STEP 3

下面程式是 main.c 裡面寫的內容,做簡單的字串接收並顯示出來, 另一端用自己設計的開發板 RedBeanSprout 實現,一直發送 5 個不同的字串到電腦。

#include "rs232.h"
#define RECV_BUF_SIZE 5

int main()
{
    int state = 0;

    int com_port = 6;       /* COM7 */
    int baudrate = 115200;  /* 115200 */
    char mode[]  = {'8', 'N', '1', 0};

    int i = 0, n = 0;
    unsigned long count = 2000000;

    unsigned char recv_buf[RECV_BUF_SIZE + 1] = {0};

    /* Open COM Port */
    state = RS232_OpenComport(com_port, baudrate, mode);
    if(!state)
        printf("Open COM Port Success\n\n");

    /* Recv Data */
    do {
        n = RS232_PollComport(com_port, recv_buf, RECV_BUF_SIZE);
        if(n == RECV_BUF_SIZE) {
            printf("count = %7i, n = %i, recv data = ", count, n);
            recv_buf[n] = '\0';
            printf("%s", (char *)recv_buf);
        }
        else if(n > 0) {
            printf("count = %7i, n = %i, recv data = ", count, n);
            printf("*****\n");
        }
       Sleep(1);
    } while(--count);

    /* Close COM Port */
    RS232_CloseComport(com_port);
    printf("\nClose COM Port\n");

    return(0);
}



發射部分使用 RS232_SendByte 或 RS232_SendBuf 就可以了,
這邊沒有放上來測試,主要是因為官網都已經解釋得很詳細了。
 
使用 C 語言來做 RS232 的好處主要在於可以有更多的變化,像是傳檔案、模擬部分 UART 裝置等,不像終端機只能做字串或字元的傳輸。
 
最後完整的專案可以在 github 上下載
https://github.com/Hom-Wang/C-Language/tree/master/serial

自行車照明系統照明控制部分簡介

照明部分由 7 片 PCB 組成一個圓形,剛好與車輪的內圈相同大小,每一片 PCB 上面都有一個微控制器與連接 2*8 個 LED 燈,微控制器採用 TSSOP20 的 STM32F031F4,ARM CortexM0,最高工作頻率 48MHz,詳細規格可以參考→ST官方,分配 1 個 LED 做為指示燈(也可以用來擴充功能), 8 個 PWM 輸出分別接到 LED 的驅動電路,剩下 1 個 UART 用來接收控制指令。

7 片 PCB 之間,透過杜邦公座母座連接 UART,整個圓(7 片 PCB)形成一個類似先進先出的暫存器(FIFO),指令從模組的 RX 輸入,經過每一個微控制器,最後從 TX 出來,每一片 PCB 都有自己獨立的編號,也就是說可以透過這種方式來獨立控制圓上的 8*7 LED 中每一顆 LED 燈的亮度、開關。

設計的指令格式如下表: * SET_DEVICE_x_OUT 指令是用來設定 LED 的輸出,CHANNEL 是設定要輸出的 LED 通道 1 ~ 8,D[7:0] 是設定 LED 亮度 0 ~ 255。 * CMD_RUN_MODE 是用來進入 RUN_MODE,在 RUN_MODE 下才能控制 LED。 * CMD_SET_MODE 是用來進入 SET_MODE,在 SET_MODE 下才可以設定一些預設參數。 * CMD_IAP_MODE 是用來進入 IAP_MODE,在 IAP_MODE 下可以直接升級韌體,不須再經過燒錄器來燒錄,詳細方法請參考→基於 STM32 的 IAP 程式更新。 * CMD_SET_RESTORE 是用來還原預設的參數。 * CMD_SET_DEVICEID 是用來設定裝置編號,透過這個指令可以讓每次燒錄不需更改編號,減少開發時間。 * CMD_SET_BAUDRATE 用來設定鮑率的指令。 最後預留了兩個保留的指令。
目前製作這個 WheelLED - Light 的 PCB 版本,將 LED 與 PCB 分開,兩著之間透過杜邦接頭連接,方便更換車燈的顏色與維修,基本上除了 IAP 與鮑率的設定還沒實現外,其他部分都已經實現,整個 WheelLED - Light 只需要連接電源與 UART 就可以使用,模組化的程度也算是頗高了。

但最近實際的實驗發現,目前設計的 LED 驅動部分,因為採用 PNP 電晶體,加上電源端(4.2V)大於控制端(3.3V)電壓,導致再關閉 BJT 時,因壓差的關係無法完全關閉,換句話說就是沒辦法全暗...所以預計下一版本的PCB將會採用 NPN BJT 來解決此問題。

WheelLED-Light Github → https://github.com/KitSprout/WheelLED-Light

2015.09.06 更新
新版的機構測試版本出爐了,由翁偉吾大大設計&製作,初步測試找到幾個可以改進的地方,但不影響實際的應用,新的機構除了配合新版本的 PCB 外,也讓 PCB 可以先固定在其中一片機構上再夾起來裝在車輪上,降低了組裝的複雜度。





自行車照明系統核心控制部分簡介

核心部分由三片不同功能的 PCB 組成,分別為 POWER、SENSOR、CONTROL,每一片 PCB 占 120 度,三片組成一個 360 度的圓形,此設計的好處在於可以任意更換不同功能,且在硬體升級上也可以依需求、區塊更新,不需要全部更新,對於日後改版、升級則可以降低成本。

目前規劃的放置與元件如下圖所示,Microsoft 的 visio 蠻好用的,雖然 PowerPoint 也很方便用來做這些小圖示,不過 visio 在形狀及製作上多了較多的功能與選擇,像交連集、合併、剪裁等,對圖有興趣可以從 Google 雲端硬碟下載 visio 檔案。

POWER 部分主要負責供電給其他兩片 PCB 與充電。

SENSOR 部分主要負責感測自行車運動資訊,上面放有 MPU9250(加速度計、陀螺儀、磁力計)與預留的擴充感測器放置空間,像是可以擴充旋轉編碼器、光強度感測器...等。

CONTROL 部分主要負責讀取感測器、控制 WheelLED 與藍牙連線,SMT32 透過 MPU9250 取得輪胎加速度、角速度、磁場等資訊,經過演算法處理,得到轉速、角度、運動方向需要的控制資訊,並透過 Command port 向 WheelLED 傳送 LED 控制指令,來實現定像照明的功能,另外透過 BLE 模組來建立使用者與兩輪控制器之間的通訊。

目前實驗測試階段,僅先將感測器與穩壓部分做在一起,控制器獨立出來做實驗,在已知感測器的旋轉半徑的情況下先將基本照明功能先實現,之後在設計仔細設計細部的電路。



機構部分由翁偉吾大大製作,仍然以 3D Printer 來負責生產,為了就是容易讓想製做的人,可以更容易的模仿複製或是改造它。

機構部分分成兩大部分,電池盒與固定 PCB 部分,固定 PCB 部分由兩塊機構組成,中心部分設計成六邊形是為了使擴充的裝置或機構接觸面積增加,讓兩者間可以更好的固定組合,兩大部分透過兩根內六角螺絲來連接固定,內部加入類似橡膠的東西,增加軸心與機構的摩擦力,同時也當做與軸心間的固定緩衝,目前看起來大致上都沒有問題,有效讓 PCB 中心可以與輪胎的旋轉中心重合,至於騎車時的震動是否會引發其他問題,有待實際測試才會知道。







SmartIMU 更新已經在進行中了(原始的版本→SmartIMU),初步先更改兩部分,STM32F401C 更換成 STM32F411,從原本的 84MHz 工作頻率升級到 100 MHz,同時也增加了 RAM 的大小(96KB→128KB),另外則是更換氣壓計,本來打算使用 LPS25HB,不過目前淘寶上似乎買不太到,所以就暫時先用 LPS25H 來代替,氣壓計除了在體積上大大的縮小外,LPS25HB 精度也達到 1 pa RMS,大氣壓力與高度之關係為每上升9公尺,大氣壓降低100Pa,1 pa 相當於 9 cm 的精度,頗期待之後的實驗結果。
 
今天下午焊了兩片版子,把感測器都吹上去之後,覺得特別髒,就拿去清洗了,洗到一半才想到器壓計上面有一個孔...應該是用來測量氣壓用的,希望器壓計不會有問題才好...,錯愕了一會後,寫了一個GPIO的測試程式,測試了一下燒錄功能,兩個都可以正常燒錄,RGB LED 也都正常頻率閃爍,MCU 部分應該是沒有問題了,之後等有空時再來測試 MPU9250 與 LPS25H 是否有問題。
 
等都沒問題就來開始設計最新版的 SmartIMU 了,挑戰超小高效能的 IMU 開發板!
 
---補充
這次的 MCU 焊接沒有用吹的,而是直接用刀頭焊上去,細刀頭果然厲害,以後旁邊長腳的QFN應該都不是問題了,對好後成功率百分百。




一個好的作品背後都有一個好的工具! 最近換了 HAKKO 的 FX-951 烙鐵,也從 GOOT 跳槽到 HAKKO 了。

這兩天拿到 PCB 正好測試一下焊接的效果,與之前用了幾年的 TQ-95 比較,在手把的地方不會發熱,而且更細,握起來很輕鬆,設計上透過卡榫的方式更換烙鐵頭,烙鐵頭的種類也頗多,另外買了細刀頭與細尖頭以應付不同的情況,銲槍座部分裝有微動開關,可以在放入銲槍時自動進入休眠降溫,這種設計應該是為了延長烙鐵頭的壽命吧,不過每次拿起銲槍,自動加熱到預定溫度時都會有嗶聲,雖然方便但有點吵...整體用起來很滿意也很方便。

HAKKO 官方的產品說明:
https://www.hakko.com/english/products/hakko_fx951.html











  新設計的數位電表 - MicroMultimeter,這是一個多功能的數位電表,著重於簡單、攜帶以及擴充性,以應付日常電路、微控制器開發除錯及測量為主要目的。MicroMultimeter 同時也是一個開源硬體、軟體的一個項目,相關的資源都可以從 GitHub 上取得,基本功能有電壓測量、二極體測量、短路斷路測量、PWM 輸入輸出、波形顯示,搭配其包含 UART、SPI、I2C、PWM 的擴充埠,可及增加更多樣化的應用及延伸。


Github Link - https://github.com/KitSprout/MicroMultimeter




  MicroMultimeter 主要的微控制器採用 ST 的 STM32F103CB,48 Pin 72MHz,透過自己設計的 OLED_9.6-inch 顯示,其解析度 96*64,上面有放置 2 個通道的定電流電路用來測量待側物,蜂鳴器用來提是使用者,USB 用來傳輸資料至 PC 端,另外拉出 8 個含有 SPI, UART, I2C 功能的 I/O 至擴充埠。硬體設計軟體使用 Atium Designer,主體大小約 43.05 * 25.4 mm。


主體電路圖


目前實現的擴充
ExpIO ( 引出所有 I/O )
ExpProbeA ( 三用電表探棒 4mm )
ExpProbeB ( 示波器探棒 BNC )
ExpDigiPower ( 數位電源 LM1084 + AD5292 )