M0没有硬件除法,如何高效得实现较大的除法算式??

2019-12-30 19:25发布

电机PI调速时,计算速度值时遇到一些问题。
计算速度时用到一个位数较大的除法,原来用的是 TI 的 DSP 没有问题,后移植到 M0 时出问题。
后来发现 M0 没有硬件除法指令,计算时耗时很大,导致异常。
测速采用的 T 法,所以最终简化的公式是:
        Speed = Scaler / T,T 为测得的一个变化量。
速度调节是几个 ms 调节一次,而这个算式得花很长时间,根本无法提供给 PI 模块的速度值来进行调节。

请教大家都是怎么做的?
坛里应该有很多人用 M0 来做电机控制的吧,那于这种除法是怎么来做的,或者怎么来避免?
谢谢~~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
gxnnhy
1楼-- · 2020-01-04 05:17
ssclark1988 发表于 2016-5-23 16:20
帅哥,终于找到跟我一样掉进这个坑里的人了

后来你怎么解决这个问题的?

我是在密集中断里面用到了除法,楼上很多人没遇到过是无法领会的!

我的解决办法是把STM32F030换成GD32F130,内核从M0变成M3
yuntian
2楼-- · 2020-01-04 09:41
计算量大才有影响
tdchenke
3楼-- · 2020-01-04 11:32
可以试试用开源的fix16数学库进行除法运算
laoshuhunya
4楼-- · 2020-01-04 16:41
DSP跳到M0,落差太大了。。。至少也得M3啊
虽然M0、M3都是M家族,但一个是ARMv6架构,一个是ARMv7架构,差别不是一点点。
weichao4808335
5楼-- · 2020-01-04 18:12
 精彩回答 2  元偷偷看……
EMC菜鸟
6楼-- · 2020-01-04 22:07
本帖最后由 EMC菜鸟 于 2017-3-6 17:01 编辑
ssclark1988 发表于 2016-5-23 16:30
不是我屏蔽,是发现在运行除法算式过程中,PWM 中断就不去了,只有等他运算完了才能再进去。 ...


虽然没遇到你这个问题,但是你描述的现象如果存在,则一定是 CPU 的 BUG (没有硬件除法器,那么无非是调用其他指令完成这个功能,与 PWM 何干?),看看在该芯片的 Errata sheet 里是否能找到相应的描述(应该是对 PWM 的使用限制),如果没有,,,,,,那就是玄学的范畴了!

也许我做事喜欢追根求源,所以虽然也遇到几个“玄学”的问题,但要么从 Errata sheet 里找到了答案,要么从使用上避开了问题,,,,

一周热门 更多>