根据单片机labview的温度测量系统设计.docx
- 文档编号:6979132
- 上传时间:2023-01-14
- 格式:DOCX
- 页数:22
- 大小:262.19KB
根据单片机labview的温度测量系统设计.docx
《根据单片机labview的温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《根据单片机labview的温度测量系统设计.docx(22页珍藏版)》请在冰豆网上搜索。
根据单片机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(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 根据 单片机 labview 温度 测量 系统 设计