你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

X-CUBE-SPN7-1.0.0 MDK编译 电机抖动

[复制链接]
rungwonghuw 提问时间:2016-9-9 15:53 /
最近想学习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,呵呵。

评分

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

查看全部评分

收藏 6 评论4 发布时间:2016-9-9 15:53

举报

4个回答
rungwonghuw 回答时间:2016-9-12 15:33:22
本帖最后由 rungwonghuw 于 2016-9-12 15:35 编辑

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

QQ图片20160912151017.jpg
rungwonghuw 回答时间: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。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。
rungwonghuw 回答时间:2016-9-26 16:03:11
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。
rungwonghuw 回答时间: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)
{

}

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版