基于DSP2812控制的单相光伏逆变器程序代码_第1页
基于DSP2812控制的单相光伏逆变器程序代码_第2页
基于DSP2812控制的单相光伏逆变器程序代码_第3页
基于DSP2812控制的单相光伏逆变器程序代码_第4页
基于DSP2812控制的单相光伏逆变器程序代码_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ TMDX ALPHA RELEASE/ Intended for product evaluation purposes/#/ FILE:DSP28_Example.c/ TITLE:DSP28 CPU_Timer example program./#/ Ver | dd mmm yyyy | Who | Description of changes/ =|=|=|=/ 0.55| 06 May 2002 | S.S. | EzDSP Alpha Release/ 0.57| 27 May 2002 | L.H. | No change/#/ Step 0. Include require

2、d header files / DSP28_Device.h: device specific definitions #include statements for / all of the peripheral .h definition files. / DSP28_Example.h is specific for the given example. #include DSP28_Device.h#include IQmathLib.h#pragma DATA_SECTION(sine_table,IQmathTables);_iq30 sine_table512;#define

3、PI 3.14interrupt void eva_T1UFINT_ISR(void);interrupt void CAP_INT3_ISR(void);interrupt void ADC_FIR_INT_ISR(void);/ ADC 服务中断Uint16 ConversionCount = 0;Uint16 SS = 0;Uint16 n = 0;Uint16 SIN = 0;Uint16 SIN1 = 0;Uint16 SIN2 = 0;_iq30 sine_table512; /jiayujintshort int AData512=0;short int AData1512=0;

4、extern _iq IQssfir(_iq*, _iq*, Uint16); #define N5/ 滤波器长度_iq xDelayN = 0, 0, 0, 0, 0;_iq xDelay1N = 0, 0, 0, 0, 0;/ filter coefficients_iq coeffsN = 100*_IQ(0.0625),100* _IQ(0.25), 100*_IQ(0.375), 100*_IQ(0.25), _IQ(0.0625);#define AdcFsVoltage_IQ(3.0)/ ADC 满量程电压#define AdcBufLen512/ ADC 结果缓冲长度_iq A

5、dcBufAdcBufLen; / ADC 结果缓冲_iq AdcBuf1AdcBufLen;_iq AdcBufFilteredAdcBufLen; / 滤波后电流的ADC结果缓冲_iq AdcBufFiltered1AdcBufLen; / 滤波后电压的ADC结果缓冲_iq vfAdcBufLen; / 滤波后电流的ADC结果缓冲_iq IfAdcBufLen; / 滤波后电压的ADC结果缓冲_iq IgAdcBufLen; _iq vrefAdcBufLen; /需要转换iq格式 已经转化到调整环内的IQ格式_iq evAdcBufLen;_iq eiAdcBufLen;_iq VsAd

6、cBufLen;float M;float Imax=_IQ(4100); float Vmax=_IQ(4090); /对程序中用到的常数值进行宏定义赋值 /pi参数 iq格式float kp=_IQ(1);float ki=_IQ(0.2);float kip=_IQ(10);void main(void)/*初始化系统*/InitSysCtrl();/*关中断*/DINT;IER = 0x0000;IFR = 0x0000;/*初始化PIE控制寄存器*/InitPieCtrl();/*初始化PIE矢量表*/InitPieVectTable();/*初始GPIO*/InitGpio();

7、InitAdc(); / 初始化ADCEALLOW; PieVectTable.CAPINT3 = &CAP_INT3_ISR; PieVectTable.ADCINT = &ADC_FIR_INT_ISR;PieVectTable.T1UFINT=&eva_T1UFINT_ISR;EDIS;PieCtrl.PIEIER1.bit.INTx6 = 1; /开AD中断PieCtrl.PIEIER2.bit.INTx6 = 1; /开下益中断 PieCtrl.PIEIER3.bit.INTx7 = 1; /开CAP中断IER |= 0x0007 ;EINT; /使能全局中断INTMERTM; /使

8、能全局实时中断DBGM/*初始化EV*/InitEv();while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY=0)AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;for(;)KickDog(); interrupt void eva_T1UFINT_ISR(void) /查表方式(固化正弦表)/EvaRegs.CMPR1 = EvaRegs.T1PR-_IQsat(_IQ30mpy(sine_tableindex+_IQ30(0.9999),EvaRegs.T1PR/2),EvaRegs.T1PR,0);/计算得出新的正弦表SIN = _IQsat(_I

9、Q30mpy(sine_tableSS+_IQ30(0.9999),EvaRegs.T1PR/2),EvaRegs.T1PR,0);SIN2 = _IQsat(_IQ30mpy(-sine_tableSS+_IQ30(0.9999),EvaRegs.T1PR/2),EvaRegs.T1PR,0);SS+;if(SS = 512)SS = 0;/EvaRegs.CMPR1 = INPUTSS ;EvaRegs.CMPR1 = SIN ;EvaRegs.CMPR2 = SIN2;EvaRegs.EVAIFRA.bit.T1UFINT = 1; /复位定时器1下溢中断标志PieCtrl.PIEACK

10、.all = PIEACK_GROUP2;/响应该中断并允许从组2中接受更多的中断 interrupt void CAP_INT3_ISR(void) /定义cap中断 SS=0; /指针复位 EvaRegs.EVAIFRC.bit.CAP3INT=1; PieCtrl.PIEACK.all = PIEACK_GROUP3;interrupt void ADC_FIR_INT_ISR(void) / ADC static Uint16 ibuf=0; PieCtrl.PIEACK.all = PIEACK_GROUP1;/* Manage the ADC registers */AdcRegs

11、.ADCTRL2.bit.RST_SEQ1 = 1;/ 复位SEQ1到CONV00状态AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;/ 清楚ADC SEQ1中断标志/*读取ADC结果:1) 将无符号16-bit结果转换成32-bit IQ16格式2) 将IQ16格式转换为IQ格式3) 根据ADC满量程定标*/ ADataibuf=AdcRegs.RESULT04; /采样电压值 AData1ibuf=AdcRegs.RESULT14; /采样电流值 AdcBufibuf = _IQmpy(AdcFsVoltage, _IQ16toIQ( (_iq)AdcRegs

12、.RESULT0); AdcBuf1ibuf = _IQmpy(AdcFsVoltage, _IQ16toIQ( (_iq)AdcRegs.RESULT1);xDelay0 = AdcBufibuf;AdcBufFilteredibuf = IQssfir(xDelay, coeffs, N);xDelay10 = AdcBuf1ibuf;AdcBufFiltered1ibuf = IQssfir(xDelay1, coeffs, N);vfibuf =AdcBufFilteredibuf; /采样电压值 Igibuf =AdcBufFiltered1ibuf; /采样电流值 / 电 压 电

13、流 双 闭 环 函 数SIN1 = _IQsat(_IQ30mpy(sine_tableibuf+_IQ30(0.9999),2047),4095,0);vrefibuf=SIN1;evibuf = vrefibuf- vfibuf ;if (ibuf=0)Igibuf=kp*evibuf+ki*evibuf ; if (Igibuf=Imax) /电压环限幅 考虑输出Ig正负Igibuf=Imax;else if (Igibuf=Vmax) /电流环限幅Vsibuf=Vmax;else if (Vsibuf=Imax) /电压环限幅 考虑输出Ig正负Igibuf=Imax;else if (

14、Igibuf=Vmax)Vsibuf=Vmax;else if (Vsibuf=0)M=Vsibuf/4096; elseM=-Vsibuf/4096; /考虑一下Vsk的正负值 确保M是0-1的值 ibuf +=4;if(ibuf = AdcBufLen) ibuf = 0; /函数结束 返回调制度M_iq IQssfir(_iq *x, _iq *a, Uint16 n) Uint16 i; / general purpose _iq y; / result _iq *xold; / delay line pointer /* Setup the pointers */ a = a + (n-1); / a points to last coefficient x = x + (n-1); / x points to last buffer element xold = x; / xold points to last buffer element /* Last tap has no delay line update */ y = _IQmpy(*a-, *x-); /* Do the other taps from end to beginning */ for(i=0; i n-1; i+) y = y + _IQmpy(*a-, *x);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论