一.介绍
VESC是一个开源的无刷电机驱动器,由工程师本杰明研发,最初应用于电动滑板,但是由于其出色的性能,也渐渐在其他领域得到了应用。
由于VESC的固件是基于电动滑板这个应用场景开发的,所以如果我们想将其应用在其他领域,就需要对其源码进行二次开发,修改通讯协议或增添自定义的功能。本文章分别介绍了如何在Ubuntu和Windows下搭建开发环境和烧录固件。
二.Ubuntu平台
1.说明
-
系统:Ubuntu-16.04
- 若使用Ubuntu-20.04,则安装编译工具链时会比较麻烦,具体可参考这个提问:[How to install arm-none-eabi-gdb on Ubuntu 20.04 LTS (Focal Fossa)
-
开发环境:GNU Arm Embedded Toolchain + build-essential + 文本编辑器
- GNU Arm Embedded Toolchain为arm的嵌入式编译工具链,可以为Arm Cortex-M架构的芯片编译程序,VESC的缔造者本杰明就是使用该工具链编写的VESC固件。
- build-essential提供了make等编译工具。
- 最后需要一个文本编译器用于修改代码。
-
烧录:STLink + st-flash
2.搭建开发环境
#下载arm编译工具链
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
sudo apt install gcc-arm-embedded
#下载基本的编译工具
sudo apt install build-essential
#从github上下载VESC固件的源码
cd ~ && git clone https://github.com/vedderb/bldc.git vesc_firmware
cd vesc_firmware
#编译
make
3.烧录固件
#安装依赖
sudo apt-get install git libusb-1.0.0-dev
#下载编译stlink软件
git clone https://github.com/stlink-org/stlink.git
cd stlink
mkdir build && cd build
cmake ..
make
sudo make install
#BLDC_4_ChibiOS.bin为编译出的固件名
st-flash write BLDC_4_ChibiOS.bin 0x08000000
若首次使用st-flash
时出现链接库错误,可以使用sudo ldconfig
修复。烧录成功的提示见下图。
4.连接BLDC tool
#安装依赖
cd ~
sudo apt-get install qtcreator qt-sdk libudev-dev libqt5serialport5-dev
#下载编译BLDC tool
git clone https://github.com/vedderb/bldc-tool.git
cd bldc-tool
qmake -qt=qt5
make clean && make
#给予串口访问权限
sudo adduser $USER dialout
#重启使设置生效
reboot
#运行BLDC tool
cd ~/bldc-tool
./BLDC_Tool
打开BLDC tool以后,使用mini USB连接VESC V4,或者使用mirco USB连接VESC V6。
注意要焊接该0R电阻,才可以通过USB给VESC供电,若没有焊接,则需要给VESC上强电,下图是VESC V4 0R电阻的位置:
随后在BLDC tool中选择串口,单击右上角的Connect
按钮,若右下角显示连接,则证明固件烧录成功。
三.Windows平台
1.说明
-
开发环境:VSCode + GNU Arm Embedded Toolchain + mingw + git bash
- VSCode作为文本编译器,同时也将git bash集成在VSCode中,方便进行代码的修改和编译。
- GNU Arm Embedded Toolchain为arm的嵌入式编译工具链,可以为Arm Cortex-M架构的芯片编译程序,VESC的缔造者本杰明就是使用该工具链编写的VESC固件。
- mingw可以在windows上提供make指令,可以解释makefile中的编译连接规则。
- git bash用于在windows上提供一个类linux的终端,执行一些linux命令。
-
烧录:STLink + STM32 ST-LINK Utility 或 J-Link + J-flash
- 这两种方式都可以通过VESC上的SWD接口为stm32烧录bin文件。
2.搭建开发环境
我们需要分别下载上面提到的VSCode、GNU Arm Embedded Toolchain、mingw 、git,其中GNU Arm Embedded Toolchain可能使用的人比较少,只需去arm官网对应界面中选择gcc-arm-none-eabi-10-2020-q4-major-win32.exe下载即可。其余三种工具下载起来都比较容易,网上也有很多教程,我在这里就不说了。
下载上述工具时一定要注意配置好环境变量,否则终端无法识别对应的命令。我们可以通过快捷键Win+R
打开运行,输入cmd并回车,打开终端。在终端输入git
,gcc
,arm-none-eabi-gcc
三条命令,若终端都可以正常识别,则环境变量配置正确,否则需要手动添加环境变量。
下面给出我安装GNU Arm Embedded Toolchain时添加环境变量的选项:
下面我们去github上下载源码,下载完使用VSCode打开该文件夹,如果是第一次使用VSCode,则需要先把git bash设置为VSCode的默认集成终端。
我们打开终端后,在终端中输入mingw32-make
命令,即可成功编译固件,如下图所示:
编译生成的固件在./build路径中。
在帮助同学配置开发环境的过程中,我发现在同学的电脑上只能成功编译固件一次,之后就会报错,删去编译生成的./.dep文件夹中的中间文件就可以重新编译了。我写了一个脚本来简化编译流程:
if [[ $1 = "force" ]];then
rm -rf ./build
rm -rf ./build_all
fi
if [ -f "./Makefile" ];then
rm -rf ./.dep
mingw32-make
else
echo "找不到makefile文件,尝试更换文件夹"
fi
3.烧录固件
这里以STLink + STM32 ST-LINK Utility为例介绍如何为VESC烧录固件, J-Link + J-flash操作几乎相同。
首先需要在ST的官网上面下载STM32 ST-LINK Utility,记得要留自己的邮箱,这样才能收到下载链接,下载过程中可能会询问你是否要按照STMicroelectronics Virtual COM驱动,我们选择安装。
打开STM32 ST-LINK Utility,将VESC通过ST-LINK连接到电脑。
点击connect按钮,若系统检测到单片机,则可成功连接,若没有检测到,需要再检测一下连接线路。
随后将我们刚刚编译生成的.bin固件拖进该软件中:
随后点击烧录按钮进行烧录。
记得要勾选reset选项,不然烧录进固件以后无法自动
运行,需要手动复位才能运行。
4.连接VESC tool
有关VESC tool的使用,我将会在下一篇博客中详细介绍,这里使用VESC tool来连接电调,只是为了检测我们是否成功烧录了固件。
打开VESC tool,使用mini USB连接VESC V4,或者使用mirco USB连接VESC V6。
注意要焊接该0R电阻,才可以通过USB给VESC供电,若没有焊接,则需要给VESC上强电,下图是VESC V4 0R电阻的位置:
点击连接按钮,若能成功检测到VESC,则证明固件烧录成功。