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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

淮北师范大学
课程设计成果报告
课程设计名称:数字式波形发生器的设计
院别:信息学院
年级专业:2008级电子信息科学与技术
小组成员:20081852031 李传登
20081852033 李鹏
20081852036 廖纯生
20081852062 王树周
20081852066 吴桐
20081852073 徐周泽
指导教师赵庆平老师
日期2010年6月20日
【数字式波形发生器工作原理】
一、波形发生器原理框图如图(1)所示
图(1) 波 形 发 生 器 原 理 框 图
二、直接地址计数器产生方法
工作过程是,假设如果计数器的位数为N 位(模值=2N ),则把波形的一个周期分为2N 个等间距数据点(称之为抽样点)并存入数据存储器。

地址计数器不断地进行循环计数,就会产生出每一个周期为2N 个固定点的波形。

该方法的特点是:每一个波形周期的点数是固定的,每一个周期内,点与点之间的相位间隔相同。

但是,两个相邻周期波形之间的相邻两个点的相位间隔与其它点之间的相位间隔有可能会不相同。

当计数器的位数N 增大时,这种相邻间隔的误差就可以忽略不计了。

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

下面假设地址计数器的标准时钟频率为f
r
,计数器的位数为N 位,一个周期
的波形点数为M 个,输出波形的频率为
f
,则输出波形的频率
f
与时钟频率
f
r

M 的关系式为:
M
f
f
r
=
从上式可知,若
f
r
为一固定值时,波形的最小频率是:
)(2
2
min
0N
N
r M f
f
=
=
由于波形的最高频率受到奈奎斯特抽样定理的限制,即至少每一周期要抽样两个点,所以可得输出波形的最大频率是:
)2(2
max
0==
M f
f
r
【波形发生器设计中应考虑的几个问题】
一、D/A 转换器的指标
波形发生器的特性很大程度上取决于D/A 转换器的性能。

性能指标主要有D/A 的转换速率和分辨率(位数)。

通常,告诉D/A 的分辨率较低,目前常采用的有8位、10位和12位的D/A 转换器。

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

因此,应选择适合的分辨率的D/A 转换器。

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

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

RAM 存储方式可以通过计算机改变波形点数和分频系数两个参数来改变波形的频率。

RAM 存储器与计算机实现波形发生器的原理框图如图(2)所示。

图(2) 计算机控制实现波形发生器的原理框图
(2)只读存储器EPROM
如果设计的波形发生器只要求实现集中确定的波形时,可预先利用EPROM 编程器写好各种波形的数据表,然后通过计数器查表来产生波形。

EPROM 存储的波形数据不能改变,因此信号频率的改变靠改变分频系数来实现。

EPROM 存储方式的波形发生器电路结构简单
本实验选用EPROM 只读存储器。

【波形发生器实现电路】
一、波形数据存储表
波形发生器产生的各种波形数据存储在存储器中,电路中的存储器选用2764EPROM,存储容量为8K x 8。

本设计电路的存储器只存了四种波形的数据表,每一种波形用1K个存储单元存储一个周期,公用4K个内存,其余4K可供扩展波形种类使用。

四种波形的数据表地址和对应的存储单元内容如下表(1)
所示。

从表中可以看出每一种波形的高三位地址A12、A11、A10不变,只有
A9~A0十位地址从全0变为全1。

表(1)四种波形的数据表地址及对应的存储单元内容
二、地址计数器电路
地址计数器由三块74161构成最大模值为1024的计数器。

地址计数器从0000000000B计到全1111111111B,可循环产生1K个地址。

对4K个波形寻址时EPROM的A12可直接接地,只要用开关S1、S2选择A11、A10从00到11,就可以实现四种波形的选择输出。

【实验所需元器件管脚图】
一、555定时器管脚图
二、2764EPROM管脚图
三74LS161管脚图
四、u741管脚图
五、DAC0832管脚图
【实验步骤】
一、555定时器构成的多谐振荡器输出测试
1、连接好多谐振荡器,从555定时器的3号引脚可以观测到输出的波形;
2、调节电位器R p,并观察输出的波形,时电路输出标准时钟信号脉冲,此脉冲将作为计数器的74161的脉冲输入信号。

二、检验计数器的计数功能
1、在计数电路的三个74161的输出与低电平之间各接上一个发光二极管,提供脉冲信号,观察发光二极管的亮与灭情况;
2、理论上,发光二极管的亮与灭的情况为(以1代表亮,以0代表灭)0000000000、0000000001、0000000010、0000000011、0000000100、0000000101 …………………………………………………………………………………………1111111010、1111111011、1111111100、1111111101、1111111110、1111111111
循环计数。

三、在EPROM2764里写入数据
1、擦除EPROM2764中的数据。

然后把编号的程序写入;
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
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、程序写好后,用黑纸吧EPROM2764盖住,避免其受到强光照射,导致其中数据丢失。

四、上述三个关键步骤完成后,确认无误,连接波形发生器电路,确认连线无误后,连接电源与地,从运算放大器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和增加分频器位数比较合适。

【波形发生器电路实验电路图】
图(3)波形发生器设计电路图
【附表】
采用汇编语言编写程序写入波形的数据
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 ;定时中断时间到,调用键盘扫描程序
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,89H,8CH,8FH,92H,95H ;256 点正弦表DB 98H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B0H,0B3H,0B6H,0B9H,0BCH,0BFH,0C1H,0C4H
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,89H,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
;正弦波结束
;三角波开始
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
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
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
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 波形
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 ;总列数
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
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
参考书目
【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日。

相关文档
最新文档