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.

请教异步电机控制例程中rampgen.c和rmp_cntl.c的作用

Other Parts Discussed in Thread: CONTROLSUITE

在异步电机控制例程中,通过输入一个SpeedRef速度参考值输入到RMP_CNTL中产生一个输出,进入RAMP_GEN产生一个变换角用于PARK和反PARK变换。

问题一:rampgen.c和rmp_cntl.c的作用及具体实现方法

问题二:速度参考值的给定与实际做开环实验时的电机运转值有何关系?

  • 问题1:斜坡函数,自动控制里面斜坡式的激励是很常见的。阶跃激励经过斜坡处理后送至各种控制器的输入。

  • 在程序中有一个base frequency,对应的是speedfref为1时的频率,按照归一化来处理的

  • 请问您能否再详细的说明一下这两个模块的作用?

  • 如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);

  • 为什么数值1就对应SpeedRef?

    帮忙说你下具体计算过程。

    我的意思是修改了Base_FREQ,那对应输出的实际转速就发生改变了?

  • SpeedRef=1输入时,对应的实际的电机转速是多少,这个转速是否可以改变?

    假如说可以改变,那么是通过修改了Base_FREQ的值吗?

    假如说是因为改变了Base_FREQ值,那么对应的就应该是改变了寄存器里面的哪一个值?

    事实上如果上述成立,那就是Base_FREQ值直接影响ePWM1、2、3的比较值输出频率,即通过改变调制波(正弦波)的频率来改变最终的速度。

    不知道我的这个理解是否存在问题?

    请帮忙指正!谢谢!

  • 你好,请问程序中的base frequency,对应的是speedfref为1时的“什么的(或者说谁的)”频率?始终不解

  • 为什么开环的角度一定要人工设置?我觉得对于PMSM,只要转子定位成功,电机启动后转子的角度会自然地上升,然后形成闭环。

    如果说靠人工设置转子角度,那么闭环PI控制还有什么用呢?

  • 只要转子定位成功,转自角度是会自然上升,但是具体上升到多少,还是要由别的东西来告诉它啊,需要用这个角度做变换。所以就直接加了个角度发生器喽