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

📄 inv_isr.c

📁 SVPWM算法的DSP源码已通过硬件验证
💻 C
📖 第 1 页 / 共 2 页
字号:
//
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -