低频多波形函数信号发生器.docx
- 文档编号:10848377
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:34
- 大小:88.44KB
低频多波形函数信号发生器.docx
《低频多波形函数信号发生器.docx》由会员分享,可在线阅读,更多相关《低频多波形函数信号发生器.docx(34页珍藏版)》请在冰豆网上搜索。
低频多波形函数信号发生器
茂名学院
单片机课程设计
课程名称:
低频多波形函数信号发生器
班级:
姓名:
学号:
指导老师:
陈政石
低频多波形函数信号发生器
1设计任务和要求
1.1设计任务
能实现矩形波、锯齿波、正弦波、三角波、梯形波模拟量输出,幅值/频率连续可调;画出完整硬件电路图(包括键盘显示(功能键、数字键,显示数字、状态等)扩展电路);编写出完整的控制程序。
1.2要求说明
(1)单片机可采用8031、8051、AT89C51、AT89C52、fosc=6MHz。
扩展电路根据每个题目的任务功能具体需要选择相关IC电路芯片,完整系统电路还应包括时钟电路,复位电路,系统RAM、ROM,键盘显示等。
(2)编写程序要以模块化结构,如分初始化主程序、键扫子程序、显示子程序及其他功能子程序等。
2硬件系统原理
2.1波形发生器原理框图
DAC0832
图1原理框图
2.2单片机系统
该系统板上的单片机系统把全部的I/O端口资源提供出来,因此,在实际应用的时候,可以灵活地组合成不同的单片机应用系统,该单片机采用12MHZ晶振,232电平转换采用MAX232芯片把TTL电平转换成RS-232电平格式,可以用于单片机与微机通信,以及单片机与单片机之间的通信,在该系统板上提供了DB9的接口,用ISP下载器模块的程序下载接口完成源程序代码下载到AT89S51芯片中,它需要和微机上的ISP下载器软件配合使用来完成这样的功能。
具体的电路原理图如图2所示
图2单片机系统板
2.34×4行列式键盘模块
行列式键盘也即矩阵式键盘,它由行和列组成,在每个行列的交叉点上放置一个按键,这样4×4行列式键盘共需要16个键盘组成。
该模块实现人机对话输入,按不同键时可以实现不同的功能。
具体的电路原理图如图3所示:
图3.4键盘模块
图34×4行列式键盘模块
矩形式键盘的工作过程
1、单片机先使行线R4线为低,其余行线为“0”状态,其余行均为“1”状态。
2、单片机读入输入缓冲器的状态,以确定哪条列线为“0”状态。
如此时,若R1为“0”状态,则为“0”键压下;等等。
3、若输入缓冲器的状态全部为“1”状态,则单片机继续使行线R3为低,其余行线为高,再读入输入缓冲器的状态,以确定哪条列线为“0”状态,从而判断是哪个键压下。
4、当判断出哪个键压下之后,程序转入相应的键处理程序。
我们将这样的工作过程,称为键扫描,键扫描的方式有:
程序扫描方式:
单片机的控制一旦进入监控程序,将反复不断地扫描键盘,等待输入命令或数据。
定时扫描方式:
在初始化程序中对定时器/计数器进行编程,使之产生10ms的定时中断,单片机响应定时中断,执行中断服务程序,对键盘扫描一遍,检查键盘的状态,实现对键盘的定时扫描。
当两遍扫描到键位上都有键压下(延迟正好为8ms)时,单片机才作键处理
2.4DAC0832引脚及其功能
图4DAC0832引脚
DAC0832是双列直插式8位D/A转换器。
能完成数字量输入到模拟量(电流)输出的转换。
图1-1为DAC0832的引脚图。
其主要参数如下:
分辨率为8位,转换时间为1μs,满量程误差为±1LSB,参考电压为(+10~-10)V,供电电源为(+5~+15)V,逻辑电平输入与TTL兼容。
从图4中可见,在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号/XFER。
图4中,当ILE为高电平,片选信号/CS和写信号/WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。
此后,当/WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。
对第二级锁存来说,传送控制信号/XFER和写信号/WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当/WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。
图4中其余各引脚的功能定义如下:
(1)、DI7~DI0:
8位的数据输入端,DI7为最高位。
(2)、IOUT1:
模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0。
(3)、IOUT2:
模拟电流输出端2,IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。
(4)、RFB:
反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。
(5)、VREF:
参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。
VREF端与D/A内部T形电阻网络相连。
(6)、Vcc:
芯片供电电压,范围为(+5~15)V。
(7)、AGND:
模拟量地,即模拟电路接地端。
(8)、DGND:
数字量地。
2.5液晶显示模块和AT89S51连接
LCD1602的数据端与AT89S51单片机的P0口连接,EN、R/W和RS分别与P2.0、P2.1、P2.2连接。
图5液晶显示模块
1602液晶模块内部的控制器共有11条控制指令,如表1所示,
指令说明
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清除显示幕
0
0
0
0
0
0
0
0
0
*
光标回到原点
0
0
0
0
0
0
0
0
1
*
进入模式设定
0
0
0
0
0
0
0
1
I/D
S
显示幕ON/OFF
0
0
0
0
0
0
1
D
C
B
移位
0
0
0
0
0
1
S/C
R/L
*
*
功能设定
0
0
0
0
1
DL
N
F
*
*
字发生器地址设定
0
0
0
1
ACG
设置显示地址
0
0
1
ADD
忙碌标志位BF
0
1
BF
显示数据
1
0
写入数据
读取数据
1
1
读出数据
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据
指令11:
读数据
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表1602的内部显示地址。
16×216字2行
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
2.6整体设计电路
图6整体设计电路
用AT89S51作主控制器,有16×16的键盘输入,用以设计频率、幅值和波形输入选择,液晶显示输出波形的类型、频率和幅值,DA0832输出模拟量。
3软件系统原理
3.1设计思想
1、将一个周期T的信号分离成32个点(按X轴等分),每两点之间间隔为△T,用单片机的定时器产生,如下式所示:
△T=T/32
如果单片机的晶振为12MHz,采用定时器方式0,则定时器的初值为:
A
X=213-△T/Tm(其中Tm为机器周期)
Y
定时时间常数为:
Y
TL=(8192-△T)MOD32(其中△T的单位为US)
TH=(8192-△T)/32
△T
MOD32表示除32取余数
例如:
一个100HZ的信号,其定时时间常数为:
图7正弦波的模拟信号分离
△T
O
TL=(8192-T/32)MOD32=08H
TH=(8192-T/32)/32=0F6H
2、正弦波的模拟信号分离如图7所示(其他波形的信号分离图略),图中Y是D/A转换器的模拟量输出,其计算公式为:
Y=(A/2sin△t)+A/2(其中A=VREF)
△t=N△T(N=1~32)
那么对应着存放在单片机的这一点的数据为:
幅值的设置:
从各个波形表中查出每点对应的数值,查出点的最大值是5V。
根据幅值要求算出真实输出是值。
设该点是X,真实输出是值X/(6-5),其指今是MOVB,VARM
DIVABMOVP3,A
3、一个周期被分离成32个点,对应的波形的32个数据如下正弦波的设计(其他波形分离原理与正弦波相似)
SIN1:
MOVDPTR,#SIN_TAB
MOVA,R6
MOVCA,@A+DPTR
MOVB,VARM
DIVAB
MOVP3,A;DA转换
MOVA,R6
INCA
MOVR6,A
CJNEA,#32H,SIN
MOVR6,#00H
SIN:
RETI
SIN_TAB:
DB98H,0B0H,0C6H,0D9H,0E9H,0F5H,0FCH,0FFH
DB0FCH,0F5H,0E9H,0D9H,0C6H,0B0H,98H,7FH
DB66H,4EH,38H,25H,15H,0AH,02H,00H
DB02H,0AH,15H,25H,38H,4EH,66H,7FH
3.2DAC0832原理
图8为单片机和DAC0832直通方式输出连接图,运放输出电路输出电压为UOUT=-(D/256)*VREF,例如上图中向DAC0832传送的8位数据量40H(01000000B),则输出电压UOUT=-(64/256)*5V=-1.25V,其输出过程可用MOVP3,#40H一条指令完成。
图8单片机和DAC0832直通方式输出连接图
3.3键盘扫描
P1.7P1.6P1.5P1.44个步骤:
P1.31.P1.3=0行扫描初值
P1.22.P1左移检测列
P1.13.P1右移扫描行
P1.04.计数指针至TABLE取码
L1:
MOVR3,#0F7H
MOVR1,#00H
L2:
MOVA,R3
MOVP1,A
MOVA,P1
MOVR4,A
SETBC
MOVR5,#04H
L3:
RLCA
JNCKEYIN
INCR1
DJNZR5,L3
MOVA,R3
SETBC
RRCA
MOVR3,A
JCL2
AJMPL1
3.4程序流程图
程序主流程图如图9所示。
主程序主要完成系统初始化,开中断,循环等待;T0中断服务子程序主要完成键盘操作、显示、输出控制等功能。
限于篇幅,本程序其他波形段省略。
开始
初始化
键盘扫描
按键码值
按功能键
Y
Y
按数字键
按数字键
设频率参数
设电压参数
判断波形
中断设置
显示幅值
显示频率值
设波形值
图9主流程图
程序中断服务流程图如图10所示。
中断时间对应频率的设置。
限于篇幅。
Y
Y
Y
Y
Y
N
N
N
返回
N
D/A转换
D/A转换
D/A转换
D/A转换
D/A转换
幅值计算
图10中断服务流程图
使用说明书
1、键盘
A
0
B
C
7
8
9
D
4
5
6
E
1
2
3
F
2、键盘功能说明
0——9:
为数字键频率和电压值的设定;
A键:
功能键切换频率与电压值设定;
B键:
正弦波输出;
C键:
三角波输出;
D键:
方波输出;
E键:
齿锯波输出;
F键:
梯形波输出;
收获和体会
首先,衷心感谢我的指导教师陈政石老师。
扎实的专业知识、活跃的学术思想、严谨的治学态度、求实的工作作风、清晰的指导思路,通过面授和通信等多种方式,给予我多次耐心的指导。
设计的难点:
频率和幅值的设置是设计的难点,开始的时候没有想通定时器定时的原理,不知道应该怎么着手,教材和网上也没有找到相关的资料,所以想了很久。
后来跟同学共同研究才找到了方法。
体会:
在设计整个低频多波形函数信号发生器的设计过程中,我从中学到了不少东西,更深一步掌握了AT89S51单片机、DAC0832、键盘和液晶显示的应用。
电路虽然简单,但焊接起来还是有一定的难度经常有管脚接错的地方,说明对芯片使用不够熟练,在今后我能多加练习。
通过使用51学习板对自己所设计的程序进行调试,在调试过程中能够分析出现的出错原因并及时对其进行修改,总结出最佳的方案。
自己从中也学到了不少知识,特别是跟据液晶显示的功能表来编程序,这在课本中根本没有提及,进一步了解单片机定时器的应用。
该程序比较难实现的是频率输出的切换,经过多次的思考结合的方案,调节方便。
幅值调节是容易实现,只是把最大值除以对应值。
掌握低频多波形函数信号发生器的设计方法,加强了理论知识与实践统一的能力,加强了自己的动手操作能力,为以后的电路设计打好基础。
实验源程序
;多功能波形发生器程序:
可调幅度,可调频率,液晶显示
;日期:
2006.12.25
RSBITP2.0
RWBITP2.1
EBITP2.2
VARMEQU40H;幅值变量
VARFEQU41H;频率变量
VART1EQU42H
VART2EQU43H
ORG00H
AJMPMAIN
ORG0BH
AJMPTIM0
ORG100H
MAIN:
MOVSP,#70H
MOVP0,#01H
LCALLENABLE
MOVP0,#38H
LCALLENABLE
MOVP0,#0FH
LCALLENABLE
MOVP0,#06H
LCALLENABLE
MOVP0,#80H
LCALLENABLE
MOVDPTR,#TABLE0
LCALLWRITE1
MOVP0,#0C0H
LCALLENABLE
MOVDPTR,#TABLE1
LCALLWRITE1
MOVR5,#50;显示xwellchen
DELAYD:
LCALLDELAY1;延时5s
DJNZR5,DELAYD
MOVP0,#80H
LCALLENABLE
MOVDPTR,#DISP1
LCALLWRITE1
MOVP0,#0C0H
LCALLENABLE
MOVDPTR,#TABLE2
LCALLWRITE1
MOV33H,#35H
MOVVARM,#01H;设置5V
MOV39H,#20H;显示10Hz
MOV3AH,#20H
MOV3BH,#31H
MOV3CH,#30H
MOVTMOD,#00H;定时器初始化
MOVVART1,#15H;设置10HZ定时时间
MOVVART2,#9EH
SETBET0
SETBEA
;================================
;功能键扫描
;================================
KEY:
MOVP0,#01H;显示初值
LCALLENABLE
MOVP0,#80H
LCALLENABLE
MOVDPTR,#DISP1
LCALLWRITE1
LCALLDISPLAY
KEY1:
LCALLL1;调用键盘
MOVR0,A
MOVA,R0
CJNEA,#41H,K1
LJMPSETVAR;设置幅度
K1:
MOVA,R0
CJNEA,#42H,K2
LJMPSINE;正弦波
K2:
MOVA,R0
CJNEA,#43H,K3
LJMPSQUARE;方波
K3:
MOVA,R0
CJNEA,#44H,K4
LJMPTRIANGLE;三角波
K4:
MOVA,R0
CJNEA,#45H,K5
LJMPECHELON;梯形波
K5:
MOVA,R0
CJNEA,#46H,K6
LJMPSAWTOOTH;锯齿
K6:
JMPKEY
;---------------------
;设置幅值
;---------------------
SETVAR:
MOVP0,#01H;显示幅值设置
LCALLENABLE
MOVP0,#80H
LCALLENABLE
MOVDPTR,#TABLE4
LCALLWRITE1
LCALLDISPLAY
KEY2:
LCALLL1;调用键盘扫描
MOVR0,A
MOVA,R0
CJNEA,#41H,KR1
LJMPSETVARF;设置频率
KR1:
MOVA,R0
CJNEA,#42H,KR2
LJMPSINE;正弦波
KR2:
MOVA,R0
CJNEA,#43H,KR3
LJMPSQUARE;方波
KR3:
MOVA,R0
CJNEA,#44H,KR4
LJMPTRIANGLE;三角波
KR4:
MOVA,R0
CJNEA,#45H,KR5
LJMPECHELON;梯形波
KR5:
MOVA,R0
CJNEA,#46H,KR6
LJMPSAWTOOTH;锯齿
KR6:
MOVA,R0
MOV33H,A;幅值设置
LCALLDISPLAY
MOVA,#36H
CLRC
SUBBA,33H
MOVVARM,A
AJMPSETVAR
;----------------------
;设置频率
;---------------------
SETVARF:
MOVP0,#01H;显示频率设置
LCALLENABLE
MOVP0,#80H
LCALLENABLE
MOVDPTR,#TABLE5
LCALLWRITE1
LCALLDISPLAY
KEY3:
LCALLL1
MOVR0,A
MOVA,R0
CJNEA,#41H,KF1
LJMPKEY;返回
KF1:
MOVA,R0
CJNEA,#42H,KF2
LJMPSINE;正弦波
KF2:
MOVA,R0
CJNEA,#43H,KF3
LJMPSQUARE;方波
KF3:
MOVA,R0
CJNEA,#44H,KF4
LJMPTRIANGLE;三角波
KF4:
MOVA,R0
CJNEA,#45H,KF5
LJMPECHELON;梯形波
KF5:
MOVA,R0
CJNEA,#46H,KF6
LJMPSAWTOOTH;锯齿
KF6:
MOVA,R0
CJNEA,#31H,KF7
LJMPK10H;输出10Hz
KF7:
MOVA,R0
CJNEA,#32H,KF8
LJMPK100H;输出100Hz
KF8:
MOVA,R0
CJNEA,#33H,KF9
LJMPK200H;输出200Hz
KF9:
MOVA,R0
CJNEA,#34H,KFA
LJMPK500H;输出500Hz
KFA:
MOVA,R0
CJNEA,#35H,KFB
LJMPK1K;输出1KHz
KFB:
AJMPSETVARF;键盘扫描子程序
L1:
MOVR3,#0F7H
MOVR1,#00H
L2:
MOVA,R3
MOVP1,A
MOVA,P1
MOVR4,A
SETBC
MOVR5,#04H
L3:
RLCA
JNCKEYIN
INCR1
DJNZR5,L3
MOVA,R3
SETBC
RRCA
MOVR3,A
JCL2
AJMPL1
KEYIN:
MOVR7,#60
D2:
MOVR6,#248
DJNZR6,$
DJNZR7,D2
D3:
MOVA,P1
XRLA,R4
JZD3
MOVA,R1
MOVDPTR,#TABLE3
MOVCA,@A+DPTR
RET
K10H:
MOV39H,#20H;显示10HZ
MOV3AH,#20H
MOV3BH,#31H
MOV3CH,#30H
LCALLDISPLAY
MOVVART1,#15H;设10HZ定时
MOVVART2,#9EH
AJMPSETVARF
K100H:
MOV39H,#20H;显示100HZ
MOV3AH,#31H
MOV3BH,#30H
MOV3CH,#30H
LCALLDISPLAY
MOVVART1,#08H;设100HZ定时
MOVVART2,#0F6H
AJMPSETVARF
K200H:
MOV39H,#20H
MOV3AH,#32H
MOV3BH,#30H
MOV3CH,#30H
LCALLDISPLAY
MOVVART1,#03H;设200HZ定时
MOVVART2,#0FBH
AJMPSETVARF
K500H:
MOV39H,#20H
MOV3AH,#35H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 低频 波形 函数 信号发生器