版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 研究生实验报告XXXXXX大学研究生实验报告课程名称: DSP技术应用 综合设计名称:电量参数计算和发送 学生姓名: 班级学号: 学科名称: 2012年5月25日11一、综合实验题目和要求1、 实验设计要求要求1:对给定的波形信号,采用TMS320F28335的浮点功能计算该信号的以下时域参数:信号的周期T(频率f也需要计算),信号的均方根大小Vrms、平均值Vavg(即直流量)、峰峰值Vpp。其中,均方根Vrms的计算公式(数字量的离散公式)如下:式中,N为采样点数,u(i)为采样序列中的第i个采样点。要求2:所设计的软件需要计算采样的波形周期个数,并控制采样点数大于1个波形周期,小于3个
2、波形周期大小。要求3:对采样的数据通过串口发送至PC界面。2、 实验目的主要考核学生对TMS320F28335浮点处理器、A/D模块、SCI模块和信号时域分析等知识的掌握。产生的波形可选择正弦波,也可以是其它任意波形。如果波形中添加了随机噪声,则建议采用软件设计中加入数字滤波算法,否则可能计算中产生较大的误差。实验所需的频率不能太大,(建议范围:10Hz100kHz),采样点建议在256点左右(自己任意设定也可,不少于32点)。二、硬件框图图1 系统硬件框图图1 给出了该综合实验的硬件框图,首先通过小键盘设置波形的参数,包括频率、幅值以及波形等。然后通过信号发生器产生模拟信号,由DSP2833
3、5的AD通道6进行采样处理。DSP与PC机之间通过串口进行通信,由DSP28335的SCIb通道处理。ADC模块有16个转换通道,可配置成两个独立的8通道转换模块,分别对应于管理器A和B,根据用户需求,两个独立的8通道转换模块可以级联成一个8通道模块,在ADC模块中尽管可以多通道输入和有两个排序器,但只有一个A/D转换器可以。两个8通道模块可以自动对一系列转换进行排序,而且每个模块都可以通过多路复用开关选择任何一个通道。在级联模式下,自动排序器将作为一个单一的8通道排序器。对于每个排序器,当转换结束时,选择通道的转换结果被储存在相应的结果寄存器中。在DSP28335,自动排序模式允许用户对统一
4、通道进行多次采样。模拟输入与数字输出的关系如下图2ADC模块结构框图外设时钟HSPCLK通过ADCTRL3寄存器的SDCCLKPS(3:0)位分频,然后再通过通过ADCTRL1寄存器中的CPS位进行二分频。另外,ADC模块还可以通过扩展采样/获取周期,调整信号源的阻抗,这是由ADCTRL1寄存器中的ACQ_PS(3:0)位决定的。这些位并不影响采样/保持和转换过程,但可以通过增大脉冲长度增加采样的时间长度。图3ADC内核时钟以及采样/保持时钟三、程序流程图1、主程序流程图程序使用两个中断:ADC中断和CPU定时器2中断。ADC用于对波形进行采样、滤波、存储以及计算波形的有效值、峰峰值、平均值,
5、并使用串口发送;CPU定时器2中断用于计算波形周期和频率。图4 主程序流程图图4给出了主程序流程图,该程序的主要步骤是进行初始化使能中断等待中断响应。2、子程序流程图图5 ADC中断服务子程序图6 定时器2中断服务子程序图7滤波程序段图8求最大值最小值程序段图9求有效值和平均值程序段图10串口通信程序段图5图10给出了所有子程序的框图,下面分别说明各个程序的设计思想:(1)AD中断子程序(图5):该程序对波形进行采样,滤波以及存储,并求出有效值,峰峰值和平均值。采样后的波形存储在一个长度为1024的数组里。为了减少CPU开销,程序设定为采样累计到1024个点后再进行波形的有效值,峰峰值和平均值
6、计算。(2)定时器2中断子程序(图6):该程序通过定时器中断来实现对波形等时间间隔的判断和处理,从而可以较为精确的计算出波形周期和频率。在波形每次正向过零点时,计算出两次过零点的时间间隔,并乘以定时器2中断周期,从而得到波形的实际周期。定时器2中断周期设置为10us。(3)滤波程序(图7):该程序对1024个点进行了低通值滤波,根据本次采样点和上次采样点,来修正本次的采样值。滤波公式如下,程序中取K=0.15。 (4)求最大值最小值程序(图8):该程序定义数组第一个值为初值,再比较1023个点,如果找到更大的点,则赋给最大值对应的变量;如果找到更小的点就赋给最小值对应的变量。(5)求有效值和平
7、均值程序段(图9):有效值的计算:将1024个点的平方值相加求平均后,再开根号。平均值的计算:将1024个点求和然后求平均。(6)SCI通信程序(图10):PC端为串口接收助手,为了使显示界面上显示的是实际数值,发送之前将有关的数据量的个十百千位拆开,并转换为ASCII码进行发送。在发送之前检测SCIb_buff是否为空,若不为空则等待。串口发送子程序定义了一个计数器,以控制串口发送的速率。 四、实验结果和分析1、软件调试结果图11 900Hz 1200mV正弦波调试结果 (上图)图12 1700Hz 800mV正弦波调试结果 (上图)图13 800Hz 1000mV三角波调试结果 (上图)2
8、、结果分析(1)从图11所示的调试结果波形图可以看出,滤波后的波形平滑度明显变好,说明低通滤波效果良好。各个波形参数MIN(最小值)、MAX(最大值)、VRM(有效值)、FRE(频率)、 PER(周期)均和实际输入的指标误差在5%以内,说明电参量的计算方法准确性良好。(2)从图12所示的实验波形可以看出,当输入波形的电参量变化时,输出电参量的值也发生了相同变化,且误差值在5%以内。由ADC的采样频率可以得到,本程序可以计算出频率最低为150Hz的正弦波的周期。(3)比较图13和前两幅波形可以得出,本程序在对三角波进行采样时,波形滤波效果良好,电参量计算准确,也达到了良好的效果。由此验证了本程序
9、的通用性,并进一步验证了程序的准确性。(4)通过实验结果总结出本程序在以下方面需要进一步改进:AD采样的速率以及采样窗口的大小目前为确定值,当波形频率变化范围较大时,会影响到采样的结果,如:当频率过大时,采样波形每个周期的点数减小,将直接影响各个电参量的计算结果;当频率过小时,采样的窗口不能采样出一个完整的波形周期,也将直接影响各个电参量的计算结果。这是需要进一步作出改进的地方。五、源程序#include "DSP2833x_Device.h" / DSP2833x Headerfile Include File#include "DSP2833x_Example
10、s.h" / DSP2833x Examples Include File#include "math.h"/ Prototype statements for functions found within this errupt void adc_isr(void);interrupt void ISRTimer2(void);void number_count(void);/确定周期采样点,计算频率和有效值并发送数据void scib_fifo_init();void InitScibGpio(void);/串口初始化程序void number
11、_C(unsigned long i); /数字各位拆分函数#if (CPU_FRQ_150MHZ) / Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif#define ADC_CKPS 0x1 / ADC
12、 module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz#define ADC_SHCLK 0xf / S/H width in ADC module periods = 16 ADC clocks#define AVG 1000 / Average sample limit#define ZOFFSET 0x00 / Average Zero offset#define BUF_SIZE 160 / Sample buffer size/Global variables used in this example:Uint16 Lo
13、opCount;Uint16 ConversionCount;Uint16 Voltage11024;Uint16 i = 0;Uint16 j = 0;Uint16 Ticker50;/在AD采样的例程基础上修改,以下为新定义的变量:Uint16 ADt1,ADt2,ADt,ADt3,ADt4;/AD时间间隔Uint16 Voltagelb1024;Uint16 vref=500; /参考值int PreConversion=0;int crosszero=0;Uint32 t1,t2,t,t3,t4;/定时器时间间隔float Data=0.0;float Vavg=0.0;/平均值flo
14、at Vmax=0.0;/最大值float Vmin=0.0;/最小值float Vrms=0.0;/有效值float Vpp=0.0;/峰峰值float frequency=0;float period=0;float MAX=0.0;float MIN=0.0;/以下为整型变量,用于串口发送Uint16 T=0;/周期msUint16 F=0;/Uint16 V=0;/有效值mvUint16 max=0;/最大值mvUint16 min=0;/最小值mvunsigned int TX_flag = 0;/串口发送时间间隔标志unsigned int TX_Ticker = 500;/串口发
15、送的周期间隔main()/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();/ Step 2. Initialize GPIO:/ This example function is found in the DSP2833x_Gpio.c file and/ illustrates how to set the GPIO to it
16、9;s default state. InitGpio(); / Skipped for this example InitScibGpio();/*起初遗漏了这句话*/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/
17、 are cleared./ This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt/ Service Routines (ISR)./ This will populate the entire ta
18、ble, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2833x_DefaultIsr.c./ This function is found in DSP2833x_PieVect.c. InitPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR functions found w
19、ithin this file. EALLOW; / This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; PieVectTable.TINT2 = &ISRTimer2; EDIS; InitXintf();/*设置CPU*/ InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 150, 10);/中断时间10us.1MHz StartCpuTimer2(); CpuTimer2Regs.TCR.all = 0x400
20、1; / Use write-only instruction to set TSS bit = 0 /*开中断*/ IER |= M_INT14;/ Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1;/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP2833x_InitPeripherals.c/ InitPeripherals(); / Not required for thi
21、s example InitAdc(); / For this example, init the ADC scib_fifo_init();/ Step 5. User specific code, enable interrupts:/ Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; / Enable CPU Interrupt 1 EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM
22、LoopCount = 0; ConversionCount = 0; AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; / 0 Non-Cascaded Mode; 1 Cascaded Mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV00 =
23、0x6; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; for(i=0;i<1024;i+) Voltagelbi = 0; / Wait for interrupt for(;);/*此中断完成AD采样以及相关波形参数的计算(除周期外)*interrupt void adc_isr(void)/*采样并滤波*Voltage1ConversionCount=AdcRegs.ADCRESULT0 >>4;PreConversion=ConversionCount-1;if(
24、PreConversion<0) PreConversion=1024; VoltagelbConversionCount= Voltage1ConversionCount*0.15+ VoltagelbPreConversion*0.85;/一阶滞后滤波 if(ConversionCount = 1024)ConversionCount = 0;/*计算有效值,平均值,峰峰值程序段*/Vavg平均值,Vmax最大值,Vmin最小值,Vrms有效值,Vpp峰-峰值Vavg = 0;Data = 0;Vmax=Voltagelb0;Vmin=Voltagelb0;for(i=0;i<
25、1024;i+)Data+=Voltagelbi*Voltagelbi; Vavg+=Voltagelbi;if(Vmax<Voltagelbi) Vmax=Voltagelbi;if(Vmin>Voltagelbi) Vmin=Voltagelbi;Data=Data/1024;Vrms=sqrt(Data);/计算有效值 Vavg=Vavg/1024;/计算平均值Vpp=Vmax-Vmin;/计算峰-峰值/*计算有效值,平均值,峰峰值程序段结束*/ T=period*1000000; F=frequency; Vrms=Vrms*3/4095; MAX=Vmax*3/4095;
26、MIN=Vmin*3/4095;V=Vrms*1000;max=MAX*1000; min=MIN*1000;/得出的整型值单位均为mv number_count();/调用串口发送else ConversionCount+; / Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Ack
27、nowledge interrupt to PIE AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; return;/*此中断中计算波形周期,10us执行一次*interrupt void ISRTimer2(void)CpuTimer2.InterruptCount+;/32位无符号整型:最大4294967295if(CpuTimer2.InterruptCount>4294967290) CpuTimer2.InterruptCount=0;if(VoltagelbPreConversion<vref)&&(vref<Voltage
28、lbConversionCount)&&(crosszero=0)/第1个交点crosszero=1;t1=CpuTimer2.InterruptCount;ADt1=ConversionCount; if(VoltagelbPreConversion>vref)&&(vref>VoltagelbConversionCount)&&(crosszero=1)/第2个交点crosszero=2;t2=CpuTimer2.InterruptCount;ADt2=ConversionCount;if(VoltagelbPreConversi
29、on<vref)&&(vref<VoltagelbConversionCount)&&(crosszero=2)/第3个交点crosszero=0;t3=CpuTimer2.InterruptCount;ADt3=ConversionCount;if(t3<=t1) /计算一个周期的定时器间隔t=4294967295+t3-t1;elset=t3-t1;period=t*0.00001;frequency=1/period; PieCtrlRegs.PIEACK.all|=0x01;/清除中断响应位void number_count(void)
30、/此处定时发送数据TX_flag+;/记录发送时间间隔标志if( TX_flag >= TX_Ticker )TX_flag = 0;/需要发送频率、有效值、最大值、最小值ScibRegs.SCITXBUF= ''while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'I'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);Sc
31、ibRegs.SCITXBUF= 'N'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(min);ScibRegs.SCITXBUF= 'm'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs
32、.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'A'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'X'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':
33、9;while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(max);ScibRegs.SCITXBUF= 'm'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'V'whil
34、e(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(V);ScibRegs.SCITXBUF= 'm'while(ScibRe
35、gs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'F'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFS
36、T != 0);ScibRegs.SCITXBUF= 'E'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(F);ScibRegs.SCITXBUF= 'H'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'Z'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);
37、ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'P'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'E'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= &
38、#39;:'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(T);ScibRegs.SCITXBUF= 'u'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 's'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ''while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 't'
39、;while(ScibRegs.SCIFFTX.bit.TXFFST != 0);/清有效值和周期采样点数,为下周期做准备 void scib_fifo_init()/串口B初始化ScibRegs.SCICCR.all = 0x0007; / 1个停止位、无奇偶校验ScibRegs.SCICTL1.all = 0x0003; / 使能TX、RXScibRegs.SCICTL2.all = 0x0003;ScibRegs.SCICTL2.bit.TXINTENA = 1;ScibRegs.SCICTL2.bit.RXBKINTENA = 1;ScibRegs.SCIHBAUD = 0x0001;
40、ScibRegs.SCILBAUD = 0x00e7;/波特率9600ScibRegs.SCICCR.bit.LOOPBKENA =0; /禁止自检模式ScibRegs.SCICTL1.all =0x0023;ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0;ScibRegs.SCIFFRX.bit.RXFIFORESET=0;ScibRegs.SCIFFTX.all=0xE040;ScibRegs.SCIFFRX.all=0x204f;ScibRegs.SCIFFCT.all=0x0;void InitScibGpio(void)EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;/ GPIO18
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年绍兴市文化市场执法指导中心招聘编制外工作人员备考题库及参考答案详解1套
- 2026年重庆鸽牌电线电缆有限公司招聘14人备考题库有完整答案详解
- 杭州启正中学2025年12月教师招聘备考题库及完整答案详解
- 宜宾市妇幼保健院2025年第二次招聘编外人员的备考题库及完整答案详解1套
- 客房卫生安全知识培训课件
- 实验室安全课课件
- 快递包装合同模板2025年
- 实验室安全培训心得
- 跨境电商退货协商合同协议
- 跨境电商税务咨询合同协议2025
- 登革热临床诊断与治疗课件
- 村监委申请书
- 【MOOC】财务管理-上海对外经贸大学 中国大学慕课MOOC答案
- 武汉版生命生态安全【武汉版】《生命安全教育》五年级 第8课《远离黄色音像制品和书刊》课件
- 设计元素提取方法及应用
- 青岛版六年级数学上册总复习百分数(一)课件
- 危险废物贮存污染控制标准解读II
- 施工重大危险源专项方案
- 2022年山东中医药高等专科学校单招面试试题及答案解析
- 福建省重点建设项目档案验收实施细则
- YC/T 405.1-2011烟草及烟草制品多种农药残留量的测定第1部分:高效液相色谱-串联质谱法
评论
0/150
提交评论