硬件课设YH.docx
- 文档编号:3865496
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:27
- 大小:705.49KB
硬件课设YH.docx
《硬件课设YH.docx》由会员分享,可在线阅读,更多相关《硬件课设YH.docx(27页珍藏版)》请在冰豆网上搜索。
硬件课设YH
波形发生器
院校:
电子与信息工程系
专业:
通信工程
班级:
0801班
姓名:
颜欢
学号:
u200813099
指导老师:
张士军
一、设计任务与要求
1、综合应用微机的硬件和软件知识,设计制作一个波形发生器,可以输出各种标准波形,如方波、锯齿波、三角波、正弦波。
还可以输出任意波形,如用鼠标在屏幕上绘出任意波形后由波形产生器输出。
2、要求输出波形的频率、幅度可调,且能脱机输出。
3、设计的人机界面不但清晰美观,而且操作方便。
二、设计原理
数字波形发生器的硬件系统(图2-1)主要是由下面四个部分组成的:
图2-1波形发生器的系统框图
①波形存储器:
存储各种波形的数据,由SRAM芯片组成。
如6264等。
②波形变换器:
将波形存储器中的波形数据转换成模拟信号输出,由D/A转换器和放大器组成。
D/A芯片如DAC0832等;放大器如uA741,OP-07等。
③地址产生器:
以一定的速率输出地址信号,将波形存储器中的数据输出给波形变换器,由定时器和计数器组成。
如8254加上部分外围电路就可以完成。
④控制器:
有两个功能,其一是接收输入波形的数据,并将波形数据写入波形存储器;其二是控制各部分的工作,使得写入波形数据时,波形存储器与其他部分脱离,脱机输出波形时,波形存储器与其他部分连接。
控制器由微型计算机及其接口控制电路组成。
波形发生器的工作可以分为波形存储与波形输出两个工作阶段。
波形存储——向波形存储器写入波形数据,此时控制器使波形存储器的写输入端开放,同时向其中写入数据;另一方面,控制器此时关闭地址产生器及波形变换器的使能端,使之停止工作。
波形输出——从波形存储器中读取数据,并启动波形变换器工作,使之输出波形,此时控制器开放波形存储器的读出端和波形变换器的输入端,并启动地址产生器工作,同时关闭波形存储器的写输入端。
波形存储时CPU通过74LS374把波形数据写入6264,此时要求接74LS393的74LS244和0832不工作;波形输出时74LS374不工作,而是让74LS393和74LS244给6264不断提供地址信息使其把先前存储的波形数据自动送到0832产生波形输出。
本系统的波形选择和幅值选择均采用软件选择方式,由不同的按键来选择不同的波形,由文本框的输入来确定波形的频率。
如果没有输入频率,则为缺省值。
然后根据不同波形和幅值调用不同的函数计算后的数据存入数组data(255)(存放有0~255单元共256个数据),一个周期的波形数据,供波形存储阶段使用分别存入SRAM6264的对应的256个单元。
本系统的频率调节采用改变地址产生器的地址信息,输出速率的方法。
使用一片定时器/计数器8254,初始化使之工作在方式3,使其成为一个方波速率发生器,将8254的输出做计数器的输入脉冲。
改变8254的计数初值,即可改变输出波形的频率。
软件是控制硬件系统工作的一部分,起到人机对话的作用。
拟采用美国Microsoft公司出品的VisualBasic6.0或者VisualC++6.0进行编写人机对话的界面。
其实VB和VC他们各自均有特点。
VB和VC都是一种可视化的面向对象的高级程序设计语言,以其各自的优点深受广大Windows用户的青睐。
其关键不同是VC具有直接对硬件接口进行操作的函数,并且可以用汇编语言编写,但是做起界面来就比较复杂一些;而VB没有直接访问硬件端口的功能,不过,可以通过找一个或者自己编写一个控制输入输出的连接程序,或增加调用一个控制硬件的动态链接库(DynamicLinkLibrary——DLL)文件,而且VB使用起来非常方便,能够大大减少程序员的编程工作量。
因此,本课程设计最后使用VB来进行设计。
三、设计电路分析和完整电路图
3.1控制器的接口控制电路
脱机前:
在控制器的作用下,由CPU的三总线完成波形数据写入6264中。
脱机后:
在控制器的作用下,由分频电路供给地址,将被地址产生器选中的存储单元中的数据送到波形变换器,波形变换器再将数据进行D/A转换。
由上述工作原理可知:
为了实现波形写入和输出,控制8254,SRAM6264和374的微型计算机还要控制写入和输出的切换。
74LS138的
用来作为SRAM6264的片选信号,
作为可编程计数器8254的片选信号,
用来作为地址锁存器74LS374的CLK信号。
由74LS138的
控制74LS74的CLK信号,74LS74的Q端与74LS374的
、第一个74LS244的1
相连,而它的
与第一个74LS244的2
和第二个74LS244的1
和2
相连。
切换控制可由74的输出Q和
来实现,Q=0时,可以通过接口卡对SRAM6264写入数据,即波形写入。
当
=0时,电路将地址控制权交给了地址产生器,此时将被地址产生输出地址选中的地址单元数据送到波形变换器,即波形输出。
3.2波形存储器电路
波形存储器电路的核心电路是SRAM6264,由微型计算机及其接口控制电路对其进行写入。
由于它的地址线和片选信号
、输出允许信号
、写允许信号
3根控制线要在微型机算计与地址产生器之间切换,因此,上述总线要通过三态缓冲器74LS244与微型计算机相连。
SRAM6264的
可以不与微型计算机的
相连。
为了调试该电路,应从波形存储器中将写入的数据读出,检查写入的数据是否正确,所以将SRAM6264的
接了
。
SRAM6264有
~
共11根地址线,微型计算机的接口保护卡也引出
~
共16根地址线,其中
和
这两根地址线要用于I/O端口地址译码。
SRAM6264的高地址接地,
~
为低电平。
而其他地址线
~
是采用间接端口地址译码电路8D触发器74LS374的输出来选择。
这样,SRAM6264只使用了256个单元。
波形存储器写入电路(波形存储器与微型计算机的连接电路)如图3-2所示。
只要接口控制电路对74LS374的
和74LS244的1
输出低电平,即可实现微型计算机对SRAM6264的写入和读出。
将地址存储器中的波形数据送波形变换器,不能采用程序传送的方式,因为程序传送速度太低。
输出波形存储器中的波形数据要提高SRAM6264的地址线变化的速率。
所以要自行设计一个地址产生器,由地址产生器来控制SRAM6264的地址线和
、
、
这3根控制线。
在进行波形输出时,接口控制电路将SRAM6264的上述信号线切换给地址产生器,SRAM6264中的波形数据在地址产生器的控制下脱机输出。
在进行波形输出时,仅对SRAM6264执行读操作,不执行写操作,为简化地址产生器的电路,可将
接高电平,
和
接低电平,即SRAM6264工作在常选通的输出状态。
波形输出电路如图3-3所示。
只要接口控制电路对74LS244的
输出低电平,即可将SRAM6264中的波形数据在地址产生器的控制下进行输出。
3.3地址产生器电路
地址产生器的核心器件是使74LS393计数器,74LS393每输入一个脉冲,其输出增1,使得SRAM6264的地址产生增1的变化,即可将SRAM6264的数据逐个单元地进行输出。
改变计数器输入脉冲的速率,即可实现SRAM6264地址线增1变化的频率,也就是可改变SRAM6264的输出速率,即改变输出波形的频率。
使用一片定时器/计数器8254,初始化它工作在方式3,使其成为一个方波速率发生器,将8254的输出做计数器的输入脉冲。
改变8254的技术处置,即可改变输出波形的频率。
3.4波形变换器及放大输出电路
波形变换器的核心电路是D/A转换器,它将波形存储器中的波形数据转换为模拟量,供放大电路进行输出。
D/A转换器选用DAC0832,使其工作在直通方式。
写入波形时,将DAC0832的
、
、
和
接高电平,DAC0832不对数据线上的数据进行转换,即无输出信号。
波形输出时,将DAC0832的上述4个信号接低电平,DAC0832将数据线上的数据直通输出。
由于接口保护卡上74LS245的隔离作用,波形输出时的数据线上的数据也不干扰微型计算机的数据总线,因而整个系统的数据线没有添加三态缓冲器来切换。
DAC0832是电流型输出的数模转换器件,在输出端需要借以运算放大器使其输出模拟电压信号。
为简化电路设计,放大器仅采用单一5V电源的放大电路。
放大器应征且选择工作点,并加滤波处理,减小失真。
本设计中使用的运放为NE5532。
3.5完整电路图
四、设计软件分析和完整程序清单
本系统应用软件的结构框图如图4-1所示。
图4-1波形发生器软件设计框图
完整的VB程序如下:
PrivateDeclareSubOutportLib"vbio32.dll"(ByValportIDAsInteger,ByValnByteAsInteger)
PrivateDeclareFunctionInportLib"vbio32.dll"(ByValportIDAsInteger)AsInteger
PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
PrivatexxAsInteger
PrivatemaxVAsInteger
PrivatemaxFAsDouble
PrivateoriginalAsInteger
PrivatetAsInteger
Privatedata(0To255)AsInteger
PrivateSubCommand4_Click()
Fori=0To127
data(i)=0
Nexti
Fori=128To255
data(i)=255
Nexti
Out
EndSub
PrivateSubForm_Load()
xx=0
maxV=255
maxF=500000
Picture1.AutoRedraw=True
EndSub
PrivateSubgetVal(i)
Ifi<>0Then
ret0
Ifdata(i-1)<>0Then
retgetVal(i-1)
retdata(i-1)
EndSub
PrivateSubOut()
Fori=0To255
data(i)=Text1.Text*(data(i))/5
Ifi>0Then
Ifdata(i)<1Then
data(i)=data(i-1)
EndIf
EndIf
Nexti
DimfAsDouble
f=(maxF/Text3.Text)
'f=f/256'recalcthefluence
'MsgBoxf
Fori=0To255'writedata
Outport&HB840,i
Outport&HB800,data(i)'disablereaddata
data(i)=0'cleardata
Sleep(5)
Nexti
Outport&HB863,&H16'set825400110111
DimtAsInteger
t=f
Outport&HB860,t
Outport&HB880,0
EndSub
PrivateSubCommand1_Click()
DimtAsString
Fori=0To255
t=t&""&data(i)
Nexti
MsgBoxt
EndSub
PrivateSubCommand10_Click()
Fori=0To1000000
Outport&HB840,255
Nexti
EndSub
PrivateSubCommand2_Click()
Out
EndSub
PrivateSubCommand3_Click()
Picture1.Cls
Fori=0To255
data(i)=0
Nexti
xx=0
EndSub
PrivateSubCommand5_Click()
DimpiAsDouble
pi=3.14159265358979
Fori=0To255
data(i)=maxV*Sin(2*pi*i/256)/2+maxV/2
Next
Out
EndSub
PrivateSubCommand6_Click()
Fori=0To5
Outport&HB840,i
Outport&HB800,i
Nexti
EndSub
PrivateSubCommand7_Click()
'Outport&HB840,1'read1addr
Fori=0To1000000
Inport(&HB800)
Nexti
EndSub
PrivateSubCommand8_Click()
Fork=0To1000
Fori=0To255'writedata
Outport&HB840,i
Outport&HB800,i'disablereaddata
Nexti
Nextk
EndSub
PrivateSubCommand9_Click()
DimtAsString
Fori=0To255
Outport&HB840,i
t=t&""&Inport(&HB800)
Nexti
MsgBoxt
EndSub
PrivateSubLabel3_Click()
EndSub
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimstepAsInteger
step=Picture1.Width/256
DimvolAsInteger
vol=255
IfButton>0Then
IfX>xxThen
DimiAsInteger
i=X*255/Picture1.Width
data(i)=255-Y*255/Picture1.Height
xx=X
Picture1.PSet(X,Y)
EndIf
EndIf
EndSub
PrivateSubtri_Click()
Fori=0To127
data(i)=i*2
Nexti
Fori=0To127
data(127+i)=255-i*2
Nexti
Out
EndSub
窗口界面如下所示:
任意轨迹波形如下所示:
五、调试故障的检测与分析
5.1实验扩展板的检测
在进行硬件调试之前,首先要对接口卡及插件板的各个信号进行检测,排除故障,以保证接口及应用电路调试的顺利进行。
(1)检测方法
将插件板通过2芯,4芯和8芯的电缆与微机原理实验箱的各接口相连,运行检测程序,用示波器检测插件板上所有信号线是否对位接通、信号是否正常。
如发现故障,首先应检查插件板上该位连线是否接错,是否开路,是否短路。
如果插件板上排针上该位连线已接通,再检查2芯、4芯和8芯的各电缆是否接通,查出故障,予以排除。
(2)检测程序
要在示波器上观察到插件板上个信号的波形,必须执行循环程序。
如果只执行几条指令,则由于计算机速度很高,在示波器上无法观测到信号波形。
计算机执行无控制的循环程序后无法退出循环,称之为“死循环”。
为防止“死循环”,必须在循环程序内插入退出循环的命令,一般采用系统11号功能调用来退出循环。
11号功能调用用来检查键盘有无输入,无输入则将0送入AL;有输入则将FFH送至AL。
在循环程序中嵌入11号功能调用,用来判别有无键入,即判断AL的内容。
有键入则退出循环,无键入则继续循环。
使用DEBUG的汇编命令建立的检测程序如下:
>DEBUG
-a
0B03:
0100MOVDX,B880
0B03:
0103INAL,DX
0B03:
0104MOVAL,F
0B03:
0106OUTDX,AL
0B03:
0107MOVAH,B
0B03:
0109INT21
0B03:
010BCMPAL,0
0B03:
010DJE100
0B03:
010FINT20
0B03:
0111
-n
-rcx
cx0000
:
f
-w
Writing000Fbytes
在调试硬件时经常要使用该程序。
(3)地址线、数据线及有关控制信号的波形
i.端口选择信号(IOY4)
执行检测程序时,由于反复执行OUT和IN指令,不断地选通B880H地址且输出
或
信号,故IOY4应为负脉冲选通信号,如图3-6所示。
注意:
测试所有的数字信号,要么为“1”,要么为“0”。
若出现非“1”、非“0”的不确定状态,则为非正常信号,由此可找到故障。
图5-1选通信号波形
ii.地址线信号(
~
)
执行测试程序时,由于反复选通地址B880H,不断地输出
~
,选通时
~
为0,不选通时为1,所以,
~
有如图3-7所示的波形输出。
若将MOVDX,B880改为MOVDX,B881,再执行检测程序,则
~
的输出波形不变,
的输出波形变为一条直线(高电平)。
图5-2地址线信号波形
iii.数据线信号(
~
)
执行检测程序时,在IOY4为低电平时才允许输出(或输入),平常为隔离状态,所以
~
的信号波形如图3-8所示,
~
为1电平(高电平)。
若将MOVAL,F改为MOVAL,F0,再执行检测程序,则
~
有如图3-8的波形,
~
为高电平。
图5-3数据线信号波形
iv.I/O写信号(
)和I/O读信号(
)
执行检测程序时,由于反复执行OUT指令和IN指令,故
和
都有脉冲输出,脉冲波形如图3-9所示。
图5-4
和
信号波形
v.1MHz信号
1MHz的震荡信号为方波信号。
5.2硬件调试时的注意事项
注意:
电路在通电前,首先必须检查电源与地线之间的电阻值,在排除短路现象后才能进行通电调试,长时间短路可能会烧坏主机电源。
将设计好的电路安装在插件板上,一般不可能一次成功。
连线错误引起的故障占很大的比例,所以在设计好电路后,进行硬件电路调试是非常重要的步骤。
通过调试,可排除错线,漏线、短路、虚接等故障,保证电路的软硬件联调顺利进行。
硬件电路调试一般采取分级调试,可以从前往后,亦可由后向前。
下面介绍硬件电路的调试方法:
①根据设计要求,编写硬件调试程序。
②首先测试每个集成块Vcc和GND两端是否有+5V电压,然后执行调试程序,用示波器检测集成块引脚上有关的地址线、数据线、控制线的信号是否正常。
若出现异常现象,则仔细沿该连线逐一检查,可发现该连线因错接、漏接、短路或被后面电路接错而锁死,导致信号波形不正常。
断电后排除其故障。
5.3控制器的接口电路的调试
要想电路工作正常,74LS74必须工作正常,在DEBUG下用O和I命令测试74LS74。
程序如下
-OB8980
-OB8981
74LS74的CLK地址为B898H,Q端接示波器,当执行第一条命令,Q端应输出高电平,当执行第二条命令时,示波器应输出低电平。
如果不是这种情况,说明74LS138和74LS74的连线有问题,需要重新查线。
5.4调试SRAM6264
调试6264的关键是看它每个单元能不能正确读写数据,这个测试程序先写入256个数据,紧接着再读出刚刚写进去的256个数据,将他们进行对比,如果写入的预读出的完全一致则说明SRAM6264工作正常;如果有一部分不一样说明可能部分数据线或地址线有连错的或SRAM6264的部分单元已损坏;如果完全没有输出说明SRAM6264没有选通,此时需要仔细检查SRAM6264和与之相连的电源线和控制线是否正确。
调试程序如下:
stacksegmentstack'satck'
dw32dup(?
)
stackends
datasegment
I1DB'WriteandRead6264:
',0ah,0dh,'$'
IBUFDB32DUP(31H)
DB32DUP(32H)
DB32DUP(33H)
DB32DUP(34H)
DB32DUP(35H)
DB32DUP(36H)
DB32DUP(37H)
DB32DUP(38H)
OBUFDB256DUP(?
),'$'
dataends
codesegment
beginprocfar
assumess:
stack,cs:
code,ds:
data
pushds
subax,ax
pushax
movax,data
movds,ax
MOVAH,9
MOVDX,OFFSETI1
INT21H
CALLW6264
CALLR6264
MOVDX,OFFSETOBUF
MOVAH,9
INT21H
ret
W6264PROC
MOVAX,0
MOVBX,0
MOVCX,256
MOVDX,0B898H;74LS74
OUTDX,AL
AG1:
PUSHAX
MOVDX,0B890H;74LS374
OUTDX,AL
MOVDX,0B880H;SRAM6264写地址
MOVAL,IBUF[BX];写数据
OUTDX,AL
INCBX;调整数据单元
POPAX
INCAL;调整地址单元
LOOPAG1
RET
W6264ENDP
R6264PROC
MOVAX,0
MOVBX,0
MOVCX,256
AG2:
PUSHAX
MOVDX,0B890H
OUTDX,AL
MOVDX,0B880H
INAL,DX;读数据
MOVOBUF[BX],AL
INCBX
POPAX
INCAL
LOOPAG2
RET
R6264ENDP
beginendp
codeends
endbegin
也可以在DEBUG下用输入/输出命令I/O来检查SRAM6264的读写功能,判断SRAM6264的好坏。
具体调试过程如下:
-OB8900
-OB88056
-IB880
56
这表明000单元的内容被写入后,读出的内容与写入的内容相同,则SRAM6264是好的。
5.5调试地址产生器
(1)8254工作原理
当计数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 YH