DSP技术典型应用实例1.ppt_第1页
DSP技术典型应用实例1.ppt_第2页
DSP技术典型应用实例1.ppt_第3页
DSP技术典型应用实例1.ppt_第4页
DSP技术典型应用实例1.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2019年9月16日,第8章 DSP技术典型应用实例,8.1 DSP最小系统电路设计 8.2 正弦波信号发生器设计 8.3 语音信号采集 8.4 步进电动机的DSP控制 8.5 Matlab语言在DSP设计中的应用 本章小结 习 题,2019年9月16日,8.1 DSP最小系统电路设计,C5490内部具有16K16bit的ROM和32K16bit的RAM。芯片内部RAM和ROM可根据PMST寄存器中的OVLY、DROM位灵活设置。数据区,00H5FH为存储器映射寄存器,60H70H为双寻址RAM(DARAM),80H1FFFH为DARAM,2000H7FFFH为单寻址RAM(SARAM)。当DROM=1时,内部的C000HFFFFH同时被映射在数据区。当OVLY=1时,内部的80H1FFFH和2000H7FFFH同时被映射为程序区。FF80H开始存储固有的中断矢量,当芯片工作在微计算机模式时,起始地址为C000H的16K16bit ROM也被映射到程序区。,8.1.1 TMS320C5409芯片,C5409具有一个可屏蔽存储器保护选项,用来保护片内存储器的内容。当选定此项时,所有外部产生的指令都不能访问片内存储器空间。,2019年9月16日,JTAG仿真口连接需要和仿真器上给出的端子一致。,8.1.2 JTAG仿真口的连接,如果DSP和仿真器之间的连接电缆超过6in,采用如图所示接法,在数据传输端加一驱动。在大多数情况下,只要板子和仿真器之间的连接电缆不超过6in,数据传输端可不加驱动。DSP的EMU0和EMU1端需要用电阻上拉,推荐阻值为4.7k或10k。,2019年9月16日,在TI公司的DSP系列中,C2xx系列、C54x采用单一5V电源供电;而C54xx采用3.3V和1.8V电源供电,其中I/O采用3.3V电源供电,芯片内核电压采用1.8V电源供电。而实际常用的只有5V电源,所以必须采用电源转换芯片。 TPS73xx系列是TI公司为了配合DSP而设计的电源转换芯片,下面着重介绍TPS7301的应用,其硬件接线如图所示。,8.1.3 电源转换芯片,2019年9月16日,图8.4 晶振的接线图,8.1.4 时钟信号的接入,C54xx系列时钟端子为X1和X2/CLKIN,如果采用无源晶振,用这两个端子就可以了,接法如图8.4(a)所示。如果采用有源晶振,直接连接X2端子,接法如图8.4(b)所示。,2019年9月16日,8.2 正弦波信号发生器设计,正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。,用DSP实现正弦波信号发生器通常有三种方法: (1) 查表法 将某个频率的正弦/余弦值计算出来后制成一个表,通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。 (2) 泰勒级数展开法 根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。 (3) 迭代法 利用数字震荡器通过迭代方法产生正弦信号。,本节主要介绍用泰勒级数展开法来实现正弦波信号。,2019年9月16日,8.2.1 产生正弦波的算法,取泰勒级数的前5项,得近似计算式:,正弦函数和余弦函数可以展开成泰勒级数,其表达式:,2019年9月16日,由式(3)和由式(4)可推导出递推公式:,(5),(6),sin(nx) = 2cos(x)sin(n-1)x-sin(n-2)x,cos(nx) = 2cos(x)sin(n-1)x-cos(n-2)x,由递推公式可以看出,在计算正弦和余弦值时,需要已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x。,2019年9月16日,计算一个角度x的正弦值,可利用泰勒级数的展开式,采用子程序的调用方式来实现。 在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。,1计算一个角度的正弦值,程序中要用到一些存储单元存放数据和变量,存储单元的分配如下: d_xs:x; d_squr_xs: x2 d_temp_s:暂存; d_sinx:计算结果sinx c_1_s:7FFFh (数值1);d_coef_s :泰勒系数,8.2.2 正弦波的DSP实现,2019年9月16日,图8.3计算正弦值存储单元的分配,程序清单sinx.asm: .title “sinx.asm” .mmregs .def start .ref sin_start,d_xs,d_sinx STACK: .usect “STACK”,10,;定义符号 ;定义符号 ;建立堆栈,2019年9月16日,start: STM #STACK+10,SP LD #d_xs,DP ST #6487H,d_xs CALL sin_start end: B end sin_start: .def sin_start d_coef_s .usect “coef_s”,4 .data table_s: .word 01C7H .word 030BH .word 0666H .word 1556H d_xs .usect “sin_vars”,1 d_squr_xs .usect “sin_vars”,1 d_temp_s .usect “sin_vars”,1 d_sinx .usect “sin_vars”,1 c_1_s .usect “sin_vars”,1,;设置堆栈指针 ;设置页指针 ;xd_xs ;调用子程序 ;子程序 ;定义符号 ;定义数据空间存放系数 ;定义程序空间存放系数 ;c1=1/(89) ;c2=1/(67) ;c3=1/(45) ;c4=1/(23) ;定义1个数据空间存放x ;定义1个数据空间存放x2 ;定义1个暂存单元 ;定义数据空间存放结果 ;定义数据空间存放数值1,2019年9月16日,.text SSBX FRCT STM #d_coef_s,AR4 RPT #3 MVPD #table_s,*AR4+ STM #d_coef_s,AR2 STM #d_xs,AR3 STM #c_1_s,AR5 ST #7FFFH,c_1_s SQUR *AR3+,A ST A,*AR3 | LD *AR5,B MASR *AR3+,*AR2+,B,A MPYA A,;设置小数运算 ;设置系数表首地址 ;设置重复操作次数 ;向系数表传送泰勒系数 ;系数表首地址送AR2 ;x单元地址送AR3 ;数值1地址送AR5 ;将数值1送c_l_s单元 ;求x的平方值 ;x2值存入d_squr_xs单元 ;B=1 ;A=1-x2/72,T=x2 ;A=TA= x2(1-x2/72),2019年9月16日,STH A,*AR3 MASR *AR3-,*AR2+,B,A MPYA *AR3+ ST B,*AR3 | LD *AR5,B MASR *AR3-,*AR2,B,A MPYA *AR3+ ST B,*AR3 | LD *AR5,B MASR *AR3-,*AR2,B,A MPYA d_xs STH B,d_sinx RET .end,;(d_temp_s)=x2(1-x2/72) ;A=1-x2/42(1-x2/72) ;T= x2(1-x2/72) ;B=x2(1-x2/42(1-x2/72) ;(d_temp_s)=x2(1-x2/42(1-x2/72) ;B=1 ;A=1-x2/20(1-x2/42(1-x2/72) ;B=x2(1-x2/20(1-x2/42(1-x2/72) ;(d_temp_s)=B= ;B=1 ;A=1-x2/6(1-x2/20(1-x2/42(1-x2/72) ;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72) ;计算sinx结果存入d_sinx单元 ;子程序返回,2019年9月16日,计算一个角度x的余弦值,可利用泰勒级数的展开式(8.4),并采用子程序的调用方式来实现。 计算余弦值与计算正弦值相同。 存储单元分配图:,2计算一个角度的余弦值,2019年9月16日,实现步骤如下:,3正弦波的实现,(1)利用sin_start和cos_start子程序,计算045(间隔为0.5)的正弦和余弦值; (2)利用sin(2x)=2sin(x)cos(x)公式,计算090的正弦值(间隔为1); (3) 通过复制,获得0359的正弦值; (4) 将0359的正弦值重复从PA口输出,便可得到正弦波。,2019年9月16日,正弦波源程序清单sin.asm,.title “sinx.asm” .mmregs .def start .ref d_xs,sinx,d_sinx,d_xc,cosx,d_cosx sin_x: .usect “sin_x”,360 STACK: .usect “STACK”,10 k_theta .set 286 ;theta=pi/360(0.5deg) PA0 .set 0,2019年9月16日,start: .text STM #STACK+10,SP STM #0,AR0 STM k_theta,AR1 STM #sin_x,AR7 STM #90,BRC RPTB loop1-1 LDM AR0,A LD #d_xs,DP STL A,d_xs STL A,d_xc,;主程序 ;设置堆栈 ;AR0=x=0 ;设置增量 ;AR7指向sin_x ;设置重复次数,计算sin0至sin90 ;取x值 ;设置页指针 ;将x值送入d_xs单元 ;将x值送入d_xc单元,2019年9月16日,CALL sin_start CALL cos_start LD #d_sinx,DP LD d_sinx,16,A MPYA d_cosx STH B,1,*AR7+ MAR *AR0+0,;调用sinx子程序,计算x的正弦值 ;调用cos子程序,计算x的余弦值 ;切换到正弦指数据区 ;求得正弦值sin(x)加载累加器A ;完成sin(x)cos(x)运算,将结果存入B ;完成2sin(x)cos(x)运算, ;结果存入AR7指定单元 ;修改AR0,2019年9月16日,loop1: STM #sin_x+89,AR6 STM #88,BRC RPTB loop2-1 LD *AR6-,A STL A,*AR7+ loop2: STM #179,BRC STM #sin_x,AR6 RPTB loop3-1 LD *AR6+,A NEG A STL A,*AR7+ loop3: STM #sin_x,AR7 STM #1,AR1 STM #360,BK loop4: PORTW *AR7+0%,PA0 B loop4 .end,;AR6指向sin_x+89单元 ;设置重复次数,计算sin91至sin179 ;设置重复次数,计算sin180至sin359 ;AR6指向sin_x单元 ;AR7指向sin_x单元 ;设置缓冲区长度 ;输出正弦值 ;循环输出,产生正弦波,2019年9月16日,产生正弦波链接命令文件sin.cmd,vectors.obj sin.obj -o sin.out -m sin.map -e start MEMORY PAGE0:EPROM: org = 0E000H,len=1000H VECS: org = 0FF80H,len=0080H PAGE1:SPRAM: org = 0060H, len=0020H DARAM1: org = 0080H, len=0010H DARAM2: org = 0090H, len=0010H DARAM3: org = 0200H, len=0200H ,2019年9月16日,SECTIONS .text : EPROM PAGE0 .data : EPROM PAGE0 STACK : SPRAM PAGE1 sin_vars : DARAM1 PAGE1 coef_s : DARAM1 PAGE1 cos_vars : DARAM1 PAGE1 coef_c : DARAM2 PAGE1 sin_x : align (512) DARAM3 PAGE1 .vectors : VECS PAGE0 ,2019年9月16日,若用simulator执行正弦波程序,就可产生正弦波数据,并生成out.dat。再利用作图程序,就可以观察所生成的正弦波波形了。用drawhexexe画出out.dat(输出正弦波数据文件)波形的命令如下: drawhex out.dat -ys 33000 -xs 1000 所得到的正弦波波形如图所示。,2019年9月16日,8.3.1 语音接口芯片TLC320AD50C简介 TLC320AD50C是TI公司生产的音频接口芯片,集成16位A/D和D/A转换器,可工作在主、从两种方式,由上电时M/S管脚的电平决定。当M/S为高电平时,TLC320AD50C工作在主设备方式;当M/S为低电平时,TLC320AD50C工作在从设备方式。在与DSP的McBSP连接时,一般TLC320AD50C配置为主方式,而McBSP为从方式。 支持主通信和辅助通信两种通信模式,主通信用于正常的ADC或DAC的数据传输,辅助通信用于控制寄存器的读写。辅助通信模式可由硬件和软件两种方式触发。,8.3 语音信号采集,2019年9月16日,8.3.2 TLC320AD50C与DSP的连接 在实际应用中,一般将TLC320AD50C接至DSP的同步串行口,并将TLC320AD50C设置在主动工作方式,即由TLC320AD50C提供帧同步信号和移位时钟。,图8.8 TLC320AD50C与TMS320C54x系列DSP的连接,2019年9月16日,8.3.3 语音采集和回放程序 实现初始化DSP后,打开McBSP串口; 初始化AD50C,然后使串口在AD50C 的控制下接受数据。 主函数用C语言编写, 其中InitC5402(void)是初始化DSP, OpenMcBSP(void)是初始化串口和初始化AD50C, READAD50(void)用来读取数据。,程序如下: extern void InitC5402(void); extern void OpenMcBSP(void); extern void CloseMcBSP(void) extern void READAD50(void); extern void WRITEAD50(void); VOid main(VOid) InitC5402(); OpenMcBSP(); while(1) READAD50(); ,2019年9月16日,以下为McBSP串口利用TLC320AD50C实现语音采集和回放的汇编实现程序:,2019年9月16日,2019年9月16日,2019年9月16日,2019年9月16日,8.4 步进电动机的DSP控制,1. 控制换相顺序 步进电动机的通电换相顺序是严格按照步进电动机的工作方式进行的。通常把通电换相这一过程称为“脉冲分配”。例如,三相步进电动机的单三拍工作方式,其各相通电的顺序为ABC,通电控制脉冲必须严格地按照这一顺序分别控制A、B、C相的通电和断电。,8.4.1 步进电动机的基本控制,2. 控制步进电动机的转向 如果按给定的工作方式正序通电换相的话,步进电动机就正转;如果按反序通电换相,则电动机就反转。例如四相步进电动机工作在单四拍方式,通电换相的正序是ABCD,电动机就正转;如果按反序ADCB,电动机就反转。,2019年9月16日,3. 控制步进电动机的速度 如果给步进电动机发一个控制脉冲,它就转一个步距角,再发一个脉冲,它会再转一个步距角。两个脉冲的间隔时间越短,步进电动机就转得越快。因此,脉冲的频率决定了步进电动机的转速 。,步进电动机的转速可由下式计算: =N f (7) 当步进电动机的工作方式确定之后,调整脉冲的频率,就可以对步进电动机进行调速。,2019年9月16日,实现脉冲分配的方法有两种:软件法和硬件法。,8.4.2 步进电动机的脉冲分配,1. 通过软件实现脉冲分配 软件法是完全用软件的方式,按照给定的通电换相顺序,通过DSP的PWM输出口向驱动电路发出控制脉冲。 下图是用这种方法控制五相步进电动机的硬件接口例子。,2019年9月16日,2. 通过硬件实现脉冲分配 硬件法实际上是使用脉冲分配器芯片来进行通电换相控制。,8713脉冲分配器与DSP的接口如图8.10所示,选用单时钟输入方式。8713的3脚为步进脉冲输入端,4脚为转向控制端,这两个引脚的输入由DSP的PWMl和PWM2提供和控制。选用对四相步进电动机进行八拍方式控制,所以5、6、7脚均接高电平。,图8.10 8713脉冲分配器与DSP的接口,2019年9月16日,步进电动机的速度控制是通过控制DSP发出的步进脉冲频率来实现的。周期值越大,步进脉冲的频率就越低,步进电动机的速度越慢。,对于软脉冲分配方式,DSP定时器的周期值决定了周期中断的时刻,因此也决定了执行换相的时刻。控制中只要改变定时器的周期值就可以改变电动机的速度。,8.4.3 步进电动机的速度控制,对于硬脉冲分配方式,由于要在PWM口发出等宽步进脉冲方波,所以还要对比较寄存器的比较值进行设置,比较值应该等于1/2周期值,即占空比为50。因此,在电动机调速时,除了要改变DSP定时器的周期值外,还要改变相应的比较寄存器的比较值,以保证输出等宽步进脉冲方波。,2019年9月16日,步进电动机的位置控制指的是控制步进电动机带动执行机构从一个位置精确地运行到另一个位置。位置控制是步进电动机的一大优点,它可以用不着借助位置传感器而只需简单的开环控制就能达到足够的位置精度,因此应用很广。,8.4.4 步进电动机的位置控制,对步进电动机位置控制的一般作法是:步进电动机每走一步,步数减1,如果没有失步存在,当执行机构到达目标位置时,步数正好减到0。因此用步数等于0来判断是否移动到目标位,作为步进电动机停止运行的信号。,下面给出一个例子。其硬件连接如图8.10所示。每次定时器周期中断都表示步进电动机已经走了一步,因此,需要对相对位置进行减1操作,根据转向对绝对位置进行加1或减1操作,并且还要判断绝对位置是否越界,相对位置是否为0。位置控制子程序在每次定时器周期中断调用一次。 位置控制子程序框图见图8.12。,2019年9月16日,图8.12 位置控制子程序框图,2019年9月16日,8.5 MATLAB语言在DSP设计中的应用,8.5.1 MATLAB简介,MATLAB(Matrix Laboratary)是国际上最流行的电子仿真计算机辅助设计的大型数学计算工具软件 。,MATLAB的语言结构很简单,一般格式如下: MATLAB语言结构=窗口命令+M文件 在Command window输入的MATLAB语句称为窗口命令,用以调用并执行M文件。 M文件在编辑窗口建立,扩展名为.m。M文件可以有很多个,它们可以互相调用,也可调用自己。在功能上,M文件可以分为两种类型:文本文件和函数文件。 文本文件包括一系列的MATLAB命令,当命令窗口调用它时,自动执行这些命令。文本文件的语句在工作空间对全局变量进行运算。 MATLAB控制语句较少,但功能很强。主要有for、while、if和break几种。,2019年9月16日,8.5.2 IIR滤波器设计,从实现数字滤波器的网络结构或者从单位脉冲响应分类,可分为无限脉冲响应(IIR)滤波器和有限脉冲响应(FIR)滤波器,两种滤波器的设计方法有较大区别。下面的仅介绍如何设计IIR滤波器。,1. 滤波器概述,常用的数字滤波器一般属于选频滤波器,假设滤波器的传输函数H(ej)用下式表示: H(ej)=H(ej)ejQ() (8.8) 式中H(ej)和Q()分别为幅频特性和相频特性。幅频特性表示滤波器对信号各频率成分的衰减情况,决定滤波器的选频指标。相频特性反映各频率成分通过滤波器后在时间上的延时情况。,2019年9月16日,2. IIR滤波器原理,当给定滤波器指标P,s,RP,AS时, IIR数字滤波器的设计步骤如下:,(1) 选T,通常选T=1;在数字滤波器的设计中,必须给出抽样频率,按照奈奎斯特抽样定理,频率特性只能限于范围。 (2)对P,s做预畸变,使 (3)按P,s,RP,AS,计算出模拟滤波器的阶数和-3dB截止频率。 (4)按截止频率设计模拟滤波器的传递函数Ha(s)。 (5)通过变换将Ha(s)转换为数字滤波器的传递函数H(z)。,2019年9月16日,3. MATLAB仿真实现,在MATLAB编辑窗口,建立iir_butterworthm文件,内容为:,2019年9月16日,2019年9月16日,执行iir-butterworth.m文件,得

温馨提示

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

评论

0/150

提交评论