|
发表于 2023-8-15 08:55:59
|
显示全部楼层
void SimulationStep(
double t, double delt, double *in, double *out,
int *pnError, char * szErrorMsg,
void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{
g_nStepCount++;
Time_20KHz++;
if(Time_20KHz==50/clock) //20KHz
{
Time_20KHz=0;
U[1]=in[0];
U[3]=U[2];
U[2]=U[0]-U[1];
U[0]=U[1];
Ual=U[1]; //U
Ube=63.6646*(U[2]*0.2+U[3]*0.8); //U
angle=angle_temp;
Ud= Ual*cos(angle)+Ube*sin(angle);
Uq=-Ual*sin(angle)+Ube*cos(angle);
//********************* ***************************//
//一阶低通滤波
Uq_rms=0.1*Uq_rms+0.9*Uq;
PLC_Error_1 = PLC_Error_0; //
PLC_Error_0 =Uq_rms; // ( )
PLC_PID+=( PLC_Kp * PLC_Error_0- PLC_Ki * PLC_Error_1 );
//PLC_PID=PLC_PID+PLC_Kp*PLC_Error_0-PLC_Ki*PLC_Error_1;
//PLC_PID=PLC_PID+PLC_kp*(PLC_Error_0-PLC_Error_1)+PLC_ki*PLC_Error_0;
count++;
Hz_sum+=PLC_PID;
angle_temp+=PLC_PID;
if(angle_temp>PI2)
angle_temp=0;
if( count==400) //50us*400=20000us=20ms
{
count=0;
Hz=Hz_sum/400*3180; //3184 W=2*pi*f =>f=W/2Pi=(Hz_sum/400)*20*1000/2Pi 20*1000/6.2831853=3184
Hz_sum=0;
}
out[0]=Ud;
out[1]=Hz;
out[2]=angle_temp;
} |
|