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

📄 inv_initial.c

📁 SVPWM算法的DSP源码已通过硬件验证
💻 C
字号:
// TI File $Revision: /main/2 $
// Checkin $Date: June 23, 2010   15:37:05 $
//###########################################################################
//
// FILE:	pv20k_Initial.c
//
// TITLE:	Variables Initialization & Support Functions.
//
//###########################################################################
// $TI Release: DSP2803x C/C++ Header Files V1.10 $
// $Release Date: June 23, 2010 $
//###########################################################################

#include "DSP280x_Device.h"     // DSP2803x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP2803x Examples Include File
#include "Global.h"
#define	F48HZ	4800;
#define	F50HZ	5000;

void	vClearCnt(void);
void	vSetDatForSt(void);
void	vGetPidOutLim(void);



extern	const			Uint16		uiCalDatTab[17];
extern	const			Uint16		uiHalfCarrTab[17];


/*void vClrRam(void)
{
	Uint16	*ramptr;

	#ifdef _DEBUG
	for (ramptr = (Uint16 *)0x8e00; ramptr <(Uint16 *)0x91fa; ramptr++)
	{
		*ramptr = 0;
	} 
	#endif

	#ifdef _RELEASE
	for (ramptr = (Uint16 *)0x8000; ramptr <(Uint16 *)0x83fa; ramptr++)
	{
		*ramptr = 0;
	} 
	#endif

}
*/
void vInitUserData(void)
{   
   
	SetPara.uiPidObj = 1;		// for test
	SetPara.uiMinFreq = F50HZ;	// for test
	SetPara.uiUoutSet = 380;	// for test
	SetPara.uiPreVolt = 0;  	// for test
	SetPara.uiKp = 40;			// for test
	SetPara.uiKi = 10;			// for test
	SetPara.uiKd = 0;			// for test 
	SetPara.uiPidT = 150;		// for test
	SetPara.uiPidHi = 99;		// for test
	SetPara.uiPidLo = 20;		// for test
    SetPara.uiErrGap = 30;  
   // SetPara.uiErrGap1 = 30;      //for test 
    RunState.uiRunning = STOP;  
    RunState.uiSoftStart = 0; 
	RunState.uiRun = STOP;

	PidRegs.lKp = (int32)SetPara.uiKp;
	PidRegs.lKi = (int32)SetPara.uiKi;
	PidRegs.lKd = (int32)SetPara.uiKd;

	OutputVar.uiCurrFreq = SetPara.uiMinFreq;
	OutputVar.uiTargetFreq = F50HZ;

	OutputVar.uiTargetVolt = SetPara.uiUoutSet;
	OutputVar.uiCurrVolt = SetPara.uiPreVolt;
  

	vGetPidOutLim();
	vSetDatForSt();
//	vClearCnt();

//	RunState.uiRun = 0xAAAA;	// for test
}

void	vSetDatForSt(void)
{
	// Prepare for next start
	RunState.uiSwitchNum = SWITCH_16KHZ;
	
	// Get half carrier period and electric angle
	PhaseSector.uiPrdHCarr = uiHalfCarrTab[RunState.uiSwitchNum];
	PhaseSector.uiCalDat = uiCalDatTab[RunState.uiSwitchNum];

	// Initial period register
	EPwm1Regs.TBPRD = PhaseSector.uiPrdHCarr;
	EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiPrdHCarr;
	EPwm1Regs.CMPB = PhaseSector.uiPrdHCarr;

	EPwm2Regs.TBPRD = PhaseSector.uiPrdHCarr;
	EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiPrdHCarr;
	EPwm2Regs.CMPB = PhaseSector.uiPrdHCarr;

	EPwm3Regs.TBPRD = PhaseSector.uiPrdHCarr;
	EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiPrdHCarr;
	EPwm3Regs.CMPB = PhaseSector.uiPrdHCarr;

	// Initial PhaseSector
	PhaseSector.ulPhaseSum = 0;
	PhaseSector.ulPhaseNew = (PhaseSector.uiPrdHCarr * PhaseSector.uiCalDat) >> 2;

	OutputVar.uiCurrFreq = SetPara.uiMinFreq;

	OutputVar.uiCurrVolt = SetPara.uiPreVolt;
	PhaseSector.uiVfCoeff = OutputVar.uiCurrVolt * PhaseSector.uiPrdHCarr / SetPara.uiUoutSet;

}

//void	vClearCnt(void)
//{
	// Clear sample registers of output current and voltage, fault count

//}

void	vGetPidOutLim(void)
{
	OutputVar.uiPidOutMax = SetPara.uiPidHi * SetPara.uiUoutSet / 100;
	OutputVar.uiPidOutMin = SetPara.uiPidLo * SetPara.uiUoutSet / 100;
}
//===========================================================================
// End of file.
//===========================================================================

⌨️ 快捷键说明

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