您當前的位置:首頁 > 攝影

樹莓派多旋翼無人機制作:航模電池與電機驅動

作者:由 李德強 發表于 攝影時間:2018-05-01

一、電源與降壓模組

細心的你可能會發現樹莓派、

光耦隔離器

、電調、電機都有了,可還是沒有電源。沒電當然不行了,我們的

四軸動力

靠的就是電池。對於鋰電池的選擇也是多種多樣的,但是我們將在稍後說明。現在我們要說的是樹莓派的供電。我們還要使用一個DCDC降壓模組來對鋰電池的電源穩壓:

樹莓派多旋翼無人機制作:航模電池與電機驅動

由航模電池的電源引出5條線,其中4條為4個電調供電,另外一條接DCDC降壓模組的IN端,其OUT端為樹莓派供電。接入時暫時不要接樹莓派,先用萬用表測量OUT端電壓, 用螺絲刀旋轉金屬旋鈕逆時針為減小,順時針為增大(剛開始旋轉時電壓可能不變,要逆時針旋轉七到八圈,電壓才會發生變化)並調整到5V,接入時要注意正負極不能接反。最後再接入樹莓派的5v和GND。 接下來,看看我們的四軸飛機器供電電池,通常我們使用3節鋰電池或4節鋰電池為四軸供電,也有使用更多節的比如6節、8節或更多。電源中有幾節鋰電池,我們就稱這樣的電源為幾S。例如3S表示有3節鋰電池,4S有4節鋰電池等等。每一節鋰電池的電壓為3。7v,3S的電壓就是11。1v;4S的電壓就是14。8;6S的電壓就是22。2v。這樣的鋰電池電源,我們也通常稱作“

航模電池

”。

另外,對於航模電池還有兩個重要的引數:電量和放電倍率。電量就是我們所常用的3000mah、4000mah、5300mah或10000mah等等。它表示了電源能夠儲存的電能的多少。而放電倍率通常是有15C、20C、25C或30C等等。它的意思是說放電的速率。例如:我們手機有一塊10000mah 20C的電池。

1、按每小時10000毫安的放電速度持續放電1個小時;

2、以5倍速度放電,即以每小時50000毫安的放電速度持續放電12分鐘(60 / 5);

3、以10倍速度放電,即以每小時100000毫安的放電速度持續放電6分鐘(60 / 10);

4、以20倍速度放電,即以每小時200000毫安的放電速度持續放電3分鐘(60 / 20)。

至於在實際飛行過程中它按多少的倍率放電,主要取決於電調和電機的功率。關於這些功率計算和放電時間的計算不是我們的討論範疇(如果你有興趣可以自己查閱相關資料)。我們推薦使用2200mah 3S航模電池:

樹莓派多旋翼無人機制作:航模電池與電機驅動

值得一提的是,不是電池容量越大就越適合四軸,電池的容量大,重量也就大,四軸飛行時的承重也就大,需要的負載也就大。如果你的電池非常重,那四軸能不能飛起來都是個問題,所以還是選擇一款適合你的航模電池。

二、無刷電機驅動

接下來我們就來一起編寫無刷電機的驅動程式,在前面章節中我們已經學習瞭如何透過樹莓派產生

PWM訊號

,而在本節中我們就來實際操作一下,將電機接入電調,將電調的訊號線接入樹莓派的GPIO引腳上,透過航模電池為電調和樹莓派(加入DCDC降壓模組輸出5V給樹莓派)供電,在這裡我們使用wiringPi的1號引腳,接線圖如下:

樹莓派多旋翼無人機制作:航模電池與電機驅動

在接線過程中有一處需要注意,

電調

中的訊號線有3根,顏色為紅、黑、白。紅色為訊號電源,黒色為地,白色為PWM訊號線,我們只需要接電調的訊號線(白色)至樹莓派的WiringPi 1號引腳,並將地線(黑色)接入到樹莓派的GND引腳即可,電源(紅色)不需要接入樹莓派。如果你採用了光耦隔離器的話同樣只需要接WiringPi 1和GND即可。

關於無刷電調控制電機時,有兩個地方需要關注:

1。電調最大行程校準。電調在出廠後如果沒有做最大行程校準,我們就需要對其做校準。這樣可以保證我們的四軸中4個電機速基本一致,從最低速度到最大速度的基本相同。做電調的最大行程校準的步驟如下:

按上圖接線,注意不要為電調上電(暫時不為電調接入電源)。

使用樹莓派生成最大PWM佔空比值,即產生100%佔空比訊號,此時

高電平

持續2ms,低電平0ms,注意要有高低電平變化,如果電平一直是高則此PWM訊號無效。

為電調上電,此時電機會發出兩聲短促的“嘀”聲,在3秒之內將PWM訊號由100%變為0%,隨後電機會發出一聲長鳴“嘀”。此時電調最大行程校準完成。

2。電調訊號初始化。電調訊號初始化相對來說比較簡單。為了保證使用安全,電調在上電後是處於保護狀態的,此時如果直接為電調發送100%的訊號電機是不會轉動的。在使用電調之前,首先要對其傳送超過3秒的0%的PWM訊號,電調才會認為使用者初始化了電調,隨後才可以根據PWM訊號值來調整電機的轉速。電調初始化的過程如下:

按上圖接線,併為電調上電,此時電調先會產生一次“do ra mi”,隨後每兩秒會發出一聲短促的“嘀”聲,表示未收到任何PWM訊號。

使用樹莓派生成最小的PWM佔空比值,即產生0%佔空比訊號,持續3秒以上,此時電調會產生3短1長的“嘀”聲(3短表示是3S鋰電池),此時電調初始化完成。

最後我們來編寫一個可以對GPIO引腳產生PWM訊號的程式:

#include

#include

#include

#include

#include

int port = 1;

int run = 1;

int speed = 0;

void motor_run

()

{

while (run)

{

digitalWrite(port, HIGH);

usleep(1000 + speed);

digitalWrite(port, LOW);

usleep(1000 - speed);

}

}

void set_speed()

{

while (run)

{

printf(“SPEED = %4d, Enter new speed:\n”, speed);

int tmp = 0;

scanf(“%d”, &tmp);

if (tmp >= 0 && tmp <= 1000)

{

speed = tmp;

continue;

}

speed = 0;

usleep(10 * 1000);

run = 0;

}

}

int main(int argc, char *argv[])

{

wiringPiSetup();

pinMode(port, OUTPUT);

pthread_t p_run;

pthread_t p_set;

pthread_create(&p_run, (const pthread_attr_t*) NULL, (void* (*)(void*)) &motor_run, NULL);

pthread_create(&p_set, (const pthread_attr_t*) NULL, (void* (*)(void*)) &set_speed, NULL);

pthread_join(p_set

, NULL);

pthread_join(p_run, NULL);

return 0;

}

注意,這裡我們產生的PMW訊號是一個0~1000的數值,其實就是千分比0‰~1000‰。這樣我們就可以用最簡單的0~1000來表示一個比較精確的PWM訊號,如果使用

百分比

來表示的話我們就需要使用浮點數來表示0%、0。10%、12。8%、93。5%這樣的數值,而使用千分比則只需要用整型數值0、10、128、935即可表示。

程式中我們建立了兩個執行緒,第一個執行緒motor_run用於產生PWM訊號,第二個執行緒set_speed用於接收使用者輸入的值從而修改PWM的值。

SPEED = 0, Enter new speed: 100

SPEED = 100, Enter

new speed

: 200

SPEED = 200, Enter new speed: 400

SPEED = 400, Enter new speed: 1000

SPEED = 1000, Enter new speed: 0

SPEED = 0, Enter new speed:

到這裡,我們的電機驅動部分就完成了,程式非常簡單,在我們使用四軸飛控程式時只需要產生4個執行緒分別對4個GPIO引腳分別產生4路PWM。

注意,樹莓派供電模組由原來的7805

穩壓器

修改為DC-DC電源模組,使用DC-DC電源模組效果更好,發熱更小,支援的電壓範圍更大。

使用DC-DC時,輸入端接入充滿電的航模電池,輸出端先不要接線,而需要一邊調整DC-DC的旋鈕,一邊用萬用表測量OUT端電壓,直到OUT端電壓為5V時停止。

歡迎關注公眾號:編譯外星人

標簽: 電調  speed  樹莓  PWM  放電