X_CUBE_SPN7程序电机启动抖动问题 & X C1 w1 a4 W- G' G n: N前言1 E2 q7 `. ]6 {2 G% p* U 8 d6 M, Q, \% S# `' N* I1 k如果客户从ST官网上下载了X_CUBE_SPN7的BLDC电机控制程序,并且使用Keil做为编译工具,那么在运行电机程序时就会遇到电机无**常启动问题,并且无法进行程序调试,本文旨在说明这个问题所在,并给出调整方法。 X_CUBE_SPN7库描述& [& ]( X8 [$ b! F, y) D 该电机库用于BLDC的方波控制,实现了无传感控制方式,使用PWM_OFF的ADC检测模式用于检测过零点,通用于STM32F0,STM32F1,STM32F3,STM32F4系列单片机。 ' K- Z% F6 p; E : L U3 [$ A$ B" o7 d2 D- y) H问题描述 ST官网下载的X_CUBE_SPN7程序,使用IAR编译下载到芯片中,电机运行正常,如果使用Keil则问题比较大,电机抖动无法启动,并且调试模式无法进入。* a. {) f% l3 H2 r0 Y; `2 G* f: H ; k2 r0 K& x6 L$ B 解决方法 关于无法调试问题) i* R9 V, F) x. V2 \, d " e) \" m) i# {$ m5 L+ E程序可以下载到Flash中但无法进行调试,按RESET后程序也无法回到*.s中;察看Keil的Debug选项,发现Options for Target → Debug → Settings → Debug → Download Options选项在默认情况下,Download to Flash选项被打勾了,需要去掉这个勾;需要我们使用ST Flash算法进行下载才能正常仿真,详细解释Keil网站上有具体说明: http://www.keil.com/support/docs/3508.htm 关于电机抖动问题 问题根源在于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;两者相差甚远,这个启动函数执行时间长会导致中断无**常运行; ( X$ W: g B" L# F A: t" ^这样如果客户使用ST电机库,并且使用Keil进行编译的话,需要去掉microlib选项;当然编译过程中也会相应带来所占用的Flash空间变大;或者客户可以对启动函数MC_SixStep_Ramp_Motor_calc进行修改,这个部分有开方的操作,让启动代码变简单一些也是可以的; ; Z4 b( n5 b3 v+ m3 s6 M# ^1 _$ v( V & E& L# i& q- n- D' ? 8 Z: Q$ G. u9 ?) j% C j* d/ Q' `" }" C/ S, W+ R! a4 w |
看一下!!!! |
消灭0回复 |
谢谢提醒 |
这个好,学习了; V* E9 [8 l8 h |