根据单片机labview的温度测量系统设计文档格式.docx
- 文档编号:20000609
- 上传时间:2023-01-14
- 格式:DOCX
- 页数:22
- 大小:262.19KB
根据单片机labview的温度测量系统设计文档格式.docx
《根据单片机labview的温度测量系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《根据单片机labview的温度测量系统设计文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
【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<
reg52.h>
intrins.h>
#definenop_nop_()
sbitSCL=P2^1;
sbitSDA=P2^0;
bitack;
/*--------------------startI2c-------------*/
voidStart_I2c(void)
{
SDA=1;
nop;
SCL=1;
nop
SDA=0;
//SDAtolow,sendstartflag
SCL=0;
}
/*---------------stopI2c--------------*/
voidStop_I2c(void)
{
SDA=0;
nop;
SCL=1;
//sendstopflag
/*--------------sendbyte---------------*/
voidSend_Byte(unsignedcharc)
unsignedcharBitCnt;
for(BitCnt=0;
BitCnt<
8;
BitCnt++)
if((c<
<
BitCnt)&
0x80)SDA=1;
elseSDA=0;
nop
SCL=0;
}
SDA=1;
if(SDA==1)ack=0;
elseack=1;
/*----------------rescivebyte----------*/
unsignedcharReceive_Byte(void)
unsignedcharreceive;
receive=0;
receive<
=1;
if(SDA==1)receive+=1;
returnreceive;
/*-------------Acknowledgement------------*/
voidAck_I2c(bita)
if(a==0)SDA=0;
elseSDA=1;
/*********************************此部分为温度的读取部分******************/
------------------------------AD.c----------------------------
#include<
I2C.H>
unsignedcharADValue;
unsignedintTemperature;
#definePCF85910x90//器件地址
bitADC_Send_Byte(unsignedcharsla,unsignedcharc)
Start_I2c();
Send_Byte(sla);
if(asc==0)return0;
Send_Byte(c);
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---------------------------------
reg51.h>
#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_();
}
bitLcd_Busy()
bitresult;
rs=0;
rw=1;
ep=1;
_nop_();
result=(bit)(P0&
0x80);
ep=0;
returnresult;
Lcd_Write_CMD(unsignedcharcmd)
while(Lcd_Busy());
rw=0;
P0=cmd;
Lcd_Place(unsignedcharpos)
{
Lcd_Write_CMD(pos|0x80);
Lcd_Send_Byte(unsignedchardat)
while(Lcd_Busy());
rs=1;
P0=dat;
lcd_init()
Lcd_Write_CMD(0x38);
delay
(1);
Lcd_Write_CMD(0x0c);
Lcd_Write_CMD(0x06);
Lcd_Write_CMD(0x01);
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]!
Lcd_Send_Byte(Temperatureshow[i]);
/************************此处为串行口的通信部分***************************/
----------------------------SCI.c--------------------------------
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>
>
/************************以下为主函数******************************/
---------------------------------main.c----------------------------
#include“LCD.h”
#include“SCI.h”
VoidSystem_Start()
SCI_Init();
lcd_init();
Voidmain()
While
(1)
Get_ADValue();
Get_TPValue();
Lcd_Show();
Send_Temperature();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 根据 单片机 labview 温度 测量 系统 设计