TI中文支持网
TI专业的中文技术问题搜集分享网站

如何确定初始角度

在PMSM3-1中是如何计算初始角度的呢?

// —————————————————————————–
if(LockRotorFlag==TRUE) // locked rotor mode
{

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = 0;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = 0;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==TRUE

else if(LockRotorFlag==FALSE) // spinning mode
{
// spinning mode if LockRotorFlag = 0

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = rg1.Out;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = rg1.Out;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==FALSE

Young Hu:

据我的了解,当lsw=0时,会把角度强制设置为0,那么转子会被拉到角度0去。

lsw=1时,锯齿波模块或者速度环加上,通过反电动势获取角度

在PMSM3-1中是如何计算初始角度的呢?

// —————————————————————————–
if(LockRotorFlag==TRUE) // locked rotor mode
{

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = 0;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = 0;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==TRUE

else if(LockRotorFlag==FALSE) // spinning mode
{
// spinning mode if LockRotorFlag = 0

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = rg1.Out;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = rg1.Out;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==FALSE

xining yan:

回复 Young Hu:

要是没有ISW这个变量怎么办啊,只有上述的代码啊?PMSM3-1没有有您说的ISW开关

在PMSM3-1中是如何计算初始角度的呢?

// —————————————————————————–
if(LockRotorFlag==TRUE) // locked rotor mode
{

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = 0;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = 0;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==TRUE

else if(LockRotorFlag==FALSE) // spinning mode
{
// spinning mode if LockRotorFlag = 0

// ——————————————————————————
// 链接 PARK 模块的输入 并且调用 park transformation 计算 函数 .
// ——————————————————————————
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = rg1.Out;
park1.calc( & park1);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调用 PID IQ controller 计算 函数 .
// ——————————————————————————
pid1_iq.Ref = _IQ(IqRef);
pid1_iq.Fdb = park1.Qs;
pid1_iq.calc( & pid1_iq);

// ——————————————————————————
// 链接 PID_REG3 模块的输入 并且调 PID ID controller 计算 函数 .
// ——————————————————————————
pid1_id.Ref = _IQ(IdRef);
pid1_id.Fdb = park1.Ds;
pid1_id.calc( & pid1_id);

// ——————————————————————————
// 链接 INV_PARK 模块的输入 并且调用 inverse park transformation 计算 函数 .
// ——————————————————————————
ipark1.Ds = pid1_id.Out;
ipark1.Qs = pid1_iq.Out;
ipark1.Angle = rg1.Out;
ipark1.calc( & ipark1);

}
// End: LockRotorFlag==FALSE

user5289799:

回复 Young Hu:

Young Hu,

你好,我最近在做此帖中PMSM控制的LEVEL4的实验,通过通过观测发现 LockRotorFlag=1,并不改变。同时观测LockRotorNum数值虽然一直在增加,但最终会停在23000左右,故不会执行下方else内的控制器程序。 实验现象具体表现为:RUN后,电机叮一声不转动,提示如图所示错误。

望提供一些办法或思路,谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 如何确定初始角度
分享到: 更多 (0)