




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. In
2、clude required 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,"
3、;IQmathTables");_iq30 sine_table512;#define 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; /jia
4、yujintshort int AData512=0;short int AData1512=0;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
5、)/ ADC 满量程电压#define AdcBufLen512/ ADC 结果缓冲长度_iq AdcBufAdcBufLen; / ADC 结果缓冲_iq AdcBuf1AdcBufLen;_iq AdcBufFilteredAdcBufLen; / 滤波后电流的ADC结果缓冲_iq AdcBufFiltered1AdcBufLen; / 滤波后电压的ADC结果缓冲_iq vfAdcBufLen; / 滤波后电流的ADC结果缓冲_iq IfAdcBufLen; / 滤波后电压的ADC结果缓冲_iq IgAdcBufLen; _iq vrefAdcBufLen; /需要转换iq格式 已经转化到
6、调整环内的IQ格式_iq evAdcBufLen;_iq eiAdcBufLen;_iq VsAdcBufLen;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();/*初始化
7、PIE矢量表*/InitPieVectTable();/*初始GPIO*/InitGpio(); 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.b
8、it.INTx7 = 1; /开CAP中断IER |= 0x0007 ;EINT; /使能全局中断INTMERTM; /使能全局实时中断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.99
9、99),EvaRegs.T1PR/2),EvaRegs.T1PR,0);/计算得出新的正弦表SIN = _IQsat(_IQ30mpy(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
10、;EvaRegs.EVAIFRA.bit.T1UFINT = 1; /复位定时器1下溢中断标志PieCtrl.PIEACK.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.PIE
11、ACK.all = PIEACK_GROUP1;/* Manage the ADC registers */AdcRegs.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.RESULT0>>4; /采样电压值 AData1ibuf=AdcRegs.RESUL
12、T1>>4; /采样电流值 AdcBufibuf = _IQmpy(AdcFsVoltage, _IQ16toIQ( (_iq)AdcRegs.RESULT0); AdcBuf1ibuf = _IQmpy(AdcFsVoltage, _IQ16toIQ( (_iq)AdcRegs.RESULT1);xDelay0 = AdcBufibuf;AdcBufFilteredibuf = IQssfir(xDelay, coeffs, N);xDelay10 = AdcBuf1ibuf;AdcBufFiltered1ibuf = IQssfir(xDelay1, coeffs, N);vf
13、ibuf =AdcBufFilteredibuf; /采样电压值 Igibuf =AdcBufFiltered1ibuf; /采样电流值 / 电 压 电 流 双 闭 环 函 数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&l
14、t;=-Imax)Igibuf=-Imax;Ig0=Igibuf;eiibuf=Igibuf-Ifibuf; /电流环运算Vsibuf=kip*eiibuf; if (Vsibuf>=Vmax) /电流环限幅Vsibuf=Vmax;else if (Vsibuf<=-Vmax)Vsibuf=-Vmax;Vs0=Vsibuf;elseIgibuf=kp*(evibuf-evibuf-1)+ki*evibuf; if (Igibuf>=Imax) /电压环限幅 考虑输出Ig正负Igibuf=Imax;else if (Igibuf<=-Imax)Igibuf=-Imax;I
15、gibuf-1=Igibuf;eiibuf=Igibuf-Ifibuf; /电流环运算Vsibuf=kip*(eiibuf-eiibuf-1); /电流环限幅if (Vsibuf>=Vmax)Vsibuf=Vmax;else if (Vsibuf<=-Vmax)Vsibuf=-Vmax;Vsibuf-1=Vsibuf;if (Vsibuf>=0)M=Vsibuf/4096; elseM=-Vsibuf/4096; /考虑一下Vsk的正负值 确保M是0-1的值 ibuf +=4;if(ibuf = AdcBufLen) ibuf = 0; /函数结束 返回调制度M_iq IQs
16、sfir(_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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考数学试题及答案指导
- 印刷帮消防火灾应急预案(3篇)
- 技术员信息处理考试的试题与答案的复盘
- 2025年网络全景知识试题及答案
- 网络管理员考试重点话题试题及答案
- 2025详解合同购买合同应当关注的法律问题
- 项目沟通与协调技巧试题及答案
- 增强自我反思能力的修炼计划
- VB语法基础试题及答案解析
- 行政管理考试的复习计划及试题及答案
- GB/T 44273-2024水力发电工程运行管理规范
- 新课标语文整本书阅读教学课件:鲁滨逊漂流记(六下)
- 中南大学版固体物理学习题及答案详解分析
- DL∕T 319-2018 架空输电线路施工抱杆通 用技术条件及试验方法
- CJ/T 158-2002 城市污水处理厂管道和设备色标
- GB/T 22581-2024混流式水泵水轮机基本技术条件
- 房地产销售客户购房动机调研
- 第03讲三步解决一次函数的行程问题(原卷版+解析)
- DZ∕T 0211-2020 矿产地质勘查规范 重晶石、毒重石、萤石、硼(正式版)
- 监狱监管安全隐患分析
- 中国纺织文化智慧树知到期末考试答案章节答案2024年武汉纺织大学
评论
0/150
提交评论