DSPIC33EP汇编关于直线电机控制速度滤波求助
本帖最后由 zddvszw 于 2018-1-8 14:46 编辑本人最近使用DSPIC33ep做同步直线电机控制,线性霍尔做速度反馈。偶然发现一种滤波算法,效果不错。未使用这种方法滤波,由于线性霍尔周期切换(直线电机一个周期组运行完,进入下一个周期),导致反馈速度的跳动。使用使用,反馈速度很光滑,就是有滞后。本人不太懂汇编,麻烦有经验的朋友帮忙解释下。到时候给大家共享结果。代码和效果图如下:
.global _CalcOmegaFltred
.global CalcOmegaFltred
_CalcOmegaFltred:
CalcOmegaFltred:
mov_SMC_OmegaFltred,w0
mov_SMC_Omega,w4
mov_SMC_FiltOmeCoef,w5
lac w0,A
mpy w4*w5,B
add A
mov _SMC_OmegaFltred,W4
mpy w4*w5,B
neg B
add A
sac.r A,#0,w0
mov w0,_SMC_OmegaFltred
return
.end 补充下,_SMC_OmegaFltred是滤波输出的变量,_SMC_Omega为反馈速度输入,_SMC_FiltOmeCoef是一个系数 out = (1-k)out + k*in 20061002838 发表于 2018-1-8 15:17
out = (1-k)out + k*in
neg不是取反的命令吗?这个公式没有体现吧? out = out + k * in + (-k*out) 20061002838 发表于 2018-1-10 15:53
out = out + k * in + (-k*out)
之前看错了,不好意思,neg是取补码的指令。 20061002838 发表于 2018-1-8 15:17
out = (1-k)out + k*in
(out*k)补码是不是等于1-out*k? 就是取反,C语言‘-’的作用 20061002838 发表于 2018-1-10 15:53
out = out + k * in + (-k*out)
不对,我按照这个公式用c表示,效果不同 问个问题,为什么用DSPIC33ep?最近也被这个单片机搞得头大,做法都是汇编的,改成C就不能运行!{:sweat:} 我也是用dsPIC33EP做馬達控制,不過我是接旋轉譯碼器1000pps的,利用MCU內部的QEI介面去讀取位置程式再去計算速度,用C語言寫的。
页:
[1]