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

2019-12-30 19:25发布

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

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

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

你可以尝试,他们的硬件除法,或是用快速除法  移位相减法,来计算。会快一些
zjjhzj19711129
2楼-- · 2020-01-05 05:13
可以看看英飞凌的XMC1302  ,他有MATH处理器,可以用硬件的触发和三角函数处理
铁驴不倒!
3楼-- · 2020-01-05 09:44
ssclark1988 发表于 2016-5-23 16:20
帅哥,终于找到跟我一样掉进这个坑里的人了

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

MARK 高频中断&除法
Jacky.Qiu
4楼-- · 2020-01-05 14:31
 精彩回答 2  元偷偷看……
hd12
5楼-- · 2020-01-05 20:09
一下纯属猜测,
1.
Speed = Scaler / T
猜测,除数T是不是每次PWM中断时都会被更新,第一次还没算完就会被第二次的PWM中断改掉导致出错,试下加个中间变量,
T_temp = T;
Speed = Scaler / T_temp ;

2.
这条代码在中断里面被调用了,你的PWM频率30K,则中断周期33.3us,如果除法就占了30us(进出中断还要开销呢),明显本应该发生的PWM中断更新,会因为上一次中断未完成而被延迟

猜楼主是第二种情况

一周热门 更多>