当前位置:文档之家› 计算机题

计算机题

一.简答题:(每小题10分,本题共40分)

1.计算机控制系统是由哪几部分组成的?各部分的作用是什么?

2.在计算机控制系统中,采样周期T应取如何选定?

3.以某一控制系统(如:温度控制系统)为例,简述计算机在一个控制周期内应完成

哪些事情?

4.什么是数字滤波器?列出三种数字滤波算法。

二.现已知某炉温变化范围为0~1000℃,采用9位的A/D变换器,试问此时系统对炉温

变化的分辨率为多少?若将变送器的测试起点迁移到500℃,保持同样的炉温变化的分辨率,试问此时可采用几位的A /D变换器就可以了?(本题共10分)

三.根据主机(编程时CPU可在8051、8086中任选其一)与0809接口电路,回答

问题并编程进行数据采集。(本题共15分)

要求:1. 回答问题:

(1)按图中所示接线时,模拟量通道的测量电压范围是多少?(2分)

(2)当模拟量输入4伏时,对应的数字量为多少?(3分)

2. 编程: 进行第三通道的模拟量数据采集,零通道地址使用符号Address即可,

程序要加注释。(10分)

说明:对于CPU是8051时,0809的EOC接8051的/INT1,低8位地址线均为使用74LS373锁存后的地址线。

四.根据主机(编程时CPU可在8051、8086中任选其一)与0832接口电路,回答问题并编程输出控制量。(本题共15分)

要求:1. 回答问题:

(1)按图中所示接线时,运放输出电压U0的输出范围是多少?(2分)

(2)当数字量为60H时,对应的模拟量U0为多少?(3分)

2. 编程: 输出幅值为

3.5伏的锯齿波,频率不限,地址使用符号Address即可。(10分)

五.某热处理炉温度变化范围为50~2350度,经温度变送器(本题共10分)变换为1~5V电压送至ADC0809,ADC0809的输入范围为0~5V。某时刻采样得到转换结果为5AH,问此时炉内温度是多少度?写出中间过程。

六.若加工第三象限直线oA,起点o(0,0),终点A(-2,-4),试按逐点比较法进行直线插补计算并作出走步轨迹图。(本题共10分)

要求:(1)写出所用的偏差计算定义式及递推式(4分)

(2)列表写出直线插补过程并作出走步轨迹图(6分)

| 课程名称——微机控制技术—— ( A 卷) | 一. 问答题:(每小题5分,本题共30分)

装 1. 主要由硬件和软件两部分组成,硬件包括:主机及操作台、通用外设I/O 接口与通道、 | 信号的检测及变送、执行机构、被控对象组成;软件包括:系统软件、应用软件。 | 2. (1)据香农采样定理确定采样周期T 的上限max

w π;(2)据执行机构和被控对象的特

|

性:惯性大的对象,T 取大;(3)从随动性、抗干扰的要求来看:T 应取小一些;(4)

| 要实时完成一个控制周期内的任务,T 不能太小。

钉 3. 应完成:被控物理量的采集A/D 转换、数字滤波、偏差的计算、控制算法计算控制量、 | D/A 刷新输出控制量。

| 4. 数字滤波是通过程序对信号作数字化处理,以减少干扰在信号中的比重。常用的有: | 一阶滞后滤波、限制变化速率滤波、中值滤波等。 | 5.

9(1000)/2 1.95o o ?==;量程缩减了一半,用8位A/D 即可。

| 二. (本题共10分)1. 回答问题:(1)测量电压范围是0~+5伏;(2分) |

(2)4伏对应为255*4/5=204=CCH (2分)

| 2. 编程: (1)//启动三通道IN3开始A/D 转换, 地址Address+3(2分)

线 (2)//延时或中断或查询EOC 上跳沿等待A/D 转换结束(2分) | (3)//读取结果(2分)

具体程序略。

| 三.(本题共10分)1. 回答问题: (1)运放输出电压U0的输出范围是0~-5v ;(2分)

|

(2)60H 时对应-1.88伏(2分)

| 2. 编程: (1)//输出数字量0至0832即0伏,数字量加一(2分)

| (2)//延时后,输出新数字量至0832即伏数下降(2分)

| (3)//判断下限255*3.5/5=178.5=B2H(或B3H)到否? 具体程序略。 |

是,跳至(1)执行; 否,跳至(2)执行。(2分) 具体程序略。

| 四.(本题共15分) | 方法一. 用d

s

dt

=

作替换,令t = kT ,简记为k ;

()de t dt =()(1)

e k e k T

--,(5分) | 直接得递推式:u(k)=0.5u(k-1)+2.5[e(k)-0.2e(k-1)] (5分)

| Z 变换得:D(z)=(5-z -1)/(2-z -1) )

()

()

5.01()2.01(5

.211z E z U z z =

--=--(5分)

|

方法二. 或用S=(1-z -1)/T 作替换,T=1,D(z)=(5-z -1)/(2-z -1)

|

)

()()

5.01()2.01(5

.211z E z U z z =

--=--(3分)

| 将上式代入原式,反Z 变换得:u(k)=0.5u(k-1)+2.5[e(k)-0.2e(k-1)] (3分) |

用上两式相减后整理得:

|

|

|

DAC0809

1.主要特性

1)8路8位A/D转换器,即分辨率8位。

2)具有转换起停控制端。

3)转换时间为100μs

4)单个+5V电源供电

5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

6)工作温度范围为-40~+85摄氏度

7)低功耗,约15mW。

2.内部结构

ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近,寄存器、三态输出锁存器等其它一些电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输出与TTL兼容。

IN0~IN7:8路模拟电压输入端,用与输入被转换的模拟电压。D0~D7: A/D转换后的数据输出端,与单片机的P0口相接。A、B、C:模拟通道地址选择端,A为低位,C 为高位,其通道选择的地址编码见下图:

地址编码被选中的通道

C B A

0 0 0 0 0 1 0 1 0

0 1 1

1 0 0 1 0 1 1 1 0 1 1 1 IN0 IN1 IN

2 IN

3 IN

4 IN

5 IN

6 IN7

)(+R V 、)(-R V :基准参考电压端,决定了模拟量的量程范围,在本实验中采用0~5V 的量程范围。

CLK :时钟信号输入端,决定A/D 转换时间,本实验中CLK=500KHz ,转换时间T=128uS ,最大允许值为800KHz 。 ALE :地址锁存允许信号,高电平有效,当此信号有效时,A 、B 、C 三位地址信号被锁存,译码选通对应模拟通道。 SC :启动转换信号,正脉冲有效。本实验中与单片机的WR 信号相连,控制启动AD 转换。

EOC :转换结束信号,高电平有效。表示一次AD 转换已完成,可作为中断触发信号,本实验中采用查询方法检测转换是否结束。 OE :输出允许信号,高电平有效。本实验中与单片机的RD 相连,当单片机发出此命令时,单片机可以读取数据.

0809的内部结构和时序图: 工作时序图:

由时序图知ADC0809的工作过程如下:

送通道地址,以选择要转换的模拟输入; 锁存通道地址到内部地址锁存器; 启动A/D 变换; 判断转换是否结束; 读转换结果

A/D 转换完成数据的输送

A/D 转换后得到的是数字量的模拟量,这些数据应传诵给单片机进行处理。数据串的关键是如何确定A/D 转换完成。因为只有确定数据转换完成后,才进行传送。为此可采用以下三种方式:

定时传送方式

对于一种A 时子程序。A/D 转换启动后,就调动这个子程序,延迟时间一到,转换肯定已经完成了。接着,就可以进行数据传送/D 转换来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128us ,相当于6MHZ 的MCS-51单片机共60个机器周期。可根据此设计一个延了。

查询方式

A/D 转换芯片表明有转换完成的状态信号,例如ADC0809的E 端,因此可以通过查询方式用软件测试EOC 的状态,即可知道转换是否完成,若完成,则接着进行数据传送。 中断方式

中断方式 ADC0809与8031的中断方式接口电路只需将0809的EOC 端经过一非门连接到8031的INTl 端即可。采用中断方式可大大节省CPU 的时间,当转换结束时,EOC 发出一个脉冲向单片机提出中断请求,单片机响应中断请求, 由外部中断1的中断服务程序读A /D 结果,并启动0809的下一次转换,外部中断1采用边沿触发方式。 程序如下:

INITl : SETB ITl ;外部中断1初始化编程 SETB EA SETB EXl

MOV DPTR ,#7FF8H ;启动0809对IN0通道转换 MOVX @DPTR ,A

MOV DPTR ,#7FF8H ;读取A /D 结果送缓冲单元30H MOVX A ,@DPTR MOV 30H ,A

MOVX @DPTR ,A ;启动0809对IN0通道下一次转换

RETI

不管使用上述那种方式,一旦确定转换完成,即可通过指令进行数据传送,首先送出口地址,并以RD做选通信号,OE信号即有效,把转换数据送上数据总线,供单片机接受。

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。

(1)ADC0809的内部逻辑结构

由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

(2).ADC0809引脚结构

ADC0809各脚功能如下:

D7-D0:8位数字量输出引脚。

IN0-IN7:8位模拟量输入引脚。

VCC:+5V工作电压。

GND:地。

REF(+):参考电压正端。

REF(-):参考电压负端。

START:A/D转换启动信号输入端。

ALE:地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).

EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:输出允许控制端,用以打开三态数据输出锁存器。

CLK:时钟信号输入端(一般为500KHz)。

A、B、C:地址输入线。

ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:4条

ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。

C B A选择的通道

000IN0

001IN1

010IN2

011IN3

100IN4

101IN5

110IN6

111IN7

数字量输出及控制线:11条

ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC 为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。

CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,

VREF(+),VREF(-)为参考电压输入。

2.ADC0809应用说明

(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2).初始化时,使ST和OE信号全为低电平。

(3).送要转换的哪一通道的地址到A,B,C端口上。

(4).在ST端给出一个至少有100ns宽的正脉冲信号。

(5).是否转换完毕,我们根据EOC信号来判断。

(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。

3.实验任务

如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。

4.ADC0809应用电路原理图

6.程序设计内容

(1).进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。

(2).进行A/D转换之前,要启动转换的方法:

ABC=110选择第三通道

ST=0,ST=1,ST=0产生启动转换的正脉冲信号.

7.C语言源程序

#include

unsigned char code dispbitcode[]={ 0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};

unsigned char dispcount;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

unsigned char channel=0xbc;//IN3 unsigned char getdata;

void main(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

TR0=1;

ET0=1;

EA=1;

P3=channel;

while(1)

{

ST=0;

ST=1;

ST=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

dispbuf[2]=getdata/100; getdata=getdata%10;

dispbuf[1]=getdata/10;

dispbuf[0]=getdata%10;

}

}

void t0(void) interrupt 1 using 0 {

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]]; P2=dispbitcode[dispcount]; dispcount++;

if(dispcount==8) {

dispcount=0; }

相关主题
文本预览
相关文档 最新文档