DDS波形发生器.docx

上传人:b****2 文档编号:2590368 上传时间:2023-05-04 格式:DOCX 页数:29 大小:113.54KB
下载 相关 举报
DDS波形发生器.docx_第1页
第1页 / 共29页
DDS波形发生器.docx_第2页
第2页 / 共29页
DDS波形发生器.docx_第3页
第3页 / 共29页
DDS波形发生器.docx_第4页
第4页 / 共29页
DDS波形发生器.docx_第5页
第5页 / 共29页
DDS波形发生器.docx_第6页
第6页 / 共29页
DDS波形发生器.docx_第7页
第7页 / 共29页
DDS波形发生器.docx_第8页
第8页 / 共29页
DDS波形发生器.docx_第9页
第9页 / 共29页
DDS波形发生器.docx_第10页
第10页 / 共29页
DDS波形发生器.docx_第11页
第11页 / 共29页
DDS波形发生器.docx_第12页
第12页 / 共29页
DDS波形发生器.docx_第13页
第13页 / 共29页
DDS波形发生器.docx_第14页
第14页 / 共29页
DDS波形发生器.docx_第15页
第15页 / 共29页
DDS波形发生器.docx_第16页
第16页 / 共29页
DDS波形发生器.docx_第17页
第17页 / 共29页
DDS波形发生器.docx_第18页
第18页 / 共29页
DDS波形发生器.docx_第19页
第19页 / 共29页
DDS波形发生器.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DDS波形发生器.docx

《DDS波形发生器.docx》由会员分享,可在线阅读,更多相关《DDS波形发生器.docx(29页珍藏版)》请在冰点文库上搜索。

DDS波形发生器.docx

DDS波形发生器

信号发生器的设计

林晓峰徐志国王法(28组)

摘要:

本系统利用单片机89C52与CPLD(EPM7128SLC84-15)结合,采用DDFS(直接频率数字频率合成)技术,辅以必要的模拟电路,构成一个波形稳定、精度较高的信号发生器。

单片机控制频率、幅度步进,LCD实时显示相关信息,CPLD集成了大部分电路,系统大大简化,输出波形可以在正弦波、方波及三角波间切换。

另外,还利用手写板实现任意波形输入的功能。

关键词:

DDFS,单片机,CPLD,A/D,D/A。

一方案论证与比较

1.频率合成器模块

方案一:

采用模拟分立元件或单片压控函数发生器MAX038,可产生正弦波、方波、三角波,通过调整外部元件可改变输出频率,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻电容对参数影响很大,因而产生的频率稳定度较差、精度低、抗干扰能力低、成本也高,且灵活性较差,不能实现任意波形以及波形运算输出等智能化的功能。

方案二:

采用程控锁相环频率合成方案。

锁相环频率合成是将高稳定度和高精确度的标准频率经过加减乘除的运算产生同样稳定度和精确度的大量离散频率,在一定程度上解决了既要频率稳定精确、又要频率在较大范围可变的矛盾,能产生方波,通过积分电路就可以得到同频率的三角波,再经过滤波器就可以得到正弦波,但不能满足任意波形的输出要求,功能扩展能力有限。

方案三:

利用BCD比例乘法器14527的级联数控分频对存储器查表,取存放与存储器中的波形数据,经D/A转换输出波形。

方案四:

采用直接数字频率合成(DDFS)技术产生波形。

信号频率范围覆盖超低频和高频,便于单片机控制。

通过计数器的输出作为读取波形存储器RAM的地址,将读出的数据送至D/A转换器输出波形。

而对计数器的控制也有两种实现方案:

通过一定的频率作用于计数器,使其能循环计数。

采用CPLD与单片机相结合的方式实现对频率的控制,利用CPLD产生一个相位累加器,通过相位累加器和固定时钟脉冲取样的相位寄存器组成。

经过论证比较,DDFS与锁相环方案相比,无需相位反馈控制,频率建立及频率切换快,并且与频率分辨率、频谱纯度相互独立,覆盖频率范围大,精度高,控制性好且容易实现,有具有功能扩展的能力,故采用这种方案。

2.存储器模块

由于需要产生任意波形,波形数据表需要经常改写且无法预测,故不能存放在ROM中。

方案一:

采用RAM存储数据,实现简单。

但RAM不能直接挂在系统总线上,否则必然出现总线冲突,故采用双口RAM。

双口RAM有左右两套完全相同的I/O口,即两套数据总线、两套地址总线、两套控制总线,并有一套竞争仲裁电路,可以通过左右两边任一组I/O进行全异步的存储器读写操作,避免了系统总线隔离。

减少了单片机与CPLD之间的通信,节省单片机的资源,使系统更为可靠。

方案二:

使用CPLD作为数据的桥梁,将波形先存储在EPROM中,同过单片机控制,将数据传输给CPLD,再由CPLD将数据高速传送给DAC0832。

综合考虑器件的使用性和电路的可靠性,我们决定采用双口RAM作为系统的存储器件。

3.模拟输出模块

输出模块要实现数模转换和幅度控制功能,并有一定的后级处理模块,滤除由DAC产生的高频分量和采集样点时的高次谐波分量,使输出的波形平滑不失真。

a)幅度控制部分

方案一:

由数控电位器组成的电阻分压网络控制幅度。

方案二:

采用峰值检波器获得输出端的电压幅值,经A/D采样后得到输出端当前的电压幅值,然后就得到了输出当前的电压幅值,然后通过与预设的输出幅值比较就可以知道输出下降的情况。

并由单片机控制放大器增加放大倍数,直至输出幅值调整到预期值。

方案三:

采用一级D/A转换实现。

直接将DDFS产生的信号作为参考电压输入到D/A中,这样D/A就成为一个数控可变增益放大器,通过改变D/A的转换数据就可以控制输出幅度。

方案四:

数模转换和幅度控制部分采用双D/A技术,由单片机控制,第一级D/A的输出波形作为第二级D/A的基准电压源,以此来控制信号发生器的输出电压幅度。

这种方法电路简单,通过软件控制,可控性强,故采用这种方案。

b)后级滤波部分

方案一:

采用二阶切比雪夫低通滤波器。

切比雪夫低通滤波器的幅度响应在通带内是在两个值之间波动,在通带内的波动次数取决于滤波器的阶数。

理想的切比雪夫低通滤波器近似在靠近截止频率的部分有比巴特沃兹滤波器更接近矩形的频率响应。

方案二:

采用二阶巴特沃兹滤波器。

巴特沃兹滤波器的幅度函数是单调下降的,但巴特沃兹滤波器能实现最大平坦幅度滤波。

由于信号发生器的输出波形中的主要噪声为D/A转换产生的高频分量,与设计的频率范围相差很远,所以相对来说,滤波器在频带内的平坦程度比其衰减陡度更为重要,而且巴特沃兹滤波器的元件值也较合乎实际情况,不像其他类型滤波器对元件值要求那么苛刻。

基于上述考虑,决定采用二阶巴特沃兹滤波器。

经过讨论最终采用以下方案实现信号发生器的设计:

采用CPLD与单片机结合利用DDFS技术进行频率合成,将波形数据存储在双口RAM中,采用双片D/A实现稳幅输出,并经过二阶巴特沃兹滤波器进行滤波,相关信息通过字符型LCD显示。

二系统设计

1.总体设计框图

单片机构成系统的控制中心,控制功能选择和结果显示,CPLD在单片机的控制下实现直接频率合成,系统初始化后对按键进行判断从而根据设定选择相应的功能执行。

在更改输出波形频率时,根据输入产生相应的频率控制字送到CPLD中,控制输出频率值。

CPLD的输出作为双口RAM的读取地址,选取波形数据经DAC0832输出模拟波形。

同时,单片机控制第一片DAC0832输出直流电压作为输出波形的DAC0832的基准源,控制输出波形的幅值。

系统连接框图如下图所示:

CPLD

IDT7132

滤波模块

DAC

(2)

DAC

(1)

键盘

2.各模块设计

1)单片机的设计

单片机是系统的控制中心,它主要实现以下的功能:

一方面控制LCD显示输入控制信息,控制按键识别和功能选择;另一方面与CPLD结合,实现直接频率合成。

单片机提供CPLD的控制端口,对CPLD内部实现控制和选择,配合对双口RAM内存储数据的读取;另外单片机还和两片D/A相连,实现对D/A的控制。

根据DDFS原理,输出频率为:

其中fclk为输入时钟频率,M为相位累加器的位数,N为频率控制字。

考虑要达到的要求,选取晶振频率为8.388MHz,频率控制字为24位,步进为0.5Hz。

单片机在等待按键过程中输出标准的1KHz三角波,用户按下按键后根据不同的按键实现各种功能。

直接按下按键0、1、2,可实现输出波形在正弦波、方波和三角波之间的转换。

软件设计四种状态,其中状态1、3为频率控制,状态2、4为幅度控制,当按下按键7和11时,分别对应的将状态改为3和4,进行频率或电压幅度的修改。

之后再按下按键1~9对应输入相应的数字,输入所需要修改的值后再按回车键将改变输出波形的频率或幅度。

考虑到LCD的显示位数有限,若输入的数值满5位,系统自动默认为输入完毕。

输入错误可按3号键取消本次修改输入。

同时,LCD实时显示输出波形的频率、幅度信息及修改的数值信息。

另外,以手写板作为前向通道,采集用户在手写板上绘制的波形,并将其存储和显示。

手写板和单片机之间通过串口进行数据传输,波特率为9600Hz。

当手写板被触及时,它便将被触及点的坐标值进行适当的编码,并打包传给单片机,单片机接受到数据后计算触及点的坐标并进行相应处理,然后存储起来,并通过CPLD的控频,输出所需频率的波形。

单片机内部的程序流程图如下图所示:

根据流程图编程的KEILCx51源程序见附录程序。

2)CPLD的设计

在CPLD内部形成DDFS所需的相位累加器。

另外,单片机和双口RAM通信时P0口提供低八位地址所需要的锁存器也在CPLD内部实现,减少硬件。

其中DDFS的简单逻辑电路如右图所示:

单片机的P2.7、P2.4、P2.3、P2.2、P2.1提供CPLD的控制信号,提供频率选择字的地址。

由于P2.7、P2.4、P2.3分别作为LCD、DAC0832和RAM的片选信号,并设定由P0口根据P2.2、P2.1口组合的不同,分时提供数据,组成累加器所需的24位输入数据。

为保证时序不发生冲突,在单片机WR端为低电平时写入数据。

VerilogHDL的源程序见附录。

3)后级滤波模块的设计

滤除波形中由D/A产生的高频分量,根据实际情况设计低通滤波器,采用两级高通级联来提高Q值。

根据设计表,综合考虑取

R1=1.5kΩ,R2=3.3kΩ+50kΩ的电位器,C1、C2分别取301和101的电容。

3.系统实现电路

按上述设计思路,采用89S52单片机控制系统,MAX7000S系列的EPM7128SLC84-15器件进行CPLD设计。

A/D转换部分采用的ADC0809,D/A转换部分采用DAC0832。

系统电路设计如下图所示:

三系统调试与指标测试

a)测试仪器

TektronixTDS1002双信道数字示波器,SG173SB3直流稳压稳流电源,Agilent33120A信号发生器,FLUKE17B型4位数字万用表。

b)键盘功能定义

c)指标测试

采用分级调试的方法,分别对双口RAM,DA,以及滤波电路进行了测试。

双口RAM能够正确读写,DA工作正常。

输出的波形也比较好,但是在级联调试的时候发现波形不可以控制,输出的波形频率具有很大的随机性,分析可能是累加器或者是CPLD根本没有接收到单片机传过去的频率控制字。

为了找到问题的所在,我们先不用单片机给CPLD赋频率控制字,而是修改了Verilog程序,让CPLD内部产生一个频率控制字,发现系统能根据设定的控制字输出预计的频率,而不再是随机的频率了,这就排除了累加器有问题的可能性了。

剩下的就只有在传送数据的时候出错的可能性了。

经过仔细检查硬件以及Verilog程序,发现程序里面有一句always语句有问题,本来要生成时序逻辑电路的,结果用的是组合逻辑电路的写法,造成的数据不能按照预计的触发条件传送。

修改之后波形就可以在控制下输出了。

测试最终输出波形的相关数据如下:

表1基本波形的频率测量结果(0.5Hz~200KHz,步进0.5Hz)

预置频率

(Hz)

实际输出频率(Hz)

正弦波

方波

三角波

0.5

0.5

0.5

0.5

1

1

1

1

10

10.0025

10

10

50

49.9987

49.9988

50

100

99.9980

99.9976

99.9975

500

499.987

499.988

499.998

1000

999.975

999.975

999.975

5000

4.99987k

4.99987k

4.99988k

10000

9.99974k

9.99976k

9.99975k

50000

49.9987k

49.9987k

49.9987k

100000

100.154k

99.9974k

99.9975k

150000

149.996k

149.996k

149.996k

200000

199.995k

199.995

199.995k

正弦波1KHz

预置值(V)

0.5

0.7

1

1.5

1.8

2

2.5

3

3.5

4.0

实测值(V)

0.48

0.68

1.01

1.50

1.79

2.02

2.52

3.02

3.52

4.00

4.5

5.0

4.48

5.05

正弦波200KHz

预置值(V)

0.5

0.7

1

1.5

1.8

2

2.5

3

3.5

4.0

实测值(V)

0.52

0.74

1.12

1.60

1.9

2.12

2.62

3.12

3.60

4.08

4.5

5.0

4.56

5.10

正弦波0.5Hz

预置值(V)

0.5

0.7

1

1.5

1.8

2

2.5

3

3.5

4.0

实测值(V)

0.48

0.70

1.00

1.50

1.80

2.00

2.50

3.00

3.5

4.00

4.5

5.0

4.40

5.00

测试仪表数字示波器本身存在测量误差,尤其是在幅度测量中,所测得的峰—峰值为所显示波形中的最大值与最小值之差,这样就会受到噪声的干扰,使得实测数据与预置数据产生一定误差。

同时DAC0832为8位D/A转换器,系统中设定的满量程为4V,其量化误差为

,按满度归一化的相对误差为

另外由于电路本身结构的限制,整个电路的布局和走线引入了一定的噪声和干扰。

 

四实验总结

1.本系统采用了CPLD作为DDFS的地址累加器,故可以产生很高频率的信号,相比用单片机做地址累加有明显的优势。

2.系统的输出在较高频率时由于运放、D/A的带宽限制,输出幅度有所下降。

以后在做功能扩展时应考虑加入数控放大倍率补偿,消除带宽限制的影响。

系统最终可输出正弦波、方波、三角波三种常规波形,并可通过手写板输出所需任意波形。

输出波形不失真频率范围为0.5Hz~200KHz,步进为0.5Hz,幅度可调范围为0~4V,步进为32分之1V,达到设计要求,且人机交互界面增加了系统的实用性与灵活性。

 

参考文献:

[1]马忠梅.单片机的C语言应用程序设计.北京:

北京航空航天大学出版社

[2]李朝青.单片机原理及接口技术.北京:

北京航空航天大学出版社

附录:

一、C语言程序

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#definekey10xee/*1(sin)2(squr)3(trig)4(扫频)*/

#definekey20xde/*5678*/

#definekey30xbe/*90.enter*/

#definekey40x7e/*f/vKHzinputshift*/

#definekey50xed

#definekey60xdd

#definekey70xbd

#definekey80x7d

#definekey90xeb

#definekey00xdb

#definepiont0xbb

#defineenter0x7b

#defineshift0x77

#definesetfv0xe7

#defineclear0xb7

#defineKHz0xd7

#definelcdwcomXBYTE[0x1f00]//液晶写指令地址

#definelcdwdatXBYTE[0x5f00]//液晶写数据地址

#definelcdrdatXBYTE[0x3f00]//液晶读数据地址

#defineREG0XBYTE[0xf000]//频率控制字寄存器低8位地址

#defineREG1XBYTE[0xf100]//频率控制字寄存器中8位地址

#defineREG2XBYTE[0xf200]//频率控制字寄存器高8位地址

 

#defineDACXBYTE[0xe800]//0832地址

#defineIDT7132XBYTE[0xe000+p]//双口RAM地址

 

sbitdir=P3^0;//245方向控制端

bitKHzflag=0;//KHZ键按下标志

bitshiftflag=0;//shift键按下标志位

bitpflag=0;//点键按下标志位

bitvflag=0;//f/V键按下标志位

ucharcountf=0;//频率输入按键记数

ucharcountv=0;//电压输入按键记数

uintp;//地址增量

uchardisbuff[23];//显示缓存

staticintf[4]={0,0,0,0},v[3]={0,0,0};//频率值缓存,电压值缓存

floatk=0.0;//输出频率

 

voiddelay(intt)//延时程序

{uintj,i;

for(i=0;i

for(j=0;j<1000;j++)

;

}

 

voidsintable()//正弦波波表

{uinti;

p=0x0000;

for(i=0;i<2048;i++)

{IDT7132=255*(1+sin((float)i/2048*2*3.14159))/2;

p++;

}

disbuff[0]='s';

disbuff[1]='i';

disbuff[2]='n';

disbuff[3]='a';

}

 

voidsquaretable()//方波波表

{inti;

p=0x0000;

for(i=0;i<1024;i++)

{IDT7132=0xff;

p++;}

for(i=1024;i<2048;i++)

{IDT7132=0x00;

p++;}

disbuff[0]='s';

disbuff[1]='q';

disbuff[2]='u';

disbuff[3]='a';

}

 

voidtritable()//三角波波表

{

inti;

p=0x0000;

for(i=0;i<1024;i++)

{IDT7132=(int)(i/4);

p++;}

for(i=1024;i<2048;i++)

{IDT7132=(int)((2048-i)/4);

p++;}

disbuff[0]='t';

disbuff[1]='r';

disbuff[2]='i';

disbuff[3]='g';

}

 

voidwait()//判忙程序

{ucharx;

bitb=1;

while(b)

{dir=0;

x=lcdrdat;

x&=0x80;//屏蔽低7位

if(x!

=0x80)//判断P0.7口是否为1

b=0;

dir=1;

}

}

 

voidsetfunction(uchara,bitj)//写指令程序

{if(j==1)

wait();

dir=1;

lcdwcom=a;

}

 

voidinitiallcd()//初始化程序

{delay(15);

setfunction(0x38,0);//8位数据接口,双行显示,字型大小为5x7,不查忙

delay(5);

setfunction(0x38,0);

delay(5);

setfunction(0x38,0);

delay(5);

setfunction(0x38,1);//8位数据接口,双行显示,字型大小为5x7,查忙

setfunction(0x0e,1);//开显示及光标,不闪烁,查忙

setfunction(0x01,1);//清屏并设置AC为0,查忙

setfunction(0x06,1);//显示不移位,AC为增量方式,查忙

}

 

voidwritecode(uchari)

{wait();

dir=1;

lcdwdat=i;//将数据写入LCD

}

 

voiddissf()//显示scanfrequnecy

{ucharsample1[20]={"scanfrequnecy"};

uchari;

setfunction(0x01,1);

for(i=0;i<16;i++)

writecode(sample1[i]);

}

 

voiddisfirst()

{ucharstart[20]={"PressInput"};

uchari;

setfunction(0x01,1);

for(i=0;i<16;i++)

writecode(start[i]);

}

voiddisend()

{ucharsample2[16]={"END"};

uchari;

setfunction(0x01,1);

for(i=0;i<16;i++)

writecode(sample2[i]);

}

 

voiddisplaybuff()//显示显示缓存中的内容

{uchari;

initiallcd();

setfunction(0x80,1);

for(i=0;i<23;i++)

{

writecode(disbuff[i]);

if(i==15)

setfunction(0xc0,1);

}

}

 

voiddiss()//显示波的类型(正弦波)

{uchars[4]={"sina"};

uchari;

setfunction(0x01,1);

for(i=0;i<4;i++)

writecode(s[i]);

}

 

voiddist()//显示波的类型(三角波)

{uchars[4]={"trig"};

uchari;

setfunction(0x01,1);

for(i=0;i<4;i++)

writecode(s[i]);

}

 

voiddisq()//显示波的类型(方波)

{uchars[4]={"squa"};

uchari;

setfunction(0x01,1);

for(i=0;i<4;i++)

writecode(s[i]);

}

 

voidkeyprocess(inta,ucharb)//处理键盘中关于电压,频率的按键值

{if(vflag==0)//判断此时是否在输入频率

{f[countf]=a;//存储频率值

if(pflag==1)//判断小数点有无按下

disbuff[countf+9]=b;

elsedisbuff[countf+8]=b;

countf++;

}

if(vflag==1)//判断此时是否在输入电压

{v[countv]=a;

if(pflag==1)

disbuff[c

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2