inv_isr.c

来自「SVPWM算法的DSP源码已通过硬件验证」· C语言 代码 · 共 466 行 · 第 1/2 页

C
466
字号
//
// Copyright (c) 2007, 北京动力源科技股份有限公司
// All rights reserved.
//
// 项目名称: 
// 文件名称: INV_Isr.c
//
// 版    本: Ver 1.00
//
// 完成日期: 2011年2月
// 作    者: liuyaqiong
//
// 修订日期:
// 修 订 者: 
//
// 编辑工具:UEStudio(TAB should be set to 4)
//
// 编译工具:Code Composer Studio V3.3


//--------------------------------------------------------------------------------
// Include files
//--------------------------------------------------------------------------------


#include "DSP280x_Examples.h"   // Device Headerfile and Examples Include File
#include "DSP280x_Device.h"     // DSP2803x Headerfile Include File
#include "Global.h"
#include "Drv_dsp280x_GPIO.h"
//--------------------------------------------------------------------------------
// 宏定义
//--------------------------------------------------------------------------------
#define		ECAP48HZ	2083333L // 1/48/10*1000000000
#define		ECAP52HZ	1923076L // 1/52/10*1000000000

#define		iq16KPPRD	1000L
#define		iq16KIPRD	2000L

#define		LOW			0
#define		HIGH		1

#define		PHASESYNC	GpioDataRegs.GPADAT.bit.GPIO19  

//--------------------------------------------------------------------------------
// 变量声明
//--------------------------------------------------------------------------------


Uint32	ulSin[320];

//正弦波表需要修正,过零电有畸变
const	Uint16	iq16SIN_TAB[601] = {0, 572, 572, 572, 572, 572, 686, 801, 915, 1029,
							1144, 1258, 1372, 1487, 1601, 1716, 1830, 1944, 2059, 2173, 
							2287, 2401, 2516, 2630, 2744, 2859, 2973, 3087, 3201, 3316,
							3430, 3544, 3658, 3773, 3887, 4001, 4115, 4229, 4343, 4457, 
							4572, 4686, 4800, 4914, 5028, 5142, 5256, 5370, 5484, 5598, 
							5712, 5826, 5940, 6054, 6167, 6281, 6395, 6509, 6623, 6737,
							6850, 6964, 7078, 7192, 7305, 7419, 7533, 7646, 7760, 7873, 
							7987, 8100, 8214, 8327, 8441, 8554, 8668, 8781, 8894, 9008, 
							9121, 9234, 9347, 9461, 9574, 9687, 9800, 9913, 10026, 10139,
							10252, 10365, 10478, 10591, 10704, 10817, 10929, 11042, 11155, 11268,
	   					    11380, 11493, 11605, 11718, 11831, 11943, 12055, 12168, 12280, 12393, 
						    12505, 12617, 12729, 12842, 12954, 13066, 13178, 13290, 13402, 13514,
						    13626, 13738, 13849, 13961, 14073, 14185, 14296, 14408, 14519, 14631, 
						    14742, 14854, 14965, 15077, 15188, 15299, 15410, 15521, 15633, 15744, 
					        15855, 15966, 16076, 16187, 16298, 16409, 16520, 16630, 16741, 16851,
						    16962, 17072, 17183, 17293, 17403, 17514, 17624, 17734, 17844, 17954,
						    18064, 18174, 18284, 18394, 18504, 18613, 18723, 18832, 18942, 19051, 
						    19161, 19270, 19380, 19489, 19598, 19707, 19816, 19925, 20034, 20143,
						    20252, 20360, 20469, 20578, 20686, 20795, 20903, 21012, 21120, 21228, 
						    21336, 21445, 21553, 21661, 21769, 21876, 21984, 22092, 22200, 22307, 
						    22415, 22522, 22629, 22737, 22844, 22951, 23058, 23165, 23272, 23379,
						    23486, 23593, 23699, 23806, 23913, 24019, 24125, 24232, 24338, 24444, 
						    24550, 24656, 24762, 24868, 24974, 25080, 25185, 25291, 25396, 25502, 
						    25607, 25712, 25817, 25922, 26027 ,26132, 26237, 26342, 26447, 26551,
							26656, 26760, 26865, 26969, 27073, 27177, 27281, 27385, 27489, 27593,
							27697, 27800, 27904, 28007, 28111, 28214, 28317, 28420, 28523, 28626, 
							28729, 28832, 28935, 29037, 29140, 29242, 29344, 29447, 29549, 29651,
							29753, 29855, 29956, 30058, 30160, 30261, 30363, 30464, 30565, 30666, 
							30767, 30868, 30969, 31070, 31171, 31271, 31372, 31472, 31572, 31672, 
							31772, 31872, 31972, 32072, 32172, 32271, 32371, 32470, 32570, 32669,
							32768, 32867, 32966, 33065, 33163, 33262, 33361, 33459, 33557, 33655,
							33754, 33852, 33949, 34047, 34145, 34242, 34340, 34437, 34535, 34632,
							34729, 34826, 34923, 35019, 35116, 35212, 35309, 35405, 35501, 35597,
							35693, 35789, 35885, 35981, 36076, 36172, 36267, 36362, 36457, 36552,
							36647, 36742, 36837, 36931, 37026, 37120, 37214, 37308, 37402, 37496, 
							37590, 37684, 37777, 37870, 37964, 38057, 38150, 38243, 38336, 38429,
							38521, 38614, 38706, 38798, 38890, 38982, 39074, 39166, 39258, 39349,
							39441, 39532, 39623, 39714, 39805, 39896, 39986, 40077, 40167, 40258,
							40348, 40438, 40528, 40618, 40708, 40797, 40887, 40976, 41065, 41154, 
							41243, 41332, 41421, 41509, 41598, 41686, 41774, 41862, 41950, 42038,
							42126, 42213, 42301, 42388, 42475, 42562, 42649, 42736, 42823, 42909,
							42995, 43082, 43168, 43254, 43340, 43425, 43511, 43597, 43682, 43767,
							43852, 43937, 44022, 44107, 44191, 44275, 44360, 44444, 44528, 44612,
							44695, 44779, 44862, 44946, 45029, 45112, 45195, 45278, 45360, 45443,
							45525, 45607, 45689, 45771, 45853, 45935, 46016, 46098, 46179, 46260,
							46341, 46422, 46502, 46583, 46663, 46744, 46824, 46904, 46983, 47063,
							47143, 47222, 47301, 47380, 47459, 47538, 47617, 47695, 47774, 47852, 
							47930, 48008, 48086, 48163, 48241, 48318, 48395, 48472, 48549, 48626,
							48703, 48779, 48856, 48932, 49008, 49084, 49159, 49235, 49310, 49386,
							49461, 49536, 49610, 49685, 49760, 49834, 49908, 49982, 50056, 50130,
							50203, 50277, 50350, 50423, 50496, 50569, 50642, 50714, 50787, 50859,
							50931, 51003, 51075, 51146, 51218, 51289, 51360, 51431, 51502, 51573,
							51643, 51713, 51784, 51854, 51923, 51993, 52063, 52132, 52201, 52270, 
							52339, 52408, 52477, 52545, 52613, 52682, 52750, 52817, 52885, 52952,
							53020, 53087, 53154, 53221, 53287, 53354, 53420, 53486, 53552, 53618,
							53684, 53749, 53815, 53880, 53945, 54010, 54075, 54139, 54204, 54268,
							54332, 54396, 54459, 54523, 54586, 54650, 54713, 54775, 54838, 54901,
							54963, 55025, 55087, 55149, 55211, 55273, 55334, 55395, 55456, 55517,
							55578, 55638, 55699, 55759, 55819, 55879, 55938, 55998, 56057, 56116,
							56175, 56234, 56293, 56351, 56410, 56468, 56526, 56583, 56641, 56699,56755};
//--------------------------------------------------------------------------------
// 外部变量声明
//--------------------------------------------------------------------------------							




//--------------------------------------------------------------------------------
// 外部函数声明
//--------------------------------------------------------------------------------
extern	void	vInvCon(void);
extern  void	vGetAdResult(void);
extern  void  vSetVf(void);
extern  void  vInvCon(void);



// Interrupt routines:

interrupt void epwm1_isr(void)
{   
    

     
   static 	Uint16	uiSample;
	static	Uint16	uiSampleCnt = 0;
	static 	Uint32	ulSum = 0; 
	
  	//GpioDataRegs.GPATOGGLE.bit.GPIO30 = 1;//for test
  //Gpio8_toggle;
    uiFacNBCnt++;	//逆变计数值	
	uiSoftStartCnt++;
	uiFacSDCnt++;
  	uiSample = AdcMirror.ADCRESULT13;           // 采样结果值保存在uiSample变量
  	uiSampleCnt++;     							// 采样次数
  	ulSum += (Uint32)uiSample;

  	if (uiSampleCnt > 16)						// 采样次数超过16,滤波采样值
 	{  
		uiSampleTrue = (Uint16)(ulSum / (Uint32)uiSampleCnt);
    	uiKeyOk = 1;
		uiSampleCnt = 0;
		ulSum = 0;	
  	}


    vSetVf();   //缓起,设置调制深度
    vGetAdResult();//读取采样结果

// 逆变电压求和

  	uiVolNB_W =(uiVolNB_W > uiAdVRef)? (uiVolNB_W -uiAdVRef):( uiAdVRef-uiVolNB_W );
	uiVolNB_V =(uiVolNB_V > uiAdVRef)? (uiVolNB_V -uiAdVRef):( uiAdVRef-uiVolNB_V );
	uiVolNB_U =(uiVolNB_U > uiAdVRef)? (uiVolNB_U -uiAdVRef):( uiAdVRef-uiVolNB_U );
 	uiAddNBW +=( Uint32)uiVolNB_W;
	uiAddNBV += ( Uint32)uiVolNB_V;
	uiAddNBU += ( Uint32)uiVolNB_U;
	// 市电电压求和
  	uiVolSD_W =(uiVolSD_W > uiAdVRef)? (uiVolSD_W -uiAdVRef):( uiAdVRef-uiVolSD_W );
	uiVolSD_V =(uiVolSD_V > uiAdVRef)? (uiVolSD_V -uiAdVRef):( uiAdVRef-uiVolSD_V );
	uiVolSD_U =(uiVolSD_U > uiAdVRef)? (uiVolSD_U -uiAdVRef):( uiAdVRef-uiVolSD_U );
  	uiAddSDW += ( Uint32)uiVolSD_W;
	uiAddSDV +=( Uint32) uiVolSD_V;
	uiAddSDU += ( Uint32)uiVolSD_U;

    
   if (RunState.uiRunning == RUNNING)
	{
		// Phase accumulate
		PhaseSector.ulPhaseSum += PhaseSector.ulPhaseNew;
       //PhaseSector.ulPhaseSum1 = PhaseSector.ulPhaseSum + 0x800000;//补偿400us,400/20000*3600<<16
		// whole period? then accumulate from the origin, 3600 << 16 = e100000
		if (PhaseSector.ulPhaseSum >= 0xe100000)
		{
			PhaseSector.ulPhaseSum1 -= 0xe100000;
			PhaseSector.ulPhaseSum  -= 0xe100000;
			//------------------------------------------------------
		 //	求逆变有效值,根据电角度判断
			//------------------------------------------------------
			uiAvgNBW = uiAddNBW / uiFacNBCnt;
			uiAvgNBV = uiAddNBV / uiFacNBCnt;
			uiAvgNBU = uiAddNBU / uiFacNBCnt;
		    uiRmsNBW = (Uint16)((uiAvgNBW * 75)>>7);
			uiRmsNBV = (Uint16)((uiAvgNBV * 75)>>7);
			uiRmsNBU = (Uint16)((uiAvgNBU * 75)>>7);
			uiRmsNBAvg = (Uint16)((((uiRmsNBV+ uiRmsNBW +uiRmsNBU) * 6)>>4)-14);
			
			uiAddNBW = 0;
			uiAddNBV = 0;
			uiAddNBU = 0;
			uiFacNBCnt = 0;
		
		}

		// get region and angle
		PhaseSector.ulRegion = (PhaseSector.ulPhaseSum >> 16) / 600;
		PhaseSector.ulAngle = (PhaseSector.ulPhaseSum>> 16)  % 600;

		// get ti = sin(60-a) * vf
//		PhaseSector.uiTi = (Uint16)(((Uint32)iq16SIN_TAB[600 - PhaseSector.ulAngle] * (Uint32)PhaseSector.uiVfCoeff) >> 16);
		PhaseSector.uiTi = 600 - PhaseSector.ulAngle;
		PhaseSector.uiTi = iq16SIN_TAB[PhaseSector.uiTi];
		PhaseSector.uiTi = (Uint16)(((Uint32)PhaseSector.uiTi * (Uint32)PhaseSector.uiVfCoeff) >> 16);
		PhaseSector.uiTiBak = PhaseSector.uiTi;

		// get tj = sin(a) * vf 
		PhaseSector.uiTj = (Uint16)(((Uint32)iq16SIN_TAB[PhaseSector.ulAngle] * (Uint32)PhaseSector.uiVfCoeff) >> 16);

		// get titj
		PhaseSector.uiTiTj = PhaseSector.uiTi + PhaseSector.uiTj;

		// get v01
		if (PhaseSector.uiPrdHCarr > PhaseSector.uiTiTj)
		{
			PhaseSector.uiV01 = (PhaseSector.uiPrdHCarr - PhaseSector.uiTiTj) / 2;
		}
		else
		{
			PhaseSector.uiV01 = 0;
		}

		

⌨️ 快捷键说明

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