导言


SimpleFOC STM32教程09|基于STM32F103+CubeMX,ADC采样相电流
在这里插入图片描述
如上图所示, 增加了电流环.至此, SimpleFOC整个框架都移植完成, 后续只需要根据自己项目的硬件改变驱动代码即可.
效果如下:

20250123-200906

RTT
在这里插入图片描述
如上图所示,三相占空比依然是马鞍波。当我用手去给电机施加阻力时,PID要维持目标转速,将马鞍波变大,提高扭矩抵抗阻力。

github:
项目源码:https://github.com/q164129345/MCU_Develop/tree/main/simplefoc10_stm32f103_vel_close_with_current
gitee(国内):
项目源码:https://gitee.com/wallace89/MCU_Develop/tree/main/simplefoc10_stm32f103_vel_close_with_current

一、代码


1.1、user_main.cpp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、细节补充


2.1、电流环的两种控制模式dc_current与foc_current

在这里插入图片描述

  • dc_current模式只闭环扭矩分量Iq, Id默认为0(如果设置了相电感, Id也会有相应的值, 但不需要加入PID控制).
  • foc_current模式同时闭环扭矩分量Iq与励磁分量Id.

为什么分两种模式?基于现在我对FOC的认知水平.了解到:

  1. 当控制的无刷电机不会超过额定转速时, 用dc_current模式更合适. 此时, 只需要控制好扭矩分量Iq即可.
  2. 当控制的无刷电机需要超过额定转速时, 需要用foc_current. 此时, 需要励磁分量Id参与控制才能实现稳定的控制.
    在这里插入图片描述
    如上所示, 在BLDCMotor.cpp的函数void BLDCMotor::loopFOC()看到, 分别对dc_current模式与foc_current模式的算法区分开.

2.2、STM32F103完成一次FOC速度闭环控制一共需要多长时间?

STM32F103完成一次FOC速度闭环控制需要约431us. 运行一次loopFOC()方法与move()方法. STM32F103属于Cortex-M3架构, 没有硬件浮点运算器, 所以执行浮点运算的效率很差. 相比之下, STM32F407之类的Cortex-M4架构的MCU, 有硬件浮点运算器, 执行浮点运算的效率就比较高. 后续, 会更新STM32F407的SimpleFOC的实验.
在这里插入图片描述
在这里插入图片描述
如上所示, 通过示波器测量出来, 一次FOC速度闭环控制约431us.

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐