如何在 c 源代码中实现积分

  • 本文关键字:实现 源代码 c math
  • 更新时间 :
  • 英文 :


我想在 c 代码中实现来自 matlab ( https://de.mathworks.com/help/mcb/ref/fluxobserver.html ) 的通量观察器(对于 stm32)。 为此,我需要计算通量计算的积分。 但是,由于我是业余爱好者,我不知道如何在源代码中实现这一点(也不知道如何手动计算)。

ψα= ∫(Vα−IαR)dt− (Ls⋅Iα)

这就是我所说的术语。 强烈建议提供有关此主题的任何帮助。

谢谢

编辑: 这就是我尝试过的:

if(TimerFlag)
{
TimerFlag = 0;
ClarkTransformation(&ialpha, &ibeta, cur_c, cur_b);
ClarkTransformation(&valpha, &vbeta, vol_c, vol_b);
dt = TimeElapsedS - TimeElapsedSOld;
TimeElapsedSOld = TimeElapsedS;
fluxalpha += ((valpha-ialpha*R)*dt - (Ls*ialpha));
fluxbeta += ((vbeta-ibeta*R)*dt - (Ls*ibeta));
fluxrotor = sqrtf((fluxalpha*fluxalpha) + (fluxbeta*fluxbeta));
torquemotor = (3.0f / 2.0f) * PoleNumber * (fluxalpha*ibeta - fluxbeta*ialpha);
anglemotor = arctan(fluxbeta/fluxalpha);
}

离散积分只是求和(矩形规则),所以你只需像你所做的那样为每个样本加起来,但是你也有常量项,不能多次添加......我是这样看的:

// some globals and or init
float fluxalpha= -Ls*ialpha;
float fluxbeta = -Ls*ibeta;
// this is in your timer ISR or whatever
void some_timer_event()
{
float dt = elapsed_time();
fluxalpha += (valpha-ialpha*R)*dt; 
fluxbeta  += (vbeta-ibeta*R)*dt;
}

最新更新