多路数据采集设计 机制专业文档格式.docx
《多路数据采集设计 机制专业文档格式.docx》由会员分享,可在线阅读,更多相关《多路数据采集设计 机制专业文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
数据输出及显示就是把数据以适当的形式进行输出和显示。
二、系统方案设计
1、设计要求
设计一个八路采集系统,实现对八路模拟信号的采集,具体设计任务是:
(1)采集方式包括循环采集(即1路、2路……8路、……1路)和选择采集(任选一路)两种方式。
显示部分能同时显示地址和相应的数据。
(2)第1路输入自制1~5V直流电压(各路输入可由分压器产生,不要求精度),第8路备用。
(3)现场模拟信号产生器:
自制温度、湿度等物理量的检测电路,经放大后产生电压。
2、系统方案比较
系统设计方案一:
系统硬件电路如图1:
ADC0809将0—5V模拟信号转换为00—FF数字信号并传送51单片机,然后由51单片机进行数据存储及数据处理,最终由LED显示器显示。
完成对模拟信号的采集。
图1
系统设计方案二:
系统硬件电路如图2:
电路中采取信号发生器进行采集,不如方案一简洁。
虽然器件选择上差的不多,但是还需要制作信号发生器,多了操作步骤,并且增加了成本
图2
因此我们选择方案一,直接采取模拟信号进行采集。
三、硬件模块设计
1、模拟信号采集电路的设计:
图3
本电路在第一通道里采用滑动变阻器控制1~5V的变换,电阻比例为1/4,这样子才能进行5V的分压。
电阻选择一个5K,一个40K。
然后在第二通道到第七通道都采集的是地位器来进行分压,用1K的电阻把5V的进行分压成0V,1V,2V,3V,4V,5V。
图4
在第八通道采用传感器读取数据,在后面接运算放大器对模拟信号进行放大,为后一步A/D转换做准备。
图5(a)图5(b)
图5(C)
应用TL431(如图5-a)提供5V的稳压源,TL431是一个高性价比的常用分流式电压基准,输出固定电压值的计算公式是:
Vout=(R1+R2)*2.5/R2,同时R3的数值应该满足1mA<
(Vcc-Vout)/R3<
500mA。
TL431管脚如图(5-C)。
由于自制稳压源输出电压为12V,为满足上述要求而得到5V稳定电压,我们选择R1=R2=5K,R3=1K。
之后连接运算放大器(如图5-b),放大器选用OP07芯片。
OP07高精度运放具有极低的输入失调电压,极低的失调电压温漂,非常低的输入噪声电压幅度及长期稳定等特点。
OP07引脚图如图6所示。
1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚6为输出,7接电源。
图6图7
自制温度物理量才采集运用AD590传感器(封装图如图7),设定0℃对应0V,由于稳压源输出电压为5V,则图4中R6=5V/273uA=18.3K。
设定100℃对应5V,此时电流值373uA,与初始值差值为100uA,故图4中R4+R5+R7=5V/100uA=50K,R4=30K,R5=10K,因此应调节R7=10K。
此时传感器符合设计要求工作。
2、A/D转换电路设计
设计A/D转换电路将传感器和运放输出的模拟信号转换为数字信号,从而被单片机处理。
ADC0809是8位逐次逼近型A/D转换器,多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
因此我们选用它进行转换。
为使ADC0809的时钟信号输入端得到正常工作频率,采用74LS74双D触发器进行四分频。
电路图如图8。
图8
ADC0809(引脚图如图9-a)由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,从三态输出锁存器取走已转换的数据。
ADC0809的工作原理IN0-IN7:
8条模拟量输入通道ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;
输入的模拟量在转换过程中保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:
22脚ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
CBA选择的通道:
000IN0,001IN1,010IN2,011IN3,100IN4,101IN5,110IN6,111IN7数字量输出及控制线:
C,B,A分接P16,P15,P14口。
6脚ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;
下跳沿时,开始进行A/D转换;
在转换期间,ST应保持低电平。
10脚EOC为转换结束信号。
当EOC为高电平时,表明转换结束;
否则,表明正在进行A/D转换。
9脚OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;
OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
10脚CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,由单片机的ALE(30脚)经过四分频得到。
VREF(+),VREF(-)为参考电压输入。
VREF(+)接+5V,VREF(-)接地。
(a)(b)
图9
74LS74(双D触发器)引脚如下图所示。
74ls02引脚图及引脚功能:
vcc4y4b4a3y3b3a
┌┴─┴─┴─┴─┴─┴─┴┐2输入四或非门74ls02
│141312111098│___
)│y=a+b
│1234567│
└┬─┬─┬─┬─┬─┬─┬┘
1y1a1b2y2a2bgnd
《74ls02引脚图》
74ls02引脚功能:
实现2输入四或非门功能,常用于各种数字电路中。
整个系统软件设计主要有三大块:
A/D转换部分;
显示数据的转换存储部分;
数据的显示部分。
系统采用模块化编程,将各部分功能分别实现。
1、A/D转换过程:
将8路模拟量持续输入ADC0809模拟量输入端IN0~IN7。
首先将OE,START,ALE,A,B,C都置0,然后ALK置1再清零,进行转换通道地址的锁存,即选择转换通道打开。
将START置1再清零,发送一启动脉冲,即启动A/D转换,此时转换结束信号EOC变为低电平。
查看EOC是否为高电平,为高电平则表示A/D转换完毕。
等待A/D转换完毕后将输出允许信号输入端(OE)置高电平,此时就可将转换的一路数据输入到单片机某一存储空间中。
将OE置低电平,即停止ADC0809数据输出。
存储转换数据的地址+1。
通道号+1。
判断是否转换完8路模拟量,是则全部清零从第1条重新开始转换,否则继续转换下路模拟量。
具体流程图下:
2、显示数据的转换存储:
从IN0~IN7输入的模拟量经ADC0809转换后的到的是一个二进制数,我们无法知道实际电压是多少,于是需要我们转换成实际模拟电压值并显实出来,便于记录。
由于ADC0809是8位A/D转换,转换成的二进制最大为11111111,又因ADC0809的基准电压我设计的是5V。
可用如下公式表示模拟量与A/D转换后的二进制数的关系:
将公式的右边换成十进制:
在显示数据的转换存储模块部分中,主要任务是将单片机读到的数据再次转换成模拟量的数值大小,并将这个数值的整数值,小数值这三个十进制值存入相应存储地址中去。
具体的编程思想:
设定8路模拟量转换成的二进制数存在70H~77H中,显示的数据存在78H~7AH中,通道号存在7BH中。
3、显示电路程序流程:
显示这部分主要也分两部分:
整数部分的显示,小数部分的显示。
我设定的模拟电压输入值范围是:
0~5V。
故数据显示整数部分只有:
0.、1.、2.、3.、4.、5.共6个段代码,小数部分只有:
0、1、2、3、4、5、6、7、8、9共9个段代码。
4、具体编程思想:
1)设置扫描字扫描,目的是确定开哪个数码管工作。
2)设定段代码存储顺序:
0、1、2、3、4、5、6、7、8、9、0.、1.、2.、
3.、4.、5.。
3)判断哪个数码管工作,以确定段代码地址。
4)确定后送段代码到该数码管显示数据。
5)判断是否显示完4个数码管。
6)设置显示下路数据,再重复上述过程。
开每一个数码管工作都延时1MS,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到四位不同的数字稳定显示。
1、A/D电路调试
采用74LS74触发对单片机的ALE输出时钟进行4分频;
而其基准源要求稳定,所以我们运用精确基准源进行调试,运行正常。
2、数码管显示模块调试
数码管显示模块调试,基于小系统上实现,程序简单,基本无乱码,显示正常。
3、各通道参数值调试
通道2至7各输入电压值显示值及实测值,以及通道1调节滑动变阻器显示电压值及实测值如下2表。
表1通道2至7正常工作输入电压值
通道
2
3
4
5
6
7
输入电压值
实测值(V)
4.85
3.88
2.88
1.93
0.95
0.00
显示值(V)
5.00
4.00
3.00
2.00
1.00
表2调节滑动变阻器通道1电压值
R=(KΩ)
4.63
3.58
3.4
2.08
1.0
实测值
1.28
2.14
1.79
3.43
4.50
5.66
显示值
1.13
2.01
1.39
3.08
4.03
5.0
AD0809的10脚CLK,用示波器测,显示频率为500KHZ,电压平均值为1.95V的方波。
6脚ST和22脚ALE示波器显示是峰值为3.8V的脉冲波。
7脚EOC为峰值80mv,平均值4.98V的波。
23(A),24(B),25(C)为时高时低的信号。
自动模式数码管显示依次为:
第一个数码管显示
最后几个数码管显示
1
21.1
根据上面两表可见,数值属误差范围内,基本正常,调试成功。
六、结论
多路数据采集系统调试成功并且基本实现设计要求:
采集方式包括循环采集和选择采集二种方式,显示部分能同时显示地址和相应的数据。
硬件完成,调试过程曾经一度出现滞留、毫无进展的状况,然而经过多天的分析及讨论,不段对硬件系统进行检测及改善,在保证硬件故障排除的情况下冷静的进行分析及调试并最终制作及调试完成。
设计时需要思维的开阔,器件的熟悉;
制作焊接时要谨小慎微;
调试时的仔细分析观察。
整个过程又时时离不开团队协作,以及全局观念,还有遇到问题时的冷静分析并从局部到整体的逐步检查直至排除故障。
整个设计、制作、和调试的过程是各种能力及素质的综合锻炼。
七、参考文献:
【1】徐爱均,8051单片机实践教程,电子工业出版社,2005年
【2】谭浩强,MCS-51单片机应用教程,清华大学出版社,2004年
【3】万光毅,单片机实验与实验教程
(一).北京航空航天大学出版社,2003年
【4】沙占友,单片机外围电路设计,电子工业出版社,2003年
【5】康华光主编,《电子技术基础数字部分》,高教出版社,2004年
【6】全国大学生电子设计竞赛培训系列教程
【7】全国大学生电子设计竞赛训练
附1:
元器件明细表
器件名称
型号
规格
数量
备注
电阻
1K
10K
5K
20K
30K
滑动变阻器
三极管
TL431
排线及插口
2插口及排线
40插口及排线
运算放大器
OP07
集成温度传感器
AD590
双D触发器
74LS74
AD转换器
ADC0809
或非门
74LS04
电源
单片机最小系统
AT89C52
自制最小系统
附2:
仪器设备
名称
数字万用表
VC902+
单片机仿真器
STAR51PH
稳压电源
MPS-3003L-3
示波器
GDS2102
附3:
多路数据采集电路设计图纸
附4:
单片机最小系统图纸
附5:
程序代码
SSPEQU60H;
堆栈指针
KEYFLAGDATA20H;
键盘标志
STATEDATA22H;
当前状态
SUBROUTDATA50H;
前一状态
KEYDATA51H;
键值
DS1DATA2DH;
显示位1
DS2DATA2EH;
显示位2
DS3DATA2FH;
显示位3
DS4DATA30H;
显示位4
DS5DATA31H;
显示位5
DS6DATA32H;
显示位6
DS7DATA33H;
显示位7
DS8DATA34H;
显示位8
DATA1DATA35H
DATA2DATA36H
DATA3DATA38H
DATA4DATA39H
NUMDATA37H
J8279DXDATA8000H;
8279数据地址
J8279CXDATA8001H;
8279控制地址
ORG0000H;
转主程序
LJMPMAIN
ORG0003H;
RETI
ORG000BH;
ORG0013H;
LJMPJP
ORG001BH;
LJMPT1INT
ORG0023H;
ORG002BH;
ORG0100H
MAIN:
;
MOVP0,#00H
CLREA
MOVR6,#08H
MOVTMOD,#10H;
定时器1初始化,定时15S
MOVTH1,#15H
MOVTL1,#0A0H
SETBET1;
允许T1中断
SETBEA;
CPU开中断
SETBTR1;
启动T1
MOVR5,#10H
TEST:
MOVSP,#SSP;
置堆栈指针
MOVDPTR,#J8279C;
设定8279工作模式
MOVA,#0D1H
MOVX@DPTR,A
WAIT:
MOVXA,@DPTR;
判断8279是否工作正常
JBACC.7,WAIT
MOVA,#00H;
MOVX@DPTR,A
MOVA,#34H
MOVKEYFLAG,#80H;
置键盘无值标志
MOVR7,#3EH;
清单片机内部RAM
MOVA,#00H
MOVR0,#21H
LOP:
MOV@R0,A
INCR0
DJNZR7,LOP
MOVR1,#90H;
调用显示子程序
;
MOVR0,#DS1
MOVR7,#08H
LCALLDISP
DQ:
SETBIT1
SETBIT0
SETBEX0
SETBEX1
SETBEA
CLRP1.4
CLRP1.5
CLRP1.6
ATT:
LCALLRDKEY;
读键值
MOVKEY,A;
存键值
CJNEA,#00H,REL1
MOVDATA2,#00H
LCALLK1;
自动
JMPREL4
REL1:
CJNEA,#01H,REL2;
手动
MOVDATA2,#0FFH
CLRP1.6
MOVNUM,#01H
LCALLREL11
REL2:
CJNEA,#02H,REL4;
手动加1
MOVDATA2,#0FFH
MOVR0,#NUM
INC@R0
MOVA,P1
ANLA,#70H
ADDA,#10H
MOVP1,A
CJNE@R0,#08H,REL3
LCALLREL22
REL3:
CJNE@R0,#09H,REL5
MOVNUM,#01H
REL5:
LCALLREL11
REL4:
MOVA,STATE;
取状态值
ADDA,STATE;
(定义状态容量为双字节所以要*2)
MOVB,A
MOVDPTR,#STAB;
取得第一表首地址
MOVCA,@A+DPTR
XCHA,B
INCDPTR;
取得第二表首地址
MOVCA,@A+DPTR
MOVDPL,A;
将状态表地址送DPTR
MOVDPH,B
MONI1:
CLRA
MOVCA,@A+DPTR;
读取特征键码
CJNEA,#0FFH,MONI2;
读到最后吗?
SJMPATT;
是最后,本键无效,跳转至键盘监控
MONI2:
CJNEA,KEY,MONI3;
与当前键码一致吗?
SJMPMONI4;
键码一致,转到下面执行
MONI3:
查下一元素
INCDPTR
SJMPMONI1
MONI4:
状态转移
MOVSUBROUT,A;
当前状态送至前态寄存器
取次态为当前状态
MOVSTATE,A
取工作模块编号
MOVB,A;
LJMP指令为三字节,所以*3
RLA
ADDA,B
MOVDPTR,#KPRG
JM