STMCU小助手
发布时间:2022-8-9 23:51
|
前言 如果客户从 ST 官网上下载了 X_CUBE_SPN7 的 BLDC 电机控制程序,并且使用 Keil 做为编译工具,那么在运行电机程序时 就会遇到电机无法正常启动问题,并且无法进行程序调试,本文旨在说明这个问题所在,并给出调整方法。4 _7 l, o5 ?5 q+ @) \ X_CUBE_SPN7 库描述 5 }1 g A3 ]- X: G5 w9 S; D 该电机库用于 BLDC 的方波控制,实现了无传感控制方式,使用 PWM_OFF 的 ADC 检测模式用于检测过零点,通用于STM32F0,STM32F1,STM32F3,STM32F4 系列单片机。 3 Z& s, H5 l+ H7 } 问题描述 ST 官网下载的 X_CUBE_SPN7 程序,使用 IAR 编译下载到芯片中,电机运行正常,如果使用 Keil 则问题比较大,电机抖动无法启动,并且调试模式无法进入。+ o4 ~- g7 t8 k1 ?, R- N: m " R" t f& _" p y 解决方法 关于无法调试问题 _9 A1 B4 Y9 f 程序可以下载到 Flash 中但无法进行调试,按 RESET 后程序也无法回到*.s 中;察看 Keil 的 Debug 选项,发现 Options for Target -Debug -Settings -Debug -Download Options 选项在默认情况下,Download to Flash 选项被打勾了,需要去掉这个勾;需要我们使用 ST Flash 算法进行下载才能正常仿真,详细解释 Keil 网站上有具体说明: & S' }" d9 L& q- ^& T) _7 @ ; n( d; F2 s* ?2 @2 D
关于电机抖动问题 9 p8 F7 W; H8 a" \ 问题根源在于 Keil 默认编译使用了 Micro LIB,microlib 是缺省 C 库的备选库,microlib 进行了高度优化以使代码变得很小,对于大多数应用这个是最佳选择,但这个备选库存在不符合 ISO C 库标准, 不支持某些 ISO 特性,并且其他特性具有的功能也较少,不符合 IEEE 754 二进制浮点算法标准;有些情况下有些编译代码变得很慢;* g) s: q9 e+ @" H
; g7 c6 m/ Z) W& T" y- j * y6 A- p, n4 G 可以看到当使用 microlib 库进行编译的时候 MC_SixStep_Ramp_Motor_calc 这个函数执行的 States 数据为 49301(104333-53022),而不使用 microlib 进行编译时 MC_SixStep_Ramp_Motor_calc 执行的 states 数据为 1687;两者相差甚远,这个启动函数执行时间长会导致中断无法正常运行; x% B$ a( t& K9 E& _3 o2 H8 L ( E8 I( p: K) F) R, B
5 Y {8 I1 N {) t . o& m- }& E3 d- L& F' D 这样如果客户使用 ST 电机库,并且使用 Keil 进行编译的话,需要去掉 microlib 选项;当然编译过程中也会相应带来所占用的Flash 空间变大;或者客户可以对启动函数 MC_SixStep_Ramp_Motor_calc 进行修改,这个部分有开方的操作,让启动代码变简单一些也是可以的; 1 e7 Y6 E2 F+ ]9 S: n, x+ v 完整版请查看:附件 + `2 }, u% b% Z: M2 e3 g 1 q Y- z X* I5 } - p# s; S/ L" }8 c1 T: M7 T |
X_CUBE_SPN7程序电机启动抖动问题.pdf
下载316.96 KB, 下载次数: 1
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版