搜索
查看: 3739|回复: 4

[求助] X-CUBE-SPN7-1.0.0 MDK编译 电机抖动

[复制链接]

该用户从未签到

1

主题

20

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-12
发表于 2016-9-9 15:53:58 | 显示全部楼层 |阅读模式
最近想学习BLDC,于是买了TI的开发板。

开发套件:P-NUCLEO-IHM001,包括NUCLEO-F302R8   和   X-NUCLEO-IHM07M1,另外还有一个PMSM电机。
驱动包:en.X-CUBE-SPN7.zip,版本1.0.0

用keil MDK5 编译之后,烧录到开发板,电机无法启动,且抖动剧烈。但是没有找到原因。

网上说,IAR编译的代码能够正常使用,于是下载安装IAR,果然,电机正常转动。

对比两个工程,发现驱动代码除了启动文件(startup_stm32f302x8.s)之外,完全一样!分析两个启动文件,也没有发现问题。


之后,查看keil MDK工程配置,发现问题:代码优化级别太高了,造成代码无法正常运行!


优化级别

优化级别



另外,很久没用keil MDK,都生疏啦,现在在用Eclipse+GCC,呵呵。

评分

参与人数 1ST金币 +10 收起 理由
zero99 + 10

查看全部评分

回复

使用道具 举报

该用户从未签到

1

主题

20

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-12
 楼主| 发表于 2016-9-12 15:33:22 | 显示全部楼层
本帖最后由 rungwonghuw 于 2016-9-12 15:35 编辑

我发现,虽然修改优化级别之后,电机能够启动,但还是稍微有些震动,这与IAR编译的代码运行结果不一致。于是,我再次找问题,发现keil MDK工程使用了MicroLIB,取消后,一切正常。

QQ图片20160912151017.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

20

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-12
 楼主| 发表于 2016-9-26 16:02:32 | 显示全部楼层
关于MicroLib

microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。
与缺省 C 库之间的差异
microlib 与缺省 C 库之间的主要差异是:
microlib 不符合 ISO C 库标准。 不支持某些 ISO 特性,并且其他特性具有的功能也较少。
microlib 不符合 IEEE 754 二进制浮点算法标准。
microlib 进行了高度优化以使代码变得很小。
无法对区域设置进行配置。 缺省 C 区域设置是唯一可用的区域设置。
不能将 main() 声明为使用参数,并且不能返回内容。
不支持 stdio,但未缓冲的 stdin、stdout 和 stderr 除外。
microlib 对 C99 函数提供有限的支持。
microlib 不支持操作系统函数。
microlib 不支持与位置无关的代码。
microlib 不提供互斥锁来防止非线程安全的代码。
microlib 不支持宽字符或多字节字符串。
与 stdlib 不同,microlib 不支持可选择的单或双区内存模型。 microlib 只提供双区内存模型,即单独的堆栈和堆区。
可以合理地将 microlib 与 --fpmode=std 或 --fpmode=fast 配合使用。
microlib 中的函数负责:
创建一个可在其中执行 C 程序的环境。 这包括:
创建一个堆栈
创建一个堆(如果需要)
初始化程序所用的库的部分组成内容。
调用 main() 以开始执行程序。
要使用 microlib 构建程序,必须使用命令行选项 ??library_type=microlib。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

20

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-12
 楼主| 发表于 2016-9-26 16:03:11 | 显示全部楼层
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

20

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-12
 楼主| 发表于 2016-9-26 16:05:11 | 显示全部楼层
我发现,加速度曲线函数的计算过程非常耗时,且在中断函数中调用,占用时间过长,造成systick中断函数没有时间执行

/** @defgroup MC_SixStep_Ramp_Motor_calc    MC_SixStep_Ramp_Motor_calc
  *  @{
    * @brief Calculate the acceleration profile step by step for motor during start-up
    * @retval None
*/
void MC_SixStep_Ramp_Motor_calc(void)
{

}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-7 20:25 , Processed in 1.173690 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表