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