STM32使用SimpleFOC库实现直流无刷电机的开环驱动详解
M创动工坊提供mcdgf.taobao.com

STM32核心板,2804电机和SimpleFOC mini驱动板(M创动工坊提供),ST-link,12V直流电源,USB线等
- 安装微软的Vscode,网上很多教程,且有说明书

安装好stlink驱动

- 打开vscode并安装PlatformIO插件。其他的一些中文插件、AI插件等等,根据需要安装

- 打开插件,新建工程

- 重要的设置

- Ini文件设置,这是关键


lib_deps =
askuric/Simple FOC@ 2.3.4
board_build.mcu = stm32f103c6t6
board_upload.maximum_size = 32768
upload_protocol = stlink
debug_tool = stlink
build_flags = -Os
写好后,记得点保存,就开始自动下载库,右下角

设置到这里就结束了。
根据程序定义,接线
Simplefoc mini板与STM32接线:
- In1-2-3分别接STM32板子的A8,A9,A10,这是三个PWM引脚
- en接STM32板子的A11,这是使能引脚
- GND接GND

STM32与ST-Link接线
按STM32和ST-link的丝印接即可
STM32与USB转串口模块接线

USB供电,microUSB接口。
到此,线已接完。
- 开始编程
打开默认是这样的
按arduino格式C++语言,写入以下代码,代码就不做注释了,可以直接复制粘贴到AI,如DEEPSEEK上,让它帮忙逐行解析。
- #include <SimpleFOC.h>
- #define PIN_PWM_U PA8
- #define PIN_PWM_V PA9
- #define PIN_PWM_W PA10
- #define PIN_ENABLE PA11
- BLDCDriver3PWM driver = BLDCDriver3PWM(PIN_PWM_U, PIN_PWM_V, PIN_PWM_W, PIN_ENABLE);
- BLDCMotor motor = BLDCMotor(7); // 极对数为 7 的无刷电机
- void setup() {
- // 1. 先把 EN 拉到“失能”
- pinMode(PIN_ENABLE, OUTPUT);
- digitalWrite(PIN_ENABLE, LOW);
- // 2. 驱动器参数
- driver.voltage_power_supply = 12; // 实际 12V 电源
- driver.voltage_limit = 4.0; // 限制到 4V,减少电流与发热
- driver.pwm_frequency = 20000; // 20kHz
- driver.enable_active_high = true; // PA11 拉高时才使能 MS8313
- driver.init(); // 初始化驱动器
- // 4. 连接电机、初始化
- motor.linkDriver(&driver);
- motor.voltage_limit = 2.0; // 电机端相电压限幅到 2V
- motor.controller = MotionControlType::velocity_openloop;
- motor.init();
- // 5. 打开 EN
- digitalWrite(PIN_ENABLE, HIGH);
- }
- void loop() {
- motor.move(15); // 15 rad/s 开环
- }

就这么多!
- 编译烧录

- 插上USB,开始烧录
确定驱动安装正确,设备管理器中,可以看到这两个。

- 烧录成功

接上电源测试,电机就开始转动了。
不过这样电机会有异响,会异响,会异响!会发烫,会发烫,会发烫,这里只是演示一下,验证硬件是否有故障,接线是否正确。
这不是硬件故障的问题,是控制的缘故。

开环的解决方案,暂时不会,有知道的朋友,欢迎告诉我,谢谢!
接下来试用闭环,可以解决这个问题。
到此,测试结束!本文档主要针对M创动工坊淘宝店提供硬件,mcdgf.taobao.com
作者:M创动工坊