测控系统综合设计.docx

上传人:b****6 文档编号:4776825 上传时间:2022-12-08 格式:DOCX 页数:16 大小:383.89KB
下载 相关 举报
测控系统综合设计.docx_第1页
第1页 / 共16页
测控系统综合设计.docx_第2页
第2页 / 共16页
测控系统综合设计.docx_第3页
第3页 / 共16页
测控系统综合设计.docx_第4页
第4页 / 共16页
测控系统综合设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

测控系统综合设计.docx

《测控系统综合设计.docx》由会员分享,可在线阅读,更多相关《测控系统综合设计.docx(16页珍藏版)》请在冰豆网上搜索。

测控系统综合设计.docx

测控系统综合设计

测控技术综合实习

(测控)

1、实习目的

1、了解应变片的基本概念,掌握应变片的工作原理。

2、了解AT89C51单片机的使用方法。

3、掌握应变片压力测量系统的设计方法,学会独立思考,解决问题的能力。

二、实习任务

1、收集材料,了解应变片的相关知识。

2、确定设计方案,画出Protel电路图。

3、编写程序,实现设计功能。

三、硬件设计

1、基于单片机的压力检测的原理

本次设计是以单片机组成的压力测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。

压力的测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理。

然后用LED进行显示,而键盘的作用是改变输入量的系数的。

它的原理图如图

压力测量仪表原理方框图

我们这次主要做的是A/D转换,单片机键盘和显示,我们选用的A/D转换器是ADC0832,单片机为AT89C51,键盘为4乘4的键盘,显示为4位数码管显示。

根据硬件电路编程,调试出来并显示结果。

2、金属电阻应变片的工作原理

应变式压力传感器是把压力的变化转换成电阻值的变化来进行测量的,应变片是由金属导体或半导体制成的电阻体,是一种将被测件上的应变变化转换成为一种电信号的敏感器件。

它是压阻式应变传感器的主要组成部分之一。

电阻应变片应用最多的是金属电阻应变片和半导体应变片两种。

金属电阻应变片又有丝状应变片和金属箔状应变片两种。

通常是将应变片通过特殊的粘和剂紧密的粘合在产生力学应变基体上,当基体受力发生应力变化时,电阻应变片也一起产生形变,使应变片的阻值发生改变,从而使加在电阻上的电压发生变化。

这种应变片在受力时产生的阻值变化通常较小,一般这种应变片都组成应变电桥,并通过后续的仪表放大器进行放大,再传输给处理电路(通常是A/D转换和CPU)显示或执行机构。

其阻值随压力所产生的应变而变化。

金属电阻应变片的工作原理是吸附在基体材料上应变电阻随机械形变而产生阻值变化的现象,俗称为电阻应变效应。

对于金属导体,如图2.1所示,一段圆截面的导线的金属丝,设其长为L,截面积为A(直径为D),原始电阻为R,金属导体的电阻值可用下式表示:

R=ρL∕A(2.1)

式中:

ρ——金属导体的电阻率(Ω·cm2/m)S——导体的截面积(cm2)

L——导体的长度(m)

图2.1金属电阻丝应变效应

当金属丝受到轴向力F而被拉伸或压缩产生形变,其电阻值会随之变化,通过对(2.1)式两边取对数后再取全微分得:

(2.2)

式中

为材料轴向线应变,且

跟据材料力学,在金属丝单向受力状态下,有

(2.3)

式中μ为导体材料的泊松比。

因此,有

(2.4)

试验发现,金属材料电阻率的相对变化与其体的相对变化间的关系为

(2.5)

式中,c为常数(由一定的材料和加工方式决定)

将式(2.5)代入(2.4),且当ΔR=R时,可得

(2.6)

式中,k=(1+2µ)+c(1-2µ)为金属丝材料的应变灵敏系数。

上式表明,金属材料电阻的相对变化与其线应变成正比。

这就是金属材料的应变电阻效应。

电阻变化率△R/R的表达式为:

K=ΔR/Rµ/ε,式中μ—材料的泊松系数;ε—应变量。

当金属丝受外力作用时,其长度和截面积都会发生变化,从上式中可很容易看出,其电阻值即会发生改变,假如金属丝受外力作用而伸长时,其长度增加,而截面积减少,电阻值便会增大。

当金属丝受外力作用而压缩时,长度减小而截面增加,电阻值则会减小。

只要测出加在电阻的变化(通常是测量电阻两端的电压),即可获得应变金属丝的应变情。

3、电阻应变片的基本结构

电阻应变片主要由四部分组成。

如图所示,电阻丝是应变片敏感元件;基片、覆盖片起定位和保护电阻丝的作用,并使电阻丝和被测试件之间绝缘;引出线用以连接测量导线。

 电阻应变片的基本结构

4、三运放大电路

本次设计的放大器采用了三运放,因为它具有高共模抑制比的放大电路。

它由三个集成运算放大器组成,如图所示。

2.5三运放高共摸抑制比放大电路

其中A1和A2为两个性能一致(主要指输入阻抗,共模抑制比和增益)的同相输入通用集成运算放大器,构成平衡对称差动放大输入级,A3构成双端输入单端输出的输出级,用来进一步抑制A1和A2的共模信号,并适应接地负载的需要。

由于每个放大器求和点的电压等于施加在各自正输入端的电压,因此,整个差分输入电压现在都呈现在RG两端。

因为输入电压经过放大后(在A1和A2的输出端)的差分电压呈现在R5,RG和R6这三只电阻上,所以差分增益可以通过仅改变RG进行调整。

这种连接有另外一个优点:

一旦这个减法器电路的增益用比率匹配的电阻器设定后,在改变增益时不再对电阻匹配有任何要求。

如果R5=R6,R1=R3和R2=R4,则VOUT=(VIN2-VIN1)(1+2R5/RG)(R2/R1)。

由于RG两端的电压等于VIN,所以流过RG的电流等于VIN/RG,因此输入信号将通过A1和A2获得增益并得到放大。

然而须注意的是对加到放大器输入端的共模电压在RG两端具有相同的电位,从而不会在RG上产生电流。

由于没有电流流过RG(也就无电流流过R5和R6),放大器A1和A2将作为单位增益跟随器而工作。

因此,共模信号将以单位增益通过输入缓冲器,而差分电压将按〔1+(2RF/RG)〕的增益系数被放大。

这也就意味着该电路的共模抑制比相比与原来的差分电路增大了〔1+(2RF/RG)〕倍。

在理论上表明,得到所要求的前端增益(由RG来决定),而不增加共模增益和误差,即差分信号将按增益成比例增加,而共模误差则不然,所以比率〔增益(差分输入电压)/(共模误差电压)〕将增大。

因此CMR理论上直接与增益成比例增加,这是一个非常有用的特性。

最后,由于结构上的对称性,输入放大器的共模误差,如果它们跟踪,将被输出级的减法器消除。

这包括诸如共模抑制随频率变换的误差。

5、A/D转换器的简介

在这次设计中我们A/D转换器选用两通道输入的八位ADC0832,ADC0832[3]是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。

由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。

ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。

其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。

芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。

独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。

通过DI数据输入端,可以轻易的实现通道功能的选择。

有关引脚说明如下:

•CS片选使能,低电平芯片使能。

•CH0模拟输入通道0,或作为IN+/-使用。

•CH1模拟输入通道1,或作为IN+/-使用。

•GND芯片参考0电位(地)。

•DI数据信号输入,选择通道控制。

•DO数据信号输出,转换数据输出。

•CLK芯片时钟输入。

•Vcc/REF电源输入及参考电压输入(复用)。

正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。

它的结构示意图如图所示。

ADC0832结构示意图

6、AT89C51单片机简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本,如图2.9所示。

AT89C51单机为很多嵌入式控制系统提供灵活性高且廉价的方案。

图2.9AT89C51单片机的结构示意图

四、软件设计

1、ADC0832芯片接口程序的编写

单片机串行工作方式时,串行口是作为同步移位寄存器使用。

这时以P3.3端作为数据移位的入口和出口,而由P3.6端提供移位时钟脉冲。

单片机串行口方式0与ADC0832的接口,单片机P2.0接ADC0832的CS,P3.6接0832的CLK作为时钟信号输出端,P3.7接0832的DO和DI作为启动位、配置位的发送端以及A/D转换后输出数据的接收端。

由于ADC0832在CS变低后的前3个周期内,DO端为高阻态;转换开始后,DI线禁止,因此,DI端和DO端可连接在一起。

ADC0832的时钟频率最高为400kHz,单片机晶振可选用4MHz,在TXD的输出频率为4MHz/12=333.3kHz,符合要求。

ADC0832输出的串行数据共15位,由两段8位数据组成,前一段是最高位在先,后一段是最高在后,两段数据的最低位共用。

只有在时钟的下降沿,ADC0832的串行数据才移出一位。

由单片机控制时钟信号的发送,并由P3.6发出,以达到控制ADC0832输出数据位的目的。

为了得到一列完整的8位数据,单片机分两次采集含有不同位的数据,再合成一列完整的8位数据。

ADC0832通过内部多路器来控制选择通道,处理器的控制命令通过DI引脚输入。

如下流程图所示,当模拟信号输入开始后,首先是CS使能信号也就是片选信号有效,这时是低电平有效,如果片选是高电平时停止转换。

当时钟信号有效时输入通道的控制字来确定所选择的通道,读取数据后就开始将模拟量转换位数字量,A/D转换结束后,单片机读取数值,如果没转换完,又回到使能开始。

ADC0832数据读取程序流程

2、单片机与键盘的接口程序设计

AT89C51单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。

列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。

4根行线和4根列线形成16个相交点。

检测当前是否有键被按下。

检测的办法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,不然有键闭合。

去除键抖动。

当检测到有键按下后,延时一段时间再做下一步的检测判断。

若有键被按下,应识别出是哪一个键闭合。

办法是对键盘的行线进行扫描。

P1.4-P1.7按下述4种组合依次输出:

P1.71110P1.61101P1.51011P1.40111在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,不然有键闭合。

由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。

为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

从以上分析得到单片机键盘扫描程序的流程图如图所示。

程序如下

单片机矩阵式键盘接口流程图

3、LED数码管显示程序设计

利用单片机内部的串行接口,可以实现静态的显示处理。

这样不仅可以节省单片机的并行接口资源,而且在大多数不使用串行接口的情况下,可以减少或是免去扩展接口。

在这种设计中,串行口工作于方式0,数据的输入输出都通过RxD实现,移位脉冲则由TxD发出。

每次传送一个字节数据。

每输出一个字节数据,单片机自动使串行中断请求标志TI置。

通过测试该状态,即可确定该字节是否发送完毕。

由硬件电路图可知,74LS164是串行输入并行输出的移位寄存器。

它具有两个串行输入端和8位并行输出端(QA~QH)。

当显示数据从RxD端输出到移位寄存器74LS164的输入端AB时,74LS164将串行数据转换成8位输出码QA~QH,然后加到共阳极LED显示器上。

究竟在哪一位上显示,还要P1口的状态而定。

当某一位为低电平时,该位LED显示,其他位不显示。

由于接口电路中显示模型输出地址和位选信号可一次选中,故只要一次输出即可显示一位。

LED的显示流程图

五、总结

在设计中遇到不少困难,这对自己是一个考验,刚开始拿到题目的时候头绪并不是很多,通过查阅资料对整个系统有了一定的认识。

单片机的相关内容在大三的课程学过,但是学得并不是很深,在设计前我重新学习了一遍单片机的知识,包括芯片接口和51系列单片机的指令等。

串行A/D转换器ADC0832是新接触的一种芯片,除学习芯片功能外,主要了解了对芯片串行输出的控制,这里的软件设计是一个难点,我们这次用的是用PROTEI99绘图软件,我们以前学过但是学的不深这对我来说是个难点,但是通过看书和同学老师的帮忙,使得我画好了原理图和PCB版的出图。

还有就是焊版,焊不好就无法显示要的数据,调试是最关键的时候,刚开始的时候没有显示,在修改程序的时候花了不少时间最后,终于显示可以想要的结果。

当程序下载到焊版的时候,首先是显示0000,如果改变滑动变阻器时,通过ADC0832就可以显示不同的数据,我做的首先是采集模拟量,然后显示需要的数据。

我认为我们专业学习硬件知识相对比软件多,所以在软件设计方面我还有很大不足。

程序的设计经过“学习–模仿–编写–修改–再修改–定型”等阶段,在软件的学习上我也花了比较多的时间和精力,让我欣慰的是收获也很大。

原理图:

程序:

#include

#include

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineADC0832CH0channel;

//*********定义变量区*******************

sbitclk_adc0832=P3^6;//定义各个控制引脚

sbitcs_adc0832=P2^0;

sbitdi_adc0832=P3^7;

sbitdo_adc0832=P3^7;

sbitLED0_CS=P1^0;

sbitLED1_CS=P1^1;

sbitLED2_CS=P1^2;

sbitLED3_CS=P1^3;

sbitadarm=P2^2;

ucharcodetable[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0,1,2,3,4,5,6,7,8,9,off//共阳极笔端码

ucharch;//采样返回数据

//*********函数声明区********************

 voidtkey(void);//键盘函数

unsignedrunADC0832(bit);//A/D转换

voidDelayms(uintx);//延时显示函数

voidUpdate_LED();//LED显示函数

voidLED_analyze();

//**********主函数开始**********

voidmain()

{

P0=0XFF;

P1=0XFF;

P2=0XFF;

P3=0XFF;

Uart_Init();

TH0=0x3C;

TL0=0xAF;

ET0=1;//开外部中断0

EA=1;//全局中断打开

TR0=1;

nCounter=0;

Change_Flag=0;

while

(1)

{

voidtkey(void);

runADC0832();

if(Change_Flag==1)

{Update_LED();

if(ch>9999)

ch=0;

printf("counterrefreshed%d\n",ch);

}

delay();

/********矩键查寻键值4*4程序******/按键为P1.0---P1.7

voidTkey(void)

{

  ucharreadkey;//rereadkey;

  ucharx_temp,y_temp;

  P1=0x0f;

  x_temp=P1&0x0f;

  if(x_temp==0x0f)gotokeyout;

  P1=0xf0;

  y_temp=P1&0xf0;

  readkey=x_temp|y_temp;

  readkey=~readkey;

switch(readkey)

{

case0x11:

key=0;break;

case0x21:

key=1;break;

  case0x41:

key=2;break;

  case0x81:

key=3;break;

  case0x12:

key=4;break;

  case0x22:

key=5;break;

  case0x42:

key=6;break;

  case0x82:

key=7;break;

  case0x14:

key=8;break;

  case0x24:

key=9;break;

  case0x44:

key=10;break;

  case0x84:

key=11;break;

  case0x18:

key=12;break;

  case0x28:

key=13;break;

  case0x48:

key=14;break;

  case0x88:

key=15;break;

  default:

  key=16;break;

    }

keyout:

_nop_();

}//**********A/D转换子程序开始***************

unsignedrunADC0832(void)//读ADC0832函数

{

uchari=0;

ucharj;

uintdat=0;

ucharndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;//拉低CS端

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿3

ADDI=1;//控制命令结束

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;//拉高CS端

ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

dat|=ndat;

return(dat);//returnadk

}

voidcontrol(uchard)//数据个、十、百、千取数函数

ch=ch%10000;

AD_bcd[0]=ch/1000;

AD_bcd[1]=(ch/100)%10;

AD_bcd[2]=(ch%100)/10;

AD_bcd[3]=(ch%100)%10;

update_disbuf();

}

voidupdate_disbuf(void)//对应显示的数据函数

{P0=dis_code[AD_bcd[0]];

LED_0=0;

Delayms(10);

LED_0=1;

P0=dis_code[AD_bcd[1]];

LED_1=0;

Delayms(10);

LED_1=1;

P0=dis_code[AD_bcd[2]];

LED_2=0;

Delayms(10);

LED_2=1;

P0=dis_code[AD_bcd[3]];

LED_3=0;

Delayms(10);

LED_3=1;

}

 

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

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1