数据采集系统.docx

上传人:b****2 文档编号:17341826 上传时间:2023-07-24 格式:DOCX 页数:14 大小:481.46KB
下载 相关 举报
数据采集系统.docx_第1页
第1页 / 共14页
数据采集系统.docx_第2页
第2页 / 共14页
数据采集系统.docx_第3页
第3页 / 共14页
数据采集系统.docx_第4页
第4页 / 共14页
数据采集系统.docx_第5页
第5页 / 共14页
数据采集系统.docx_第6页
第6页 / 共14页
数据采集系统.docx_第7页
第7页 / 共14页
数据采集系统.docx_第8页
第8页 / 共14页
数据采集系统.docx_第9页
第9页 / 共14页
数据采集系统.docx_第10页
第10页 / 共14页
数据采集系统.docx_第11页
第11页 / 共14页
数据采集系统.docx_第12页
第12页 / 共14页
数据采集系统.docx_第13页
第13页 / 共14页
数据采集系统.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据采集系统.docx

《数据采集系统.docx》由会员分享,可在线阅读,更多相关《数据采集系统.docx(14页珍藏版)》请在冰点文库上搜索。

数据采集系统.docx

数据采集系统

 

课程设计书

 

课程:

微机原理与接口技术

题目:

数据采集系统

专业:

计算机科学与技术

班级:

座号:

姓名:

 

2011年6月14日

一、设计任务书

(一)课题:

数据采集系统

(二)设计目的:

1、掌握数据采集系统的设计、实现基本方法,提高软、硬件综合设计、调试与应用能力;提高分析问题、解决问题的能力。

2、掌握I/O接口地址译码的原理。

3、掌握并行可编程接口芯片8255A、可编程定时/计数器芯片8253、中断控制器8259(可选)和模数转换器ADC0809的应用方法。

(三)设计内容:

1、采用定时中断(或延时方式)和软件控制的方法,实现每隔N秒(N可设置)实现对模拟量的采集。

2、根据预先设置的数值和采集的模拟量决定控制输出。

如假设控制中心值为2.0V,当输入值超过2.0±0.3(V)时,控制步进电机转:

正偏差时反转,负偏差时正转;当输入值超过2.0±0.8(V)时,进行上、下限报警。

3、对采集的值应进行数字滤波,如可一次采集10个值,去掉最大值、最小值,然后取平均值。

4、使用循环队列保存近期(如100个数据)数据值,并将其数据用波形的形式显示出来。

5、实现多路采集,不同路的中心值及上、下项等参数可灵活设置。

注:

其中1~3为基本要求,4~5可根据自己的能力选择实现。

二、设计的背景及意义

在一些工业控制领域往往需要通过传感器将外界各类模拟信号数值化,并根据不同的信号让控制系统中心自动做出相应的处理。

三、功能及实现方法简介

鉴于时间与设备条件的限制,在这里我们来不及用中断方法实现,固采用延时方式和软件控制的方法实现。

通过8253各计时器的组合使用实现每隔N秒(N可设置)发出一个信号(我们采用下降沿信号);8255的PB0每接收到一个下降沿信号时就让AD模块采集十次,再判断去掉最大值、最小值后的平均值,让8255的PA7~PA0输出相应的处理信号对LED小灯和步进机的状态进行控制。

四、系统的硬件组成及原理

 

 

使用Protel工具软件绘制的硬件图

 

实验板线路连接图

 

 

图说设计周进度:

 

五、软件组成、流程图及原理

六、调试过程说明

在设计过程中,我们采用模块化设计的方法一步步完成设计要求实现的功能。

之前我们刚做过8253和8255综合应用的实验,已经比较熟练,现在直接运用自如。

只是把下降沿跑马灯换成AD采集而已,这时就可以通过8个LED灯先调试观察采集到的AD值了,与电压表实测值对应的AD值比较还可以大致了解当前使用的AD的精度。

AD调试没问题后,我们通过对采集到的信号(ad十次均值)与临界值比较判断,确定其所属区间并做出相应的处理。

在实现步进机正反转的过程中,折腾了我们不少时间,通过测试(不用正转表和反转表,直接一个个输出)断定问题出现在数据段正转表和反转表的读取上,有读取不正常的情况,还有报错信息:

phaseerrorbetweenpasses(标号地址跑位)。

最后发现是数据段地址没有设好所致,改正段头问题得以解决:

codesegment

assumeCS:

code,DS:

code

start:

movax,8100h

movds,ax

在完成设计的基本要求后还剩一些时间,于是我们又添加了使用循环队列保存近期(如100个数据)数据值的功能。

七、系统使用说明

调节开发版左上角的电位器旋钮,输出0~5V的电压作为AD模块的模拟信号输入值。

控制中心值为2.0V,假设AD输入值为X,则

X<1.2V时L7亮,步进电机不转;

1.2<=X<1.7V时L6亮,步进机正转;

1.7V<=X<=2.3V时灯全灭,步进机不转;

2.3V

X>=2.8V时L4亮,步进电机不转。

注:

以上为理论计算值,实测值误差在+0.1V左右,鉴于每天使用的不同实验板上的AD模块精度不一,我们觉得没必要加以调整。

实际问题中如需调整,只要稍微调整代码中的临界值即可。

以我们的设计为例,将临界比较值1.2V、1.7V、2.3V、2.8V调整为1.1V、1.6V、2.2V、2.7V左右所对应的AD值,然后再调试,不符合就继续微调临界比较值…

八、设计体会

通过这次课程设计,我进一步熟悉了汇编编程,也锻炼了自己在硬件系统设计、调试与应用、分析问题、解决问题等方面的综合能力。

同时也意识到了在学习过程中相互交流探讨的重要性,比如说在解决数据段的问题时就是在和同学进行交流时才恍然大悟的。

此外,一定要多留意老师讲到的重点,可以避免走弯路瞎折腾,还是以前面数据段的问题为例,据说陈老师就有提到过该实验板的数据段问题,我那么一不留神就亏大了。

确实,很多时候很多可贵的东西好比真知都是在各种瞎折腾的实践中点滴累积而来的。

九、软件清单

codesegment

assumeCS:

code,DS:

code;数据定义在代码段里

start:

movax,8100h;实验板的数据段地址已经被设定为8100h

movds,ax

;1.初始化8255,8253计数器1、计数器0*****************************************

;8255初始化:

moval,10000010b;A口:

方式0,输出。

B口:

方式0,输入。

C口没用。

movdx,20Bh

outdx,al;写入方式控制字

;8253初始化:

;计数器1初始化:

moval,01110110b;计数器1为方式3,采用二进制计数,先低后高写入计数值

Movdx,207h;控制寄存器地址

outdx,al;写入方式控制字

movax,10000;计数值为10000,f_out1=1M/10000=100Hz

movdx,205h;计数器1

outdx,al;写入低字节计数值

moval,ah

outdx,al;写入高字节计数值

;计数器0初始化:

moval,00110110b;计数器0为方式3,采用二进制计数,先低后高写入计数值

Movdx,207h;控制寄存器地址

outdx,al;写入方式控制字

movax,200;计数值为200,f_out0=100/200=0.5Hz,T=1/0.5=2s.

movdx,204h;计数器0

outdx,al;写入低字节计数值

moval,ah

outdx,al;写入高字节计数值

;2.AD采集、数字滤波********************************************************

wait1:

movdx,209h;8255-B口

inal,dx

testal,01h

jzwait1;8255-B0为低电平转继续等待高电平

wait0:

movdx,209h;8255-B口

inal,dx

testal,01h

jnzwait0;8255-B0为高电平转继续等待下降沿

;以一个下降沿作为十次AD采集的信号

movcl,10;十次采集前的变量初始化

movax,0

movsum,ax

;moval,0

movmax,al

moval,255

movmin,al

collect:

MOVAL,00H;AD通道0

MOVDX,210H

OUTDX,AL

calldelay1

MOVDX,210H

INAL,DX;读取AD值

movah,0

addsum,ax;累加和

cmpal,max

jachangemax;最大值

cmpmin:

cmpal,min

jbchangemin;最小值

aa:

deccl

jnzcollect

jmpbb

changemax:

movmax,al

jmpcmpmin

changemin:

movmin,al

jmpaa

;数字滤波:

bb:

moval,max

movah,0

subsum,ax;去掉最大值

moval,min

;movah,0

subsum,ax;去掉最小值

movax,sum

movbl,8

divbl;取平均值【被除数默认为ax,平均值(商)默认寄存于al】

;3.使用循环队列保存近期(如100个数据)数据值*********************************

movBX,adpoint

movadtable[BX],al

incBX

cmpBX,100

jzchangeBX

cc:

movadpoint,BX

jmpee

changeBX:

movBX,0

jmpcc

;4.临界值判断并作出相应处理************************************************

ee:

cmpal,61;(1.2V/5V)*255

jblim1;上限

cmpal,87;(1.7V/5V)*255

jbfpzz;负偏

cmpal,117;(2.3V/5V)*255

jagocmp

moval,0f0h;工作正常,没有超过2.0±0.3(V)(灯全灭,步进机不转)

movdx,208h;A口

outdx,al

jmpwait1

gocmp:

cmpal,143;(2.8V/5V)*255

jbzpfz;正偏

moval,11100000b;下限信号(L4亮,步进机不转)

movdx,208h;A口

outdx,al

jmpwait1

lim1:

moval,01110000b;上限信号(L7亮,步进机不转)

movdx,208h;A口

outdx,al

jmpwait1

fpzz:

movcl,4;负偏正转(L6亮,步进机正转)

movSI,0

zz:

moval,zztable[SI]

movdx,208h;A口

outdx,al

calldelay2

incSI

deccl

jnzzz

jmpwait1

zpfz:

movcl,4;正偏反转(L5亮,步进机反转)

movSI,0

fz:

moval,fztable[SI]

movdx,208h;A口

outdx,al

calldelay2

incSI

deccl

jnzfz

jmpwait1

movah,4ch

int21h

;5.延时子程序**************************************************************

delay1procnear

pushbx

movbx,5000;延时等待AD完成转换

d1:

decbx

jnzd1

popbx

ret

delay1endp

delay2procnear;步进机延时

pushbx

movbx,0ffffh

d2:

decbx

jnzd2

popbx

ret

delay2endp

;6.变量、数组数据定义区*****************************************************

sumdw0

maxdb0

mindb255

zztabledb10111100b,10110110b,10110011b,10111001b;步进机正转表

fztabledb11011001b,11010011b,11010110b,11011100b;步进机反转表

adpointdw0;最后十次采集的平均值的存储地址(指针)

adtabledb100dup(0);用来保存最近100个AD采集的数据(平均值)

codeends

endstart

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2