?? 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 + -