精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

無刷電機小車開發記錄01——制作RTT內GD32E503器件的BSP

RTThread物聯網操作系統 ? 來源:未知 ? 2023-08-31 13:05 ? 次閱讀

前情提要


最近計劃開始做一個無刷電機的小車玩玩,不用網上的現有方案,一切從零開始自己做方案。硬件方案打算用GD32E503和EG2134柵極驅動IC等一系列國產器件去做,這樣就面臨一個問題,不太好用ArduinoSimpleFOC快速出原型。所以軟件方案想基于RTT開發,這樣只需移植一些硬件驅動和FOC以及卡爾曼濾波等算法,其它的很多功能還是可以用RThread組件實現的,總不能所有輪子都自己造,畢竟玩這個小車的目的也只是想深入玩玩這些控制算法。這個小車的整個開發周期可能會很長,至少是以年為度量單位的,第一是因為工作比較忙,只能用一些零散時間搞,第二是因為計劃用到什么學什么,有意思的地方都深入的研究研究,不以速成為目的。整個開發過程也都記錄一下,圖文形式的記錄可能會在RTThread論壇進行記錄,視頻形式的記錄就發布在B站上,希望有興趣的小伙伴也可以一起玩一玩哈。

前期工作


前段時間,大概花了一周的時間已經把第一版測試用的硬件電路和機械結構設計完畢,如下是硬件電路的3D視圖。

wKgaomTwIKyAfCxfAAFHGubt_uc763.jpg

如下是三輪小車形態的車底盤3D渲染圖:

wKgaomTwIKyAAQr7AABGuAqIHUQ123.jpg

下圖是平衡車形態的車底盤3D渲染圖:

wKgaomTwIKyANoVzAABsQh8r7F0279.jpg

下圖為二階平衡車形態的車底盤3D渲染圖:

wKgaomTwIKyAHzLvAABGH0Sflxo910.jpg

目前第一版的硬件測試電路已焊接完畢,第一版測試小車也完成了組裝,下圖是剛組裝起來的平衡車形態的無刷電機小車,就計劃先拿它開刀了,其它形態后面再慢慢玩。小車還算小巧,等測試通過后計劃再做一版集成度更高更小巧的玩玩。

wKgaomTwIK2APNs-AAFHCjPe8UY907.jpg

千里之行始于創建BSP


一切就緒,準備開始擼程序了,那遇到的第一個問題就是目前RTThread的BSP內并沒有我想用的這款GD32E503的處理器(用這款處理器是想玩一玩它的三角函數加速器,有硬件計算電路,就不用查詢法去計算三角函數了,感覺跑FOC會舒服很多)。所以第一步就是要學習一下添加自己的BSP了。

下載GD32E503固件庫和RTT源碼包


做BSP的第一步,自然是下載RTThread源碼和GD32E503的固件庫了。目前RTThread的穩定發行版應該是4.1.0,但我這里只是玩玩,對穩定度要求不高,果斷去碼云上下載了最新的master版本,目前的版本是5.0.1:

wKgaomTwIK2Ab5WwAACq6_kHrlU554.jpg


		1/*RT-Threadversioninformation*/ 2#defineRT_VERSION_MAJOR5/** 3#defineRT_VERSION_MINOR0/** 4#defineRT_VERSION_PATCH1/**

GD32E503的固件庫包含在開發板Demo資料里,最新版本是V1.2.2:

wKgaomTwIK2AP9jpAAD9v8qn-Bo499.jpg

添加GD32E503器件到MDK


GD32E50x的AddOn資源包,目前最新版本是1.3.3,如果還沒有安裝MDK需要先安裝一下MDK,這里不做過多表述,然后再安裝AddOn資源包內的兩個”.pack”文件(也可以只安裝E50x版本的):

wKgaomTwIK2APIKNAAESzxGcyTQ614.jpg

如下圖所示,MDK內的DeviceDatabase內能找到GD32E50x系列的器件列表,證明資源包安裝成功。

wKgaomTwIK2AUPCjAABjJq9d2KE394.png

添加libraries


拷貝固件庫到BSP的libraries目錄內

解壓RTT源碼包和固件庫壓縮包,先拷貝固件庫的”GD32E50x_Firmware_Library”文件夾到RTT源碼包的”bsp/gd32/arm/libraries/“路徑下:

wKgaomTwIK2AcCLiAAEPcS4AO0I987.jpg

修改libraries目錄內的配置文件

這里可以看到libraries目錄下還有兩個配置文件“Kconfig”和“.ignore_format.yml”,Kconfig文件后面用menuconfig或RTthreadStudio IDE去配置肯定會用到,另外一個文件暫時不知道什么用途,但不妨一起修改了,Kconfig文件修改如下(文檔末尾添加GD32E5的配置信息):


		

1configSOC_FAMILY_GD32 2bool 3configSOC_SERIES_GD32F1 4bool 5selectARCH_ARM_CORTEX_M3 6selectSOC_FAMILY_GD32 7configSOC_SERIES_GD32F2 8bool 9selectARCH_ARM_CORTEX_M3 10selectSOC_FAMILY_GD32 11configSOC_SERIES_GD32F3 12bool 13selectARCH_ARM_CORTEX_M4 14selectSOC_FAMILY_GD32 15configSOC_SERIES_GD32F4 16bool 17selectARCH_ARM_CORTEX_M4 18selectSOC_FAMILY_GD32 19configSOC_SERIES_GD32E5#addbycjl 20bool 21selectARCH_ARM_CORTEX_M33 22selectSOC_FAMILY_GD32

“.yml”文件把GD32E50x的固件庫路徑名添加到數組末尾:


		

1dir_path: 2-GD32F10x_Firmware_Library 3-GD32F20x_Firmware_Library 4-GD32F30x_Firmware_Library 5-GD32F4xx_Firmware_Library 6-GD32E50x_Firmware_Library

給固件庫添加SConscript構建配置文件

從其它固件庫文件內(我用的F4xx)拷貝一份”SConscript”文件到新加入的固件庫路徑內:

wKgaomTwIK6AUpADAAA40YDyVo4124.png


		

1importrtconfig 2frombuildingimport* 3#getcurrentdirectory 4cwd=GetCurrentDir() 5#ThesetofsourcefilesassociatedwiththisSConscriptfile. 6src=Split(''' 7CMSIS/GD/GD32E50x/Source/system_gd32e50x.c 8GD32E50x_standard_peripheral/Source/gd32e50x_gpio.c 9GD32E50x_standard_peripheral/Source/gd32e50x_rcu.c 10GD32E50x_standard_peripheral/Source/gd32e50x_exti.c 11GD32E50x_standard_peripheral/Source/gd32e50x_misc.c 12''') 13#remove:GD32E50x_standard_peripheral/Source/gd32e50x_syscfg.c 14ifGetDepend(['RT_USING_SERIAL']): 15src+=['GD32E50x_standard_peripheral/Source/gd32e50x_usart.c'] 16ifGetDepend(['RT_USING_I2C']): 17src+=['GD32E50x_standard_peripheral/Source/gd32e50x_i2c.c'] 18ifGetDepend(['RT_USING_SPI']): 19src+=['GD32E50x_standard_peripheral/Source/gd32e50x_spi.c'] 20ifGetDepend(['RT_USING_CAN']): 21src+=['GD32E50x_standard_peripheral/Source/gd32e50x_can.c'] 22ifGetDepend(['BSP_USING_ETH']): 23src+=['GD32E50x_standard_peripheral/Source/gd32e50x_enet.c'] 24ifGetDepend(['RT_USING_ADC']): 25src+=['GD32E50x_standard_peripheral/Source/gd32e50x_adc.c'] 26ifGetDepend(['RT_USING_DAC']): 27src+=['GD32E50x_standard_peripheral/Source/gd32e50x_dac.c'] 28ifGetDepend(['RT_USING_RTC']): 29src+=['GD32E50x_standard_peripheral/Source/gd32e50x_rtc.c'] 30src+=['GD32E50x_standard_peripheral/Source/gd32e50x_pmu.c'] 31ifGetDepend(['RT_USING_WDT']): 32src+=['GD32E50x_standard_peripheral/Source/gd32e50x_wwdgt.c'] 33src+=['GD32E50x_standard_peripheral/Source/gd32e50x_fwdgt.c'] 34ifGetDepend(['RT_USING_SDIO']): 35src+=['GD32E50x_standard_peripheral/Source/gd32e50x_sdio.c'] 36src+=['GD32E50x_standard_peripheral/Source/gd32e50x_dma.c'] 37path=[ 38cwd+'/CMSIS/GD/GD32E50x/Include', 39cwd+'/CMSIS', 40cwd+'/GD32E50x_standard_peripheral/Include',] 41CPPDEFINES=['USE_STDPERIPH_DRIVER'] 42group=DefineGroup('Libraries',src,depend=[''],CPPPATH=path,CPPDEFINES=CPPDEFINES) 43Return('group')

創建BSP


拷貝BSP模板

任意拷貝一份BSP文件夾(我同樣也是用的407)重命名為E503:

wKgaomTwIK6AUW_0AAEH11BbmTY785.jpg

修改board.h頭文件

其中主要需要修改的內容都在board路徑下。先看board.h文件,我這里沒有做外部SDRAM,所以注釋掉相關定義,我板子實際焊的是GD32E503RCT6,所以SRAM大小改為96KB,再把相關頭文件名修改一下:


		

1#ifndef__BOARD_H__ 2#define__BOARD_H__ 3#include"gd32e50x.h" 4#include"drv_usart.h" 5#include"drv_gpio.h" 6#include"gd32e50x_exti.h" 7//#defineEXT_SDRAM_BEGIN(0xC0000000U)/*thebeginingaddressofexternalSDRAM*/ 8//#defineEXT_SDRAM_END(EXT_SDRAM_BEGIN+(32U*1024*1024))/*theendaddressofexternalSDRAM*/ 9//InternalSRAMmemorysize[Kbytes]<8-64> 10//Default:64 11#ifdef__ICCARM__ 12//Use*.icframsymbal,toavoidhardcode. 13externchar__ICFEDIT_region_RAM_end__; 14#defineGD32_SRAM_END&__ICFEDIT_region_RAM_end__ 15#else 16#defineGD32_SRAM_SIZE96//96forGD32E503xC128forGD32E503xE... 17#defineGD32_SRAM_END(0x20000000+GD32_SRAM_SIZE*1024) 18#endif 19#ifdef__ARMCC_VERSION 20externintImage$$RW_IRAM1$$ZI$$Limit; 21#defineHEAP_BEGIN(&Image$$RW_IRAM1$$ZI$$Limit) 22#elif__ICCARM__ 23#pragmasection="HEAP" 24#defineHEAP_BEGIN(__segment_end("HEAP")) 25#else 26externint__bss_end; 27#defineHEAP_BEGIN(&__bss_end) 28#endif 29#defineHEAP_ENDGD32_SRAM_END 30#endif

添加gd32e50x_libopt.h

在固件庫內的隨便一個例程路徑內拷貝一份”gd32e50x_libopt.h”到當前bsp的board路徑內,替換掉原有的“gd32f4xx_libopt.h”

wKgaomTwIK6ANqY9AACmplBaY7k771.png

修改board目錄下的Kconfig和SConscript配置文件

而對于board目錄下的“Kconfig”和“SConscript”配置文件也要稍作修改,基本都是把F4xx的字符串改成E50x的。稍需注意的是“SConscript”文件內對于啟動文件相關的配置,E50x有高密度(hd)和互聯(cl)兩個版本。我這里用的E503RC或者是RE都是高密度版本,所以選擇hd的匯編啟動文件。而且還需要說明的是,雖然我這里沒有注釋掉gcc編譯器下的啟動文件,但其實E503的固件庫內并沒有提供gcc版本的啟動文件,也就是說后面不能用RTT的IDE去開發了。等什么時候有了再加進來吧?;蛘吆竺婵葱枰?,不行就自己改一版gcc編譯器的啟動文件。目前這兩個文件就暫且修改這么多,后面再看情況,如有問題再進行修改。

“SConscript”文件修改如下:


		

1importos 2importrtconfig 3frombuildingimport* 4Import('SDK_LIB') 5cwd=GetCurrentDir() 6#addgeneraldrivers 7src=Split(''' 8board.c 9''') 10path=[cwd] 11startup_path_prefix=SDK_LIB 12ifrtconfig.PLATFORMin['gcc']: 13src+=[startup_path_prefix+'/GD32E50x_Firmware_Library/CMSIS/GD/GD32E50x/Source/GCC/startup_gd32e50x_hd.s'] 14elifrtconfig.PLATFORMin['armcc','armclang']: 15src+=[startup_path_prefix+'/GD32E50x_Firmware_Library/CMSIS/GD/GD32E50x/Source/ARM/startup_gd32e50x_hd.s'] 16elifrtconfig.PLATFORMin['iccarm']: 17src+=[startup_path_prefix+'/GD32E50x_Firmware_Library/CMSIS/GD/GD32E50x/Source/IAR/startup_gd32e50x_hd.s'] 18CPPDEFINES=['GD32E50X','GD32E50X_HD'] 19group=DefineGroup('Drivers',src,depend=[''],CPPPATH=path,CPPDEFINES=CPPDEFINES) 20Return('group')

修改三種編譯器用的鏈接腳本

修改”board/linker_scripts”目錄下的連接文件,如無特殊要求可不對連接腳本做太多修改,只需要修改RAM和ROM地址和大小即可,以“link.sct”為例:


		

1LR_IROM10x080000000x00040000{;loadregionsize_region256KB 2ER_IROM10x080000000x00040000{;loadaddress=executionaddress 3*.o(RESET,+First) 4*(InRoot$$Sections) 5.ANY(+RO) 6} 7RW_IRAM10x200000000x00018000{;RWdata96KB 8.ANY(+RW+ZI) 9} 10}

修改BSP頂層SConstruct和rtconfig.py文件

修改新建bsp目錄下的SConstruct文件和rtconfig.py文件:

wKgaomTwIK6AYNZLAAAxBvhKST4830.png

SConstruct文件只需要修改“gd32_library”的值:


		

1gd32_library='GD32E50x_Firmware_Library'

wKgaomTwIK6AdAGiAACD1LInp1k542.png

修改工程模板

接下來修改工程模板文件,我這邊只修改MDK5版本的工程模板:

wKgaomTwIK6AMyA3AABSXqwBh4I583.png

修改Device為實際使用的GD32E503RC:

wKgaomTwIK-ABqPqAACtfcDdxCA575.png

調試工具改成DAP:

wKgaomTwIK-AeK8OAABtU9EJxYc709.png

利用env工具配置RTthread并生成MDK工程

在新鍵的bsp目錄下運行env工具(env工具的安裝與使用請參考RTT官方文檔),對RTT做初步配置:

wKgaomTwIK-ARhzGAABtngr3seI198.png

最后根據提示,輸入命令生成mdk5的工程,(如果想要提交自己制作的BSP,請參照官方BSP制作規范):

wKgaomTwIK-AYgJmAAAoGuQrzUI408.png

下載驗證


最后打開工程,稍微修改一下main.c內的內容,加一條調試語句,修改對應的LED引腳。編譯一下,如果能編譯通過說明上面修改的內容沒問題,如果有錯誤請仔細檢查上面格配置文件修改的內容是否正確或者自行根據錯誤提示進行修改。燒錄程序就可以看到運行效果了。


		

1#include 2#include 3#include 4#include 5/*definedtheLED2pin:PC6*/ 6#defineLED_PINGET_PIN(B,11) 7#defineBUZZER_PINGET_PIN(B,12) 8intmain(void) 9{ 10intcount=1; 11/*setLED2pinmodetooutput*/ 12rt_pin_mode(LED_PIN,PIN_MODE_OUTPUT); 13rt_pin_write(BUZZER_PIN,PIN_LOW); 14rt_pin_mode(BUZZER_PIN,PIN_MODE_OUTPUT); 15rt_kprintf("無刷電機小車測試程序! "); 16while(count++) 17{ 18rt_pin_write(LED_PIN,PIN_HIGH); 19rt_thread_mdelay(500); 20rt_pin_write(LED_PIN,PIN_LOW); 21rt_thread_mdelay(500); 22} 23returnRT_EOK; 24}

wKgaomTwIK-AQSVuAADwKUgIUAc456.jpg

今天就先玩到這里,后面再使用一段時間這個BSP,需要優化的地方優化一下,然后再往碼云上提交一份。

其它鏈接


視頻方面目前只有一個前期的開題視頻,簡單講了一下想做一些什么,過了一遍硬件電路的設計方案,想了解詳情的可以觀看下面的視頻哦!更多的階段性功能展示以及調試視頻后續再慢慢更新。

【無刷電機小車——搞起來!-嗶哩嗶哩】 https://b23.tv/ZmvhBS7

無刷電機小車開發記錄02——BSP導入RTThreadStudio:https://club.rt-thread.org/ask/article/4c90d45831ce0722.html

無刷電機小車開發記錄03——PWM信號輸入捕獲驅動:https://club.rt-thread.org/ask/article/dc39eb608f1eba75.html

無刷電機小車開發記錄04——互補PWM驅動移植:https://club.rt-thread.org/ask/article/004229252f06d18d.html

———————End——————


點擊閱讀原文進入官網


原文標題:無刷電機小車開發記錄01——制作RTT內GD32E503器件的BSP

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    31

    文章

    1273

    瀏覽量

    39933

原文標題:無刷電機小車開發記錄01——制作RTT內GD32E503器件的BSP

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【RA-Eco-RA2E1-48PIN-V1.0開發板試用】先來點個燈

    /uploads/files/20220416/323173e463091e786942d9053383c581.zip 這里不僅有開發板的圖紙、手冊,還有大量制作精美的PPT。 我使用J-LINK V9
    發表于 10-18 22:50

    無刷電機控制方案設計合作

    無刷電機控制應用包含:電動工具風機,水泵,家電變頻電機,自動化設備領域等。無刷電機控制方案代開發設計,無刷電機控制板元
    發表于 09-26 11:46 ?22次下載

    其利天下技術·無刷電機壽命有多長?軟件能改善嗎?無刷電機驅動

    作為無刷電機驅動方案開發商,經常跟客戶都會討論到一個問題——無刷電機的壽命受什么因素影響?現在無刷電機制作工藝對比以前已經有了極大的提升,
    的頭像 發表于 09-23 16:01 ?264次閱讀
    其利天下技術·<b class='flag-5'>無刷電機</b>壽命有多長?軟件能改善嗎?<b class='flag-5'>無刷電機</b>驅動

    其利天下技術·低速無刷電機如何更好的控制?無刷電機驅動方案開發

    需要低速運轉的無刷電機經常運用在電動車、機器人關節、醫療設備等場景。最近有客戶找到我們開發無刷電機驅動方案,他的需求是低轉速,而且需要精準控制電流。經常開發
    的頭像 發表于 09-09 11:50 ?409次閱讀
    其利天下技術·低速<b class='flag-5'>無刷電機</b>如何更好的控制?<b class='flag-5'>無刷電機</b>驅動方案<b class='flag-5'>開發</b>

    GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產品,該系列資源上與 GD32F303 兼容度非常高,本應用筆記旨在幫助您快速將應用程序從 GD32F303 系列微控
    的頭像 發表于 08-31 09:36 ?1358次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD</b>32F303 移植到 <b class='flag-5'>GD32F503</b>

    無刷電機的驅動原理 直流有刷電機無刷電機的差異

    在上期芝識課堂中,我們一起認識了東芝無刷電機的基本知識,對于生活中無處不在的無刷電機,了解它的更多知識才能上手開發哦~今天芝子就帶你一起來學習無刷電機的驅動原理!
    的頭像 發表于 07-19 14:29 ?1287次閱讀
    <b class='flag-5'>無刷電機</b>的驅動原理 直流有刷<b class='flag-5'>電機</b>和<b class='flag-5'>無刷電機</b>的差異

    無刷電機諧波怎么調節

    無刷電機作為現代電機技術的代表,以其高效、穩定、低噪音等特性,在各個領域得到了廣泛應用。然而,隨著電機技術的不斷發展,無刷電機在運行過程中產生的諧波問題也逐漸凸顯出來。諧波不僅會影響
    的頭像 發表于 06-11 14:29 ?661次閱讀

    直流無刷電機的工作原理 直流無刷電機的基本結構

    直流無刷電機(BLDC,Brushless Direct Current Motor)是一種無刷直流電動機,它具有高效率、高可靠性、低噪音和長壽命等優點,廣泛應用于各種工業和民用領域。本文將詳細介紹
    的頭像 發表于 06-04 17:04 ?2353次閱讀

    無刷電機是什么意思 無刷電機是交流還是直流

    無刷電機(Brushless Motor)是一種將電能轉換為機械能的驅動裝置,也被稱為無刷直流電機(BLDC Motor)。與傳統的有刷電機相比,無刷電機的構造更加簡單、耐用,效率更高
    的頭像 發表于 02-01 13:57 ?1.2w次閱讀

    無刷電機和有刷電機的優缺點 無刷電機工作原理

    無刷電機和有刷電機是目前最常見的兩種電動機類型,它們在不同的應用場景中有著各自的優點和局限性。下面將詳細介紹無刷電機和有刷電機的優缺點以及無刷電機
    的頭像 發表于 01-31 11:05 ?4784次閱讀

    GD32A503系列器件的限制及解決方案介紹

    電子發燒友網站提供《GD32A503系列器件的限制及解決方案介紹.pdf》資料免費下載
    發表于 01-26 10:21 ?0次下載
    <b class='flag-5'>GD32A503</b>系列<b class='flag-5'>器件</b>的限制及解決方案介紹

    Arduino制作循跡小車教程

    Arduino制作循跡小車完全教程
    發表于 01-05 11:09 ?7次下載

    無刷電機諧波怎么調 無刷電機為什么要電調

    無刷電機諧波怎么調 無刷電機為什么要電調? 無刷電機諧波調節原理詳解 無刷電機是一種通過電子調速器來控制電機轉速的
    的頭像 發表于 12-20 16:00 ?1870次閱讀

    GD32E50x系列器件的限制及解決方案勘誤手冊

    電子發燒友網站提供《GD32E50x系列器件的限制及解決方案勘誤手冊.pdf》資料免費下載
    發表于 12-14 09:49 ?0次下載
    <b class='flag-5'>GD32E</b>50x系列<b class='flag-5'>器件</b>的限制及解決方案勘誤手冊

    無刷電機應用

    無刷電機在某些領域也稱直流變頻電機(BLDC),它采用電子換向(霍爾傳感器),線圈不動磁極動,此時永磁鐵可以在線圈外部也可以在線圈內部,于是有了外轉子無刷電機和內轉子無刷電機之分。
    的頭像 發表于 12-05 14:52 ?750次閱讀
    <b class='flag-5'>無刷電機</b>應用