用的28034芯片调试一个双闭环Buck电路,在不使用IQ变量的时候已经调通程序,但是把以下变量定义为iq变量后就无法实现功能,不知道问题出在哪里。
IQ定标定在19。
下面贴出改变的代码部分:
1. 变量定义部分,原来这些_iq变量全部定义为float变量能实现功能
typedef struct{
_iq Error;
_iq PreErr;
_iq Kp;
_iq Ki;
_iq OutMax;
_iq OutMin;
_iq PIDOut;
_iq PrePIDOut;
}INC_PID;
struct BUCKDEF
{
_iq PWMDuty;
_iq VBatref;
_iq IBatref;
}
2. 注释掉的是原来能实现功能的程序
MCtrl.Buck.VBat_PID.Kp = _IQ(1.5);
MCtrl.Buck.VBat_PID.Ki = _IQ(0.3);
MCtrl.Buck.IBat_PID.Kp = _IQ(0.6);
MCtrl.Buck.IBat_PID.Ki = _IQ(0.05);
MCtrl.Buck.VBat_PID.OutMax = _IQ(2.3);
MCtrl.Buck.VBat_PID.OutMin = _IQ(0.8);
MCtrl.Buck.IBat_PID.OutMax = _IQ(0.9);
MCtrl.Buck.IBat_PID.OutMin = _IQ(0.1);
MCtrl.Buck.VBatref = _IQ(0.044798);
// MCtrl.Buck.VBat_PID.Kp = 1.5;
// MCtrl.Buck.VBat_PID.Ki = 0.3;
// MCtrl.Buck.IBat_PID.Kp = 0.6;
// MCtrl.Buck.IBat_PID.Ki = 0.05;
//
// MCtrl.Buck.VBat_PID.OutMax = 2.3;
// MCtrl.Buck.VBat_PID.OutMin = 0.8;
// MCtrl.Buck.IBat_PID.OutMax = 0.9;
// MCtrl.Buck.IBat_PID.OutMin = 0.1;
//
// MCtrl.Buck.VBatref = 0.044798;
MCtrl.Buck.VBat_PID.Error = MCtrl.Buck.VBatref - _IQ( PAdc.VBat_gqv*3.0/4096 );
// MCtrl.Buck.VBat_PID.Error = MCtrl.Buck.VBatref - PAdc.VBat_gqv*3.0/4096;
MCtrl.Buck.IBat_PID.Error = MCtrl.Buck.IBatref - _IQ( PAdc.IBat_gqv*3.0/4096 );
// MCtrl.Buck.IBat_PID.Error = MCtrl.Buck.IBatref - PAdc.IBat_gqv*3.0/4096;
EPwm1Regs.CMPA.half.CMPA = (Uint16)_IQmpy(MCtrl.Buck.PWMDuty,(int32)MPwm.PRD_REG);
// EPwm1Regs.CMPA.half.CMPA = (Uint16)(MCtrl.Buck.PWMDuty*(int32)MPwm.PRD_REG);