您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页数字式波形发生器的设计44444444444444

数字式波形发生器的设计44444444444444

来源:华佗小知识


淮 北 师 范 大 学

课程设计成果报告

课程设计名称: 数字式波形发生器的设计

院 别 : 信 息 学 院 年 级 专 业 : 2008级电子信息科学与技术 小 组 成 员 : 20081852031 李传登

20081852033 李 鹏

20081852036 廖纯生 20081852062 王树周 20081852066 吴 桐 20081852073 徐周泽

指导教师 赵庆平老师 日 期 2010年6月20日

1

【数字式波形发生器工作原理】

一、波形发生器原理框图如图(1)所示

地址计数器 (相位累加器) 波形数据存储器(ROM) D/A转换器 低通 滤波器 振荡器 分频器

图(1) 波 形 发 生 器 原 理 框 图

二、直接地址计数器产生方法

工作过程是,假设如果计数器的位数为N位(模值=2N),则把波形的一个周期分为2N个等间距数据点(称之为抽样点)并存入数据存储器。地址计数器不断地进行循环计数,就会产生出每一个周期为2N个固定点的波形。

该方法的特点是:每一个波形周期的点数是固定的,每一个周期内,点与点之间的相位间隔相同。但是,两个相邻周期波形之间的相邻两个点的相位间隔与其它点之间的相位间隔有可能会不相同。当计数器的位数N增大时,这种相邻间隔的误差就可以忽略不计了。

如果产生的波形是循环读出的周期波形,则波形的频率是由两方面来决定的:一方面,波形的频率是由地址计数器的计数时钟来决定的,当波形存储的点数一定时,计时器的计时时钟频率越快,读出一周期波形数据的时间就越短,生产输出波形的频率就越高,反之,则波形的频率将会越低;另一方面,波形的频率也由组成一周波形的点数来确定,当计数时钟频率一定时,一周期累的波形点数越多,读完一周波形所需的时间也就越长,则波形的频率就越低,反之,则波形的频率越高。

下面假设地址计数器的标准时钟频率为的波形点数为M个,输出波形的频率为

fr,计数器的位数为N位,一个周期

f0,则输出波形的频率

f0与时钟频率

fr、

M的关系式为:

从上式可知,若

f0fMr

fr为一固定值时,波形的最小频率是:

f

0minf2rN(M2N)

2

由于波形的最高频率受到奈奎斯特抽样定理的,即至少每一周期要抽样两个点,所以可得输出波形的最大频率是:

f0maxf2r(M2)

【波形发生器设计中应考虑的几个问题】

一、D/A转换器的指标

波形发生器的特性很大程度上取决于D/A转换器的性能。性能指标主要有D/A的转换速率和分辨率(位数)。通常,告诉D/A的分辨率较低,目前常采用的有8位、10位和12位的D/A转换器。

8位的D/A转换器的分辨率有2=256个离散电压等级,而12位的D/A转换器的分辨率有2=4096个电压等级,因此,D/A转换器的位数越多,分辨率就越高,再现的波形的量化误差就越小,从而波形的失真度越小。因此,应选择适合的分辨率的D/A转换器。

128二、波形存储器的选择

存储器的选择可以根据波形产生的功能要求,可以选择随机存储器(RAM)或者只读存储器(EPROM)。 (1)随机存储器RAM

RAM存储器时,设计者可以通过计算机编程及I/O接口电路对RAM进行波形存储,实现任意波形和函数发生器,甚至,可以通过键盘输入方程式或者从显示器扫描曲线产生比较复杂的波形。

RAM存储方式可以通过计算机改变波形点数和分频系数两个参数来改变波形的频率。RAM存储器与计算机实现波形发生器的原理框图如图(2)所示。

计算机 RAM 存储器 D/A 转换器 低通 滤波 振荡器 振荡器 振荡器

图(2) 计算机控制实现波形发生器的原理框图

(2)只读存储器EPROM

如果设计的波形发生器只要求实现集中确定的波形时,可预先利用EPROM编程器写好各种波形的数据表,然后通过计数器查表来产生波形。EPROM存储的波形数据不能改变,因此信号频率的改变靠改变分频系数来实现。EPROM存储方式的波形发生器电路结构简单

本实验选用EPROM只读存储器。

3

【波形发生器实现电路】

一、波形数据存储表

波形发生器产生的各种波形数据存储在存储器中,电路中的存储器选用27EPROM,存储容量为8K x 8。本设计电路的存储器只存了四种波形的数据表,每一种波形用1K个存储单元存储一个周期,公用4K个内存,其余4K可供扩展波形种类使用。四种波形的数据表地址和对应的存储单元内容如下表(1)所示。从表中可以看出每一种波形的高三位地址A12、

A11、A10不变,只有

A~A十位地址从全0变为全1。

90 波形 名称 正 弦 波 方 波 计 数 器 地 址 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 存储 十六 进制 0000 03FF 255sin(2∏i/1024) i = 0 – 1024 i指第 i 个单元 单元 内容 0 0 0 0 0 0 0 0 0 0 0 0 0 …………………………………………………………………………… 0 0 0 1 1 1 1 1 1 1 1 1 1 0400 07FF 0800 0BFF 全0 i =0 – 511 全1 i =512-1023 255 x i/1024 i = 0 – 511 255[1-(i-512)/512] i = 512 - 1023 0 0 1 0 0 0 0 0 0 0 0 0 0 …………………………………………………………………………… 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 …………………………………………………………………………… 0 1 0 1 1 1 1 1 1 1 1 1 1 三 角 波 阶 梯 波 0 1 1 0 0 0 0 0 0 0 0 0 0 …………………………………………………………………………… 0 1 1 1 1 1 1 1 1 1 1 1 1 0C00 0FFF 255 x K/N K=0 – N K指第K个阶梯 N指总的阶梯数 每一个阶梯占1024//N个地址 表(1) 四种波形的数据表地址及对应的存储单元内容

4

二、地址计数器电路

地址计数器由三块74161构成最大模值为1024的计数器。地址计数器从0000000000B计到全1111111111B,可循环产生1K个地址。对4K个波形寻址时EPROM的A可直接接地,只要用开关S1、S2选择A、A从00到11,就121110可以实现四种波形的选择输出。

【实验所需元器件管脚图】

一、555

定时器管脚图

二、27EPROM管脚图

74LS161管脚图

5

四、u741管脚图

五、DAC0832管脚图

【实验步骤】

一、555定时器构成的多谐振荡器输出测试

1、连接好多谐振荡器,从555定时器的3号引脚可以观测到输出的波形; 2、调节电位器Rp,并观察输出的波形,时电路输出标准时钟信号脉冲,此脉冲将作为计数器的74161的脉冲输入信号。

二、检验计数器的计数功能

1、在计数电路的三个74161的输出与低电平之间各接上一个发光二极管,提供脉冲信号,观察发光二极管的亮与灭情况;

2、理论上,发光二极管的亮与灭的情况为(以1代表亮,以0代表灭) 0000000000、0000000001、0000000010、0000000011、0000000100、0000000101 ………………………………………………………………………………………… 1111111010、1111111011、1111111100、1111111101、1111111110、1111111111 循环计数。

6

三、在EPROM27里写入数据

1、擦除EPROM27中的数据。然后把编号的程序写入;

2、下面为利用Matlab计算正弦波、方波、三角波等三种固化波形的一个周期的1024点的幅度数据的程序及结果。 (1)正弦波的波形数据产生 deltax= 2*pi/1024; for i= 1 :1 024

x(i)=(i-1)* deltax;

y(i)= sin(x(i)) *1 27.5+127.5 ; end

plot(y) z=round(y) z =

Columns 1 through 10

128 129 130 131 131 132 133 134 135 ……………………

Columns 1021 through 1024 125 126 127 127

(2)方波的波形数据产生 deltax=4/1024; for i=1:512

x(i)= -2+i*deltax; yl(i) =255; end

for i=513:1024

x(i)=i*deltax; yl(i)=0; end

plot(y1) z=round(yl) z=

Columns 1 through 8

255 255 255 255 255 255 255 255 ……………………

Columns 1017 through 1024 0 0 0 0 0 0 0 0 (3)三角波的的波形数据产生 deltax=4/1024; for i=1:256

x(i)= -l+i*deltax;

yl(i) =127.5*(x(i)+1)+127.5; end

7

for i=257:768

x(i)=(i-257)*deltax;

y1(i) =127.5*(-x(i)+1)+127.5; end

for i=769:1024

x(i)=2+(i-769)*deltax;

yl(i) =127.5*(x(i)-3)+127.5; end

plot(y1) z=round(yl) Z =

Columns 1 through 10

12 8 128 129 129 130 130 131 131 132 132 ……………………

Columns 1021 through 1024 126 126 127 127

3、程序写好后,用黑纸吧EPROM27盖住,避免其受到强光照射,导致其中数据丢失。

四、上述三个关键步骤完成后,确认无误,连接波形发生器电路,确认连线无误后,连接电源与地,从运算放大器U741的6号管脚(OUT)接出至示波器,通过波形选择开关,在示波器上显示出正弦波、三角波、方波、阶梯波等四种波形。

【课程设计实验体会】

(1)本实验设计涉及数学及电路多方面知识,其核心是关于EPROM中对波量化后,电路对应EPROM相对地址提取数据方法试验设计中闫尽量在最大利用EPROM空间,提高波形精度基础上设计可变地址访问以及循环电路。笨电路用74LS161设计器扩展位数达到要求。

(2)电路中,对于3片74161扩展循环涉及中,利用进位控制实现总体上原理相对简单,而在连接电路并对其调试过程中遇到很多问题,比如在555定时器输出波形时发现其波形变化很大,频率不太稳定,选择适当电容可以解决问题。

(3)在整个实验验证过程中,输出波形幅度始终过小,可以对放大器D/A转换器电源提供解决。

(4)为了获得跟高的信号频率可以采取以下措施:1,减小波形数据存储空间M,2,采用读出频率更高的EPROM.

(5)降低信号频率的方法:1增加波形数据存储空间M,:2,降低振荡器频率;3,增加分频计位数n。

(6)综合高低频率要求,只有采用高频的EPROM和增加分频器位数比较合适。

8

【波形发生器电路实验电路图】

图(3) 波形发生器设计电路图

9

【附表】

采用汇编语言编写程序写入波形的数据

ORG 0000H JMP START

ORG 000BH ;定时器T0 入口 JMP Time_Int ORG 0030H START:

CONT1 EQU 30H ;外循环次数 CONT2 EQU 31H ;内循环次数 CONT3 EQU 32H ;外循环次数 CONT4 EQU 33H ;内循环次数 Line EQU 34H ;当前扫描行数 Row_Count EQU 35H ;总扫描列数 Key_Num EQU 36H ;键值

Read_Buf EQU 37H ;读入键值暂寸 ADD_0832 EQU 7FFFH ;DAC0832 地址 MOV R0,#04H ;默认是1KHz MOV R1,#05H ;默认是正弦波 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#03CH

MOV R2,#10 ;中断程序执行10 次R2变为0 SETB EA ;开中 SETB ET0 SETB TR0 ;以上完成初始化 CJNE R2,#00,Transform

Key_Scan_:CALL ScanKeyBoard ;定时中断时间到,调用键盘扫描程序

10

MOV R2,#10

;波形判断分支程序************************************ Transform: CJNE R1,#05H,KEY5;R0 是读入的键位值 AJMP Sin ;输出正弦波P0 KEY5: CJNE R1,#06H,KEY6 AJMP Triangle ;输出三角波 KEY6: CJNE R1,#07H,KEY7 AJMP Rectangle ;输出矩形波 KEY7: CJNE R1,#08H,KEY8 AJMP Trapezoid ;输出梯形波 KEY8: CJNE R1,#0AH,KEY10 AJMP Sawtooth ;输出锯齿波 KEY10: CJNE R1,#0BH,KEY11 KEY11: AJMP Pulse ;输出尖脉冲波; 正弦波开始

Sin: MOV R7,#00H;从第一个计数点0 开始 DISP_SIN: MOV A,R7 MOV DPTR,#SIN_TAB MOVC A,@A+DPTR MOV DPTR,#ADD_0832 MOVX @DPTR,A ;输出波形 CALL Delay_t0 CJNE R2,#00,DISP_SIN2 AJMP Key_Scan_ DISP_SIN2: INC R7 AJMP DISP_SIN

SIN_TAB: DB 80H,83H,86H,H,8CH,8FH,92H,95H ;256 点正弦表DB 98H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DB 0B0H,0B3H,0B6H,0B9H,0BCH,0BFH,0C1H,0C4H

11

DB 0C7H,0C9H,0CCH,0CEH,0D1H,0D3H,0D5H,0D8H DB 0DAH,0DCH,0DEH,0E0H,0E2H,0E4H,0E6H,0E8H DB 0EAH,0ECH,0EDH,0EFH,0F0H,0F2H,0F3H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FCH DB 0FDH,0FEH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FEH DB 0FDH,0FCH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H DB 0F6H,0F5H,0F3H,0F2H,0F0H,0EFH,0EDH,0ECH DB 0EAH,0E8H,0E6H,0E4H,0E2H,0E0H,0DEH,0DCH DB 0DAH,0D8H,0D5H,0D3H,0D1H,0CEH,0CCH,0C9H DB 0C7H,0C4H,0C1H,0BFH,0BCH,0B9H,0B6H,0B3H DB 0B0H,0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH DB 98H,95H,92H,8FH,8CH,H,86H,83H DB 80H,7CH,79H,76H,73H,70H,6DH,6AH DB 67H,63H,60H,5DH,5AH,57H,54H,51H DB 4FH,4CH,49H,46H,43H,40H,3EH,3BH DB 38H,36H,33H,31H,2EH,2CH,2AH,27H DB 25H,23H,21H,1FH,1DH,1BH,19H,17H DB 15H,13H,12H,10H,0FH,0DH,0CH,0AH DB 9H,8H,7H,6H,5H,4H,3H,3H DB 2H,1H,1H,0H,0H,0H,0H,0H DB 0H,0H,0H,0H,0H,0H,1H,1H DB 2H,3H,3H,4H,5H,6H,7H,8H DB 9H,0AH,0CH,0DH,0FH,10H,12H,13H DB 15H,17H,19H,1BH,1DH,1FH,21H,23H DB 25H,27H,2AH,2CH,2EH,31H,33H,36H DB 38H,3BH,3EH,40H,43H,46H,49H,4CH DB 4FH,51H,54H,57H,5AH,5DH,60H,63H DB 67H,6AH,6DH,70H,73H,76H,79H,7CH

12

;正弦波结束 ;三角波开始

Triangle: MOV DPTR,#ADD_0832 MOV R6,#80H

DISP_TRI1: MOV A,R6 MOVX @DPTR,A CALL Delay_t0 ;CALL Delay_t0 CJNE R2,#00,DISP_TRI3 AJMP Key_Scan_ DISP_TRI3: INC R6 INC R6

CJNE R6,#00H,DISP_TRI1 DISP_TRI2: DEC R6 DEC R6 MOV A,R6 MOVX @DPTR,A CALL Delay_t0 CJNE R2,#00,DISP_TRI4 AJMP Key_Scan_

DISP_TRI4: CJNE R6,#00H,DISP_TRI2 AJMP DISP_TRI1 ;三角波结束 ;矩形波开始

Rectangle: MOV R7,#00H ;先输出0号值MOV DPTR,#ADD_0832 DISP_REC1: MOV R6,#0FFH MOV A,R6 MOVX @DPTR,A

13

CALL Delay_t0 CALL Delay_t0 CJNE R2,#00,DISP_REC3 AJMP Key_Scan_ DISP_REC3: INC R7 CJNE R7,#80H,DISP_REC1 DISP_REC2: MOV R6,#00H MOV A,R6 MOVX @DPTR,A CALL Delay_t0 CALL Delay_t0 AJMP Key_Scan_ DISP_REC4: INC R7 CJNE R7,#0FFH,DISP_REC2 AJMP DISP_REC1 ;矩形波结束 ;梯形开始

Trapezoid: MOV DPTR,#ADD_0832 MOV R6,#00H

DISP_TRA1: MOV A,R6 ;从FF到00 MOVX @DPTR,A

CALL Delay_t0 ;步进为1个t0 INC R6 INC R6

CJNE R6,#0FEH,DISP_TRA1 MOV R7,#00H INC A ;调整

DISP_TRA2: MOVX @DPTR,A ;输出FF CALL Delay_t0 ;步进为2个t0

14

CJNE R2,#00,DISP_TRA4 AJMP Key_Scan_ DISP_TRA4: INC R7 INC R7

CJNE R7,#00H,DISP_TRA2;;; INC R6

DISP_TRA3: MOV A,R6 ;从FF到00 MOVX @DPTR,A

CALL Delay_t0 ;步进为1个t0 DEC R6 DEC R6

CJNE R6,#0FFH,DISP_TRA3 INC R6

AJMP DISP_TRA1 ;梯形结束 ;锯齿开始

Sawtooth: MOV DPTR,#ADD_0832 MOV R6,#0FFH

DISP_ST: MOV A,R6 ;从FF到00 MOVX @DPTR,A

CALL Delay_t0 ;步进为4个t0 CALL Delay_t0 CJNE R2,#00,DISP_ST1 AJMP Key_Scan_ DISP_ST1: DEC R6 AJMP DISP_ST ;锯齿结束 ;尖脉冲开始

Pulse: MOV DPTR,#ADD_0832

15

MOV R6,#0FFH

DISP_PULSE1: MOV A,R6 ;从FF到00 MOVX @DPTR,A

CALL Delay_t0 ;步进为1个t0 DEC R6 DEC R6

CJNE R6,#01H,DISP_PULSE1 MOV R7,#00H DEC A

DISP_PULSE2: MOVX @DPTR,A ;输出00 CALL Delay_t0 ;步进为2个t0 CJNE R2,#00,DISP_PULSE4 AJMP Key_Scan_ DISP_PULSE4: INC R7 INC R7

CJNE R7,#00H,DISP_PULSE2 DEC R6

DISP_PULSE3: MOV A,R6 ;从00到FF MOVX @DPTR,A

CALL Delay_t0 ;步进为1个t0 INC R6 INC R6

CJNE R6,#00H,DISP_PULSE3;;;; DEC R6

AJMP DISP_PULSE1 ;尖脉冲结束

;频率转移程序************************************** Delay_t0: CJNE R0,#04H,KEY4;R0 是读入的键位值 RET ;输出1KHz 波形

16

KEY4: CJNE R0,#03H,KEY3 AJMP t0_100Hz

KEY3: CJNE R0,#02H,KEY2 AJMP t0_10Hz

KEY2: CJNE R0,#01H,KEY1;默认输出1Hz 波形 KEY1: AJMP t0_1Hz t0_1Hz: MOV CONT1,#50 t0_Loop: MOV CONT2,#29 DJNZ CONT2,$ DJNZ CONT1,t0_Loop NOP RET

t0_10Hz: MOV CONT1,#31 DJNZ CONT1,$ NOP RET

t0_100Hz: MOV CONT1,#5 DJNZ CONT1,$ RET

;键盘扫描子程序********************************** ScanKeyBoard:

MOV Line,#11111011B ;第一行出0(P1.2=0) MOV Key_Num,#00H ;键盘初值 LP1: MOV A,Line MOV P1,A MOV A,P1

MOV Read_Buf,A ;暂寸读入数据,为消抖作准备 SETB C

MOV Row_Count,#04H ;总列数

17

LP2: RLC A JNC KEY

LP3: INC Key_Num ;无键按下,键值加1 DJNZ Row_Count,LP2 MOV A,Line SETB C

RRC A ;扫描下一行

MOV Line,A ;取回当前扫描值 JC LP1 ;未扫描完继续扫

RET ;无键按下,返回输出波形状态

KEY: LCALL Delay_10ms ;10ms 后壬为原值,说明确实有键按下MOV A,P1 XRL A,Read_Buf JNZ LP3

LP4: MOV A,P1 ;判断键是否已经放下 XRL A,Read_Buf JZ LP4 MOV A,Key_Num MOV DPTR,#TAB MOVC A,@A+DPTR CJNE A,#04H,CMPNEXT

Fre: MOV R0,A ;键值小于等于04h,是频率,键值送到R0 RET

CMPNEXT:JC Fre

MOV R1,A ;键值大于04h,是波形,键值送到R1 TAB: DB 01H,02H,03H,04H ;键盘值 DB 05H,06H,07H,08H DB 09H,0AH,0BH,0CH DB 0DH,0EH,0FH,00H

18

Delay_10ms: MOV CONT3,#1 ;延时防抖 Del_loop:MOV CONT4,#1 DJNZ CONT4,$ DJNZ CONT3,Del_loop RET

;定时中断入口********************************* Time_Int: CLR TR0 DEC R2 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 RETI

;****************************************************************** END

19

参 考 书 目

【1】 阎 石 《数字电子技术基础(第五版)》 高等教育出版社 2006年5月 【2】 谭浩强 《C程序设计(第三版)》 清华大学出版社 2005年 【3】 胡 健 《单片机原理及接口技术》 机械工业出版社 2004年10月

【4】 马忠梅,籍顺心,张凯,马岩 《单片机的C语言程序设计》

北京航空航天大学出版社 2003年9月

【5】 赵 晶 《Protel99se 高级应用》 人民邮电出版社 2002年4月 【6】 谢自美 《电子线路设计·设计·测试(第三版)》

华中科技大学出版社 2006年8月

【7】 郑学坚,周斌 《微型计算机原理及应用(第三版)》

清华大学出版 2001年

指导教师:赵庆平老师 学生:

信息学院 电子信息科学与技术 20081852031李传登 20081852033李 鹏 20081852036廖纯生 20081852062王树周 20081852066吴 桐 20081852073徐周泽 2010年6月20日

20

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务