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.
尊敬的 TI 社区:
我尝试使用 FOC 技术控制 PMSM。
我从一个示例项目"无传感器28335"开始、并进行了一些修改。
我为电流和速度环路、QEP 模块(4096条编码器线路)、速度宏使用了 PI 控制器。。
lsw = 0,转子移动一个位,然后被锁定:磁场在 d 轴上定向。
qep1.calibratedAngle 等于 0。
lsw = 1:当我使用 park.angle = rg1.out 时,转子会旋转,但 rg1.out 和 qep1.thetaElectric 之间有很大的差异。
对于 park.angle=qep1.Thetaelectric、在这种情况下、转子保持锁定状态不会旋转。
我的程序如下所示,
----------------------------------------------------
if (lsw = 0) RC1.targetValue = 0;
否则 RC1.targetValue = spdrF1;//1.
RC_MACRO (RC1)
//----------------------------------
// 连接斜坡生成模块的输入并调用斜坡生成器宏
//----------------------------------
rg1.Freq = RC1.SetpointValue;
RG_MACRO (rg1)
//校准角度
如果(lsw = 0){EQep1Regs.QPOSCNT=0;EQep1Regs.QCLR.bit.IEL = 1;}//重置位置 cnt。
if (((EQep1Regs.QDLG.bit.IEL=1)&& Init_IFlag=0)//检查第一次出现的索引
{qep1.CalibratedAngle= EQep1Regs.QPOSILAT;Init_IFlag++;}//保持锁存位置
if (lsw!=0) QEP_MACRO (qep1);
//----------------------------------
// 测量相电流、减去偏移并将其从(-0.5、+0.5)标准化为(-1、+1)。
// 连接 Clarke 模块的输入并调用 Clarke 变换宏
//----------------------------------
clarke1.as=(AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909;//相位 A 电流
clarke1.B=(AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909;//相位 B 电流
Clarke_macro (clarke1)
//----------------------------------
// 连接驻车模块的输入并调用驻车变速器。 宏
//----------------------------------
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
if (lsw = 0) park1.Angle = 0;
否则、如果(lsw = 1) park1.Angle = qep1.ElecTheta;//rg1.Out;//
park1.sine =_IQsincu (park1.Angle);
park1.Cosine =_IQcosPU (park1.Angle);
PARK_MACRO (park1)
//----------------------------------
// 调用 QEP 计算模块
//----------------------------------
QEP_MACRO (1、qep1);
//----------------------------------
// 连接 SPEED_FR 模块的输入并调用速度计算宏
//----------------------------------
speed1.ElecTheta = qep1.ElecTheta;
speed1.DirectionQep =(Int32)(qep1.DirectionQep);
SPEED_FR_MACRO (speed1)
//----------------------------------
// 连接 PI 的速度输入
//----------------------------------
if (SpeedLoopCount=SpeedLoopPrescaler){
pi_spd.Ref = RC1.SetpointValue;
pi_spd.fbk = speed1.Speed;
pi_macro (pi_spd);
SpeedLoopCount=1;
}
否则{
SpeedLoopCount= SpeedLoopCount+1;
}
//----------------------------------
// 连接 PI 模块的输入并调用 PI IQ 控制器宏
//----------------------------------
if (lsw = 0) pi_iq.Ref = 0;
否则、如果(lsw = 1) pi_iq.Ref = pi_spd.out;//_iq (0.1);//
pi_iq.fbk = park1.qs;
pi_macro (pi_iq)
//----------------------------------
// 连接 PI 模块的输入并调用 PI ID 控制器宏
//----------------------------------
if (lsw = 0) pi_id.Ref =_IQ (0.05);
否则 pi_id.Ref = IDREF;
pi_id.fbk = park1.ds;
pi_macro (pi_id)
//----------------------------------
// 连接 INV_PARK 模块的输入并调用逆向 Park 转换。 宏
//----------------------------------
ipark1.ds = pi_id.out;
ipark1.qs = pi_iq.out;
ipark1.sine = park1.sine;
ipark1.Cosine = park1.Cosine;
IPark_MACRO (ipark1)
//----------------------------------
// 连接 SVGEN_DQ 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
svgen1.Ualpha = ipark1.Alpha;
svgen1.Ubeta = ipark1.Beta;
SVGENDQ_MACRO (svgen1)
//----------------------------------
// 连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
pwm1.Mfunc1 = svgen1.Ta;
pwm1.MfuncC2 = svgen1.tb;
pwm1.MfuncC3 = svgen1.tc;
PWM_MACRO (1、2、3、pwm1) //计算新的 PWM 比较值
//----------------------------------
// 连接 PWMDAC 模块的输入
//----------------------------------
pwmdac1.Mfunc1 = clarke1.as;
pwmdac1.MfuncC2 = clarke1.B;
PWMDAC_MACRO (6、pwmdac1) // PWMDAC 6A、6B
pwmdac1.Mfunc1 = qep1.ElecTheta;
pwmdac1.MfuncC2 = svgen1.tB-svgen1.tc;
PWMDAC_MACRO (7、pwmdac1) // PWMDAC 7A、7B
//----------------------------------
// 连接数据记录模块的输入
//----------------------------------
DlogCh1 =_IQtoQ15 (clarke1.As);
DlogCh2 =_IQtoQ15 (clarke1.Bs);
DlogCh3 =_IQtoQ15 (qep1.ElecTheta);
DlogCh4 =_IQtoQ15 (rg1.out);
请帮帮我。
此致、
罗燕明、您好!
我解决了这个问题:我的编码器生成了六个信号 A、B、I 和它们的互补信号。 我只使用 A、B、I 作为 QEP 模块的输入、寄生信号(由逆变器引起)在 ThetaElectrical 中产生了很多失真。 我添加了 AM26LS32ACN、现在它工作正常。
谢谢、
我遇到了位置环路的另一个问题。
我的主要目标是使索引信号(来自编码器)与外部信号(来自 GBF)同步。
我使用"捕获"从外部信号读取频率:即参考速度。
然后,我使用电流和速度环路应用了矢量控制:我使用示波器检查了 IQ 电流基准和反馈(也用于速度),使用板载 PWM6A PWM6B 引脚。 PI 校正器工作正常。
使用 Ecaps*Regs 的 delta 模式配置,我使用由 cap.EventPeriod 偏离的捕获 TSCTR 的计时器作为位置参考(外部信号)和位置反馈(来自索引)的图像。然后,我为此循环使用比例校正器。
在稳定状态下、电流和速度反馈与小数点后最多两位数的引用相同(在 CCS 中使用表达式窗口)。
同步两个信号的问题很复杂:索引信号在外部信号的上升沿附近振荡。
您是否认为这是由于速度和电流的基准与反馈之间的小误差造成的,当我们从 p.u 传递到实刻度时,该误差变得相当大。
例如,转速为3000rpm 时:速度误差= 0.005pu 时,这意味着实际转速误差为15rpm。