基于TMS329F2812DSP的课程设计.docx_第1页
基于TMS329F2812DSP的课程设计.docx_第2页
基于TMS329F2812DSP的课程设计.docx_第3页
基于TMS329F2812DSP的课程设计.docx_第4页
基于TMS329F2812DSP的课程设计.docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

目 录一 引言1二 设计目的2三 设计要求3四 总体设计44、1硬件部分44.1.1 数模转换操作的应用基础44.1.2 AD7303简介54.1.3 应用AD7303的DAC电路设计64.2 软件部分84.2.1 程序流程图84.2.2 在CCS集成开发环境下新建工程94.2.3在Simulator环境下观察信号的时域及FFT Magnitude波形114.2.4 程序清单154.3 调试部分234.3.1 硬件调试234.3.2 软件调试234.3.3 SCI串行数据传输24五 总结26六 参考文献28一 引言随着计算机技术的飞速发展,对信号发生器波形的要求越来越高。目前,常用信号发生器大部分是由模拟电路构成,当这种模拟信号发生器用于低频输出时,由于需要较大的RC值,导致参数准确度难以保证,且造成体积和功耗偏大,而数字式波形发生器,因其输出幅值稳定、输出频率连续可调的优点,已逐渐取代了模拟电路信号发生器。由于其运算速度高,系统集成度强的优势,可以设计基于DSP的正弦信号发生器,该发生器实时性强、可扩展性好、波形精度高、可调节频率和幅度、稳定性好、用途广泛,各方面均优于模拟信号发生器和数字信号发生器。因此,本文提出了一种基于TMS320F2812的正弦信号发生器的设计方法。本文提出了一种基于TMS320F2812实现正弦信号发生器的设计原理与方法,介绍了所设计的正弦信号发生器硬件电路结构和软件程序流程图。在CCS开发环境下,建立了正弦信号发生器的陈或许编写工程。通过导入加载程序,在PC机上利用软件仿真将正弦波形显示出来。结合DSP硬件特性,通过D/A转换器得到设定参数的正弦波形输出,达到设计目的。该信号发生器弥补了通常信号仪发生器模式固定,波形不可编程的缺点,其具有实时性强,波形精度高,可方便调节频率和幅度、稳定性好等优点。阐述了基于TMS320F2812DSP实现信号的设计原理和实现方法,详细介绍了所设计的信号发生器的硬件电路结构和程序设计流程图。该信号发生器可以产生任意复杂的波形,且信号的幅度和频率全部由DSP程序控制,易于修改,弥补了通常信号发生器模式固定、波形不可编程以及精度低的不足。此外,还运用了DSP的外部并行16位FLASH引导装载设计方法,通过在线FLASH编程,使得所设计的DSP目标系统成为一个独立的脱机运行系统,灵活性大大增强,使用也更加方便。 二 设计目的在CCS集成开发环境下,通过编写的TMS320F2812利用串行外设接口SPI的驱动程序,设定128个采样点,编译调试成功之后,将该程序加载到PC机里面。通过Simulator软件仿真环境,把程序里面的正弦信号的波形显示出来。利用硬件仿真器将程序烧在硬件F2812芯片里面,通过示波器来显示正弦信号,并观察两个输出口的波形以及稳定性。最后在模转换的基本操作的基础上,设计基于数模转换芯片A D7303的正弦信号发生电路。再结合串行通信接口SCI,在硬件芯片和PC机之间进行数据的传输。三 设计要求1、 编写串行外设接口SPI的驱动程序;2、 编译运行程序,加载程序于PC机内和硬件F2812芯片里面;3、 了解数模转换的基本操作,设计基于数模转换芯片AD7303的正弦信号发生电路;4、 编写TMS320F2812利用SPI接口驱动AD7303输出正弦信号波形的应用程序。5、 利用硬件芯片F2812来实现PC机与硬件之间的数据传输。 四 总体设计4、1硬件部分4.1.1 数模转换操作的应用基础DAC是最基本最重要的混合信号构建模块,其输出可以是单端,也可以是差分;器件可以是单极性,也可以是双极性的;DAC的传递函数是线性的,也可以是非线性的。实际传递函数与理想传递函数的拟合度可以用DAC的积分非线性或INL来描述,通常有两种表达方法:一种是端点方法。另一种是最佳直线的方法。即使是简单的-转换器那样并不呈现微分非线性误差的转换器也都有INL误差,而且这个误差还会影响到杂散和失真的性能。数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。利用专用的数模转换芯片,可以实现将数字信号转换成模拟量输出的功能。在EXPIV型实验箱上,使用的是AD7303数模芯片,它可以实现同时转换2路模拟信号数出,并有8位精度,DA转换时间1.2s。其控制方式较为简单:首先将需要转换的数值及控制指令同时通过SPI总线传送到AD7303上相应寄存器,经过一个时间延迟,转换后的模拟量就从AD7303输出引脚输出。数模转换器的基本工作原理就是将输入的二进制数字量转换城模拟量,以电压或电流的形式输出。D/A转换器实质上是一个译码器。一般常用的线性D/A转换器输出电压和输入数字量之间是成正比关系的。将输入的每一位二进制代码按其权值大小转换成相应的模拟量,然后将代表各位的模拟量相加,则所得的总模拟量就与数字量成正比,这样便实现了从数字量到模拟量的转换。数字量与模拟量的转换如下表:4.1.2 AD7303简介AD7303是一款双通道、8位电压输出DAC,采用+2.7 V至+5.5 V单电源供电。它内置片内精密输出缓冲,能够实现轨到轨输出摆幅。这款器件采用多功能三线式串行接口,能够以最高30MHz的时钟速率工作,并与QSPI、SPI、MICROWIRE以及数字信号处理器接口标准兼容。串行输入寄存器为16位,其中8位用作DAC的数据位,其余8位组成一个控制寄存器。移位寄存器中的数据可以在移位脉冲作用下一次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。输入移位寄存器 AD7303输入移位寄存器位定义及设置方式4.1.3 应用AD7303的DAC电路设计AD7303采用的是+2.7V至+5.5V的单电源供电。本课程设计中用的是+3.3V。但在波形中可达+5.5V。AD7303的DAC电路设计的过程中,用到了运算放大器,电阻,电容等。在电路设计时,应注意运算放大器的连接和模拟地的接通。还运用U12和串行外设接口SPI来连接。有两个输出OUTA和OUTB。具体的AD7303的电路连接设计如下图所示: AD7303电路设计A/D7303具体的工作流程如下图所示,从下图我们可以看出,当寄存器接收到外部的时钟信号之后,在十六位的移位寄存器里面自动的将十六位分为高八位的数据寄存器和低八位的控制寄存器。将这十六位的数据分别送入到输入寄存器和DAC寄存器里面。经过DAC的A和B通道之后,再经过电流电压转换器,有通道A和B输出来。这就是A/D7303的工作流程。4.2 软件部分4.2.1 程序流程图处理器上电复位CPU及串行外设接口初始化产生128个点的正弦信号波形按AD7303输入移位寄存器的位定义,传输数据,进行数模转换双路波形输出 无限循环4.2.2 在CCS集成开发环境下新建工程 双击桌面的CCS图标打开CCS的运行环境,出现了一个运行界面。点击Project下New新建一个工程,新建工程后编写串行外设接口SPI的驱动程序。该程序是采样128个点,利用FOR循环输出正弦信号的波形。按照DSP编程的一般步骤,对各个函数和变量进行声明,对各个寄存器进行初始化。并对各个寄存器设置相应的值。还有对主函数,子函数的编写,以及子函数的正确调用。如下图1为新建工程后编写的串行外设接口SPI的驱动程序的界面。图2为添加断点以后的程序运行到断点位置的界面。图3为给整个程序添加驱动程序的界面。图4为在Debug下调试的界面。 图1 图2图3图4 4.2.3在Simulator环境下观察信号的时域及FFT Magnitude波形在将工程新建后,把串行通信接口SPI的驱动程序键入后,进行编译,运行无误后。在FILE下Load Program加载程序到PC机。再经过调试和运行,以及断点的设置。在View 下Graph选择时域。弹出对话框,设置相应的参数,如下图:图5对应的输出的正弦信号波形如下图:图6在Graph Property Dialog的对话框中,Start Address的地址是Curve。因为Curve是曲线上的取样点构成的数组,数组的名称也即是数组的起始地址。DSP的数据类型是十六位的无符号数。幅度可以自动的调节,也可以自己来设定。这和Autoscale的ON,OFF有关。Q-value表示的是量标,取0时,幅度最大255(自己设定值时);而如果取1时,幅度最大值减半。从其对应的波形可以知道,波形的曲线有明显的断层。这和取的样值点数少有关,取值多时,可以使得曲线更接近实际情况。但不能超过256,因为在程序中的寄存器用的是十六位的。超过了256,就会溢出,造成波形的严重失真。(如果量标值是2,则其幅度就是原来的1/4)具体的设定值情况如下图7:图7对应的输出正弦信号波形如下图8:图8在View下选Graph,选择频域FFT Magnitude。在接下来出现的对话框里设定相应的参数值,与时域的情况类似,其设定情况如下面的界面所示:图9其对应的频域波形如下面的界面所示:图10 同样,与时域的参数设置类似,如果将Q-value量标值改为1,频率的值也将是原来的一般。 从信号的时域和频域的波形可以看出,它的时域的幅值和频域的幅值是符合时间与频率的函数关系的。4.2.4 程序清单在SPI驱动程序的基础上,需要添加功能函数。scia_loopback_init(void),scia_fifo_init(void),scia_xmit(int a)。设置GPIO寄存器组的位是0x003F,这样设置I/O口是SCI和SPI口。初始化SCI的寄存器scia_fifo_init,scia_loopback_init()。在程序里加入FOR循环,输出曲线的图形。因为经过计算波特率是9600,所以波特率寄存器的设置值是01E7。应该注意在程序的开始声明了函数,所以后面应该有对应的子函数。在加入了串口SCI程序之后的总程序如下: 文件名称 : SPI_DA.c ;* 适用平台 : DSP专家4实验箱;* CPU类型 : DSP TMS320F2812 ;* 软件环境 : CCS2.20 (2000系列);* 接线说明 : 1、F2812CPU板的JUMP1的2和3脚短接,JUMP2的1和2脚短接;;* 2、实验箱底板的开关K9拨到右侧,选择CPU2.;* 测试现象 : 设置好CCS的环境,打开本工程,编译、下载、运行。;* 利用示波器观察实验箱DA单元的二号孔输出1有正弦波输出。*/ /*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File#include math.h#define pi 3.1415926unsigned int curve128; unsigned int curve1128; unsigned int curve2128;/ Prototype statements for functions found within this file.void spi_init(void);void delay(void); void scia_loopback_init(void);void scia_fifo_init(void);void scia_xmit(int a);void main(void) int i,p,data,j;/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();/ Step 2. Initalize GPIO: / This example function is found in the DSP281x_Gpio.c file and/ illustrates how to set the GPIO to its default state./ InitGpio(); / Skipped for this example / Setup only the GP I/O only for SPI functionality EALLOW; GpioMuxRegs.GPFMUX.all=0x003F;/ Select GPIOs to be SPI pins / Port F MUX - x000 0000 0000 1111 EDIS;/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initialize PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/ are cleared. / This function is found in the DSP281x_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 table, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP281x_DefaultIsr.c./ This function is found in DSP281x_PieVect.c. InitPieVectTable();/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP281x_InitPeripherals.c/ InitPeripherals(); / Not required for this example/ spi_fifo_init(); / Initialize the Spi FIFO spi_init(); / init SPI scia_loopback_init(); scia_fifo_init(); for(i=0; i128;i+) /*产生128个点的正弦信号波形*/ data=(int)(127.5*(1+sin(2*pi*i/127); curvei=data; /*将数据打包成“从移位寄存器到DAC A数据寄存器*/ curve1i=data&0x00ff|0x0100; /*将数据打包成“从移位寄存器到DAC B数据寄存器 且用数据寄存器同时更新A和B两个DA的值*/ curve2i=data&0x00ff|0x2500; for(j=0;j128;j+) scia_xmit(curvei); while(SciaRegs.SCIFFRX.bit.RXFIFST !=1) for(;) for(p=0;p128;p+) /*将数据写入AD7303*/ SpiaRegs.SPITXBUF=curve1p; delay(); /*将数据写入AD7303*/ SpiaRegs.SPITXBUF=curve2p; delay(); void spi_init() SpiaRegs.SPICCR.bit.SPISWRESET=0; / Reset SCISpiaRegs.SPICCR.all =0x000F; / Reset on, rising edge, 16-bit char bits SpiaRegs.SPICTL.all =0x000E; / Enable master mode, normal phase, SpiaRegs.SPISTS.all=0x0080; / enable talk, and SPI int disabled.SpiaRegs.SPIBRR =0x0000; / Baud rate; SpiaRegs.SPIPRI.bit.FREE = 1; / Set so breakpoints dont disturb xmission SpiaRegs.SPICCR.bit.SPISWRESET=1; / Enable SPI void delay(void) /延时子程序 unsigned int k; for(k=0;k50;k+);void scia_xmit(int a)SciaRegs.SCITXBUF=a;void scia_loopback_init()SciaRegs.SCICCR.all=0x0007;SciaRegs.SCICTL1.all=0x0003;SciaRegs.SCICTL2.bit.TXINTENA=1;SciaRegs.SCICTL2.bit.RXBKINTENA=1;SciaRegs.SCIHBAUD=0X0001;SciaRegs.SCIHBAUD=0X00E7;SciaRegs.SCICCR.bit.LOOPBKENA=1;SciaRegs.SCICTL1.all=0x0023;void scia_fifo_init() SciaRegs.SCIFFTX.all=0xE040; SciaRegs.SCIFFRX.all=0x204f; SciaRegs.SCIFFCT.all=0x0;/=/ No more.4.3 调试部分 4.3.1 硬件调试连接硬件电路部分,示波器的连线一个接模拟地,一个接输出端口OUT1或者输出端口OUT2。电源接3.3V。各个部分连接完成之后,将程序通过仿真器烧录到F2812芯片里面。通过Debug下的Go Main使程序运行到主函数。调节示波器,让信号从输出口CH1和CH2输出来,比较其效果和稳定性。因大部分前置主机的USB接口的电流驱动能力不够,一般使用后置的USB接口。4.3.2 软件调试 把程序编译之后,确保无误,进行软件的调试。程序里curve1i=data&0x00ff|0x0100; curve2i=data&0x00ff|0x2500;是非常重要的。0x00ff是保留了移位寄存器的低八位,0x0100设置了高八位。对应的作用是从移位寄存器更新DAC的A端。0x 2500是设置高八位,作用是从移位寄存器下载DAC的A输入端,同时更新DAC的A和B输出端。在Debug下的Go Main使得程序从主程序开始运行。这虽然不影响实验的过程,但是由于有的程序段是有厂商提供的,直接从我们的主程序开始运行使得实验更加的规范。双击程序前的条形来设置断点使得程序运行到该位置。设置断点只是为了练习起见,也是看程序运行的过程。这也不影响最后波形的正确输出。在软件调试时,应注意各个变量的声明和初始化,以及各子函数的编写。还应注意,为了程序的完整性,我们应该从SPI-DA文件夹里导入驱动程序到整个程序段。导入驱动程序的显示过程如下图:图114.3.3 SCI串行数据传输 把实验箱的硬件电路按照前面的操作步骤连接好,用三叉线把PC机和F2812芯片连接,然后操作PC机。从开始菜单的附件里点通讯,找到超级终端,并连接到一个网络端口。在这些操作完成后,调试程序,可以进行PC机与F2812芯片的数据传输。操作步骤如下图的界面所示: 图12图15 五 总结 DSP课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作

温馨提示

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

评论

0/150

提交评论