📄 energy_back_main.c
字号:
//###########################################################################
//
// 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 + -