DSP音频信号发生器

时间:2019-05-15 04:38:18下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《DSP音频信号发生器》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《DSP音频信号发生器》。

第一篇:DSP音频信号发生器

大学课程设计报告

音频信号发生器

设 计 人: 专

业: 班

级: 学

号: 指导教师:

二零一四年

付路 电子信息工程 电子111501 201115020104 宁爱平

目录

一. 引言-------------第2页 二.系统结构及原理----第2页 三. 硬件设计---------第3页

3.1 MMC/SD卡接口电路-----------------------------第3页 3.2 上位机和单片机通信---------------------------第4页 3.3 信号调理电路--第5页 四. 软件设计---------第7页

4.1 系统初始化---第7页 4.2 MMC/SD卡初始化------------------------------第7页 4.3 MMC/SD卡单块写数据--------------------------第8页 五. 结束语----------第11页

一. 引言

目前,单片机系统以价格低廉、开发环境完备、开发工具齐全、应用资料众多、功能强大且程序易于移植等优点而得到广泛应用。同时,随着信息化进程、计算机科学与技术以及信号处理理论与方法的迅速发展,需要的数据量越来越大,对数据存储也提出了更高要求。MMC/SD卡以其价格、体积、读取速度等特点成为现今大多数便携式嵌入式设备的首选。

二.系统结构及原理

音频信号发生器的系统结构如图1所示,它主要由8051F330单片机、MMC/SD卡存储器、RS232串行通信接口、上位机、液晶显示、键盘以及信号调理电路等部分组成。将写入MMC/SD卡中的音频数据存储在上位机,单片机通过RS232串行通信接口写入MMC/SD卡,以中断方式读取键盘接口命令,并根据命令控制选择相应的音频信号数据,再由信号调理电路输出不同频率和强度的音频信号,系统通过液晶显示模块显示信号频率、信号强度及信号类型。该系统突出的特点是上位机采用Lab Windows/CVI软件,通过RS232串行通信接口与单片机通讯;以文本格式存储在上位机的音频信息则通过RS232串行通信接口下载到MMC/SD卡。系统控制核心选用美国Cygnal公司的8051F330单片机,C8051F330微控制器采用独特的CIP-8051架构,对指令运行实行流水作业,大大提高了指令的运行速度;采用多功能存储卡-MMC/SD卡作为存储介质。MMC/SD卡内置控制电路,可应用于手机、数码相机、MP3等多种数字设备,反复记录30万次,具有较高的性价比;液晶显示屏采用OCM12864点阵液晶显示模块,由单片机时序控制,具有8位数据线、6条控制线和电源线。

三. 硬件设计

3.1 MMC/SD卡接口电路

MMC/SD卡在音频信号发生器系统中是以数字量形式存储音频信息。MMC/SD卡有两种工作模式,即MMC/SD模式和SPI模式。从实际应用角度出发,SPI模式设计简单,操作方便,但数据传输速率不如MMC/SD模式,本系统采用SPI模式。MMC/SD卡工作在SPI模式下,其各个引脚功能的定义,如表1所示。CS是MMC/SD卡的片选线,在SPI模式下,CS必须保持低电平有效;DI不但传输数据,还发送命令,传输方向是由单片机到MMC/SD卡;同样DO除了发送数据外还传送应答信号,传输方向是由MMC/SD卡到;SCLK是操作MMC/SD卡的时钟线。将C8051F330的相应交叉开关配置为SPI模式,与MMC/SD卡对应的引脚连接。针对SPI总线线路上增加了上拉电阻。MMC/SD卡与单片机接口电路。如图2所示。

单片机

3.2 上位机和单片机通信

上位机采用Lab Windows/CVI软件通过串口向单片机发送音频信息。单片机将接收到的信息数据写入MMC/SD卡。Lab Windows/CVI软件的音频信息是由WinHex软件将原始文件转换成16进制的数字量,该软件可对多种语音信号进行转换。上位机与单片机的通信是通过RS232串口通讯器件完成的。当上位机与音频信号发生器相距较远.不能直接用RS232器件将其连接时,可将RS232转换为CAN,通过CAN总线实现串口设备的网络互联。RS232标准电平采用负逻辑,规定+3 V~+15 V的任意电平为逻辑“0”电平,-3 V~-15 V的任意电平为逻辑“1”电平。而CAN信号则使用差分电压传输,2条信号线称为“CAN_H”和“CAN_L”,静态时均为2.5 V,此时状态表示为逻辑“1”,也可称为“隐性”;CAN_H比CAN_L高时表示逻辑“0”,称为“显性”。显性时,通常为:CAN_H=3.5 V,CAN_L=1.5 V。

RS232串口的帧格式:1位起始位,8位数据位,1位可编程的第9位(此位为发送和接收的地址/数据位),1位停止位。而CAN的数据帧格式:帧信息+ID+数据(分为标准帧和扩展帧两种格式)。

3.3 信号调理电路

存储在MMC/SD卡中的数据是音频信号发生器的源代码。单片机将这些数据从MMC/SD卡中读出,经过单片机内部数模转换,以模拟量的形式从P01输出。该模拟信号经信号调理电路可外接耳机或音响播放十几种音律。信号调理电路如图3所示。由P01输出的信号经LM324放大后,由多个LM324并联实现信号跟随和功率驱动。图中只画出了2个跟随器,实际应用中根据需要可以并联10多个信号跟随器。

四. 软件设计

4.1 系统初始化

系统初始化可完成C8051F330的I/O口、晶体振荡器、SPI总线和C8051F330片上串口的初始化设置。用C语言编写的程序代码如上:

4.2 MMC/SD卡初始化

MMC/SD卡上电后默认为MMC/SD模式,要使MMC/SD卡工作在SPI模式下,在MMC/SD卡初始化时,当片选线(CS)被拉低时发送复位命令CMD0,如收到应答信号01H,表示已将卡置为闲置状态;如收到应答信号不是01H,则表示出错。然后向MMC/SD卡发送命令CMD1,收到正确的应答信号00H之后,才会使MMC/SD卡进入SPI模式。MMC/SD卡初始化流程如图4所示。

MMC/SD卡协议是一种问答式协议。首先单片机发送CMD。接着由MMC/SD卡发送回应RES。MMC/SD卡的命令长度都是6字节,命令总是以左边的起始位开始,右边的结束位结束。其具体的命令格式如表2所示,MMC/SD卡的应答格式分为4种,分别是R1、R1b、R2和R3应答。

4.3 MMC/SD卡单块写数据

MMC/SD卡单块写数据主要实现C8051F330对MMC/SD卡的单块写操作。MMC/SD卡块的默认大小为512字节。当MMC/SD卡接收到单块写命令CMD24后,MMC/SD卡向单片机发送应答命令,并且等着单片机发送数据块。当应答命令R1为0时,说明可以发送512个字节数据。MMC/SD卡对接收到的数据块都通过一个l字节长的命令确认,当其低5位二进制数据为00101时,数据块才确认数据块写入MMC/SD卡。在数据块发送中,共发送515个字节数据,其中,第一个字节为0xFE,随后是512字节的用户数据块,最后是2个字节的CRC。单块数据写入MMC/SD卡的流程图如图5所示。

采用C语言编写的程序代码如下:

#include “scancode.h” #define TIM *(int *)0x24 #define PRD *(int *)0x25 #define TCR #define IMR #define IFR #define PMST *(int *)0x26 *(int *)0x0 *(int *)0x1 *(int *)0x1d

#define SPSA0 *(unsigned int *)0x38 #define SPSD0 *(unsigned int *)0x39 #define SPSA1 *(unsigned int *)0x48 #define SPSD1 *(unsigned int *)0x49 #define nMusicNumber 40

#define REGISTERCLKMD(*(unsigned int *)0x58)#define WAITSTATUS(*(unsigned int *)0x28)

ioport unsigned char port8000;ioport unsigned char port8001;ioport unsigned char port8002;ioport unsigned char port8007;#define CTRGR port8000 #define CTRKEY port8001 #define CTRCLKEY port8002 #define CTRLR port8007

void Delay(unsigned int nTime);void interrupt time(void);// 音符数据

unsigned int music[nMusicNumber][2]= { {182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480}, {182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480}, {182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240}, {182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240}, {182,1920},{151,1920},{135,1920},{121,1920},{135,1920},{151,1920},{182,1920},{0,1920} };unsigned int uWork;main(){

unsigned int uWork1;int j,nCount,nCount1,nScanCode;nCount=nCount1=0;REGISTERCLKMD=0;CTRGR=0;CTRGR=0x80;

CTRGR=8;CTRLR=0;

// 关闭东西方向的交通灯

CTRLR=0x40;// 关闭南北方向的交通灯 uWork1=CTRCLKEY;

// 清除键盘缓冲区

for(j=0;j

PMST = uWork1&0xff;IMR = 0x8;TCR = 0x412;TIM = 0;PRD = music[nCount][0];TCR = 0x422;IFR = 0x100;asm(“ rsbx j=0;while(j<1){

nCount1=0;nScanCode=CTRKEY;// 读扫描码 nScanCode&=0x0ff;// 低8位 uWork1=CTRCLKEY;

// 清除键盘缓冲区

INTM”);

// 频率设置

if(nScanCode!=0)

{ } nCount1++;Delay(music[nCount][1]/3*12);// 音长 nCount++;if(nCount>=nMusicNumber){ } if(music[nCount][0]==0)TCR=0x412;

// 静音 nCount=0;j++;if(nScanCode==SCANCODE_Enter)

break;else { PRD = music[nCount][0];// 切换音符 TCR = 0x422;} } }

void Delay(unsigned int nDelay){

}

void interrupt time(void){ SPSA0=1;

// set McBSP0's SPCR2 int i,j,k=0;for(i=0;i

}

uWork&=0xfffe;// set XRST=0 SPSD0=uWork;SPSA0=0x0e;// set McBSP0's PCR uWork=SPSD0;uWork|=0x2000;// set XIOEN=1, Enable IO,DX for output uWork^=0x20;SPSD0=uWork;

// DX=^DX 五. 结束语

根据MMC/SD卡的SPI协议,采用单片机实现与MMC/SD卡的接口,解决了嵌入式系统大容量数据存储问题,利用上位机可以方便的读取写入数据。本系统的存储速度可达20 Mb/s,完全满足信号发生器所需的下载速度和音频播放速度。所编写的MMC/SD卡驱动程序已经应用到嵌入式信号发生器系统中,实现了数据的安全、稳定的存储。相对于MMC/SD卡无论是读写速度还是存储容量都得到了极大提高。在SPI模式下,SD卡与MMC卡相兼容,即就是说SD卡程序也适用于MMC卡。

第二篇:正弦信号DSP

基于DSP的正弦信号发生器的设计

1、绪论 1.1 课题背景

数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,信号处理已经在通信等领域得到了极为广泛的应用。

长期以来,信号处理技术—直用于转换或产生模拟或数字信号。其中应用的最频繁的领域就是信号的滤波。此外,从数字通信、语音、音频和生物医学信号处理到检测仪器仪表和机器人技术等许多领域中,都广泛地应用了数字信号处理技术。数字信号处理己经发展成为一项成熟的技术,并且在许多应用领域逐步代替了传统的模拟信号处理系统。而本文中基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。1.2 课题内容

利用基于CCS开发环境中的C54x汇编语言来实现正弦信号发生装置。

2、设计原理

一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少,具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。

本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可以展开成泰勒级数,取其前5项进行近似得:

x3x5x7x9sin(x)x3!5!7!9!x2x2x2x2 x(1(1(1(1))))23456789x2x4x6x8cos(x)12!4!6!8!x2x2x2x2 1(1(1(1)))2345678式中:x为θ的弧度值,x2f/fs(fs是采样频率;f是所要发生的信号频率)

3、设计方案

本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制芯片。

通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下:

开 始初始化设置调用sin和cos程序计算0~45°的值Sin2α=2sinα*cosα求0~90°的sin值(间隔为1°)1.利用sinx和cosx子程序,计算0—45°(间 隔为0.5°)的正弦和余弦值

2.利用sin(2x)=2sin(x)cos(x)公式,计算0—90°的正弦值(间隔为1°)3.通过复制,获得0—359°的正弦值 4.将0—359°的正弦值重复从PA口输出,遍可得到正弦波

整个系统相应的软件流程图如右图所示。

图1 程序流程图

结 束正弦波重复向PA口输出重复得到0~359°正弦值

4、程序设计

4.1 产生正弦波程序清单sin.asm.title “sin.asm” //为汇编文件取名为“sin.asm”.mmregs //定义存储器映像寄存器.def _c_int00.ref sinx,d_xs,d_sinx,cosx,d_xc,d_cosx //定义标号 sin_x:.usect “sin_x”,360 //为“sin_x”保留360个存储空间 STACK:.usect “STACK”,10 //为堆栈保留10个存储空间 k_theta.set 286 //theta=pi/360(0.5deg)PA0.set 0 _c_int00.text //定义文本程序代码段 STM #STACK+10,SP //设置堆栈指针

STM k_theta,AR0 //AR0-->K_theta(increment)STM 0,AR1 //(AR1)=X(rad)STM #sin_x,AR6 //AR6→sin(x)STM #90,BRC //form sin0(deg.)—sin90(deg)RPTB loop1-1 //重复执行块语句(下条语句开始至 loop1-1)91次 LDM AR1,A LD #d_xs,DP STL A,@d_xs //(A)低16位→d_xs STL A,@d_xc //(A)CALL sinx // CALL cosx // LD #d_sinx,DP //DP LD @d_sinx,16,A //A=sin(x)MPYA @d_cosx //B= sin(x)*cos(x)STH B,1,*AR6+ //AR6 MAR *AR1+0 //loop1: STM #sin_x+89,AR7 //sin91(deg.)STM #88,BRC RPTB loop2-1 // LD *AR7-,A //((AR7))STL A,*AR6+ //(A)loop2: STM #179,BRC //sin180(deg.)(BRC)=179, STM #sin_x,AR7 //AR7 RPTB loop3-1 LD *AR7+,A //((AR7))NEG A // STL A,*AR6+ //Aloop3: STM #sin_x,AR6 //AR6 STM #1,AR0 //AR STM #360,bk //BKloop4: PORTW *AR6+0%,PA0 //PA0=*AR6+0%, B loop4 sinx:.def d_xs,d_sinx //.data //低16位→d_xc 调用sinx程序 调用cosx程序 ←d_sinx →2*sin(x)*cos(x)修改辅助寄存器AR1

—sin179(deg.)重复执行下条指令至loop2-1处90次 →A,然后AR7减去1 低16位→AR6

—sin359(deg.)重复执行180次 指向sin_x首地址 →A,然后AR7加1 累加器变负 低16位→AR6 指向sin_x ←01 ←360

向PA0输出数据 定义标号d_xs,d_sinx 定义数据代码段 table_s.word 01c7h //c1=1/(8*9).word 030bh //c1=1/(6*7).word 0666h //c1=1/(4*5).word 1556h //c1=1/(2*3)d_coef_s.usect “coef_s”,4 //为“coef_s”保留4个存储空间 d_xs.usect “sin_vars”,1 //为d_xs中sin_vars保留1个存

储空间

d_squr_xs.usect “sin_vars”,1 //d_temp_s.usect “sin_vars”,1 // d_sinx.usect “sin_vars”,1 //c_l_s.usect “sin_vars”,1 //.text // SSBX FRCT // STM #d_coef_s,AR5 //AR5 RPT #3 // MVPD #table_s,*AR5+ //table_s STM #d_coef_s,AR3 //AR3 STM #d_xs,AR2 //AR2 STM #c_l_s,AR4 //AR4 ST #7FFFh,c_l_s //7FFFh SQUR *AR2+,A //AR2 ST A,*AR2 // ||LD *AR4,B // MASR *AR2+,*AR3+,B,A // MPYA A // STH A,*AR2 // MASR *AR2-,*AR3+,B,A // MPYA *AR2+ //AR2 ST B,*AR2 // ||LD *AR4,B //为d_squr_xs中sin_vars保留1个

存储空间

为d_temp_s中sin_vars保留1个 存储空间

为d_sinx中sin_vars保留1个存储

空间

为d_xs中sin_vars保留1个存储 空间

定义代码开始段

设置FRCT=1以解决冗余符号位 指向d_coef_s首地址 重复下条指令4次

中的数复制到AR5指向 的单元

指向d_coef_s首地址 指向d_xs首地址 指向c_l_s首地址 →c_l_s

指向累加器A中的数值求其平方(A)左移16位→AR2(AR4)左移16位→B

从累加器A中减去(AR2)*(AR3)操作数与累加器A中高位相乘(A)高16位→AR2

从累加器A中减去(AR2)*(AR3)指向的数与累加器A的高16位相乘(B)左移16位→AR2(AR4)左移16位→B MASR *AR2-,*AR3+,B,A //从累加器A中减去(AR2)*(AR3)MPYA *AR2+ //与累加器A中高16位相乘 ST B,*AR2 //(B)左移16位→AR2 ||LD *AR4,B //(AR4)左移16位→B MASR *AR2-,*AR3+,B,A //从累加器A中减去(AR2)*(AR3)MPYA d_xs //d_xs指向的操作数与累加器A中高16位相乘 STH B,d_sinx //(B)高16位→d_sinx RET //cosx:.def d_xc,d_cosx //d_coef_c.usect “coef_c”,4 //.data //table_c.word 0249h //c1=1/(7*8).word 0444h //c1=1/(6*5).word 0aabh //c1=1/(3*4).word 4000h //c1=1/2 d_xc.usect “cos_vars”,1 //d_squr_xc.usect “cos_vars”,1 // d_temp_c.usect “cos_vars”,1 //d_cosx.usect “cos_vars”,1 //c_l_c.usect “cos_vars”,1 //.text // SSBX FRCT //FRCT=1 STM #d_coef_c,AR5 //AR5 RPT #3 // MVPD #table_c,*AR5+ // STM #d_coef_c,AR3 //AR3 STM #d_xc,AR2 //AR2 STM #c_l_c,AR4 //AR4 ST #7FFFh,c_l_c //7FFFh SQUR *AR2+,A //返回 定义标号d_xc,d_cosx 为coef_c保留4个存储空间 定义数据代码段 为d_xc中cos_vars保存1个存储单元 为d_squr_xc中cos_vars保存1个 存储单元

为d_temp_c中cos_vars保存1个存储

单元

为d_cosx中cos_vars保存1个存储单

为c_l_c中cos_vars保存1个存储单

定义文本代码段

以清除冗余符号位 指向d_coef_c首地址 重复下条指令4次

把table_c中的数复制到中AR5 指向d_coef_c首地址 指向d_xc首地址 指向c_l_c首地址 →c_l_c

求x的平方存放在累加器A中 ST A,*AR2 //(A)左移16位→AR2 ||LD *AR4,B //(AR4)左移16位→B MASR *AR2+,*AR3+,B,A //A=1-x^2/56,T=x^2 MPYA A //A=T*A=x^2(1-x^2/56)STH A,*AR2 //(d_temp)= x^2(1-x^2/56)MASR *AR2-,*AR3+,B,A //A=1-x^2/30(1-x^2/56)T= x^2(1-x^2/56)MPYA *AR2+ //B=x^2(1-x^2/30(1-x^2/56))ST B,*AR2 //(d_temp)= x^2(1-x^2/30(1-x^2/56))||LD *AR4,B //B=1 MASR *AR2-,*AR3+,B,A //A= 1-x^2/12(1-x^2/30(1-x^2/56))SFTA A,-1,A NEG A MPYA *AR2+ //B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))MAR *AR2+ RETD ADD *AR4,16,B //B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))STH B,*AR2 //cos(theta)RET.end 4.2 正弦波程序链接命令文件sin.cmd.cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。MEMORY { PAGE 0: EPROM: org = 0E000h, len = 1000h VECS: org = 0FF80h, len = 0080h PAGE 1: SPRAM: org = 0060h, len = 0020h DARAM1: org = 0080h, len = 0010h DARAM2: org = 0090h, len = 0010h DARAM3: org = 0200h, len = 0200h } SECTIONS {.text :>EPROM PAGE 0 //文本代码段其实地址为0E000h,长度为 1000h.data :>EPROM PAGE 0 //数据代码段其实地址为0D000h STACK :>SPRAM PAGE 1 //堆栈起始地址为0060h,长度为0020h sin_vars :>DARAM1 PAGE 1 //标号为sin_vars段的起始地址为0080

长度为0010h coef_s :>DARAM1 PAGE 1 //标号为coef_s段的起始地址为0070h 长度为0010h cos_vars :>DARAM2 PAGE 1 //标号为cos_vars段的起始地址为0090h 长度为0010h coef_c :>DARAM2 PAGE 1 //标号为coef_c段的起始地址为0080h 长度为0020h sin_x : align(512){} > DARAM3 PAGE 1.vectors :>VECS PAGE 0 }

5、仿真与调试

5.1 CCS工程项目的调试

利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、程序 编辑、编译链接、调试和数据分析等工作环节。⑴ 创建工程(project)文件

选择 Project→New,在“Project”文本框中键入将要创建的工程项目名,本例工程项目名为“sin” ⑵ 向工程中添加文件

选择 Project→Add Files to Project,将 sine.asm文件自动添加到 Project→Source 中。用同样的方法 将 sine.cmd 文件添加到对应的目录中。⑶ 构建工程,工程所需文件编辑完成后,可以对该工程进行编译链接,产生可执行文件,为调试做准备。

选择 Project→Build,系统提示没有出错信息后,系统自动生成一个可执行文件,sine.out 文件。⑷ 载入可执行文件 选择 File→Load Program 载入编译链接好的可执行文件sine.out ⑸ 运行程序

选择 Debug→Run运行,可以通过查看内存表等方法,看到程序运行的结果。5.2 仿真结果

选择 View→Graph→Time/Frequence

得到的正弦波形如下图所示:

输出结果显示,在CCS图形观察窗口得到了频率稳定,信号干扰小,波形失真度较小的正弦信号。

6、心得体会

通过这次的课程设计使我进一步加深了对于DSP这门课程的学习以及对于平时所学内容的实际应用。在设计中发现问题和同学互相讨论研究,并在编程过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。在输入程序时发现编程确实是要求很认真细心的,如果稍有差错就会导致整个程序的错误,也由此体现了DSP这门课程的严谨性。相信在以后的学习中一定会更好的应用所学内容的。

第三篇:函数信号发生器设计

函数信号发生器设计设计任务与要求

⑴ 设计并制作能产生正弦波、矩形波(方波)和三角波(锯齿波)的函数发生器,本信号发生器可以考虑用专用集成芯片(如5G8038等)为核心实现。⑵ 信号频率范围: 1Hz∽100kHz;

⑶ 频率控制方式:

① 手控通过改变RC参数实现;

② 键控通过改变控制电压实现;

③ 为能方便地实现频率调节,建议将频率分档;

⑷ 输出波形要求

① 方波上升沿和下降沿时间不得超过200nS,占空比在48%∽50%之间;② 非线性误差≤2%;

③ 正弦波谐波失真度≤2%;

⑸ 输出信号幅度范围:0∽20V;

⑹ 信号源输出阻抗:≤1Ω;

⑺ 应具有输出过载保护功能;

⑻ 具有数字显示输出信号频率和电压幅值功能。

第四篇:DSP-任意信号发生器

任意信号发生器

实验报告

名: 学院(系): 专

业: 组

员: 指导老师:

学 号:

电子工程与光电技术学院

通信工程

一、实验目的

1.熟悉 DSP 硬件开发平台; 2.熟悉 DSP 集成开发环境(CCS); 3.掌握 TMS320F2812 的存储器配置表; 4.学习TMS320F2812 的编程开发; 5.熟悉代码调试的基本方法。

二、实验仪器

计算机、C2000 DSP 教学实验箱、XDS510 USB 仿真器、示波器

三、实验内容

建立工程,编写DSP 的主程序,并对工程进行编译、链接,利用现有 DSP平台实现任意波的产生,通过示波器观察结果。对于实验所要求的内容,完成情况如下:

(1)、独立完成项目编译、链接、调试的全过程;

(2)、利用数码显示管,在DSP初始化子模块后添加语句或者编写子程序,使之能够显示实验日期2014.11.15。答:如图所示:

(3)、记录实验中个子程序包括主程序的入口实际地址,与 memory 比较,指出分别位于什么类型的存储器中。

答:入口地址为:0x00000000;位于片上M0.M1 SARAM。(4)、指出波形数据保存的空间地址,并以图形方式显示线性调频信号的波形,并保存,附在实验报告中。答:空间地址为:0x01000000 线性调频信号的波形如图所示:

四、实验中出现的问题及解决方案

1、改变信号频率的方式并编程实现,在示波器上验证:

首先需要改变原来的程序,初始程序为cos余弦函数,我们把它改成了sin正弦函数;另外信号频率需要不断变化,因此在源程序基础上增加了一个变量m.具体程序如下所示: 初始程序:

修改后程序:

改变信号频率后,示波器上验证的图形如下: A、m=2时,T=5.3ms;

B、m=3时,T=3.6ms;

C、m=4时,T=2.65ms;

D、m=8时,T=1.32ms;

2、在实验过程中,由于实验进行的比较顺利,因此我们还利用数码显示管显示了其他内容,例如下面图形所示,寓意为“304C一生一世”(304C为宿舍号):

五、实验感想

在进行本实验时,由于我们之前对CCS这个集成开发环境有了一定的熟悉,因此做起来少了生疏感。主要出现的问题在于编程方面,在编写正余弦函数表达式上我们是通过了学习他人的方式完成的。

该实验让我学会了利用DSP的运算能力计算出波形的数值信息,在现有平台上实现任意波形的生成,还让我学会了通过改变程序来控制数码显示管的输出。总之,通过实验,我发现了许多以前不知道的DSP的用处,感谢实验带给我新的知识和领悟。

第五篇:函数信号发生器论文

函数信号发生器的设计与制作

系别:电子工程系 专业:应用电子技术 届:XX届 姓名:XXX 摘 要

本系统以ICL8038集成块为核心器件,制作一种函数信号发生器,制作成本较低。适合学生学习电子技术测量使用。ICL8038是一种具有多种波形输出的精密振荡集成电路,只需要个别的外部元件就能产生从0.001Hz~30KHz的低失真正弦波、三角波、矩形波等脉冲信号。输出波形的频率和占空比还可以由电流或电阻控制。另外由于该芯片具有调制信号输入端,所以可以用来对低频信号进行频率调制。

关键词 ICL8038,波形,原理图,常用接法

一、概述

在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。

二、方案论证与比较

2.1·系统功能分析

本设计的核心问题是信号的控制问题,其中包括信号频率、信号种类以及信号强度的控制。在设计的过程中,我们综合考虑了以下三种实现方案:

2.2·方案论证

方案一∶采用传统的直接频率合成器。这种方法能实现快速频率变换,具有低相位噪声以及所有方法中最高的工作频率。但由于采用大量的倍频、分频、混频和滤波环节,导致直接频率合成器的结构复杂、体积庞大、成本高,而且容易产生过多的杂散分量,难以达到较高的频谱纯度。

方案二∶采用锁相环式频率合成器。利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需要频率上。这种频率合成器具有很好的窄带跟踪特性,可以很好地选择所需要频率信号,抑制杂散分量,并且避免了量的滤波器,有利于集成化和小型化。但由于锁相环本身是一个惰性环节,锁定时间较长,故频率转换时间较长。而且,由模拟方法合成的正弦波的参数,如幅度、频率 相信都很难控制。

方案三:采用8038单片压控函数发生器,8038可同时产生正弦波、方波和三角波。改变8038的调制电压,可以实现数控调节,其振荡范围为0.001Hz~300KHz。

三、系统工作原理与分析

3.1、ICL8038的应用

ICL8038是精密波形产生与压控振荡器,其基本特性为:可同时产生和输出正弦波、三角波、锯齿波、方波与脉冲波等波形;改变外接电阻、电容值可改变,输出信号的频率范围可为0.001Hz~300KHz;正弦信号输出失真度为1%;三角波输出的线性度小于0.1%;占空比变化范围为2%~98%;外接电压可以调制或控制输出信号的频率和占空比(不对称度);频率的温度稳定度(典型值)为120*10-6(ICL8038ACJD)~250*10-6(ICL8038CCPD);对于电源,单电源(V+):+10~+30V,双电源(+V)(V-):±5V~±15V。图1-2是管脚排列图,图1-2是功能框图。8038采用DIP-14PIN封装,管脚功能如表1-1所示。

3.2、ICL8038内部框图介绍

函数发生器ICL8038的电路结构如图虚线框内所示(图1-1),共有五个组成部分。两个电流源的电流分别为IS1和IS2,且IS1=I,IS2=2I;两个电压比较器Ⅰ和Ⅱ的阈值电压分别为 和,它们的输入电压等于电容两端的电压uC,输出电压分别控制RS触发器的S端和 端;RS触发器的状态输出端Q和 用来控制开关S,实现对电容C的充、放电;充点电流Is1、Is2的大小由外接电阻决定。当Is1=Is2时,输出三角波,否则为矩尺波。两个缓冲放大器用于隔离波形发生电路和负载,使三角波和矩形波输出端的输出电阻足够低,以增强带负载能力;三角波变正弦波电路用于获得正弦波电压。

3.3、内部框图工作原理

★当给函数发生器ICL8038合闸通电时,电容C的电压为0V,根据电压比较器的电压传输特性,电压比较器Ⅰ和Ⅱ的输出电压均为低电平;因而RS触发器的,输出Q=0,;

★使开关S断开,电流源IS1对电容充电,充电电流为

IS1=I

因充电电流是恒流,所以,电容上电压uC随时间的增长而线性上升。

★当上升为VCC/3时,电压比较器Ⅱ输出为高电平,此时RS触发器的,S=0时,Q和 保持原状态不变。

★一直到上升到2VCC/3时,使电压比较器Ⅰ的输出电压跃变为高电平,此时RS触发器的 时,Q=1时,导致开关S闭合,电容C开始放电,放电电流为IS2-IS1=I因放电电流是恒流,所以,电容上电压uC随时间的增长而线性下降。

起初,uC的下降虽然使RS触发的S端从高电平跃变为低电平,但,其输出不变。

★一直到uC下降到VCC/3时,使电压比较器Ⅱ的输出电压跃变为低电平,此时,Q=0,使得开关S断开,电容C又开始充电,重复上述过程,周而复始,电路产生了自激振荡。

由于充电电流与放电电流数值相等,因而电容上电压为三角波,Q和 为方波,经缓冲放大器输出。三角波电压通过三角波变正弦波电路输出正弦波电压。

结论:改变电容充放电电流,可以输出占空比可调的矩形波和锯齿波。但是,当输出不是方波时,输出也得不到正弦波了。

3.4、方案电路工作原理(见图1-7)

当外接电容C可由两个恒流源充电和放电,电压比较器Ⅰ、Ⅱ的阀值分别为总电源电压(指+Vcc、-VEE)的2/3和1/3。恒流源I2和I1的大小可通过外接电阻调节,但必须I2>I1。当触发器的输出为低电平时,恒流源I2断开,恒流源I1给C充电,它的两端电压UC随时间线性上升,当达到电源电压的确2/3时,电压比较器I的输出电压发生跳变,使触发器输出由低电平变为高电平,恒流源I2接通,由于I2>I1(设 I2=2I1),I2将加到C上进行反充电,相当于C由一个净电流I放电,C两端的电压UC又转为直线下降。当它下降到电源电压的1/3时,电压比较器Ⅱ输出电压便发生跳变,使触发器输出为方波,经反相缓冲器由引脚9输出方波信号。C上的电压UC,上升与下降时间相等(呈三角形),经电压跟随器从引脚3输出三角波信号。将三角波变为正弦波是经过一个非线性网络(正弦波变换器)而得以实现,在这个非线性网络中,当三角波的两端变为平滑的正弦波,从2脚输出。

其中K1为输出频段选择波段开关,K2为输出信号选择开关,电位器W1为输出频率细调电位器,电位器W2调节方波占空比,电位器W3、W4调节正弦波的非线性失真。

图1-1

3.5、两个电压比较器的电压传输特性如图1-4所示。

图1-4

3.6、常用接法

如图(1-2)所示为ICL8038的引脚图,其中引脚8为频率调节(简称为调频)电压输入端,电路的振荡频率与调频电压成正比。引脚7输出调频偏置电压,数值是引脚7与电源+VCC之差,它可作为引脚8的输入电压。如图(1-5)所示为ICL8038最常见的两种基本接法,矩形波输出端为集电极开路形式,需外接电阻RL至+VCC。在图(a)所示电路中,RA和RB可分别独立调整。在图(b)所示电路中,通过改变电位器RW滑动的位置来调整RA和RB的数值。

图1-5

当RA=RB时,各输出端的波形如下图(a)所示,矩形波的占空比为50%,因而为方波。当RA≠RB时,矩形波不再是方波,引脚2输出也就不再是正弦波了,图(b)所示为矩形波占空比是15%时各输出端的波形图。根据ICL8038内部电路和外接电阻可以推导出占空比的表达式为

故RA<2RB。

为了进一步减小正弦波的失真度,可采用如图(1-6)所示电路,电阻20K与电位器RW2用来确定8脚的直流电压V8,通常取V8≥2/3Vcc。V8越高,Ia、Ib越小,输出频率越低,反之亦然。RW2可调节的频率范围为20HZ20~KHZ。V8还可以由7脚提供固定电位,此时输出频率f0仅有Ra、Rb及10脚电容决定,Vcc采用双对电源供电时,输出波形的直流电平为零,采用单对电源供电时,输出波形的直流电平为Vcc/2。两个100kΩ的电位器和两个10kΩ电阻所组成的电路,调整它们可使正弦波失真度减小到0.5%。在RA和RB不变的情况下,调整RW2可使电路振荡频率最大值与最小值之比达到100:1。在引脚8与引脚6之间直接加输入电压调节振荡频率,最高频率与最低频率之差可达1000:1。

3.7、实际线路分析

可在输出增加一块LF35双运放,作为波形放大与阻抗变换,根据所选择的电路元器件值,本电路的输出频率范围约10HZ~20KHZ;幅度调节范围:正弦波为0~12V,三角波为0~20V,方波为0~24V。若要得到更高的频率,还可改变三档电容的值。

图1-6

表 1-1 ISL8038管脚功能

管 脚 符 号 功 能

1,12 SINADJ1,SINADJ2 正弦波波形调整端。通常SINADJ1开路或接直流电压,SINADJ2接电阻REXT到V-,用以改善正弦波波形和减小失真。SINOUT 正弦波输出TRIOUT 三角波输出

4,5 DFADJ1,DFADJ2 输出信号重复频率和占空比(或波形不对称度)调节端。通常DFADJ1端接电阻RA到V+,DFADJ2端接RB到V+,改变阻值可调节频率和占空比。V+ 正电源 FMBIAS 调频工作的直流偏置电压FMIN 调频电压输入端SQOUT 方波输出 C 外接电容到V-端,用以调节输出信号的频率与占空比V-负电源端或地

13,14 NC 空脚

四、制作印刷电路板

首先,按图制作印刷电路板,注意不能有断线和短接,然后,对照原理图和印刷电路板的元件而进行元件的焊接。可根据自己的习惯并遵循合理的原则,将面板上的元器件安排好,尽量使连接线长度减少,变压器远离输出端。再通电源进行调试,调整分立元件振荡电路放大元件的工作点,使之处于放大状态,并满足振幅起振条件。仔细检查反馈条件,使之满足正反馈条件,从而满足相位起振条件。

制作完成后,应对整机进行调试。先测量电源支流电压,确保无误后,插上集成快,装好连接线。可以用示波器观察波形发出的相应变化,幅度的大小和频率可以通过示波器读出。

五、系统测试及误差分析

5.1、测试仪器

双踪示波器 YB4325(20MHz)、万用表。

5.2、测试数据

基本波形的频率测量结果

频率/KHz

正弦波 预置 0.01 0.02 2 20 50 100

实测 0.0095 0.0196 2.0003 20.0038 50.00096 100.193 方波 预置 0.01 0.02 2 20 50

实测 0.095 0.0197 1.0002 2.0004 20.0038 三角波 预置 0.01 0.02 1 2 20 100

实测 0.0095 0.0196 1.0002 2.0004 20.0038 100.0191 5.3、误差分析及改善措施

正弦波失真。调节R100K电位器RW4,可以将正弦波的失真减小到1%,若要求获得接近0.5%失真度的正弦波时,在6脚和11脚之间接两个100K电位器就可以了。

输出方波不对称,改变RW3阻值来调节频率与占空比,可获得占空比为50%的方波,电位器RW3与外接电容C一起决定了输出波形的频率,调节RW3可使波形对称。

没有振荡。是10脚与11脚短接了,断开就可以了

产生波形失真,有可能是电容管脚太长引起信号干扰,把管脚剪短就可以解决此问题。也有可能是因为2030功率太大发热导致波形失真,加装上散热片就可以了。

5.4、调试结果分析

输出正弦波不失真频率。由于后级运放上升速率的限制,高频正弦波(f>70KHz)产生失真。输出可实现0.2V步进,峰-峰值扩展至0~26V。

图1-2

图 1−7

六、结论

通过本篇论文的设计,使我们对ICL8038的工作原理有了本质的理解,掌握了ICL8038的引脚功能、工作波形等内部构造及其工作原理。利用ICL8038制作出来的函数发生器具有线路简单,调试方便,功能完备。可输出正弦波、方波、三角波,输出波形稳定清晰,信号质量好,精度高。系统输出频率范围较宽且经济实用。

七、参考文献

【1】谢自美《电子线路设计.实验.测试(第三版)》武汉:华中科技大学出版社。2000年7月

【2】杨帮文《新型集成器件家用电路》北京:电子工业出版社,2002.8

【3】第二届全国大学生电子设计竞赛组委会。全国大学生电子设计竞赛获奖作品选编。北京:北京理工大学出版社,1997.【4】李炎清《毕业论文写作与范例》厦门:厦门大学出版社。2006.10

【5】潭博学、苗江静《集成电路原理及应用》北京:电子工业出版社。2003.9 【6】陈梓城《家用电子电路设计与调试》北京:中国电力出版社。2006

下载DSP音频信号发生器word格式文档
下载DSP音频信号发生器.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    函数信号发生器设计任务书

    目录 一、设计的任务和要求............................................................................ 二、已知条件...................................................

    信号发生器设计(推荐)

    模拟课程设计题 信号发生器设计 设计一个能够输出正弦波、三角波和矩形波的信号源电路,电路形式自行选择。输出信号的频率可通过开关进行设定,具体要求如下: (1)输出信号的频率范......

    简易信号发生器设计

    《单片机原理及应用》课程设计任务书 课程设计题目:简易信号发生器设计 一、设计目的和要求 (一)、设计目的 通过设计简易信号发生器,完成系统设计、编码、调试及维护工作的实践......

    函数信号发生器课程设计

    一 绪论 1.1 函数信号发生器的应用意义 函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的......

    低频信号发生器2

    低频信号发生器 目录 产品简介:低频信号发生器采用单片机波形合成发生器产生高精度,低失真的正弦波电压,可用于校验频率继电器,同步继电器等,也可作为低频变频电源使用。以单片机......

    DSP语音信号处理

    摘 要 语音信号处理是研究数字信号处理技术和语音信号进行处理的一门学科,是一门新型的学科,是在多门学科基础上发展起来的综合性技术,它涉及到数字信号处理、模式识别、语言学......

    电子设计大赛:DDS 信号发生器

    DDS 信号发生器(1022) 产品应用: 模拟传感器信号 重现实际环境信号 电路功能测试 信号相位调试 科研与教育 最高输出频率 输出通道数 采样率 任意波长度 CH1 CH2 20 MHz 2 100......

    8255LCD函数信号发生器解析

    课 程 设 计 报 告 课程名称51单片机课程题目基于8255的LCD显示函数信号发生器的设计专业通信工程班级学号姓名同组人指导单位 南京邮电大学通达学院指导教师 林建中第一部......