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.

BLDC3-1例程中,SpeedScaler是怎么计算的??

speed1.BaseRpm = 120*(BASE_FREQ/P);
speed1.SpeedScaler = (Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));

按照SPEED技术背景计算时SPeedScaler=60/(T*K*n*BaseRpm)

这样计算的话,怎么也得不出例程所给的结果啊,还请各位老师指导。谢谢!!


  • speed1.BaseRpm = 120*(BASE_FREQ/P);
    speed1.SpeedScaler = (Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));

    按照SPEED技术背景计算时SPeedScaler=60/(T*K*n*BaseRpm)

    ERIC:
    我们来先看看例程里面是如何计算转速的,再反过来看看这个参数是如何变成这个值的。
    这个是关于速度的相关参数初始化:
    // Initialize the SPEED_PR module
    speed1.InputSelect = 0;
    speed1.BaseRpm = 120*(BASE_FREQ/POLES);
    speed1.SpeedScaler = (Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));

    这个是中断里面对转速计算的调用,即每转一圈,记录下当前的VitrualTimer的计数值
    if ((pwm1.CmtnPointer==5)&&(PreviousState==4)&&(hall1.CmtnTrigHall==0x7FFF))
    {
    speed1.TimeStamp = VirtualTimer;
    SPEED_PR_MACRO(speed1);
    }
    而计数器是在中断函数里面进行累加的,计数器的计数累加的频率是中断的频率
    // ------------------------------------------------------------------------------
    // Increase virtual timer and force 15 bit wrap around
    // ------------------------------------------------------------------------------
    VirtualTimer++;
    VirtualTimer &= 0x00007FFF;

    那么我们正常计算转速是这样的:
    转速频率 = 中断频率/两次VitrualTimer计数值之差, 即Fisr/Δt , Fisr 为中断频率(ISR_FREQUENCY/0.001), Δt为两次vitual timer 计数值之差
    如果换算成RPM,
    转速RPM = Fisr *60*2/(Δt*P), P为电机极数
    其中BaseRPM的定义为120*(BASE_FREQ/POLES);
    那么转速RPM = Fisr *60*2/(Δt*P) = (Fisr * BaseRPM)/(BASE_FREQ*Δt) = BaseRPM * SpeedScaler /Δt
    这也是SPEED_PR_MACRO(speed1) 去计算的:

    v.EventPeriod = v.NewTimeStamp - v.OldTimeStamp; \
    \
    if (v.EventPeriod < 0) \
    v.EventPeriod += 32767; /* 0x7FFF = 32767*/ \
    } \
    \
    v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod); \
    \

    v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);


    按照SPEED技术背景计算时SPeedScaler=60/(T*K*n*BaseRpm) 里面的算法我也有点奇怪,所以建议还是按照实际的例程去算吧。
    转速频率 = 1/(T*K*n*Δt)
    同理换算成转速 = 60*2/(T*K*n*Δt*P)
  • 很谢谢老师这么耐心讲解!
    为TI老师点赞!
  • 老师您好,问下这个转速RPM = Fisr *60*2/(Δt*P)怎么解释,这个2,这个60在这什么意思