硬件课设YHWord文档格式.docx
《硬件课设YHWord文档格式.docx》由会员分享,可在线阅读,更多相关《硬件课设YHWord文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
本系统的波形选择和幅值选择均采用软件选择方式,由不同的按键来选择不同的波形,由文本框的输入来确定波形的频率。
如果没有输入频率,则为缺省值。
然后根据不同波形和幅值调用不同的函数计算后的数据存入数组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"
(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
Out
EndSub
PrivateSubForm_Load()
xx=0
maxV=255
maxF=500000
Picture1.AutoRedraw=True
PrivateSubgetVal(i)
Ifi<
>
0Then
ret0
Ifdata(i-1)<
retgetVal(i-1)
retdata(i-1)
PrivateSubOut()
Fori=0To255
data(i)=Text1.Text*(data(i))/5
Ifi>
Ifdata(i)<
1Then
data(i)=data(i-1)
EndIf
EndIf
DimfAsDouble
f=(maxF/Text3.Text)
'
f=f/256'
recalcthefluence
MsgBoxf
Fori=0To255'
writedata
Outport&
HB840,i
HB800,data(i)'
disablereaddata
data(i)=0'
cleardata
Sleep(5)
HB863,&
H16'
set825400110111
DimtAsInteger
t=f
HB860,t
HB880,0
PrivateSubCommand1_Click()
DimtAsString
t=t&
"
&
data(i)
MsgBoxt
PrivateSubCommand10_Click()
Fori=0To1000000
HB840,255
PrivateSubCommand2_Click()
PrivateSubCommand3_Click()
Picture1.Cls
PrivateSubCommand5_Click()
DimpiAsDouble
pi=3.14159265358979
data(i)=maxV*Sin(2*pi*i/256)/2+maxV/2
Next
PrivateSubCommand6_Click()
Fori=0To5
HB800,i
PrivateSubCommand7_Click()
HB840,1'
read1addr
Inport(&
HB800)
PrivateSubCommand8_Click()
Fork=0To1000
HB800,i'
Nextk
PrivateSubCommand9_Click()
Inport(&
PrivateSubLabel3_Click()
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimstepAsInteger
step=Picture1.Width/256
DimvolAsInteger
vol=255
IfButton>
IfX>
xxThen
DimiAsInteger
i=X*255/Picture1.Width
data(i)=255-Y*255/Picture1.Height
xx=X
Picture1.PSet(X,Y)
PrivateSubtri_Click()
Fori=0To127
data(i)=i*2
Nexti
data(127+i)=255-i*2
Out
窗口界面如下所示:
任意轨迹波形如下所示:
五、调试故障的检测与分析
5.1实验扩展板的检测
在进行硬件调试之前,首先要对接口卡及插件板的各个信号进行检测,排除故障,以保证接口及应用电路调试的顺利进行。
(1)检测方法
将插件板通过2芯,4芯和8芯的电缆与微机原理实验箱的各接口相连,运行检测程序,用示波器检测插件板上所有信号线是否对位接通、信号是否正常。
如发现故障,首先应检查插件板上该位连线是否接错,是否开路,是否短路。
如果插件板上排针上该位连线已接通,再检查2芯、4芯和8芯的各电缆是否接通,查出故障,予以排除。
(2)检测程序
要在示波器上观察到插件板上个信号的波形,必须执行循环程序。
如果只执行几条指令,则由于计算机速度很高,在示波器上无法观测到信号波形。
计算机执行无控制的循环程序后无法退出循环,称之为“死循环”。
为防止“死循环”,必须在循环程序内插入退出循环的命令,一般采用系统11号功能调用来退出循环。
11号功能调用用来检查键盘有无输入,无输入则将0送入AL;
有输入则将FFH送至AL。
在循环程序中嵌入11号功能调用,用来判别有无键入,即判断AL的内容。
有键入则退出循环,无键入则继续循环。
使用DEBUG的汇编命令建立的检测程序如下:
DEBUG
-a
0B03:
0100MOVDX,B880
0103INAL,DX
0104MOVAL,F
0106OUTDX,AL
0107MOVAH,B
0109INT21
010BCMPAL,0
010DJE100
010FINT20
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
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];
写数据
INCBX;
调整数据单元
POPAX
INCAL;
调整地址单元
LOOPAG1
RET
W6264ENDP
R6264PROC
AG2:
MOVDX,0B890H
MOVDX,0B880H
INAL,DX;
读数据
MOVOBUF[BX],AL
INCBX
INCAL
LOOPAG2
R6264ENDP
beginendp
codeends
endbegin
也可以在DEBUG下用输入/输出命令I/O来检查SRAM6264的读写功能,判断SRAM6264的好坏。
具体调试过程如下:
-OB8900
-OB88056
-IB880
56
这表明000单元的内容被写入后,读出的内容与写入的内容相同,则SRAM6264是好的。
5.5调试地址产生器
(1)8254工作原理
当计数