在异步电机控制例程中,通过输入一个SpeedRef速度参考值输入到RMP_CNTL中产生一个输出,进入RAMP_GEN产生一个变换角用于PARK和反PARK变换。
问题一:rampgen.c和rmp_cntl.c的作用及具体实现方法
问题二:速度参考值的给定与实际做开环实验时的电机运转值有何关系?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在异步电机控制例程中,通过输入一个SpeedRef速度参考值输入到RMP_CNTL中产生一个输出,进入RAMP_GEN产生一个变换角用于PARK和反PARK变换。
问题一:rampgen.c和rmp_cntl.c的作用及具体实现方法
问题二:速度参考值的给定与实际做开环实验时的电机运转值有何关系?
如Billy所说,RAMP_CNTL是用于斜坡激励,让速度信号的变换以斜坡的方式增加或者减小;
RAMPGEN是根据斜坡函数的输出(频率),产生对应的角度。因为是开环的,所以转子角度需要人工设置。
在ControlSuite下面有这两个模块的介绍文档,ControlSuite在TI官网能够找到下载链接
void rampgen_calc(RAMPGEN *v)
{
// Compute the angle rate
v->Angle += _IQmpy(v->StepAngleMax,v->Freq);
此处,提到了StepAngleMax,
// Saturate the angle rate within (-1,1)
if (v->Angle>_IQ(1.0))
v->Angle -= _IQ(1.0);
else if (v->Angle<_IQ(-1.0))
v->Angle += _IQ(1.0);
// Compute the ramp output
v->Out = _IQmpy(v->Angle,v->Gain) + v->Offset;
// Saturate the ramp output within (-1,1)
if (v->Out>_IQ(1.0))
v->Out -= _IQ(1.0);
else if (v->Out<_IQ(-1.0))
v->Out += _IQ(1.0);
void rampgen_calc(RAMPGEN *v)
{
// Compute the angle rate
v->Angle += _IQmpy(v->StepAngleMax,v->Freq);
此处,提到了StepAngleMax,按照说明文档的解释,StepAngleMax=_IQ(fb*Tb),这个到处语句为何在此模块的程序中没有体现?
// Saturate the angle rate within (-1,1)
if (v->Angle>_IQ(1.0))
v->Angle -= _IQ(1.0);
else if (v->Angle<_IQ(-1.0))
v->Angle += _IQ(1.0);
// Compute the ramp output
v->Out = _IQmpy(v->Angle,v->Gain) + v->Offset;
// Saturate the ramp output within (-1,1)
if (v->Out>_IQ(1.0))
v->Out -= _IQ(1.0);
else if (v->Out<_IQ(-1.0))
v->Out += _IQ(1.0);