/*
*Copyright (c) 2006,西安爱科电子有限责任公司研发部
*All rights reserved
*文件名称:PID_control.c
*摘要:此程序为并联三相三线有源滤波器直流母线调节控制程序.
包含直流有效值计算,PI调节器的计算.
*当前版本:1.00
*作者: 任凯
*完成日期:20070618
*
*取代版本:无
*原作者: 无
*完成时间:无
*
*/
/*******************************************************************************************/
#include "sample_reg.h"
#include "system.h"
#include "calculate.h"
#include "DSP2833x_Device.h"
#include "def_debugflash.h"
#ifdef DEBUG
#pragma CODE_SECTION(PID_control,"extramfuncs")
#endif
#ifdef FLASH
#pragma CODE_SECTION(PID_control,"ramfuncs")
#endif
void PID_control(SAMPLEREG *p,SYSTEMREG *sys,int dc_set)
{
long int sum=0;
int temp;
int err;
long int con;
float sum_temp;
float con_temp;
/*
sum = p->DcSum;
con = CONVERSION; //Q14
con = _IQ5mpyIQX(sum,11,con,14); //CONVERSION为电压转换系数Q14.
temp = con; //直流母线的测量值。最大1200V:temp=19200,Q4
p->dc_rms = temp;
// PI调节器的程序
err = dc_set - temp;//Q4
temp = err;
//Kp = 0.5;
//Ki = 0.0488828
//PI参数一:
con = _IQ14(0.5);
sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
con = _IQ14(0.0488828);
con =_IQ6mpyIQX(temp,4,con,14);
*/ con_temp = 0.14874;
sum_temp = (float)p->DcSum;
sum_temp = sum_temp*con_temp*128;
temp = (int)sum_temp;
p->dc_rms = temp;
err = dc_set - temp;
sum_temp = 0.5;
con_temp = (float)(err - p->dc_err);
sum_temp = sum_temp*con_temp*64;
sum = (long)sum_temp;
sum_temp = 0.0488828;
con_temp = (float)err;
sum_temp = sum_temp*con_temp*32;
con = (float)sum_temp;
sum = sum + con;
sum =sum + p->dc_out_last;
if(sum>128000)
{
sum = 128000;//Q0:DC_OUTLIMIT:250
}
else if(sum<(-320000))
{
sum = -320000;
}
else
{
;
}
p->dc_out_last = sum;
p->dc_err = err;
con = 700;
con = con<<6; //350*64:350*0.8165/16.5=42A
p->dc_out = p->dc_out_last-con;
}
/*
#ifdef DEBUG
#pragma CODE_SECTION(PID_control,"extramfuncs")
#endif
#ifdef FLASH
#pragma CODE_SECTION(PID_control,"ramfuncs")
#endif
void PID_control(SAMPLEREG *p,SYSTEMREG *sys , CALCULATEREG *cal,int *sin,int *cos, int dc_set)
{
long int sum=0;
int i=0;
int temp;
int err;
_iq con;
temp = (p->sample_counter + SAMPLE_LEN)&SAMPLE_LEN_MASK;
for(i=0;i<SAMPLE_LEN;i++)
{
temp = (temp + 1)&SAMPLE_LEN_MASK;
sum = sum + p->dc1_data[temp];//Q3
}
con = CONVERSION; //Q14
con = _IQ5mpyIQX(sum,11,con,14); //CONVERSION为电压转换系数Q14.
temp = con; //直流母线的测量值。最大1200V:temp=19200,Q4
p->dc_rms = temp;
// PI调节器的程序
err = dc_set - temp;//Q4
temp = err;
//Kp = 0.5;
//Ki = 0.0488828
con = _IQ14(0.5);
sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
con = _IQ14(0.0488828);
con =_IQ6mpyIQX(temp,4,con,14);
sum = sum + con;
// con = _IQ14(0.4517);
// sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
// con = _IQ14(0.09034);
// con =_IQ6mpyIQX(err,4,con,14);
// sum = sum + con;
// temp = sum/64;
// con = _IQ14(1.000);
// sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
// con = _IQ14(0.041667);
// con =_IQ6mpyIQX(err,4,con,14);
// sum = sum + con;
// temp = sum/64;
sum =sum + p->dc_out_last;
if(sum>DC_OUTLIMIT)
{
sum = DC_OUTLIMIT;//Q0:DC_OUTLIMIT:250
}
else if(sum<(-DC_OUTLIMIT))
{
sum = -DC_OUTLIMIT;
}
else
{
;
}
p->dc_out_last = sum;
p->dc_err = err;
con = 44800; //700*64
p->dc_out = p->dc_out_last-con;
}
*/
/*
//PI参数二:
con = _IQ14(0.4517);
sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
con = _IQ14(0.09034);
con =_IQ6mpyIQX(err,4,con,14);
sum = sum + con;
temp = sum/64;
//PI参数三:
con = _IQ14(1.000);
sum = _IQ6mpyIQX((err - p->dc_err),4,con,14);
con = _IQ14(0.041667);
con =_IQ6mpyIQX(err,4,con,14);
sum = sum + con;
temp = sum/64;
*/