黑心单片机 发表于 2021-11-9 09:52

X_CUBE_SPN7 程序电机启动抖动问题

前言
如果客户从 ST 官网上下载了 X_CUBE_SPN7 的 BLDC 电机控制程序, 并且使用 Keil 做为编译工具, 那么在运行电机程序时
就会遇到电机无法正常启动问题, 并且无法进行程序调试, 本文旨在说明这个问题所在, 并给出调整方法。

黑心单片机 发表于 2021-11-9 09:54

X_CUBE_SPN7 库描述
该电机库用于 BLDC 的方波控制, 实现了无传感控制方式, 使用 PWM_OFF 的 ADC 检测模式用于检测过零点, 通用于
STM32F0, STM32F1, STM32F3, STM32F4 系列单片机。

黑心单片机 发表于 2021-11-9 09:56

问题描述
ST 官网下载的 X_CUBE_SPN7 程序, 使用 IAR 编译下载到芯片中, 电机运行正常, 如果使用 Keil 则问题比较大, 电机抖动
无法启动, 并且调试模式无法进入。

黑心单片机 发表于 2021-11-9 09:56

解决方法
关于无法调试问题
程序可以下载到 Flash 中但无法进行调试, 按 RESET 后程序也无法回到*.s 中; 察看 Keil 的 Debug 选项, 发现 Options for
Target Debug Settings Debug Download Options 选项在默认情况下, Download to Flash 选项被打勾了, 需要去掉
这个勾; 需要我们使用 ST Flash 算法进行下载才能正常仿真, 详细解释 Keil 网站上有具体说明:链接


黑心单片机 发表于 2021-11-9 09:57

关于电机抖动问题
问题根源在于 Keil 默认编译使用了 Micro LIB, microlib 是缺省 C 库的备选库, microlib 进行了高度优化以使代码变得很小,
对于大多数应用这个是最佳选择, 但这个备选库存在不符合 ISO C 库标准, 不支持某些 ISO 特性,并且其他特性具有的功能
也较少, 不符合 IEEE 754 二进制浮点算法标准; 有些情况下有些编译代码变得很慢;


可以看到当使用 microlib 库进行编译的时候 MC_SixStep_Ramp_Motor_calc 这个函数执行的 States 数据为 49301
( 104333-53022) , 而不使用 microlib 进行编译时 MC_SixStep_Ramp_Motor_calc 执行的 states 数据为 1687; 两者相差甚
远, 这个启动函数执行时间长会导致中断无法正常运行;

这样如果客户使用 ST 电机库, 并且使用 Keil 进行编译的话, 需要去掉 microlib 选项; 当然编译过程中也会相应带来所占用的
Flash 空间变大; 或者客户可以对启动函数 MC_SixStep_Ramp_Motor_calc 进行修改, 这个部分有开方的操作, 让启动代码
变简单一些也是可以的;


sparrow054 发表于 2021-11-9 10:48

这和电机的抖动都会有关系?

观海 发表于 2021-12-4 19:27

这个问题是第一个共性吗

guanjiaer 发表于 2021-12-4 19:30

如果用iar编译呢

heimaojingzhang 发表于 2021-12-4 20:02

是说不能连接仿真器进行调试吗

keaibukelian 发表于 2021-12-4 20:04

这个是在什么情况下发现的呢

tpgf 发表于 2021-12-4 20:07

是软件的缺陷吗

labasi 发表于 2021-12-4 20:09

抖动影响大不大啊
页: [1]
查看完整版本: X_CUBE_SPN7 程序电机启动抖动问题