SimpleFOC無刷電機(jī)平衡小車-創(chuàng)新互聯(lián)

在這里插入圖片描述

10余年的巴里坤哈薩克網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整巴里坤哈薩克建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“巴里坤哈薩克網(wǎng)站設(shè)計(jì)”,“巴里坤哈薩克網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。前言

本科畢業(yè)于自動(dòng)化,期間學(xué)習(xí)了各種電機(jī)運(yùn)動(dòng)控制原理,自動(dòng)控制原理,但是只會(huì)考試而未究其理。最近接觸到simplefoc這個(gè)基于arduino的開源無刷電機(jī)驅(qū)動(dòng)庫,想正好借此機(jī)會(huì)將本科學(xué)到的內(nèi)容用于實(shí)際,于是就有了這個(gè)小項(xiàng)目,基于無刷電機(jī)FOC的平衡小車。
無刷電機(jī)相比于普通小車用的有刷電機(jī),相同體積下扭矩更大,無刷電機(jī)驅(qū)動(dòng)小車時(shí)可以直驅(qū)而不像有刷電機(jī)需要帶減速器才能滿足扭矩要求,且響應(yīng)速度更快。采用無刷電機(jī)可以把小車做的更緊湊美觀。
無刷電機(jī)的驅(qū)動(dòng)電路和算法要更加復(fù)雜,無刷電機(jī)在低速工作時(shí),算法層面上采用磁場(chǎng)定向控制算法FOC(Field-oriented control),可以精確控制電機(jī)的位置,速度乃至電流也就是轉(zhuǎn)矩,由此可以做出很多好玩的東西?;趂oc的無刷電機(jī)在機(jī)器人關(guān)節(jié),相機(jī)云臺(tái)電機(jī)控制等領(lǐng)域得到廣泛應(yīng)用。

主要功能
  • 板載雙路無刷電機(jī)驅(qū)動(dòng)及電流環(huán)芯片,每路大電流2.5A,可驅(qū)動(dòng)兩個(gè)云臺(tái)無刷電機(jī),可控制到電流
  • 小車可自平衡,可通過手機(jī)app藍(lán)牙連接控制進(jìn)退,轉(zhuǎn)向
  • 搭載雙排RGB,每排共24個(gè)燈,可以擴(kuò)展成更多,實(shí)現(xiàn)多種燈光特效且不影響車輛控制
  • 圖傳接口,通過外接ESP-CAM模塊實(shí)現(xiàn)WIFI圖傳,可在手機(jī)上查看(20220421 插口畫反用不了。。)
開源資料鏈接

博客文檔鏈接
https://blog.csdn.net/weixin_42487906/article/details/124898392

視頻鏈接
https://www.bilibili.com/video/BV1Sv4y137FG/

github倉庫,內(nèi)有代碼,3D打印文件,pcb制板文件:
https://github.com/FranHawk/simplefoc_balance_car

立創(chuàng)eda工程 可在線查看原理圖和pcb:
總共有三個(gè)板子
主板(包括電機(jī)控制和驅(qū)動(dòng)部分):https://oshwhub.com/FranHawk/balance_car_esp32_simplefoc
編碼器板:https://oshwhub.com/FranHawk/as5600-16mm
RGB燈帶板:https://oshwhub.com/FranHawk/rgb_strip

材料購買鏈接

所有的電子元件材料都可以對(duì)照BOM表或者工程里的原理圖買,在淘寶或者立創(chuàng)上買均可,下面列出一些關(guān)鍵材料的鏈接

AS5600 L6234PD INA240A1:【淘寶】https://m.tb.cn/h.ft947n2?tk=gn3u2P8IocI「L6234PD L6234D L6234 HSOP 原裝汽車IC 進(jìn)口芯片熱賣 質(zhì)量超好」點(diǎn)擊鏈接直接打開
電機(jī)部分的芯片 這個(gè)店家買到的貨還算便宜
其他的電子元器件都可以在優(yōu)信電子之類的找到,財(cái)力充足的可以直接立創(chuàng),省事。
2210云臺(tái)電機(jī)(至少兩個(gè))【淘寶】https://m.tb.cn/h.fslSDE8?tk=G8Pk2P8HluO「清倉HJ2210-75T無刷云臺(tái)電機(jī)狗3云臺(tái)專用 航拍電機(jī) 云臺(tái)空心軸馬」點(diǎn)擊鏈接直接打開
輪胎胎皮(至少兩個(gè)) 【淘寶】https://m.tb.cn/h.ft9UFV4?tk=L8Ez2P8u1Ma「AXIAL 1比24車SCX24 90081小米吉姆尼通用橡膠攀爬輪胎皮直徑52mm」點(diǎn)擊鏈接直接打開
電機(jī)支架(至少兩個(gè)) 【淘寶】https://m.tb.cn/h.fsl86Kp?tk=i9Oo2P8FvxY「390電機(jī)支架 385固定座 365安裝底座 380馬達(dá)固定架 送螺絲螺母 點(diǎn)擊鏈接直接打開
黑色亞克力板(至少兩個(gè)) 【淘寶】https://m.tb.cn/h.fH9ybkd?tk=2OCV2P8vqAf「平衡小車DIY專用亞克力支架板擴(kuò)展板」點(diǎn)擊鏈接直接打開
電池 900mah【淘寶】https://m.tb.cn/h.fGk2f0O?tk=33dF2PjbvTN「航模電池5200mAh 11.1V足容高C7.4V車模船模 RC攀爬車質(zhì)量保證」點(diǎn)擊鏈接直接打開

其他機(jī)械小零件

  • sh1.0 mm的線,3P和4P的,注意接線前一定要檢查編碼器板和主板的線順序是不是對(duì)應(yīng)的直接買來的線是不能用的,需要自己焊一下改下順序
  • m2.5的螺釘,至少8mm長(zhǎng),和m2.5的墊圈若干,用于固定編碼器,電機(jī)與電機(jī)支架
  • m3 6mm長(zhǎng)的螺釘,m35 6mm的銅柱,m320 6mm銅柱,m3螺母若干
  • AB膠或者同等強(qiáng)度的膠,用于將徑向磁鐵固定在電機(jī)軸線處
  • 綁帶和魔術(shù)貼,用于固定主板和電池
  • 3.81mm插頭,用于把電機(jī)線插到主板上,XT30公頭接口,用于把主板連接電池,紅黑電源線
制作步驟 1.電路部分

打開開源資料鏈接上的三個(gè)pcb工程,在嘉立創(chuàng)投板生產(chǎn),把元器件都買到并焊上去
主板

在這里插入圖片描述
在這里插入圖片描述
按照上圖用紅黑電源線焊接主板和XT30 公頭插頭

編碼器板
在這里插入圖片描述
編碼器板沒什么元器件,記得上面這個(gè)焊點(diǎn)要焊上,背面還有一個(gè)as5600芯片,總共要做兩個(gè)
RGB燈板
在這里插入圖片描述
把燈焊上去,沒什么好說的,總共要做兩個(gè)

sh1.0 3P和4P的線
分別做兩條,用作連接RGB板和編碼器板到主板,注意接線前一定要檢查編碼器板和主板的線順序是不是對(duì)應(yīng)的,我買到的反的,需要自己調(diào)換順序

機(jī)械部分

制作兩個(gè)電機(jī)部分
在這里插入圖片描述
先把徑向磁鐵粘在電機(jī)軸心
在這里插入圖片描述
把編碼器板,電機(jī)支架和電機(jī)用m2.5螺釘按上圖組裝,中間加些墊片,防止相互間摩擦,如下圖
在這里插入圖片描述
3D打印輪轂,套在電機(jī)上,再套上胎皮,3D打印文件在github里
在這里插入圖片描述

組裝

3D打印固定板,用魔術(shù)貼和扎帶固定電池,用m3*5 銅柱和螺釘將3D打印固定板和主板組裝
在這里插入圖片描述
在這里插入圖片描述
將兩個(gè)電機(jī)部分和主板部分用m3螺釘組裝,電機(jī)線通過3.8mm 插頭連接到主板,順序隨意。編碼器板用sh1.0 mm 4P線連接,第一層亞克力板上裝四個(gè)m3 20mm的銅柱,如下圖
在這里插入圖片描述
RGB燈板和第二層亞克力板粘在一起
在這里插入圖片描述
連接RGB的線到主板,固定第一層和第二層亞克力板,完成組裝
在這里插入圖片描述

燒寫程序

通過vscode+platformio來燒寫程序
第一次燒寫程序前,先找到hw_bldc.cpp里的hw_bldc_init()函數(shù)里
有這樣幾句

motor_0.init();
    motor_1.init();
    
    motor_0.initFOC();
    motor_1.initFOC();

第一次燒寫時(shí),initFOC里不需要有參數(shù),上電后simplefoc會(huì)運(yùn)行自檢程序,檢測(cè)電機(jī)旋轉(zhuǎn)方向和電角度,會(huì)在串口中輸出,通過串口得到參數(shù)后填入initFOC

motor_0.init();
    motor_1.init();
    
    motor_0.initFOC(4.53, Direction::CW);
    motor_1.initFOC(0.64, Direction::CCW);

如上,每個(gè)人的這兩個(gè)參數(shù)都是不一樣的,然后第二次燒寫代碼。之后每次啟動(dòng)就不會(huì)消耗時(shí)間自檢了。

手機(jī)控制

手機(jī)安裝點(diǎn)燈APP,https://diandeng.tech/dev
創(chuàng)建一個(gè)藍(lán)牙設(shè)備,添加一個(gè)手柄控件,起名叫JoyKey
在這里插入圖片描述
在這里插入圖片描述
對(duì)于燈光效果的遙控可自行開發(fā)

硬件分析與概要設(shè)計(jì)

電路部分分為一個(gè)主板,兩個(gè)編碼器小板,兩個(gè)RGB燈板

  • 其中主板部分集成了無刷電機(jī)驅(qū)動(dòng),控制部分,MPU6050傳感器,供電,串口和各種接口
  • 驅(qū)動(dòng)器板搭載AS5600磁編碼器,通過IIC與主板通信
  • 主板為RGB提供5V電源與控制信號(hào)
    電機(jī)采用2210無刷云臺(tái)電機(jī),7對(duì)極
無刷電機(jī)驅(qū)動(dòng)部分

驅(qū)動(dòng)是小車的核心部分,是小車動(dòng)起來的關(guān)鍵。無刷電機(jī)轉(zhuǎn)動(dòng)時(shí)需要分別控制電機(jī)的三相電壓。采用FOC算法控制時(shí),還需要位置傳感器提供轉(zhuǎn)子和定子的相對(duì)位置,如果要控制轉(zhuǎn)矩,還需要電流傳感器。初次學(xué)習(xí)FOC,我采用燈哥開源FOC驅(qū)動(dòng)的方案,燈哥github倉庫地址。
電機(jī)驅(qū)動(dòng)采用L6234P三相H橋集成驅(qū)動(dòng)芯片
在這里插入圖片描述
電流檢測(cè)采用INA240A2芯片,放大增益為50,這個(gè)芯片也比較貴,可以用INA240A1代替,放大增益為20,我焊的時(shí)候用的就是這個(gè),一樣能用。
在這里插入圖片描述
電機(jī)位置檢測(cè)采用AS5600絕對(duì)值磁編碼器芯片,IIC通訊,我為這個(gè)芯片畫了個(gè)小板子附在電機(jī)軸處,與主板相連,同時(shí)還需要在電機(jī)軸線處固定一個(gè)徑向磁鐵。
在這里插入圖片描述
在這里插入圖片描述

控制部分

由主要功能可知,需要MCU具有藍(lán)牙和WIFI功能,還需要足夠的性能用于FOC算法,同時(shí)控制RGB。最近看到的esp32可以說正合適,esp32有320K RAM,4M ROM,兩個(gè)core,一個(gè)核專門用來跑foc算法,另外一個(gè)核用來跑其他程序包括RGB控制,simplefoc官網(wǎng)上說esp32單次foc運(yùn)算能有1ms,引腳也足夠多,滿足平衡控制的需求。
在這里插入圖片描述

傳感部分

平衡控制需要通過傳感器檢測(cè)到小車自身的姿態(tài),我采用最常見的MPU6050 6軸加速度計(jì)陀螺儀芯片
在這里插入圖片描述
WIFI圖傳由主板通過2.54排母插接ESP-CAM模塊實(shí)現(xiàn)
在這里插入圖片描述

電源部分
  • 電池選用3S 900mah航模電池,提供12V電壓給電機(jī)
  • TPS5430開關(guān)芯片將12V轉(zhuǎn)5V,供給到RGB和ESP-CAM模塊
  • AMS1117將5V降到3.3V
    在這里插入圖片描述
    在這里插入圖片描述
RGB部分

RGB采用WS1802B LED燈,MCU一個(gè)IO口就可以驅(qū)動(dòng)一串RGB
在這里插入圖片描述
在這里插入圖片描述

其他

其他一些接口和轉(zhuǎn)串口芯片什么就不多介紹了,可以看我開源的電路工程了解

理論基礎(chǔ)

無刷電機(jī)平衡小車的理論部分需要了解

1.無刷電機(jī)磁場(chǎng)定向控制FOC算法
2.平衡車建模和控制算法

理論部分網(wǎng)上有很多資料,講解也非常清楚易懂,珠玉在前,我引出一些比較好的文章,供想要深究的讀者查看

磁場(chǎng)定向控制FOC算法

FOC算法的內(nèi)容比較多,初學(xué)者可以看下稚暉君這篇文章,比較通俗易懂

  • 深入淺出講解FOC算法與SVPWM技術(shù)

simplefoc官方文檔的介紹也比較詳細(xì),還有源碼講解,代碼中也用到了simplefoc的庫,所以最好去官網(wǎng)文檔了解一些simplefoc的使用方法
https://simplefoc.com/

其他比較好的文章

  • BLDC電機(jī)控制算法——FOC簡(jiǎn)述
  • foc學(xué)習(xí)筆記1——準(zhǔn)備工作
平衡車建模和控制算法
  • 平衡車建模部分首推 清華卓晴的平衡車參考方案 對(duì)平衡車的數(shù)學(xué)模型的建立有非常清晰的介紹,需要熟悉平衡車模型的可以多看幾遍
  • 平衡車平衡環(huán)和速度環(huán)pid的整定可以看這篇文章
    平衡小車PID,就該這么調(diào)?。?!
軟件部分

ESP32這款MCU有兩個(gè)核心,我采用freertos來對(duì)兩個(gè)核進(jìn)行調(diào)度,整體軟件框架基于arduino+freertos

用到的庫

Adafruit_NeoPixel 用于驅(qū)動(dòng)RGB燈帶
blinker-library點(diǎn)燈科技的藍(lán)牙庫,可以通過手機(jī)app和平衡車藍(lán)牙通訊
MPU6050_lightMPU6050驅(qū)動(dòng)庫
Arduino-FOCsimplefoc的arduino支持庫

0 core:
task 0:simplefoc的電流環(huán)的運(yùn)算、俯仰角數(shù)據(jù)讀取的和電機(jī)電壓的輸出
1 core:
task 1:平衡環(huán)和速度環(huán)pid運(yùn)算
task 2:RGB閃爍和通過藍(lán)牙接收手機(jī)的控制命令

TASK 0

這個(gè)任務(wù)的代碼比較簡(jiǎn)單,loopFOC和move負(fù)責(zé)simplefoc電流環(huán)的運(yùn)算和電壓輸出
mpu.update()讀出MPU6050數(shù)據(jù)并返回俯仰角,俯仰角通過互補(bǔ)濾波結(jié)算得到就可以了
shaftVelocity返回電機(jī)速度,用于task 1速度環(huán)pid的運(yùn)算

void task_motor_move(void *pvParameters)
{while (1)
    {// iterative setting FOC phase voltage
        motor_1.loopFOC();
        motor_0.loopFOC();
        // Serial.printf("d:%f,%f\n",motor_1.shaftVelocity(),motor_0.shaftVelocity());
        motor_1.move(motor_output_left);
        motor_0.move(motor_output_right);

        // // iterative function setting the outter loop target
        mpu.update();

        speed_right = motor_0.shaftVelocity();
        speed_left = motor_1.shaftVelocity();
    }
}
TASK 1

該任務(wù)主要是平衡環(huán)和速度環(huán)pid運(yùn)算,用狀態(tài)機(jī)的思維將平衡車狀態(tài)分為STOP,RUNNING,PICKUP三個(gè)狀態(tài),這樣做主要是為了避免平衡車被拿起時(shí)電機(jī)瘋轉(zhuǎn)。
開機(jī)時(shí)狀態(tài)為STOP,把車扶正到平衡位置附近則進(jìn)入RUNNING狀態(tài),當(dāng)拿起傾斜角后過大,則進(jìn)入PICKUP狀態(tài),逆時(shí)針旋轉(zhuǎn)車體后進(jìn)入STOP狀態(tài)。
RUNNING狀態(tài)運(yùn)行平衡環(huán),速度環(huán)和角度環(huán)。平衡環(huán)采用pd,速度環(huán)用pi,角度環(huán)僅用單p。

void task_control(void *pvParameters)
{while (1)
    {angle_pitch = mpu.getAngleY();
        // Serial.printf("d:%f\n",angle_pitch);
        acc_Z = mpu.getAccZ();
        if (running_state == STATE_STOP)
        {if (abs(angle_pitch - angle_pitch_offset)< 0.5)
            {running_state = STATE_RUNNING;
            }
        }
        else if (running_state == STATE_RUNNING)
        {speed_average = (speed_right + speed_left) / 2;
            if (abs(angle_pitch - angle_pitch_offset) >50 )
            {speed_I_sum=0;//清空積分系數(shù)
                running_state = STATE_PICKUP;
            }
            else
            {speed_target = translate_speed;

                speed_error = speed_target - speed_average;

                speed_I_sum+=(speed_error*speed_I);
                if(speed_I_sum>15){speed_I_sum = 15;
                }
                if(speed_I_sum<-15){speed_I_sum = -15;
                }
                angle_target_pitch = speed_P * speed_error + speed_I_sum;
  
                motor_output_left = angle_P * ((angle_pitch - angle_pitch_offset) - angle_target_pitch) + angle_D * mpu.getGyroY()+rotate_speed; //+ angle_D * mpu.getGyroY()
                motor_output_right = angle_P * ((angle_pitch - angle_pitch_offset) - angle_target_pitch) + angle_D * mpu.getGyroY()-rotate_speed;
                angle_last_pitch = angle_pitch;
            }
        }
        else if (running_state == STATE_PICKUP)
        {motor_output_left = 0;
            motor_output_right = 0;
            if (speed_right >3.14 && speed_left< -3.14)
            {running_state = STATE_STOP;
            }
        }
        vTaskDelay(1);
    }
}
TASK 2

task 2用于RGB效果顯示,和接收手機(jī)blinker app通過藍(lán)牙發(fā)送的數(shù)據(jù)。一般的RGB等效都有一個(gè)延時(shí)函數(shù),普通的延時(shí)函數(shù)都是在原地死等,這樣大大降低CPU效率,影響其他程序運(yùn)行,這里我編寫了一系列非阻塞式RGB燈效:在顯示完燈效后不再原地延時(shí),而是直接進(jìn)行調(diào)度,切換到其他task。詳細(xì)可看我代碼。

void task_neopixel(void *pvParameters)
{uint32_t neopixel_pattern_previous = 0;
    uint32_t neopixel_pattern_interval = 500;
    uint32_t neopixel_pattern_number = 0;
    while (1)
    {// 效果切換
        if((neopixel_count-neopixel_pattern_previous)>neopixel_pattern_interval){neopixel_pattern_previous = neopixel_count;
            neopixel_pattern_number++;
            neopixel_state_clear(strip_1_handler);
            neopixel_state_clear(strip_2_handler);
            if(neopixel_pattern_number>4){neopixel_pattern_number = 0;
            }
        }

        switch(neopixel_pattern_number){case 0:
                neopixel_police_style_2(strip_2_handler,10,5);
                neopixel_police_style_2(strip_1_handler,10,5);
                break;
            case 1:
                neopixel_police_style_1(strip_2_handler,10,5);
                neopixel_police_style_1(strip_1_handler,10,5);
                break;
            case 2:
                neopixel_loop(strip_2_handler, 255, 255, 255, 4, 4);
                neopixel_rainbow(strip_1_handler);
                break;
            case 3:
                neopixel_bounce(strip_1_handler, 0, 255, 0, 2, 3, 0);
                neopixel_fade_in_out(strip_2_handler, 255, 0, 255, 2, 1,25);
                break;
            case 4:
                neopixel_spread_out(strip_2_handler, strip_2_handler.strip.Color(0,255,0), strip_2_handler.strip.Color(0,0,255), 4, 10);
                neopixel_spread_out(strip_1_handler, strip_1_handler.strip.Color(255,0,0), strip_1_handler.strip.Color(255,255,0), 4, 10);
                break;
            default:
                break;
        }
        neopixel_count++;

#ifdef USE_BLINKER
        Blinker.run();
#endif

        vTaskDelay(10);
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:SimpleFOC無刷電機(jī)平衡小車-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article38/dsijsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、App設(shè)計(jì)、微信小程序、外貿(mào)建站、面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)