程启忠DSP课程设计

时间:2024.3.31

DSP设计报告

题目CPU内部AD转换

 学    院:  物理与信息工程学院 

    专    业:                

    姓    名:               

    学    号:   112207202139     

         指导老师:   漆为民           

                         20##年1月2日

目  录

一:设计目的…………………………………..........…………3

二:实验设备..……………………………………………3

三:实验原理.……………………………………………...……4

四:实验说明..…………………………………………………7

五:实验数据…………………………………..……………10

六:心得与体会……………………………………………11

 

A/D实验(CPU)

一:设计目的

1. 熟悉CPU内部AD转换的基本原理。

2. 掌握TMS320F2812的内部ADC功能模块的指标和常用方法。

二、实验设备

   计算机,CCS3.3版本软件,DSP仿真器,E300实验箱,2812CPU板(新的),信号线,示波器

三、实验原理与任务

1、实验原理:

TMS320F2812DSP自带16路12位单极性ADC转换器,并且内置双采样保持器。快速转换时间运行在25MHz。16个通道可配置为两个独立的8通道模块以便为事件管理器A和B服务。两个独立的8通道模块可以级联组成一个16通道模块。虽然有多个输入通道和两个序列器,但是ADC模块只有一个转换器。

下图给出了F2812的ADC模块框图。

 

两个8通道模块具有一对系列转换和自动序列化的能力,通过模拟多路复用器,每个模块都可以选择可用的8个通道中的任何一个通道。在级联模式下,自动序列发生器可作为一个单一的16通道序列发生器。在每个序列发生器上,一旦转换结束,已选择的通道值就保存在各个通道的结果寄存器ADCRESULT中。

自动序列化允许系统对同一通道转换多次,允许用户执行过采样算法。这较传统的单一采样转换结果增加了更多的解决方案。

输入模拟电压的数字值为:

数字值=4095×(输入模拟电压值)/3

多触发源启动序列转换(SOC)包括:

●S/W:软件直接启动;

●EVA/B:事件管理器A/B(EVA/B内有多个事件源);

●S/W:外部引脚。

具体的原理和相关内容,请读者参阅相关的文档和书籍。

2、实验任务一:

通过信号发生器,产生方波和正玄波,由DSP自带AD将数据采集到DSP内,经过CCS自带的graph功能,运行程序,观察测试结果。

3、程序框图

4、主要程序:

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File

#include "DSP281x_Examples.h"   // DSP281x Examples Include File

interrupt void adc_isr(void);

Uint16 LoopCount;

Uint16 ConversionCount;

Uint16 input1[256];

Uint16 input2[256];

Uint16 Mixing[256];

void main(void)

{

   InitSysCtrl();

   EALLOW;

   SysCtrlRegs.PLLCR.all=0x8;

   SysCtrlRegs.HISPCP.all = 0x3; 

   EDIS;  

   DINT;

   InitPieCtrl();

   IER = 0x0000;

   IFR = 0x0000;

   InitPieVectTable();           

   EALLOW; 

   PieVectTable.ADCINT = &adc_isr;

   EDIS;  

   InitAdc(); 

   PieCtrlRegs.PIEIER1.bit.INTx6 = 1;

   IER |= M_INT1;

   EINT;         

   ERTM;        

   LoopCount = 0;

   ConversionCount = 0;   

   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;     

   AdcRegs.ADCMAXCONV.all = 0x0001;      

   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;

   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2;

   AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;

   AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; 

   EvaRegs.T1CMPR = 0x0380;              

   EvaRegs.T1PR = 0x07FF;                

   EvaRegs.GPTCONA.bit.T1TOADC = 1;     

   EvaRegs.T1CON.all = 0x1042;           

   for(;;)

   {

      LoopCount++;

   }

}

interrupt void  adc_isr(void)

{

  input1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;

  input2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;

  Mixing[ConversionCount] = input1[ConversionCount] + input2[ConversionCount];

  if(ConversionCount == 256)

  {

     ConversionCount = 0;//加软件断点

  }

  else ConversionCount++; 

  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;        

  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;      

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   

  return;

}

、实验说明:

1、本实验是用DSP自带的ADC转换器采集信号源的信号。并将采集到的信号储存到指定的内存区域。由于ADC是单极性的,所以从信号源过来的双极性信号经过偏置电路转换成单极性信号然后由ADC采样。

  2、实验中相关语句说明:

/*************************头文件*********************************/

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File

#include "DSP281x_Examples.h"   // DSP281x Examples Include File

// Prototype statements for functions found within this file.

interrupt void adc_isr(void);

采用中断方式来处理AD转换,也就是在AD转换完后可以产生中断,然后由DSP处理。

// Global variables used in this example:

Uint16 LoopCount;

Uint16 ConversionCount; AD转换的次数

Uint16 input1[256];

Uint16 input2[256];

Uint16 Mixing[256];

void main(void)

{

   InitSysCtrl();

   EALLOW;

   SysCtrlRegs.PLLCR.all=0x8;

   SysCtrlRegs.HISPCP.all = 0x3;  // HSPCLK = SYSCLKOUT/6

   EDIS;

   DINT;

初始化外设中断控制器

   InitPieCtrl();

禁止中断,同时清中断标记和中断允许。

   IER = 0x0000;

   IFR = 0x0000;

初始化外设中断控制器向量表。

   InitPieVectTable();    

将中断服务程序地址填入中断向量表。

   EALLOW;  // This is needed to write to EALLOW protected register

   PieVectTable.ADCINT = &adc_isr;

   EDIS;    // This is needed to disable write to EALLOW protected registers

初始化ADC,该程序在后面有详细介绍。

   InitAdc();  // For this example, init the ADC

以下程序开AD转换中断。

   PieCtrlRegs.PIEIER1.bit.INTx6 = 1;

   IER |= M_INT1; // Enable CPU Interrupt 1

   EINT;          // Enable Global interrupt INTM

   ERTM;          // Enable Global realtime interrupt DBGM

   LoopCount = 0;

   ConversionCount = 0;   

设置AD转换参数:

   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;      16通道采样模式,排序器1,2进行级联

   AdcRegs.ADCMAXCONV.all = 0x0001;       // SEQ1中有两个通道采样

   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 在SEQ1中第一个采样

   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // ADCINA2 在SEQ1中第二个采样

   AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;  // 启动SEQ1采样

   AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // 允许SEQ1采样中断

参见资料Spru060d,

 

 以下设置定时器1的比较寄存器的值

   EvaRegs.T1CMPR = 0x0380;               // Setup T1 compare value

 设置周期寄存器的值

   EvaRegs.T1PR = 0x07FF;                 // Setup period register

    将定时器1用于AD转换的定时

   EvaRegs.GPTCONA.bit.T1TOADC = 1;       // Enable EVASOC in EVA

  允许定时器1进入比较模式。

   EvaRegs.T1CON.all = 0x1042;            // Enable timer 1 compare (upcount mode)

等待AD转换时间。

   for(;;)

   {

      LoopCount++;

   }

}

AD转换 中断服务程序

interrupt void  adc_isr(void)

{

 将采集来的值进行保存

  input1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;

  input2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;

  Mixing[ConversionCount] = input1[ConversionCount] + input2[ConversionCount]; 

if(ConversionCount == 256)

  {最多采集256个数。

     ConversionCount = 0;//加软件断点

  }

  else ConversionCount++;

  // Reinitialize for next ADC sequence

以下使SEQ1可以重新进行中断,和采样。

  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1

  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE 

  return;

}

在文件dsp281x_Adc.c中定义

void InitAdc(void)

{

内部参考基准上电

         AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;  // Power up bandgap/reference circuitry

模拟电路上电。

         AdcRegs.ADCTRL3.bit.ADCPWDN = 1;           // Power up rest of ADC

//       DELAY_US(ADC_usDELAY2);                 // Delay after powering up ADC

}

五、实验数据

六、心得体会:

 通过这些实验的设计与操作,我们深深体会到DSP的理论知识与实践相结合的重要性。在老师的指导下,我们完成了DSP的所有实验,并学会了CCS 3.1版软件,DSP仿真器,E300实验箱,2812CPU板等的基本操作,掌握了外部断的处理方法、数据存储实验、CUP定时器中断方式控制程序流程A/D转换模块的使用、拨码开关、了解DSP开发系统的组成和结构、掌握F2812的CPU定时器的控制方法,同时非常感谢老师和同学们的帮助。

1、实验指导书中已给出一部分内容的完整代码,需要自己思考改动的地方不多,因此实验难度不大。 

2、硬件是基础,做实验时要首先检查硬件设备是否可用,保证后续实验的可检测性。特别是要确定程序能输入到实验箱中。 

3、、在实验中应不要带电接线、插拔芯片;插拔接线时轻微转动,便于插拔。 4、在实验中更加熟练地使用示波器等设备进行观察、测量。


第二篇:DSP课程设计 完成


DSP原理及应用

课程设计

题    目:  FIR滤波器设计

学    院:  信息工程学院 

专业班级:  信息0802班  

姓    名:  焦全军       

学    号:  2008001222   

一、设计题目:有限脉冲响应FIR滤波器的设计

二、设计目的:

1、  掌握数字滤波器的设计过程;

2、  了解FIR的原理和特性;

3、  熟悉设计FIR数字滤波器的原理和方法;

4、  学习FI R滤波器的DSP实现原理;

5、  学习使用CCS的波形观察窗口观察输入/输出信号波形和频谱变化情况。

三、设计原理:

滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号,滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器响应特性逼近给出的频率响应特性。

FIR数字滤波器是一种非递归系统,其传递函数为:

=

由此可得到系统的差分方程为:

则,FIR滤波器的结构如下图:

其冲激响应是有限长序列,它 滤波器系数向量,N 为FIR滤波器的阶数。

在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性为了使滤波器满足线性相位条件,要求其单位脉冲响应为实序列,且满足偶对称或奇对称条件,即.这样,当N为偶数时,偶对称线性相位FIR滤波器的差分方程表达为

由上可见,FIR滤波器不断地对输入样本延时后,再做乘法累加运算,将滤波器结果输出。因此,FIR实际上是一种乘法累加运算。而对于线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。

应用MATLAB设计FIR滤波器的主要任务就是根据给定的性能指标设计一个,使其逼近这一指标,进而计算并确定滤波器的系数,再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化,设计完成之后将得到的FIR滤波器的单位冲激响应序列的各个参数值。

四、总体设计方案:

1、  利用MATLAB来确定FIR滤波器的参数;

2、  启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程再编译并装载程序;

3、设置波形时域观察窗口,得到滤波前后的波形变化图;

4、设置频域观察窗口,得到滤波前后的频谱变化图。

五、 CCS开发环境

CCS是一种针对TMS320系列DSP的集成开发环境,在windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,提供了配置、建立、调试、跟踪和分析程序的工具,从而完成编辑、编译、链接、调试和数据分析等工作。

利用ccs集成开发软件,用户可以在一个开发环境下完成工程项目创建、程序编辑、编译、链接、调试和数据分析等工作环节。使用ccs开发应用程序的一般步骤为:

1.打开或创建一个工程项目文件,包括源程序、目标文件、库文件、链接命令文件和包含文件。

2.编辑各类文件。可以使用ccs提供的集成编辑环境,对头文件、链接命令文件和源程序进行编辑。

对工程项目进行编译。如出现语法错误,将在构建窗口中显示错误信息。用户可以根据显示信息定位错误信息,更改错误。

4.对结果和数据进行分析和算法评估。用户可以利用ccs提供的探测点、图形显示、性能评价等工具,对运行结果、输出数据进行分析,评估算法性能。

六、参数及其设计步骤:

1、滤波器的参数n=40,wp=0.3π,ws=0.35π

2、matlab系数产生:由f=[0 0.3 0.35 1];

m=[1 1 0 0];

b=fir2(39,f,m)

得到matlab的系数为:

b =

 Columns 1 through 11

 0.0007   -0.0001   -0.0012   -0.0017   -0.0001    0.0033    0.0050    0.0009   -0.0077   -0.0124   -0.0038

Columns 12 through 22

  0.0157    0.0274    0.0113   -0.0300   -0.0607   -0.0335    0.0691    0.2087    0.3090    0.3090    0.2087

Columns 23 through 33

 0.0691   -0.0335   -0.0607   -0.0300    0.0113    0.0274    0.0157   -0.0038   -0.0124   -0.0077    0.0009

 Columns 34 through 40

  0.0050    0.0033   -0.0001   -0.0017   -0.0012   -0.0001    0.0007

 (2)汇编源程序:

.title  "FIR.ASM" 

 .mmregs

 .bss     y,1

K_FIR_BFFR        .set     40

PA0                .set      0

PA1                .set      1

FIR_COFF_TABLE   .usect    "FIR_COFF",   40

D_DATA_BUFFER   .usect    "FIR_BFR" ,   40

                  .data

COFF_FIR_START  .word   7*32768/10000,    -1*32768/10000      ;b0,b1

                  .word  -12*32768/10000,    -17*32768/10000     ;b2,b3

                              .word     -1*32768/10000,  33*32768/10000        ;b4,b5

                              .word     50*32768/10000,    9*32768/10000       ;b6,b7

                              .word    -77*32768/10000,   -124*32768/10000      ;b8,b9

                              .word    -38*32768/10000,  157*32768/10000      ;b10,b11

                              .word    274*32768/10000,   113*32768/10000     ;b12,b13

                              .word   -300*32768/10000,  -607*32768/10000     ;b14,b15

                              .word   -335*32768/10000,   691*32768/10000     ;b16,b17

                              .word  2087*32768/10000,  3090*32768/10000     ;b18,b19

                              .word  3090*32768/10000,  2087*32768/10000     ;b20,b21

                              .word    691*32768/10000,  -335*32768/10000     ;b22,b23

                              .word -607*32768/10000,    -300*32768/10000     ;b24,b25

                              .word    113*32768/10000,   274*32768/10000     ;b26,b27

                              .word    157*32768/10000,  -38*32768/10000     ;b28,b29

                              .word  -124*32768/10000,    -77*32768/10000     ;b30,b31

                              .word     9*32768/10000,    50*32768/10000     ;b32,b33

                              .word     33*32768/10000,   -1*32768/10000     ;b34,b35

                              .word    -17*32768/10000,   -12*32768/10000     ;b36,b37

                              .word      -1*32768/10000,    7*32768/10000     ;b38,b39

                              .text

                              .def        FIR_INIT

                              .def        FIR_TASK

FIR_INIT: SSBX        FRCT

          STM         #FIR_COFF_TABLE,AR5

          RPT         #K_FIR_BFFR-1

          MVPD        #COFF_FIR_START,*AR5+

          STM         #D_DATA_BUFFER,AR4

          RPTZ        A,#K_FIR_BFFR-1

          STL         A,*AR4+

          STM         #(D_DATA_BUFFER+K_FIR_BFFR-1),AR4

          STM         #(FIR_COFF_TABLE+K_FIR_BFFR-1),AR5

          STM         #-1,AR0

          LD          D_DATA_BUFFER,DP

          PORTR       PA1,@D_DATA_BUFFER

FIR_TASK: STM         #K_FIR_BFFR,BK

          RPTZ        A,#K_FIR_BFFR-1

          MAC         *AR4+0%,*AR5+0%,A

          STH         A,@y

          PORTW       @y,PA0

          BD          FIR_TASK

          PORTR       PA1,*AR4+0%

.end

3、汇编源程序的链接命令文件:

MEMORY

 {

   PAGE 0: EPROM:   org=0E000H len=1000H

           VECS:    org=0FF80H len=0080H

   PAGE 1: SPRAM:   org=0060H len=0020H

           DARAM:   org=0080H len=1380H

 }

 SECTIONS

 {

    .text : > EPROM     PAGE 0

       .text : > VECS      PAGE 0

       .data : > EPROM     PAGE 0

       .bss  : > SPRAM     PAGE 1

       FIR_BFR : align(128){}> DARAM PAGE 1

       FIR_COFF : align(128){}> DARAM PAGE 1

 }

七、实验结果及分析

时域波形:

滤波前的时域波形

滤波后的时域波形

    由时域图可得:滤波前的时域图是带很多毛刺不规则的正弦波,而滤波后的波形是平滑的等幅正弦波且波形振幅相对滤波前的最大振幅有所减小。

频域波形:

滤波前的频域波形

滤波后的频域波形

   由频域图可得:滤波前的频域图会出现两个带尖峰的图像,而滤波后的波形只会出现一个带尖峰图像,而且是出现在低频部分,说明信号经过滤波器后,将信号中的高频成分滤除掉了。

九、设计的收获及体会

通过这次课程设计实现了FIR滤波器的设计并学会了CCS软件的应用,使我对DSP芯片有了更深一步的了解,巩固了以前在《数字信号处理》中学的滤波器设计的理论知识使我们建立了滤波器设计的整体概念,通过仿真使得学的一些抽象的理论形象化,强化了自己的基础知识。

   在用CCS软件仿真作图的过程中,由于程序文件在书写过程中出现格的错误,导致在仿真中出现错误,影响仿真的效率,在同学和老师的帮助下我更正了错误问题,最终得到正确的仿真波形图,这使我意识到在进行实验的过程中哪怕一个细节的错误也会导致实验的失败,也警示我在以后的学习生活中要养成细心的习惯。

   在这次的课程设计中学会了如何和老师、同学一起交流、探讨问题,在学习的过程中同时培养了和同学之间的合作能力,增进了彼此之间的友谊,感谢在这次设计中给予我帮助的老师还有各位同学。

更多相关推荐:
工程预算课程设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着工程技术发展的日新日异,工程造价已经成为当今建筑工程领域最为重要的管理环…

c++课程设计总结

课程设计总结经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期近两周的C++课程设计中,我体会颇多…

化工原理课程设计总结

《化工原理课程设计》总结本学期顺利完成了化学工程与工艺专业共100名同学的化工原理课程设计,总体来看学生的工艺计算、过程设计及绘图等专业能力得到了真正有效的提高,可以较好地把理论学习中的分散知识点和实际生产操作…

PLC自动门课程设计心得体会

PLC自动门课程设计心得体会:通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没怎么看过当要开始设计的时候还真不知从哪下手!结果第一次的上机我傻坐着不知道该做什么后来就写了几…

课程设计心得体会

课程设计心得体会在初学C语言的一个学期后,学校组织我们进行了C语言实训,尝试编写一些有难度的程序。在为期两周的时间中,同组同学共同的感受是:C语言实训和平时上课所接触的程序是完全不同的,所经受的考验是平时所无法…

综合实践活动课程设计练习题(判断题、填空题、名词解释、简答题)

单选题第1题(3.0)分下列以研究性为主的探究活动的实施程序哪个是正确的√A、产生问题-确定主题-组建小组-制定计划-开展活动-总结成果-展示交流-评价反思B、产生问题--组建小组-确定主题-制定计划-开展活动…

20xx年《管理信息系统》课程设计论文选题

20xx年《管理信息系统》课程设计论文选题一、管理信息系统设计与开发1、IT行业市场情报管理信息系统设计与开发2、某工业企业生产业务处理信息系统设计与开发3、某产品质量管理信息系统设计与开发4、某工业企业设备管…

消防课程设计范文.doc

课程设计课题名称所在班级同组姓名指导教师目录1前言12简介13火灾危险性分析231学生公寓的火灾特点232学生公寓的火灾危险性等级233学生公寓的耐火等级2331建筑物耐火等级的划分2332建筑物耐火等级的选定...

化工原理课程设计范文

化工原理课程设计3题目吸收量为2400mh水吸收丙酮过程填料塔设计教学院专业班级学生姓名学生学号指导教师20xx年12月24日I目录任务书1摘要2第一章绪论311吸收技术概况312吸收设备的发展313吸收过程在...

毕业论文及课程设计参考模版

摘要摘要电信营业厅顾客排队是一个常见的现象为了提高顾客满意度并为实现电信企业转型提供保障必须解决好这个问题而解决该问题的基本目标是平稳波动的顾客需求与电信营业厅有限的服务能力之间的矛盾本文基于排队论和需求管理的...

课程设计排版范本

课程设计课题名称我校顺枫公寓A6栋的消防现状分析与改进专业名称安全工程所在班级安本0803班设计者解燕同组人姜琼学号0860124031008601240212指导教师胡鸿湖南工学院课程设计任务书安全与环境工程...

创新课程设计范例

机械创新设计课程设计院系班级成员指导老师设计题目1年月日多功能平口钳设计方案一设计任务简述多功能平口钳为了实现平口钳的多功能化解决平口钳功能单一的问题设计出一种多功能平口钳其我们将钳口作成燕尾槽结构并配合以不同...

课程设计(518篇)