DDS波形发生器.docx

上传人:b****5 文档编号:6102487 上传时间:2023-01-03 格式:DOCX 页数:13 大小:96.09KB
下载 相关 举报
DDS波形发生器.docx_第1页
第1页 / 共13页
DDS波形发生器.docx_第2页
第2页 / 共13页
DDS波形发生器.docx_第3页
第3页 / 共13页
DDS波形发生器.docx_第4页
第4页 / 共13页
DDS波形发生器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DDS波形发生器.docx

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

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

89c52

LCD

IDT7132

245

滤波模块

DAC

(2)

DAC

(1)

键盘

2.各模块设计

1)单片机的设计

单片机是系统的操纵中心,它要紧实现以下的功能:

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

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

依照DDFS原理,输出频率为:

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

考虑要达到的要求,选取晶振频率为,频率操纵字为24位,步进为。

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

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

软件设计四种状态,其中状态一、3为频率操纵,状态二、4为幅度操纵,当按下按键7和11时,别离对应的将状态改成3和4,进行频率或电压幅度的修改。

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

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

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

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

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

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

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

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

依照流程图编程的KEILCx51源程序见附录程序。

2)CPLD的设计

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

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

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

单片机的、、、、提供CPLD的操纵信号,提供频率选择字的地址。

由于、、别离作为LCD、DAC0832和RAM的片选信号,并设定由P0口依照、口组合的不同,分时提供数据,组成累加器所需的24位输入数据。

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

VerilogHDL的源程序见附录。

3)后级滤波模块的设计

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

依照设计表,综合考虑取

R1=Ω,R2=Ω+50kΩ的电位器,C一、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大体波形的频率测量结果~200KHz,步进

预置频率

(Hz)

实际输出频率(Hz)

正弦波

方波

三角波

1

1

1

1

10

10

10

50

50

100

500

1000

5000

10000

50000

100000

150000

200000

正弦波1KHz

预置值(V)

1

2

3

实测值(V)

正弦波200KHz

预置值(V)

1

2

3

实测值(V)

正弦波

预置值(V)

1

2

3

实测值(V)

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

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

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

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

 

四实验总结

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

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

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

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

输出波形不失真频率范围为~200KHz,步进为,幅度可调范围为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];

disbuff[19]='.';

disbuff[6]='f';

disbuff[7]='=';

disbuff[16]='v';

disbuff[17]='=';

disbuff[22]='v';

pflag=0;;}

}

 

voidcheckkey()//扫描按键程序

{uchara,b;

P1=0xf0;

a=P1;

if(a!

=0xf0)

{delay(17);

a=P1;

if(a!

=0xf0)

{P1=0x0f;

b=P1;

if(b!

=0x0f)

{

a=a|b;

key(a);

}

}

}

}

 

voidmain()//主函数

{biti=1;

ucharj;

initiallcd();

P1=0xf0;

for(j=0;j<23;j++)//初始化显示缓存

disbuff[j]='';

disfirst();

while(i)

{checkkey();

}

}

二、Verilog程序

/*2-4线译码器,24位寄放器,26为累加器,373*/

moduleadd373(out,Dout,in,A,B,ce,contr,clk,WR);

inputce;

input[7:

0]in;

output[7:

0]out;//寄放器

reg[7:

0]out;

input[1:

0]contr;

inputclk,WR;

output[10:

0]Dout;//相位累加器

reg[23:

0]DATA;

reg[25:

0]SUM;

input[1:

0]A;

output[1:

0]B;

reg[2:

0]B;

assignDout[10:

0]=SUM[25:

15];

 

always@(negedgece)

out<=in;

always@(A)

case(A)

2'b00:

B<=3'b110;

2'b01:

B<=3'b101;

2'b10:

B<=3'b011;

2'b11:

B<=3'b111;

endcase

always@(posedgeclk)

begin

if((!

WR)&&(!

B[2]))

case(contr)

2'b00:

DATA[7:

0]<=in[7:

0];

2'b01:

DATA[15:

8]<=in[7:

0];

default:

DATA[23:

16]<=in[7:

0];

endcase

end

always@(posedgeclk)

begin

SUM<=DATA+SUM;

end

endmodule

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

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1