⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 energy_back_main.c

📁 2808单相全桥spwm逆变工程.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
//###########################################################################
//
// Original source by: yb
//
// $ Release Date: Jan. , 2008 $
//###########################################################################


// header
#include "dsp280x_device.h"
#include "dsp280x_examples.h"

#include "CommonDefine.h"  //各种宏定义和全局变量声明
			                     //各种.h文件
#include "qmath.h"

//interrupts 声明
interrupt void cpu_timer0_isr(void);
interrupt void ISREPwm1_Zero(void);

//function 声明
int32 ControlArith(int16,int16,int16,int16);

int16 OpenControlArith(int16, int16);

void EPwmU_Driver(int32);
void EPwmV_Driver(int32);
void EPwmW_Driver(int32);


int32 CurIncPIDCalc( IncPID *, int16 );
int32 VolIncPIDCalc( IncPID *, int16 );

//void OpenEPwmSignal(void) ;
void CloseEPwmSignal(void);   //全低为关
//void KeepEPwmSignal(void);

void OpenDCEPwm(void);
void OpenInvEPwm(void);
void CloseDCEPwm(void);
void CloseInvEPwm(void);

void Period50ms(void);

void SoftRiseDC(void);

void AddDCAStep(void);
void SubDCAStep(void);
void AddDCBStep(void);
void SubDCBStep(void);

void MPPTDelay(void);
void MPPTracking(void);


//??int32 ybybyb(void);
void LedAndKye6Scan(void);
void LedDisplay(void);
void GetOneKey(void);
Uint16 AnyKeyDown(void);
Uint16 ScanKeyMatrix(void);
void GetKeyCode(void);
void KeyDeal(void);
void MenuDeal(void);
void ScretchNumber(int32,int16);
void Opera4094Two(Uint16);
void UpdateLedCont(void);
Uint32 CalculateRMS(Uint32, Uint16);
Uint32 CalculateAVE(Uint32, Uint16);
void DetDefault(void);
void DetTemper(void);
Uint16 DelayTime600(void) ;




void InitSampOffset(void);

void TemperProtect(void);
/////////////////////////////flash operate
//void Example_Error(Uint16 Status);
//void InitOperFlash(void);
//Uint16 Example_CsmUnlock();

///////////////////eeprom operate
void ReadEEPRom(Uint16, Uint16);
void WriteEEPRom(Uint16, Uint16,Uint16*);
void WriteEnergy(void);
////////////////////////////////
void SwitchMachDeal(void);
void SoftStart(void);
void MPPTDeal(void);


//全局变量定义

//A相电压环和电流环PID
IncPID VolALoopPID;
IncPID CurrALoopPID;
//A相电压环PID参数 0.00048828125-16  q11定标
//在s域中,VolLoop_P对应Kp,VolLoop_I对应kp*(T/Ti),VolLoop_D对应Kp*(Td/T)
float32 VolALoop_P = 1; //Set PID Coefficients
float32 VolALoop_I =0.001;  //20hz
float32 VolALoop_D = 0;
//A相电流环PID参数
float32 CurrALoop_P = 2;//2.5;//1.5;//4              //  Set PID Coefficients
float32 CurrALoop_I  =0;//0.25;//0.1;//0.2;
float32 CurrALoop_D = 0;

/*
//B相电压环和电流环PID
IncPID VolBLoopPID;
IncPID CurrBLoopPID;
//B相电压环PID参数
//在s域中,VolLoop_P对应Kp,VolLoop_I对应T*Ki,VolLoop_D对应Kd/T
float32 VolBLoop_P = 2;              //  Set PID Coefficients
float32 VolBLoop_I  = 0.005;
float32 VolBLoop_D = 0;
//B相电流环PID参数
float32 CurrBLoop_P = 2;              //  Set PID Coefficients
float32 CurrBLoop_I  = 0;
float32 CurrBLoop_D = 0;

//C相电压环和电流环PID
IncPID VolCLoopPID;
IncPID CurrCLoopPID;
//C相电压环PID参数
//在s域中,VolLoop_P对应Kp,VolLoop_I对应T*Ki,VolLoop_D对应Kd/T
float32 VolCLoop_P = 2;              //  Set PID Coefficients
float32 VolCLoop_I  = 0.005;
float32 VolCLoop_D = 0;
//C相电流环PID参数
float32 CurrCLoop_P = 2;              //  Set PID Coefficients
float32 CurrCLoop_I  = 0;
float32 CurrCLoop_D = 0;
*/



//锁相用变量
//ABC三相采样电压
int16 VolLockA=0;
int16 VolLockB;
int16 VolLockC;
//ABC三相频率点数计数器
int16 LockAFrecoun;
int16 LockBFrecoun;
int16 LockCFrecoun;
//ABC三相频率点数,修正后值,用于下一个周期的参考
int16 LockAFreNum;
int16 LockBFreNum;
int16 LockCFreNum;
//ABC三相频率点数,实际过零点得到的电网电压周期,真实值,用于计算有功功率
int16 LockAFreReal;
int16 LockBFreReal;
int16 LockCFreReal;


//ADC采样
//A相直流电压采样数组
//int16 VolAArray[400]; 
int16 VolAArray;
//A相线电流采样
//int16 CurrAArray[400];
int16 CurrAArray;
//A相位置(相位)计数器
int16 ConvCountA;
//A相瞬时功率
int32 PowerAIns;
//A相一个周期内功率累加量
int32 PowerATotal=0;
//A相一个周期有功功率
int32 PowerAEffect;

//B相直流电压采样数组
//int16 VolBArray[400];
int16 VolBArray;
//B相线电流采样
//int16 CurrBArray[400];
int16 CurrBArray;
//B相位置(相位)计数器
int16 ConvCountB;

//C相直流电压采样数组
//int16 VolCArray[400];
int16 VolCArray;
//C相线电流采样
//int16 CurrCArray[400];
int16 CurrCArray;
//C相位置(相位)计数器
int16 ConvCountC;


//参考输入
//ABC相直流电压参考输入
int16 VoltageRef=3200;//500->60V
int16 VoltageDelay=0;//100;  //voltageref+voltagedelay为开启逆变电压
//能量箝位:一个周期内输出低于该能量,关逆变
int32 PowerMin=6000000;  //10w

//A相线电流正弦基准
int16 ASinRef;  
//数组是想看看波形
//int16 CurrentARef[500];   //控制基准电压为40-60HZ,20k载波即对应为500-334个点
//B相线电流正弦基准
int16 BSinRef;
//int16 CurrentBRef[500];
//C相线电流正弦基准
int16 CSinRef;
//int16 CurrentCRef[500];

//占空比
int16 EPwmU_Compare=0;
int16 EPwmV_Compare=0;
int16 EPwmW_Compare=0;


//////////////////原本定义为函数内局部变量的,但需要初始化或者是因为变量里的值在本次退出子程序后需要保存,以便下一次使用,因此定义为全局变量了
/////////// ISREPwm1_Zero(void)////////////////
//锁相用标志
int16 LockAIsFirst=0;  //ABC三相是否找到第一个零点标志
int16 LockBIsFirst=0;
int16 LockCIsFirst=0;


//功率判断用
int16 NormAIsFirst=0; //A相正常输出后,找到第一个零点
int16 PowerIsLow=0; //1为功率过低


//ABC三相正弦波基准发生标志,1为开始产生正弦波基准,其实也是锁相完毕的标志
int16 ASinStart=0;
int16 BSinStart=0;
int16 CSinStart=0;

////ABC三相电压是否正常
int16 IsSinA=0;
int16 IsSinB=0;
int16 IsSinC=0;
//用于判断电压是否正常的计数器
int16 SinAcount=0;
int16 SinBcount=0;
int16 SinCcount=0;
//三相电压正常的最低值
int16 SineLow=850;    //采样电压-1200-1200, 阀值850(设在45度即50个点)
                       
int16 VolLineStart=0;  //直流母线是否正常,开启epwm标志位

int16 IsDCOpenEPwm=0; //是否开启dcdc 和逆变标志,0未开启。1开启
int16 IsInvOpenEPwm=0; //
	
//锁相用变量
int16 AFreNumTemp;   // 临时寄存的上一次实际采样周期值
int16 BFreNumTemp;
int16 CFreNumTemp;

int16 PeriodAError;   //实际和基准的周期差,即上一次和本次的周期差
int16 PeriodBError;
int16 PeriodCError;

int16 AModeFlag;   //工作模式变量.0为参考电压,采样电压递增模式.1为参考电压和采样电压同时到达零点时模式2为采样电压比参考电压先到达模式:持续时间为采样零点和参考零点之间3为参考电压比采样电压先到达模式,持续时间为参考零点和采样零点之间
int16 BModeFlag;
int16 CModeFlag;

/////////Adc_Inquire(void)////////////////
//调试用
int16 VolAArray1[1200];
int32 VolAArray2[100]; 
int16 temptemp=0;
int16 RefAAAA[1200];
//int16 VolAArray2[700];
int16 ybyb;
int16 ybyb1;
int16 ybyb2;

int32 temp1;
int16 temp2;
int16 temp3;

///////// LockAZero(int16 Voltage)/////////

int16 APlusPeriod=0;  //正半周标志位0为不处于,1为处于正半周
int16 APlusNum=0;
int16 AMinusNum=0; 

///////// LockBZero(int16 Voltage)/////////

int16 BPlusPeriod=0;  //正半周标志位0为不处于,1为处于正半周
int16 BPlusNum=0;
int16 BMinusNum=0; 

///////// LockCZero(int16 Voltage)/////////

int16 CPlusPeriod=0;  //正半周标志位0为不处于,1为处于正半周
int16 CPlusNum=0;
int16 CMinusNum=0; 

///////////////////////////

/////////LockVolLine(int16 VolLine)/////////
int16 VolLineCount=0; //计数器


/////////Period50ms(void)///////////////
//int16 Period50Count=0;   //计数器
//int16 Period50Done=0;   //定时标志

//int32 ErrorState=0;  //错误状态寄存器:默认错误
//int16 StateIsError=1;  //错误标志:默认错误



//yybb
int16 RelayFlag=0;  
int16 RelayCount=0;
int16 EIFlag=0;


//yybb
//用于电压环
int32 CurrRefConst;
int16 CurrRefFlag=1;

int32 CurrPreRef; // mppt


//test
int16 yba=0;
int16 ybb;
int32 ybc;

int32 ControlCValue;



int32 AError;
int32 ASumError;

float32 KKKK;

int16 RelayAfterDelay=0;
int16 DCACAfterDelay=0;
int16 DCACDone=0;
int16 DCACStart=0;

int16 InvStart=0;

float32 GridTemp;
int32 GridCorrect;


int16 RetifyVol=2070;//280v

int16 DCDCDown=0; //DCDC被开掉标志,1表明dcdc在开机状态下被关掉
int16 DCDownRelay=0;   //dcdc被关闭后延时1s
int16 DCACDown=0;

int32 SwitchFlag=1; //machine is on or off flag. 1=off 
int32 SwitchDFlag=1; //machine display is on or off flag 1=off
int32 MachState; //读开关机状态
int16 MachCount=0; //开关机计数器
int16 MachIsState=0; //设备状态,0为关机,1为开机


int16 Mturning=0;  //1表示正在关机

int16 RelayDown=0; 
int16 RelayOver=0;

int16 RelayDownDelay=0;

int16 CurEqualZero=0;

//SoftRiseDC
int16 SRiseStart=0; //开始标志位
int16 SRiseCount=0;
int16 SRiseFlag=0;  //缓升标志
int16 DCADuty=430;
int16 DCBDuty=430;
int16 SRiseOver=0;  //1表示缓升结束

//MPPT
//mppt
int16 MPPTCount=0; //mppt0.5s定时计数器
int16 MPPTIsTrue=0;//是否进行MPPT标志位

int16 MPPTFirstFlag=1; //第一次标志 ,以后都置0
//int16 DCADuty=670; 
//int16 DCBDuty=670;
int16 DCStep=1;
int16 AAddOrSubStep=0;  //  0为减小了占空比,1为增大了占空比
int16 BAddOrSubStep=0;  //  0为减小了占空比,1为增大了占空比

//dcdc采样
int16 DCAVoltage;
int16 DCACurrent;
int32 DCAPower;
int32 DCPreAPower;
int16 DCBVoltage;
int16 DCBCurrent;
int32 DCBPower;
int32 DCPreBPower;

//mppt数字滤波
int32 CurrRefTotal=0;
int16 CurrRefCount=0;
int32 CurrNowRef;
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
int32 CurrAInitSum=0;  //a current sum when initialize
int32 CurrInitCount=0; //current counter when initialize


Uint32 VolASquSum=0;  //a voltage square sum
Uint32 CurrASquSum=0;  //a current square sum
Uint32 SquareStep=0;  //a square step

Uint32 EnergySum=0;  //energy Sum: uint: w*s*10

Uint32 DCAVolSum=0; //dc a voltage sum
Uint32 DCACurrSum=0; //dc a current sum
Uint32 DCBVolSum=0; //dc a voltage sum
Uint32 DCBCurrSum=0; //dc a current sum


////////////////////////////////////////////////////////////
/////void UpdateLedCont(void) /////// //display variable updata
int32 EnergyLed=0;

int32 CurrALed=0;
int32 VolALed=0;

int32 DCACurrLed=0;
int32 DCBCurrLed=0;
int32 DCAVolLed=0;
int32 DCBVolLed=0;

int32 PowerLed=0;
Uint16 Update1sPeriod=0;
Uint16 ScretchFlag=0;  //before display, Scretch number to string. flag

Uint16 EnergyAddOne=0; //Flag: add one degree, save as eeprom
Uint16 OneDegreeCount=0; //

///////////////////////////////////////////////////////
//////void InitSampOffset(void)////////////1.8s
Uint16 SpOffsetPeriod=0;

Uint16 ADSampIniFlag=0; //flag: the first power up,initialize vol current sample values

int16 AdcCOffset;     //A相电流offset

///////////////////////////////////////////////////
int16 Period3ms=0;  //flag:3ms 
//////void opera4094(uint)//////////
Uint16 Bit4094;
Uint16 Counter4094;
Uint16 Shift4094=0x8000;
//////void Led6Display(void)///////
Uint16 DisplayNum=0;
Uint16 DisplayHigh=0x2000;  //high 8 bit, select led
Uint16 DisplayLow;  //low 8 bit, led content
Uint16 DisplayArray[6];  //low 8bit, led content
Uint16 DisplayAll;
Uint16 Led6PeriodFlag=0;  //6 led display flag:18ms
Uint16 ScanKeyNum=0; 
Uint16 KeyConflict=0;  //flag,1 is key conflict
Uint16 KeyFactCode=0;

//////void GetOneKey(void)////////
Uint16 KeyCode=0; //keycode effective values: 1 2 3 4
/////Uint16 ScanKeyMatrix(void)/////
Uint16 PreKeyCode=0;
/////void GetKeyCode(void)  ///////
Uint16 KeyState=0;  //dequiver register
Uint16 IsNewKey=0; //flag: confirm the new key, wait for dealing. if not deal, other key is noneffective
Uint16 KeyTureCode=0;  //confirmed Key code

/////void MenuDeal(void)/////////
Uint16 MenuParameter=100;  //default state
////////void DetTemper(void)/////////
Uint16 DetTempPeriod=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -