成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

在這里插入圖片描述

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

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

主要功能
  • 板載雙路無刷電機驅(qū)動及電流環(huán)芯片,每路大電流2.5A,可驅(qū)動兩個云臺無刷電機,可控制到電流
  • 小車可自平衡,可通過手機app藍牙連接控制進退,轉(zhuǎn)向
  • 搭載雙排RGB,每排共24個燈,可以擴展成更多,實現(xiàn)多種燈光特效且不影響車輛控制
  • 圖傳接口,通過外接ESP-CAM模塊實現(xiàn)WIFI圖傳,可在手機上查看(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:
總共有三個板子
主板(包括電機控制和驅(qū)動部分):https://oshwhub.com/FranHawk/balance_car_esp32_simplefoc
編碼器板:https://oshwhub.com/FranHawk/as5600-16mm
RGB燈帶板:https://oshwhub.com/FranHawk/rgb_strip

材料購買鏈接

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

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

其他機械小零件

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

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

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

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

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

機械部分

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

組裝

3D打印固定板,用魔術(shù)貼和扎帶固定電池,用m3*5 銅柱和螺釘將3D打印固定板和主板組裝
在這里插入圖片描述
在這里插入圖片描述
將兩個電機部分和主板部分用m3螺釘組裝,電機線通過3.8mm 插頭連接到主板,順序隨意。編碼器板用sh1.0 mm 4P線連接,第一層亞克力板上裝四個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();

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

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

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

手機控制

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

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

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

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

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

控制部分

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

傳感部分

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

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

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

其他

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

理論基礎(chǔ)

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

1.無刷電機磁場定向控制FOC算法
2.平衡車建模和控制算法

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

磁場定向控制FOC算法

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

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

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

其他比較好的文章

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

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

用到的庫

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

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

TASK 0

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

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運算,用狀態(tài)機的思維將平衡車狀態(tài)分為STOP,RUNNING,PICKUP三個狀態(tài),這樣做主要是為了避免平衡車被拿起時電機瘋轉(zhuǎn)。
開機時狀態(tài)為STOP,把車扶正到平衡位置附近則進入RUNNING狀態(tài),當拿起傾斜角后過大,則進入PICKUP狀態(tài),逆時針旋轉(zhuǎn)車體后進入STOP狀態(tài)。
RUNNING狀態(tài)運行平衡環(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效果顯示,和接收手機blinker app通過藍牙發(fā)送的數(shù)據(jù)。一般的RGB等效都有一個延時函數(shù),普通的延時函數(shù)都是在原地死等,這樣大大降低CPU效率,影響其他程序運行,這里我編寫了一系列非阻塞式RGB燈效:在顯示完燈效后不再原地延時,而是直接進行調(diào)度,切換到其他task。詳細可看我代碼。

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海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

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

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

廣告

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

成都定制網(wǎng)站建設(shè)
无棣县| 武安市| 内江市| 广元市| 攀枝花市| 休宁县| 安徽省| 化德县| 中西区| 宁津县| 贵南县| 三河市| 大英县| 九龙坡区| 凤冈县| 丹寨县| 安仁县| 囊谦县| 永丰县| 磴口县| 新竹市| 子长县| 洪雅县| 苏尼特右旗| 崇仁县| 湘阴县| 原平市| 巧家县| 林甸县| 巩义市| 张家口市| 仁化县| 彰化市| 南康市| 安龙县| 白水县| 中卫市| 山西省| 荣昌县| 溆浦县| 海丰县|