摘要
这个系统是基于AT89C51单片机的波形信号发生器。使用AT89C51单片机作为控制核心,该系统由数字/模拟转换电路(DAC0832)、运放电路(OP07)、按键电路和6位数码管等组成。通过按键可控制方波、三角波、正弦波的产生,并且用数码管显示其对应的频率和波形的类型。这个设计方法简单、性能良好,这个系统可在多种需要低频信号的场所使用,它具有良好的实用性。
目 录
1总体方案设计 2
11 方案论证 1
12 系统描述 2
2单元模块设计 2
21 AT89C51功能介绍 3
22 时钟电路 4
23 复位电路 4
24 键盘控制电路 4
25 LED显示电路 5
251 数码管功能介绍 5
252 LED动态显示原理及电路 6
26 D/A转换及放大电路 7
261 DAC0832功能介绍 7
262 D/A转换电路 8
3系统调试 9
31 软件调试 9
311 三角波产生 9
312 方波产生 10
313 正弦波产生 11
314 键盘控制 12
315 LED显示 12
32 硬件调试 13
4系统功能介绍 14
5设计总结 15
参考文献 16
附录 17
1 总体方案设计
本次设计的任务是设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。示意图如下:
基本要求如下:
(1)具有产生正弦波、方波周期性波形的功能;
(2)输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz;
(3)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整;
(4)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
1.1 方案论证
方案一:采用单片函数发生器可产生正弦波、方波等,操作简单易行,用 D/A 转换器的输出来改变调节电压,可以实现数控调整频率,但产生信号的频率稳定度不高。
方案二:利用芯片组成的电路输出波形,MAX038是MAXIM公司生产的一个只需要很少外部元件的精密高频波形产生器,它能产生准确的高频正弦波、三角波、方波。输出频率和占空比可以通过调整电流、电压或电阻来分别地控制。所需的输出波形可由在A0和A1输入端设置适当的代码来选择,且具有输出频率范围宽、波形稳定、失真小、使用方便等特点。
方案三:采用Atmel公司的AT89C51单片机编程方法实现,该方案可以通过编程的方法控制信号波形的频率和幅度,而在硬件电路不便的情况下,通过程序实现频率的变化和输出波形的选择,并同时在显示器显示相应的结果。
方案一输出信号频率不够稳定;方案二成本高,程序复杂度高;方案三软硬件结合,硬件成本低,软件起点低,用汇编语言即可完成,优化型相对比较好,容易实现,且满足设计要求。综合考虑,我们采用了方案三,用AT89C51单片机设计多功能信号发生器,能够满足信号的频率稳定性和精度的准确性。
1.2 系统描述
本方案以AT89C51为控制核心,主要模块包括复位电路、时钟信号发生电路、键盘控制电路、D/A转化及LED显示电路,其原理框图如下:
图1 系统原理框图
2 单元模块设计2.1 AT89C51功能介绍
AT89C51引脚图如下:
图2 AT89C51引脚图
1.主电源引脚Vcc和GND
GND:接地。
Vcc:主电源+5V。
2.时钟电路引脚XTAL1和XTAL2
XTAL1、XTAL2为内部振荡器电路(反相放大器)的输入端和输出端,外接晶振电路。
3.控制引脚RST、ALE、PSEN、EA
RST:复位引脚输入高电平使89C51复位,返回低电平退出复位。
ALE:访问片外存储器时,ALE做锁存扩展地址低位字节的控制信号。
PSEN:外部程序存储器的读选通信号,低电平有效。
EA:程序存储器选择信号,当该端口输入高电平时,CPU执行片内程序存储器程序,当输入低电平时,CPU仅访问片外程序存储器。
4.输入/输出引脚
P0—P3是4个寄存器,是单片机与外界联系的4个8位双向并行I/O口,其中P3口还具有第二功能。
2.2 时钟电路
单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器,构成了内部振荡方式。由于单片机内部有一个高增益的反相放大器,当外接晶振后,就构成了自激振荡,并产生振动时钟脉冲。晶振通常选用 6MHZ、12MHZ、24MHZ。
本设计中时钟电路图如下图所示,我们选择24MHZ晶振分别接引脚XTAL1和XTAL2,电容 C1、C2均选择为30pF,对振荡器的频率有稳定作用。
图3 时钟电路
2.3 复位电路
复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来抑制噪声。复位电路通常采用上电自动复位和按钮复位两种方式。在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。本设计选择了按键复位如下图所示, 在系统运行时,按一下开关,就在RST断出现一段高电平,使时钟电路图中器件复位。此时ALE、PSEN、P0、P1、P2、P3输出高电平,在RST 上输入返回低电平以后,就退出复位状态开始工作。
图4 复位电路
2.4 键盘控制电路
键盘电路分为独立式按键和矩阵式键盘,为了简化程序,我们采用了独立式键盘。独立式按键是指直接用I/O口线构成的单个按键电路。每个独立式按键单独占有一根I/O口线,每根I/O口线的工作状态不会影响其他I/O口线的工作状态,这是一种最简单易懂的按键结构。电路图如下所示:
图5 键盘输入电路
2.5 LED显示电路2.5.1 数码管功能介绍
数码管的外形结构如下图所示,由图可见它由8个发光二极管构成,通过不同的组合用来显示0—9,A—F及小数点“.”等符号。数码管通常有共阴极和共阳极两种型号,共阴极数码管的发光二极管阴极必须接低电平,当某发光二极管的阳极为高电平(一般为+5V)时,此二极管点亮;共阳极数码管的发光二极管是阳极并接到高电平,对于需点亮的发光二极管使其阴极接地电平即可(一般接地)。显然,要显示某字形就应使此字形的相应字段点亮,实际就是送不同电平组合代表的数据至数码管。这种装入数码管显示字形的数据称字形码。
图6 数码管原理图
要使数码管显示不同的数字或者字符,需要使端口输出相应的字型码,显示器的字形与字码关系如下图所示:
图7 段码表
2.5.2 LED动态显示原理及电路
LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
本次设计采用6位共阴极数码管,选取AT89C51的P0口作为信号输出端口,并外接两片锁存器74HC573,用于驱动数码管,其中一片作为数码管的段选信号输入端,另一片作为数码管的位选信号输入端,选取AT89C51的P2.6和P2.7分别作为两片锁存器的片选信号输入端,电路图如下所示:
图8LED显示电路
2.6 D/A转换及放大电路2.6.1 DAC0832功能介绍
DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。其引脚图如下所示:
图9 DAC0832引脚图
关于DAC0832的引脚功能如下:
D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
RFB:是集成在片内的外接运放的反馈电阻。
VREF:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地。
NGND:数字地,可与AGND接在一起使用。
2.6.2 D/A转换电路
由于单片机输出的是数字信号,因此要得到模拟信号的波形就必须对其进行数模转换。我们采用了DAC0832数模转换器,由于其输出为电流输出,需要外加运算放大器OP07使之装换为电压输出,最后通过示波器显示输出的波形。我们选取了AT89C51的P1口作为波形数字信号的输出端口,电路图如下所示:
图10 D/A转换电路
3 系统调试
本次设计的系统仿真在Proteus软件中进行,并采用汇编语言进行程序的编写。
3.1 软件调试3.1.1 三角波产生
(1)输出波形如下图所示:
图11 三角波仿真图
(2)三角波程序如下:
TRI: CJNE R7,#0FFH,GO1
CLR 20H
GO1: CJNE R7,#00H,GO2
SETB 20H
GO2: JNB TF1,GO3
CLR TF1
JB 20H,GO4
DEC R7
SJMP GO6
GO4: INC R7
GO6: MOV P1,R7
LCALLDISPLAY
GO3: MOV A,P3
ORL A,#1FH
CPL A
JZ GO5
LCALL DELAY
MOV A,P3
ORL A,#1FH
CPL A
JZ GO5
LJMPCHANGESTATE
GO5: LJMP TRI
3.1.2 方波产生
(1)输出波形如下图所示:
图12 方波仿真图
(2)方波程序如下:
REC:JNB TF1,GG1
CLR TF1
DJNZ R2,GG2
MOV R2,#0FFH
CPL 20H
GG2:JB 20H,GG3
MOV P1,#00H
SJMP GG4
GG3:MOV P1,#0FFH
GG4:
GG1:MOV A,P3
ORL A,#0FH
CPL A
JZ GG5
LCALL DELAY
MOV A,P3
ORL A,#0FH
CPL A
JZ GG5
GG5:LJMP REC
3.1.3 正弦波产生
(1)输出波形如下图所示:
图13 正弦波仿真图
(2)程序如下:
SIN: JNB TF1,G1
CLR TF1
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
G1: MOV A,P3
ORL A,#1FH
CPL A
JZ G2
MOV A,P3
ORL A,#1FH
CPL A
JZ G2
G2: LJMP SIN
3.1.4 键盘控制
通过按键的控制,可以实现波形的相互转换和调频的功能。P3.5和P3.6端口的键盘分别实现频率的加减功能,P3.7端口的键盘实现波形之间的相互转换。其仿真效果如下图所示:
图14 波形转换仿真图
3.1.5 LED显示
本次设计采用6位数码管实现显示功能,其中前3位用于显示波形的类型,REC代表方波,SIN代表正弦波,TRI代表三角波;后3位用于显示波形的频率。其仿真效果如下图所示:
图15 LED仿真图
3.2 硬件调试
本次设计的硬件电路调试结果如下图所示:
图16 硬件效果图
4 系统功能介绍
本次设计的电路可实现以下三大功能:
(1)波形产生
本次设计电路可产生方波、三角波、正弦波三种波形,而且通过键盘控制可以实现三种波形之间的相互转换和频率调节的功能。
(2)LED显示
本次设计的显示功能通过6位数码管实现,可以显示三种波形的类型和频率。
(3)键盘控制
本次设计的电路具有键盘控制功能,可以进行三种波形之间的任意转换和波形频率的调节,并可以将改变后的结果实时地显示在在数码管上。
5 设计总结
我们小组此次的设计题目是波形发生器的设计,通过小组成员将近一个月的努力,并按照本次电子设计竞赛的相关要求,最终完成此次设计。在此次设计中收获颇多,主要有以下几点:
(1)通过对电路的设计,对51系列单片机的原理和功能有了进一步的了解,对之前学过的书本上的电路知识有了更深刻的体会,如复位电路的原理,晶振电路的作用,上拉电阻的功能,LED显示电路的原理等,熟悉了DAC0832芯片的原理和功能,并且能对其进行应用。
(2)通过原理图的绘制,学会了Proteus软件的使用,并且能用它完成一些简单的电路设计,对常用的一些元器件有了一定的了解和认识。
(3)本次设计的硬件电路相对简单,核心部分是程序的编写,考虑到汇编语言与硬件电路联系比较紧密,我们组通过讨论最终选取汇编语言进行程序的编写,方便后期调试过程查找错误。在软件和硬件的调试阶段遇到很多的问题,如LED显示乱码、闪烁、波形失真等,通过不断的查找错误,对程序进行相应的修改,使其达到设计的要求,在这个过程中,认识到有时候一个简单的错误就有可能造成电路无法正常工作,可谓“失之毫厘,差之千里”,培养了我们严谨细致的工作态度,同时对电路的的工作原理有了更深刻的认识。
(4)在本次电路设计的过程中,深刻体会到对于一个功能较为复杂的系统设计,一定要学会划分功能模块,逐个实现,最终再进行整合,切不可眉毛胡子一把抓,那样不仅操作起来麻烦,效率低,而且容易出错。
(5)“纸上得来终觉浅,绝知此事要躬行”,通过本次电子设计竞赛,深刻体会到理论联系实践的重要性,要学会活学活用。同时,在实践的过程中,也可以加深对理论知识的认识,提高动手能力。
(6)通过本次电子设计竞赛,我更加深刻的认识到团队合作的重要性,小组成员分工合作,是设计成功的关键,只有大家团结一致,才能更快更好的完成任务。
我们此次的设计基本满足设计的要求,当然还是存在不足的地方,例如当频率过小的时候波形会有些失真,波形的频率调节范围比较小,D/A转换器转换时可以加一个锁存器,放大电路设计上还有待进一步改进,使其具有更强的输出能力等。
参考文献
[1] 康华光.电子技术基础模拟部分.第五版.北京:高等教育出版社,2011.11
[2] 邱关源.电路.第五版.北京:高等教育出版社,2011.12
[3] 阎石.数字电子技术基础.第五版.北京:高等教育出版社,2012.11
[4] 张迎新.单片微型计算机原理.第二版.国防工业出版社,2009.5
[5] 周润景.Proteus入门实用教程.第二版.机械工业出版社,2011.11
附录
1 系统原理图
2 主程序
ORG 0000H
lJMP MAIN
MAIN:
MOV TMOD,#20H
MOV R0,#02H
MOV A,#0FFH
MOV P3,A
MOV A,#70H
MOV SP,A
MOV R6,#0FFH
REMAIN:CLR TR1
MOV TH1,R6
SETB TR1
LCALL JM
CJNE R0,#01,SHIFT
TRI: CJNE R7,#0FFH,GO1
CLR 20H
GO1: CJNE R7,#00H,GO2
SETB 20H
GO2: JNB TF1,GO3
CLR TF1
JB 20H,GO4
DEC R7
SJMP GO6
GO4: INC R7
GO6: MOV P1,R7
LCALL DISPLAY
GO3:
MOV A,P3
ORL A,#1FH
CPL A
JZ GO5
LCALL DELAY
MOV A,P3
ORL A,#1FH
CPL A
JZ GO5
LJMP CHANGESTATE
GO5: LJMP TRI
SHIFT:JC SIN1
REC:JNB TF1,GG1
CLR TF1
DJNZ R5,GG2
MOV R5,#0FFH
CPL 20H
GG2:JB 20H,GG3
MOV P1,#00H
SJMP GG4
GG3:MOV P1,#0FFH
GG4:LCALL DISPLAY
GG1:MOV A,P3
ORL A,#1FH
CPL A
JZ GG5
LCALL DELAY
MOV A,P3
ORL A,#1FH
CPL A
JZ GG5
LCALL CHANGESTATE
GG5:LJMP REC
SIN1:NOP
MOV DPTR,#TABSIN
SIN: JNB TF1,G1
CLR TF1
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
LCALL DISPLAY
G1: MOV A,P3
ORL A,#1FH
CPL A
JZ G2
LCALL DELAY
MOV A,P3
ORL A,#1FH
CPL A
JZ G2
LCALL CHANGESTATE
G2: LJMP SIN
CHANGESTATE:
JB P3.7,GOTO1
INC R0
CJNE R0,#03H,GOTO1
MOV R0,#00H
GOTO1: JB P3.6,GOTO2
INC R6
GOTO2: JB P3.5,GOTO3
DEC R6
GOTO3: MOV A,P3
CPL A
JNZ GOTO3
LJMP REMAIN
JM:MOV DPTR,#TABNUM
MOV A,R6
MOV B,#100
DIV AB
MOVC A,@A+DPTR
MOV 14H,A
MOV A,B
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 15H,A
MOV A,B
MOVC A,@A+DPTR
MOV 16H,A
MOV DPTR,#TABWM
MOV A,R0
MOV B,#03H
MUL AB
MOV 10H,A
MOVC A,@A+DPTR
MOV 11H,A
INC DPTR
MOV A,10H
MOVC A,@A+DPTR
MOV 12H,A
MOV A,10H
INC DPTR
MOVC A,@A+DPTR
MOV 13H,A
RET
DISPLAY:
SETB P2.6
MOV P0,11H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0FEH
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
SETB P2.6
MOV P0,12H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0FDH
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
SETB P2.6
MOV P0,13H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0FBH
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
SETB P2.6
MOV P0,14H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0F7H
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
SETB P2.6
MOV P0,15H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0EFH
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
SETBP2.6
MOV P0,16H
CLR P2.6
MOV P0,#0FFH
SETB P2.7
MOV P0,#0DFH
CLR P2.7
MOV P0,#0FFH
LCALL DELAY
RET
DELAY:MOV R2,#0FFH
MOV R3,#1
LOOP:
DJNZ R3,LOOP
MOV R3,#2
DJNZ R2,LOOP
RET
TABNUM: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
TABWM: DB 6DH,06H,37H,07H,77H
DB 30H,77H,79H,39H
TABSIN:
DB 80H,83H,86H,89H,8DH,90H,93H,96H
DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
DB 96H,93H,90H,8DH,89H,86H,83H,80H
DB 80H,7CH,79H,78H,72H,6FH,6CH,69H
DB 66H,63H,60H,5DH,5AH,57H,55H,51H
DB 4EH,4CH,48H,45H,43H,40H,3DH,3AH
DB 38H,35H,33H,30H,2EH,2BH,29H,27H
DB 25H,22H,20H,1EH,1CH,1AH,18H,16H
DB 15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB 09H,08H,07H,06H,05H,04H,03H,02H
DB 02H,01H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,01H,02H
DB 02H,03H,04H,05H,06H,07H,08H,09H
DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB 16H,18H,1AH,1CH,1EH,20H,22H,25H
DB 27H,29H,2BH,2EH,30H,33H,35H,38H
DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB 51H,55H,57H,5AH,5DH,60H,63H,66H
DB 69H,6CH,6FH,72H,76H,79H,7CH,80H
END
|