根据单片机labview的温度测量系统设计.docx

上传人:b****5 文档编号:6979132 上传时间:2023-01-14 格式:DOCX 页数:22 大小:262.19KB
下载 相关 举报
根据单片机labview的温度测量系统设计.docx_第1页
第1页 / 共22页
根据单片机labview的温度测量系统设计.docx_第2页
第2页 / 共22页
根据单片机labview的温度测量系统设计.docx_第3页
第3页 / 共22页
根据单片机labview的温度测量系统设计.docx_第4页
第4页 / 共22页
根据单片机labview的温度测量系统设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

根据单片机labview的温度测量系统设计.docx

《根据单片机labview的温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《根据单片机labview的温度测量系统设计.docx(22页珍藏版)》请在冰豆网上搜索。

根据单片机labview的温度测量系统设计.docx

根据单片机labview的温度测量系统设计

 

串口收发电路的温度测量单片机系统设计

 

设计目录

第一部分电路设计……………………………………………3

1.1温度采集电路……………………………………….3

1.2串口收发电路……………………………………….7

1.3温度显示电路……………………………………….9

第二部分上位机软件………………………………………...10

2.1基于Labview的温度检测设计

第三部分程序代码…………………………………………..

 

电路设计

1.1温度采集电路

本设计采用热敏电阻,通过飞利浦公司生产的AD转换芯片PCF9591采集热敏电阻的温度信息,总体电路图如下

PCF8591简介

描述

PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。

PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。

PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。

在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

 

特性

【1】单独供电

  【2】PCF8591的操作电压范围2.5V-6V

  【3】低待机电流

  【4】通过I2C总线串行输入/输出

  【5】PCF8591通过3个硬件地址引脚寻址

  【6】PCF8591的采样率由I2C总线速率决定

  【7】4个模拟输入可编程为单端型或差分输入

  【8】自动增量频道选择

  【9】PCF8591的模拟电压范围从VSS到VDD

  【10】PCF8591内置跟踪保持电路

  【11】8-bit逐次逼近A/D转换器

【12】通过1路模拟输出实现DAC增益

引脚信息

AIN0~AIN3:

模拟信号输入端。

A0~A3:

引脚地址端。

  VDD、VSS:

电源端。

(2.5~6V)

  SDA、SCL:

I2C总线的数据线、

  时钟线。

  OSC:

外部时钟输入端,内部时钟

  输出端。

  EXT:

内部、外部时钟选择线,使

  用内部时钟时EXT接地。

  AGND:

模拟信号地。

  AOUT:

D/A转换输出端。

VREF:

基准电源端。

 

PCF8591操作

内部地址寄存器

内部控制寄存器

 

AD转换总时序

先送入要读取的器件的地址,即所要读取的通道,然后等待应答信号,开始读取下位机芯片送来的AD数据。

 

底层驱动时序如下

单字读写

起始以及停止信号

准备完毕的应答信号,上位机接收

 

本电路通过PCF8591的AIN2通道采集热敏电阻的温度信息,通过I2C总线方式读取下位机提取的信息,实现温度采集。

 

温度传感器PT100简介

设计原理

pt100是铂热电阻,它的阻值会随着温度的变化而改变。

PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。

它的工业原理:

当PT100在0摄氏度的时候他的阻值为100欧姆,它的阻值会随着温度上升而成匀速增长的。

温度特性曲线

由上图,可以拟合其温度与电阻的关系为

R=77/200*Temperature+100;

串联的限流电阻的值为100欧姆,则AD输入电压的计算公式为

ADValue/255*5000=100/(R+100)*5000;

由以上两公式换算可以得到

Temperature=200/77*(100*255/ADValue-100)

 

1.2串口收发电路

通过串口收发电路,将采集到的温度信息提取后传送到电脑上,通过上位机显示所采集的温度信息,实现人机交互界面,更加人性化电路如下:

串口通信芯片采用美信公司的MAX232

 

 

  

引脚介绍

  第一部分是电荷泵电路。

由1、2、3、4、5、6脚和4只电容构成。

功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

  第二部分是数据转换通道。

由7、8、9、10、11、12、13、14脚构成两个数据通道。

  其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

  8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

  TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

  第三部分是供电。

15脚GND、16脚VCC(+5v)。

主要特点

  1、符合所有的RS-232C技术标准

  2、只需要单一+5V电源供电

  3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-

  4、功耗低,典型供电电流5mA

  5、内部集成2个RS-232C驱动器

  6、内部集成两个RS-232C接收器

  7、高集成度,片外最低只需4个电容即可工作。

1.3温度显示电路

温度显示电路采用1602液晶,与单片机的P0口相连,实现温度显示,其电路图如下

 

液晶电路的读写时序以及其内部寄存器的操作可以在网上查找,此处不作详述,用液晶屏幕实现静态显示温度的功能。

 

整体电路如下

 

上位机软件

2.1前面板设计

温度超过限定值或者低于限定值时,指示灯亮起,温度读取开关,用于串口的打开和关闭。

 

后面板程序框图设计

 

程序代码

温度采集部分

/********************此部分为I2C总线驱动程序*******************/

-------------------------I2C.c----------------------------

#include

#include

#definenop_nop_()

sbitSCL=P2^1;

sbitSDA=P2^0;

 

bitack;

 

/*--------------------startI2c-------------*/

voidStart_I2c(void)

{

SDA=1;

nop;

SCL=1;

nop;

nop;

nop

nop;

nop;

SDA=0;//SDAtolow,sendstartflag

nop;

nop;

nop

nop;

nop;

SCL=0;

nop;

nop;

}

 

/*---------------stopI2c--------------*/

voidStop_I2c(void)

{

SDA=0;

nop;

SCL=1;

nop;

nop;

nop

nop;

nop;

SDA=1;//sendstopflag

nop;

nop;

nop;

nop;

}

/*--------------sendbyte---------------*/

voidSend_Byte(unsignedcharc)

{

unsignedcharBitCnt;

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

{

if((c<

elseSDA=0;

nop;

SCL=1;

nop;

nop;

nop

nop;

nop;

SCL=0;

}

nop;

nop;

SDA=1;

nop;

nop;

SCL=1;

nop;

nop;

nop;

if(SDA==1)ack=0;

elseack=1;

SCL=0;

nop;

nop;

}

/*----------------rescivebyte----------*/

 

unsignedcharReceive_Byte(void)

{

unsignedcharreceive;

unsignedcharBitCnt;

receive=0;

SDA=1;

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

{

nop;

SCL=0;

nop;

nop;

nop

nop;

nop;

SCL=1;

nop;

nop;

receive<<=1;

if(SDA==1)receive+=1;

nop;

nop;

}

SCL=0;

nop;

nop;

returnreceive;

}

/*-------------Acknowledgement------------*/

voidAck_I2c(bita)

{

if(a==0)SDA=0;

elseSDA=1;

nop;

nop;

nop;

SCL=1;

nop;

nop;

nop;

nop;

nop;

SCL=0;

nop;

nop;

}

/*********************************此部分为温度的读取部分******************/

------------------------------AD.c----------------------------

#include

#include

 

unsignedcharADValue;

unsignedintTemperature;

#definePCF85910x90//器件地址

bitADC_Send_Byte(unsignedcharsla,unsignedcharc)

{

Start_I2c();

Send_Byte(sla);

if(asc==0)return0;

Send_Byte(c);

if(asc==0)return0;

Stop_I2c();

return1;

}

 

//ADCReceiveByte

unsignedcharAD_Receive_Byte(unsignedcharsla)

{

unsignedcharc;

Start_I2c();

Send_Byte(sla+1);

if(ack==0)return0;

c=Receive_Byte;

Ack_I2c

(1);

Stop_I2c();

returnc;

}

 

VoidGet_ADValue(void)

{

ADC_Send_Byte(PCF8591,0x43);

ADValue=AD_Receive_Byte(PCF8591);

}

/////////////////////以下为温度换算部分//////////////////////////

VoidGet_TPValue()

{

Temperature=200/77*(100*255/ADValue-100);

}

 

/***********************此部分为LCD液晶显示模块**********************/

--------------------------------LCD.c---------------------------------

#include

#include

#include“AD.h”

sbitrs=P2^6;//

sbitrw=P2^5;

sbitep=P2^7;

unsignedcharcodeTital[]={"Thetemperatureis"};

unsignedcharTemperatureshow[3];

delay(unsignedcharms)

{//

unsignedchari;

while(ms--)

{

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

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

bitLcd_Busy()

{//

bitresult;

rs=0;

rw=1;

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80);

ep=0;

returnresult;

}

Lcd_Write_CMD(unsignedcharcmd)

{//

while(Lcd_Busy());

rs=0;

rw=0;

ep=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

Lcd_Place(unsignedcharpos)

{

Lcd_Write_CMD(pos|0x80);

}

Lcd_Send_Byte(unsignedchardat)

{

while(Lcd_Busy());

rs=1;

rw=0;

ep=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

lcd_init()

{

Lcd_Write_CMD(0x38);

delay

(1);

Lcd_Write_CMD(0x0c);

delay

(1);

Lcd_Write_CMD(0x06);

delay

(1);

Lcd_Write_CMD(0x01);

delay

(1);

}

VoidLcd_Show()

{

Unsignedchari;

Lcd_Place(0);

i=0;

while(Tital[i]!

='\0')

{

Lcd_Send_Byte(Tital[i]);

i++;

}

Temperatureshow[0]=Temperature/100+’0’;

Temperatureshow[1]=Temperature%100/10+’0’;

Temperatureshow[0]=Temperature%10+’0’;

Lcd_Place[0x45];

i=0;

while(Temperature[i]!

='\0')

{

Lcd_Send_Byte(Temperatureshow[i]);

i++;

}

}

 

/************************此处为串行口的通信部分***************************/

----------------------------SCI.c--------------------------------

#include

#include“AD.h”

VoidSCI_Init()

{

SCON=0x50;

TMOD|=0x20;

PCON|=0x80;//波特率倍增

TH1=0xF3;//串口波特率9600

TL1=0xF3;

TR1=1;

ES=0;//禁止串口中断

EA=0;

}

 

VoidSend_Temperature()

{

SBUF=Temperature;

while(!

TI);

TI=0;

SBUF=Temperature>>8;

while(!

TI);

TI=0;

 

}

 

/************************以下为主函数******************************/

---------------------------------main.c----------------------------

#include

#include“AD.h”

#include“LCD.h”

#include“SCI.h”

VoidSystem_Start()

{

SCI_Init();

lcd_init();

}

 

Voidmain()

{

While

(1)

{

Get_ADValue();

Get_TPValue();

Lcd_Show();

Send_Temperature();

}

}

 

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

当前位置:首页 > 初中教育 > 语文

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

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