在ccsv10上写入永磁同步电机无速度传感器磁场定向控制的程序时出现如下错误,无法找到aci_fe.h
其具体程序如下
#include "PeripheralHeaderIncludes.h"
#include "HVACI_Sensorless-Settings.h"
#include "IQmathlib.h"
#include "HVACI_Sensorless.h"
#include <math.h>
#pragma CODE_SECTION(MainISR,"ramfuncs");
#pragma CODE_SECTION(OffsetISR,"ramfuncs");
interrupt void MianISR(void);
interrupt void OffsetISR(void);
void DeviceInit();
void MemCopy;
void InitFlash;
void HVDMC_Protection(void);
void A0(void);
void B0(void);
void C0(void);
void A1(void);
void A2(void);
void A3(void);
void B1(void);
void B2(void);
void B3(void);
void C1(void);
void C2(void);
void C3(void);
void(*Alpha_State_Ptr)(void);
void(*A_Task_Ptr)(void);
void(*B_Task_Ptr)(void);
void(*C_Task_Ptr)(void);
extern Uint16 *RamfuncsLoadStart,*RamfuncsLoadEnd,*RamfuncsRunStart;
int16 VTimer0[4];
int16 VTimer1[4];
int16 VTimer2[4];
int16 SerialCommsTimer;
Uint16 OffsetFlag=0;
_iq offcetA=0;
_iq offcetB=0;
_iq offcetC=0;
_iq K1=_IQ(0.998);
_iq K2=_IQ(0.001999);
extern _iq IQsinTable[];
extern _iq IQcosTable[];
_iq VdTesting = _IQ(0.2);
_iq VqTesting = _IQ(0.2);
_iq IdRef = _IQ(0.1);
_iq IqRef = _IQ(0.05);
_iq SpeedRef = _IQ(0.3);
float32 T=0.01/ISR_FREQUENCY;
Uint32 IsrTicker = 0;
Uint16 BackTicker =0;
Uint16 lsw = 0;
Uint16 TripFlagDMC =0;
int ChSel[16] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int TrigSel[16]={5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5};
int ACQPS[16]={8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8};
int16 DlogCh1 =0;
int16 DlogCh2 =0;
int16 DlogCh3 =0;
int16 DlogCh4 =0;
volatile Uint16 EnableFlag = FALSE;
Uint16 SpeedLoopPrescaler =10;
Uint16 SpeedloopCount =1;
SMOPOS_CONST smol_const = SMOPOS_CONST_DEFAULTS;
QEP qep1 = QEP_DEFAULTS;
CAPTURE cap1 = CAPTURE_DEFAULTS;
CLARKE clarke1= ClARKE_DEFAULTS;
PARK park1 = PARK_DEFAULS;
IPARK ipark1 = IPARK_DEFAULTS;
PI_CONTROLLER pi_spd = PI_CONTROLLER_DEFAULTS;
PI_CONTROLLER pi_id = PI_CONTROLLER_DEFAULTS;
PI_CONTROLLER pi_iq = PI_CONTROLLER_DEFAULTS;
PWMGEN pwm1 = PWMGEN_DEFAULTS;
PWMDAC pwmdac1 = PWMDAC_DEFAULTS;
SVGEN svgen1 = SVGEN_DEFAULTS;
RMPCNTL rc1 = RMPCNTL_DEFAULTS;
RAMPGEN rg1 = RAMPGEN _DEFAULTS;
PHASEVOLTAGE volt1 = PHASEVOLTAGE _DEFAULTS;
SPEED_ MEAS _QEP speed1 = SPEED_ MEAS_ QEP_ DEFAULTS;
SPEED _MEAS_ CAP speed2 = SPEED _MEAS_ CAP_ DEFAULTS ;
SPEED_ ESTIMATION speed3 = SPEED_ ESTIMATION_ DEFAULTS;
DLOG_ 4CH dlog = DLOG_ 4CH _DEFAULTS ;
void main(void)
{
DeviceInt();
HemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
CpuTimer0Regs. PRD. all=mSec1;
CpuTimer1Regs. PRD. all =mSec5;
CpuTimer2Regs. PRD. all =mSec50;
Alpha _State_ Ptr=&A0;
A _task _Ptr=&A1;
B _task _Ptr=&B1;
C_ task_ Ptr=&C1;
pwm1. PeriodMax = SYSTEM _FREQUENCY*100000 *T/2;
pwm1. HalfPerMax= pwm1. PeriodMax/2;
pwm1. Deadband= 2.0* SYSTEM FREQUENCY;
PWM_ INIT _MACRO(1,2,3,pwm1)
pwmdac1 . PeriodMax = 500;
pwmdac1. HalfPerMax = pwmdac1 . Per iodMax/2;
PWMDAC_ INIT_ MACRO(6,pwmdac1)
PWMDAC_ INIT_ MACRO(7,pwmdac1)
dlog. iptr1 = &DlogCh1;
dlog. iptr2 = &DlogCh2;
dlog. iptr3 = &DlogCh3;
dlog. iptr4 = &DlogCh4;
dlog. trig_ value = 0x1;
dlog.size = 0x0C8;
dlog. prescalar = 5;
dlog. init(&dlog);
ChSel[0]=1;
ChSel[1]=1;
ChSel[2]=9;
ChSel[3]=3;
ChSel[4]=15;
ChSel[5]=14;
ChSel[6]=12;
ChSel[7]=7;
ADC_MACRO_INIT(ChSel, TrigSel, ACQPS)
qep1. LineEncoder=2500;
qep1. MechScaler= _IQ30(0.25/qep1.LineEncoder);
qep1. PolePairs=POLES/2;
qep1. CalibratedAngle =0;
QEP_INIT_MACRO(1, qep1)
speed1.K1=_IQ21(1/(BASE_FREQ*T));
speed1.K2=_IQ1(1/(1+T*2*PI*5));
speed1.K3=_IQ(1)-speed1.K2;
speed1. BaseRpm= 120 *(BASE_FREQ/POLES);
speed3.K1= _IQ21(1/(BASE_FREQ *T));
speed3.K2=_IQ(1/(1+T*2*PI*5));
speed3.K3= _IQ(1)- speed3.K2;
speed3. BaseRpm= 120*(BASE_FREQ/POLES);
rg1. StepAngleMax=_IQ(BASE_FREQ*T);
smo1_const.Rs= RS;
smo1_const.LS=LS
smo1_const.Ib=BASE_ CURRENT;
smo1_const.Vb=BASE_VOLTAGE;
smo1_const. Ts = T;
SMO_CONST_MACRO( smo1_const)
smo1. Fsmopos=_IQ( smo1_const. Fsmopos);
smo1. Gsmopos=_IQ(smo1_const. Gsmopos);
smol.Kslide=_IQ(0.05308703613);
smol.Kslf=_IQ(0.1057073975);
pi_spd. Kp=_IQ(1.5);
pi_spd. Ki=_IQ(T* SpeedLoopPrescaler/0.2);
pi_spd.Umax=_IQ(0.95);
pi_spd.Umin=_IQ(-0.95);
pi_id. Kp=_IQ(1.0);
pi_id. Ki=_IQ(T/0.04);
pi_id.Umax=_IQ(0.4);
pi_id.Umin=_IQ(-0.4);
pi_iq. Kp=_IQ(1.0);
pi_iq. Ki=_IQ(T/0.04);
pi_iq.Umax=_IQ(0.8);
pi_iq.Umin=_IQ(-0.8);
HVDMC_Protection();
EALLOW;
PievectTable. EPWM1_INT= & OffsetISR;
EDIS;
PieCtrlRegs. PIEIER3. bit. INTx1=1;
EPwm1Regs.ETSEL.bit.INTEN= 1;
EPwm1Regs.ETSEL. bit. INTSEL=2;
EPwm1Regs.ETPS.bit. INTPRD= 1;
EPwm1Regs.ETCLR.bit.INT =1;
IER|= M_INT3;
EINT;
ERTM;
for(;;)
{(* Alpha State Ptr)();
}}
void A0( void)
{
if(CpuTimer0Regs. TCR. bit.TIF = = 1)
{CpuTimerORegs. TCR. bit.TIF = 1;
( *A _Task_ Ptr)();
VTimer0[0]+ + ;
SerialCommsTimer+ + ;}
Alpha State Ptr = &B0;}
void B0(void)
{if(CpuTimer1Regs. TCR. bit.TIF = = 1)
{CpuTimer1Regs. TCR. bit. TIF = 1;
(*B_ Task _Ptr)();
VTimer1[0]+ + ;
}
Alpha _State_ Ptr = &C0;}
void C0(void)
{if(CpuTimer2Regs. TCR. bit.TIF = = 1)
CpuTimer2Regs.TCR.bit.TIF=1;
(*C_TASK_Ptr)();
VTimer2[0]++;
}
Alpha_ State_ Ptr=&A0;}
void A1(void)
{if(EPwm1Regs. TZFLG. bit. OST== 0x1)
TripFlagDMC = 1;
A _Task_ Ptr = &A2;}
void A2(void)
{
A_ Task_ Ptr = &A3;}
void A3(void)
{A _Task _Ptr = &A1;}
void B1(void)
{B _Task_ Ptr = &B2;}
void B2(void)
{B_ Task_ Ptr = &B3;}
void B3(void)
{B _Task_ Ptr = &B1;}
vold C1(vold)
{if(EPwn1Regs. TZFLG. bit. 0ST==0x1)
{TripFlagDHC =1;}
GpioDataRegs. GPBTOGGLE. bit. GPI034=1;
C_ Tank_ Ptr=&C2;}
vold C2(void)
{C Task Ptr”=&C2;}
void C3(void)
{C_ Task_ Ptr = &C1;}
interrupt void MainISR( void)
{
IsrTicker++;
if(lsw= =0)rc1. TargetValue = 0;
else rc1 . TargetValue = SpeedRef;
RC MAGRO(rc1)
rg1.Freq = rc1. SetpointValue;
RG MACRO(rg1)
clarkel. As = ((AdcMirror. ADCRESULT1)*0. 00024414 - offsetA) * 2* 0. 909;
clarkel. Bs = ((AdcMirror. ADCRBSULT2) * 0. 00024414- offsetB) * 2*0.909;
CLARKE_ MACRO(clarke1)
parkl. Alpha=clarkel. Alpha;
parkl. Beta =clarke1. Beta;
if(lsw==0) park1. Angle=0;
else if(lew==1) parkl. Angle=rg1.Out;
else park1. Angle=smol .Theta;
park1. Sine= _IQsinPU(park1. Angle);
parkl. Cosine=_ IQCosPU( park1. Angle);
PARK_ MACRO( park1)
if {SpeedLoopCount ==SpeedLoopPrescaler)
{pi_ spd.Ref = rc1. SetpointValue;
pi_ spd.Fbk = speed3. EstimatedSpeed;
PI_ MACRO(pi spd);
SpeedLoopCount= 1;}
else SpeedLoopCount ++;
if(lsw= =0 || lsw= = 1)
{pi_ spd.ui=0; pi_ spd. i1=0;}
if(lsw= =0) pi_ iq.Ref = 0;
else if(lsw= =1) pi_ iq.Ref = IqRef;
else pi _iq.Ref = pi_ spd. Out;
pi _iq.Fbk = park1.Qs;
PI_ MACRO(pi_ iq)
// pI反馈控制器
if(lsw= =0) pi_ id.Ref =_IQ(0. 05);
else pi_ id.Ref = 0
pi _id.Fbk = park1. Ds;
PI _MACRO(pi _id)
ipark1.Ds = pi_ id. Out;
ipark1.Qs = pi _iq. Out;
ipark1. Sine= park1. Sine;
ipark1. Cosine = park1. Cosine;
IPARK _MACRO( ipark1)
QEP_ MACRO(1,qep1);
speed1. ElecTheta = qep1. ElecTheta;
speed1. DirectionQep = (int32)(qep1. DirectionQep);
SPEED_ FR _MACRO( speed1)
volt1. DeBusVolt = ((AdcMirror. ADCRESULT7) *0.00024414*0.909;
volt1. MfuncV1 = svgen1. Ta;
volt1. MfuncV2 = svgen1. Tb ;
volt1. MfuncV3 = svgen1 . Tc;
PHASEVOLT_MACRO (volt1)
if (1sw= =2&& smo1. Kslide< _IQ(0. 25)) smol. Kslide = smol. Kslide + _IQ(O. 00001);
smo1. Ialpha = clarkel. Alpha;
smo1. Ibeta=clarkel. Beta;
smo1. Valpha = volt1. Valpha;
smo1. Vbeta = volt1. Vbeta;
SMO_MACRO( smo1)
speed3. EstimatedTheta = smo1. Theta;
SE_MACRO (speed3)
svgen1.Ualpha = ipark1. Alpha;
svgen1.Ubeta = ipark1. Beta;
SVGENDQ_MACRO (svgen1)
pwm1. MfuncC1 = svgen1. Ta;
pwm1. MfuncC2 = svgen1. Tb;
pwm1. MfuncC3 = svgen1. Tc;
PWM_MACRO(1,2,3,pwm1)
pwmdac1. MfuncC1 = clarke1. As;
pwmdac1. MfuncC2 = clarke1. Bs ;
PWMDAC_MACRO(6,pwmdac1)
pwmdac1. MfuncC1=qep1. ElecTheta;
pwmdac1. MfuncC2=smol .Theta;
PWNDAC_MACRO(7,pwndac1)
DlogCh1= _IQtoQ15(clarke1. As);
DlogCh2 = _IQtoQ15(smo1. Theta);
DlogCh3= _IQtoQ15(volt1. Vbeta);
DlogCh4 = _IQtoQ15(volt1. Valpha);
dlog.update( &dlog);
EPwm1Regs. ETCLR.bit. INT = 1;
PieCtrlRegs. PIEACK.all = PIEACK_GROUP3;}
interrupt void OffsetISR( void)
{IsrTicker + + ;
if (IsrTicker> = 5000)
{offsetA= K1 * offsetA + K2 * (AdcMirror. ADCRESULT1) * 0. 00024414;
offsetB= K1 *offsetB + K2 * (AdcMirror. ADCRESULT2) * 0.00024414;
offsetC= K1 *offsetC + K2* (AdcMirror. ADCRESULT3)* 0.00024414 ;}
if (IsrTicker > 20000)
{EALLOW;
PieVectTable.EPWM1 INT = &MainISR;
EDIS;}
EPwm1Regs..ETCLR.bit.INT = 1;
PieCtrlRegs. PIEACK.all=PIEACK GROUPR3;}
void HVDMC Protection (void)
{EALLOW;
EPwm1Regs. TZSEL. bit. CBC6 = 0x1;
EPwm2Reg. TZSEL. bit. CBC6= 0x1;
EPwm3Regs. TZSEL. bit. CBC6 = 0x1;
EPwm1 Regs. TZSEL. bit. OSHT1 = 1;
EPwm2Regs. TZSEL. bit. OSHT1 = 1;
EPwm3Regs. TZSEL. bit. OSHT1 = 1;
EPwm1Regs. TZCTL. bit. TZA = TZ_ FORCE_LO; // EPWMxA will go low
EPwm1Regs. TZCTL. bit. TZB = TZ_ FORCE_ LO; // EPWMxB will go low .
EPwm2Regs. TZCTL. bit. TZA = TZ_ FORCE_LO; // EPWMxA will go low
EPwm2Regs. TZCTL. bit. TZB = TZ_ FORCE_LO; // EPWMxB will go low
EPwm3Regs. TZCTL. bit. TZA = TZ_ FORCE_LO; // EPWMxA will go low
EPwm3Regs. TZCTL. bit. TZB = TZ_ FORCE_LO; // EPWMxB will go low
EDIS;
// Clear any spurious ov trip
EPwm1Regs. TZCLR. bit.OST = 1;
EPwm2Regs. TZCLR. bit. OST = 1;
EPwm3Regs. TZCLR. bit. OST = 1;}
#define SPEED_ FR_MACRO(v)
if ((v. ElecTheta <_IQ(0.9))&(v. ElecTheta>_ IQ(O.1)))
/* Q21 = Q21*(GLOBAL e- GLOBAL Q)*/
v.Tap = _IQmpy(v. K1 ,(v. ElecTheta-v. OldElecTheta));
else v.Tmp = _IQtoIQ21(v. Speed);
v.Tmp = _IQmpy(v.K2._ IQtoIQ21(v. Speed))+_IQmpy.(v.K3,v. Tmp);
v. Tmp= _ IQsat(v. Tmp,_IQ21(1), _IQ21(-1));
v. Speed = _IQ21toIQ(v. Tmp) ;
/*更新电角度*/
v. OldElecTheta = v.ElecTheta;
v. SpeedRpm =_ IQmpy(v.BaseRpm,v.Speed);
# endif
//滑膜电流观测器宏定义
#define SMO_ MACRO(v)
v. EstIalpha =_IQmpy(v. Fsmopos,v .EstIalpha) +_IQmpy(v. Gsmopos,(v. Valpha - v.Ealpha- v. Zalpha));
v. EstIalpha =_IQmpy(v. Fsmopos,v .EstIbeta) +_IQmpy(v. Gsmopos,(v. Vbeta- v. Ebeta- v. Zbeta));
v. IalphaError = v. EstIalpha-v. Ialpha;
v. IbetaError= v. EstIbeta- v. Ibeta;
v. Zalpha = _IQmpy(_ IQsat(v. IalphaError,v. E0, - v. E0),_IQmpy2(v. Kslide));
v. Zbeta= _IQmpy(_ IQsat(v. IbetaError ,v. E0, - v. E0),_IQmpy2(v. Kslide));
v. Ealpha = v. Ealpha +_ IQmpy(v. Kslf,(v. Zalpha- v. Balpha));
v. Ebeta= v. Ebeta+ _IQmpy(v. Kslf,(v. Zbeta - v. Ebeta));
v. Theta = _IQatan2PU( -v Ealpha,v. Ebeta);
# endif
