如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
Joey Mao:
你好,
你可以延长中断中期,电机控制通常可以使用10K的载波频率,这样时间就会充足些;
另外,你的程序是下载到Flash中的吗?是的话可以copy程序到Ram中运行,速度要快很多,可以缩短程序运行时间
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
lv YB:
回复 Joey Mao:
你好,如果中短周期改为10K,电机运行的时候就会有明显的低频噪音,20K的时候就很安静。我的程序现在属于调试阶段,都在RAM中运行的,除了更改中断周期,还有什么其他办法么?谢谢。
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
Joey Mao:
回复 lv YB:
似乎只能在你的软件代码上想办法了,你的旋变解码部分怎么用时那么长?
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
lv YB:
回复 Joey Mao:
我直接测试的就是标准TI例程pmsm3_3的旋变代码,想看一下软件解码旋变信号效果的,结果花了好久,通过打断点才弄明白是代码执行时间过长,我觉得不应该啊。
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
tangzheng zhang:
回复 Joey Mao:
你好,请问标准的TI电机控制历程在哪里能搜到
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
Joey Mao:
回复 tangzheng zhang:
就在官网可以下载,PMSM 3_3下载地址:
http://www.ti.com.cn/tool/cn/sprc211
http://www.ti.com.cn/tool/cn/sprc178
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
liming Liu:
回复 Joey Mao:
你好!我按照你上边的链接下载了为什么是.exe文件呢!
我下载下来后安装了exe后怎么用,安装完了就找不到了!
如题选编解码文件resolver.c中的程序量实测过长,执行时间为20us左右,而电机控制中断周期为20K,即50us,resolver解码加上电机控制部分的程序之后,时间超出了50us,导致实际结果更新速度不够,比如我给定转速800转,但实际速度只有400转,如果我把以下旋变解码部分程序屏蔽之后,则转速恢复正常,此问题该如何解决呢?
speed1.SinIn = _IQ15toIQ((int32)adc1.Ch3Out);
speed1.CosIn = _IQ15toIQ((int32)adc1.Ch4Out);
speed1.calc(&speed1);
user5128243:
回复 Joey Mao:
请问下是否可以 再上传一下这两个文档啊 谢谢 官网找不到啊