HAL STM32F4 +ARM DSP库跑SVPWM开环速度测试
HAL STM32F4 +ARM DSP库跑SVPWM开环速度测试
-
本篇硬件电路和代码来源于此开源项目:
https://github.com/MengYang-x/STM3F401-FOC/tree/main
-
硬件电路和项目介绍,立创开源广场:
https://oshwhub.com/shadow27/tai-yang-neng-wu-ren-chuan
-
相关篇《自制无感无刷电机驱动板》
-
测试效果:
-
移植到STM32F446上,采用自制电机驱动板,采用EG3112,上下桥臂采用高电平驱动控制。
-
通过
vofa+
输出的三路马鞍波
波形:
- 原作者介绍过的内容,这里就不多做介绍了,详情可以前往立创开源主页了解详情。程序这一块,主要针对stm32F4系列。
测试条件
- STM32F4或者M4内核的相关型号的mcu即可。工程时基于HAL库STM32CubeMX生产的配置工程,移植非常简单。
- 如果手上只有stm32f1系列的,可以参考《SimpleFOC移植STM32(二)—— 开环控制》实现控制。
-
有感或无感无刷电机,个人测试使用的是:
2204-1400KV
无感无刷电机,参数:12N14P(12槽14极),也就是,极对数是14/2=7极对数。(程序中需要填写) -
🧨硬件支持条件:MCU需要支持浮点运算(FPU)功能。
-
一块无刷电机驱动板。(可以参考原作者的硬件。)
- 由于原作者使用的是EG2133驱动芯片,驱动电路中上下桥是连一块的,3路PWM输出即可实现无刷电机转动,如果自己使用的是上下桥独立驱动(6路输出控制),那么需要将定时器的PWM输出通道配置为互补输出通道,(即3路互补输出),同时需要注意输出极性。
- 自制驱动板,驱动桥部分电路
- SVPWM开环速度测试,工程中所需要的必要驱动文件:
MT6701
这里SVPWM开环速度测试,没有使用到,可以屏蔽掉:
- DSP库文件,可以自己从安装的Keil软件ARM文件夹内找到相关驱动库文件:例如:
D:\Keil_v5\ARM\CMSIS\DSP_Lib\Source\FastMathFunctions
;或者在STM32CubeMX
,安装的对应pack包解压文件夹内,:C:\Users\Administrator\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\CMSIS\DSP\Source
或者标准库STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\DSP_Lib
中找到对应的所需驱动文件。
-
- Keil ARM路径下位置:
- Keil ARM路径下位置:
- 也可以到ARM官方的GitHub账号(
https://github.com/ARM-software/CMSIS
)下载所有ARM Cortex-M内核的DSP外设库。
-
- STM32CubeMX,pack解压安装文件位置:
- STM32CubeMX,pack解压安装文件位置:
- 同样在标准外设库中也可以找到:
- 数字信号库包含在路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\DSP_Lib
和STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Lib
下,或者Keil安装目录下D:\Keil_v5\ARM\CMSIS\Lib\ARM
将它们拷贝到目标工程文件夹下。其中Lib文件夹中包含的是经过不同编译器编译后能够运行在Cortex-M4内核上的底层数学库,DSP_Lib文件夹中包含的是调用底层函数封装而成的API函数源码: -
- Lib文件夹中包含的底层库包括:
arm_cortexM4lf_math.lib //---->stm32f4 DSP库跑SVPWM开环速度测试需要使用到的
arm_cortexM4bf_math.lib
arm_cortexM4l_math.lib
arm_cortexM4b_math.lib
arm_cortexM3l_math.lib
arm_cortexM3b_math.lib
arm_cortexM0l_math.lib
arm_cortexM0b_math.lib
-
- 对应工程中所用到的:
arm_cortexM4lf_math.lib
库文件来源。
- 对应工程中所用到的:
- STM32F4 DSP和标准外设库(STSW-STM32065) ST官网下载地址:
https://www.st.com.cn/zh/embedded-software/stsw-stm32065.html
- 当前stm32F4 最新版本:
STSW-STM32065 STM32F4 DSP and standard peripherals library 1.9.0
链接:https://pan.baidu.com/s/1J8VD2re8SRWOGnZXZKcyvQ?pwd=o5an
提取码:o5an
- 工程中配置的重要一步:需要添加相对于的宏,来开启DSP库进行浮点运算和math计算 “
__CC_ARM,__TARGET_FPU_VFP, __FPU_PRESENT=1U, ARM_MATH_CM4
”
STM32CubeMX配置
- 选择一个高级定时器:(注意这里是按照原作者的EG2133驱动芯片配置的,上下桥驱动控制端连一块,进行配置的)
-
🧲采用自制驱动板EG3112,上下桥独立驱动,定时器配置互补通道输出:
-
需要注意一点的是:采用互补通道输出控制方式,这里的死区时间参数,保持默认配置值
0
,如果配置了死区时间,反而对无刷电机的控制造成影响。
-
为了查看输出波形,还需要配置一个串口,方便观察波形。
SVPWM开环速度测试工程说明
- 待测试电机参数配置:
motor.c
中修改测试电机的极对数。
极对数测量
如果知道电机型号,可以找到对应资料查阅多更好。如果无刷电
vofa+
机外转子不是全部密封,看的到外转子内壁上永磁体的,可以直接自己数出来。上门贴了有多少块强磁铁,即可得到此数据。对应外转子密封看不到内壁磁体的测量方法:
- 如果有示波器的情况下,用示波器的探头夹住电机的一根线,另一根接探头,然后旋转电机一圈,截取波形,数下峰的个数(上下峰都算),为偶数值除以2,就是电机的极对数。
- 有低压直流可调电源情况下,限制一定的电流,加载一个小电压到三相中的任意两相,用手转动电机一圈,有稳定位置的个数就是极对。
- SVPWM开环速度参数设定:
OpenVelocity(6.0f); //数值越大,电机旋转的速度越快
- 对于采用3路PWM互补输出方式驱动控制:
// 使能TIMx的通道
void PWM_Init(void)
{
HAL_TIM_Base_Start(&htim1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);
}
串口数据vofa+观测
-
vofa+
设置:添加波形图控件到主窗口
-
设置串口端口号以及数据类型:
-
🪓打开串口,并添加数据到波形图控件中:
-
最终测试效果:
- 需要注意一点,所测得的马鞍波形,并不代表实际电机真实的驱动转动效果,电机的运转效果与驱动电路和电机参数有关,这个波形是理论推导得来的理想模型。
- 在SVPWM开环速度测试运行下,无刷电机的U-V-W相波形:
- 🧨MCU 定时器对应输出通道的PWM驱动波形:
- 🪓这里的PWM频率,通过示波器测得是15.2K,对应的是程序中定时器输出通道:
PWM频率 = MAIN_CLK/(ARR*2)(没有进行分频,中心对齐方式)
- H桥NMOS管栅极驱动波形:
移植工程测试源码
- 基于STM32F446 MIAN FOSC=180MHz,
链接:https://pan.baidu.com/s/1IidjgkeSnOLZg-Dq4Snm9Q?pwd=842c
提取码:842c
文章评论