智能仪器智能温度测试仪的设计说明Word下载.docx
《智能仪器智能温度测试仪的设计说明Word下载.docx》由会员分享,可在线阅读,更多相关《智能仪器智能温度测试仪的设计说明Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。
温度传感器从使用的角度大致可分为接触式和非接触式两大类,前者是让温度传感器直接与待测物体接触,而后者是使温度传感器与待测物体离开一定的距离,检测从待测物体放射出的红外线,达到测温的目的。
由于PT100热电阻的温度与阻值变化关系,人们便利用它的这一特性,发明并生产了PT100热电阻温度传感器。
它是集温度湿度采集于一体的智能传感器。
温度的采集范围可以在-200℃~+200℃,湿度采集范围是0%~100%。
pt100温度传感器是一种将温度变量转换为可传送的标准化输出信号的仪表。
主要用于工业过程温度参数的测量和控制。
带传感器的变送器通常由两部分组成:
传感器和信号转换器。
传感器主要是热电偶或热电阻;
信号转换器主要由测量单元、信号处理和转换单元组成(由于工业用热电阻和热电偶分度表是标准化的,因此信号转换器作为独立产品时也称为变送器),有些变送器增加了显示单元,有些还具有现场总线功能。
此次实习我们利用SST89V564RD单片机结合温度传感器技术而开发设计了这一温度测量系统。
二、方案设计
1.设计任务
测温的模拟电路是把当前PT100热电阻传感器的电阻值,转换为容易测量的电压值,经过放大器放大信号后送给A/D转换器把模拟电压转为数字信号后传给单片机,单片机再根据公式换算把测量得的温度传感器的电阻值转换为温度值,并将数据送出到LCD显示器进行显示。
2.总体方案
智能温度测量仪的设计,包括硬件和软件的设计。
先对该测量仪进行概括性介绍,然后介绍该测量仪在硬件设计上的主要器件:
“Pt100热电阻”、单片机和LCD显示器以及描述测量仪的总体结构原理。
在本设计中,是以铂电阻PT100作为温度传感器,采用恒流测温的方法,通过单片机进行控制,用放大器、A/D转换器进行温度信号的采集。
总体来说,该设计是切实可行的。
本设计系统包括温度传感器,信号放大电路,A/D转换模块,数据处理与控制模块,温度显示五个部分。
3.具体方案
本设计系统主要包括温度信号采集单元,单片机数据处理单元,温度显示单元。
其中温度信号的数据采集单元部分包括温度传感器、温度信号的获取电路(采样)、放大电路、A/D转换电路。
系统的总结构框图如图1-1所示。
系统的总结构框图
本温度测量系统设计,是采用PT100温度传感器经过放大和A/D转换器送到单片机进行控制温度显示。
另外本系统还可以通过外接电路扩展实现温度报警功能,从而更好的实现温度现场的实时控制。
经过多次的修改和调试测量,本设计基本符合设计要求,由于受人为因素和软硬件的限制,系统难免不了带来一些误差,但通过调节和精确计算可以减小误差。
4.PT100传感器特性
电阻式温度传感器(RTD,ResistanceTemperatureDetector)是指一种物质材料作成的电阻,它会随温度的改变而改变电阻值。
PT100温度传感器是一种以铂(Pt)做成的电阻式温度传感器,属于正电阻系数,由于它的电阻—温度关系的线性度非常好,因此在测量较小范围内其电阻和温度变化的关系式如下:
R=Ro(1+αT)
其中α=0.00392,Ro为100Ω(在0℃的电阻值),T为华氏温度,因此铂做成的电阻式温度传感器,又称为PT100。
PT100温度传感器的测量范围广:
-200℃~+600℃,偏差小,响应时间短,还具有抗振动、稳定性好、准确度高、耐高压等优点,其得到了广泛的应用,本设计即采用PT100作为温度传感器。
5.测温原理
通过运放U1A将基准电压4.096V转换为恒流源,电流流过Pt100时在其上产生压降,再通过运放U1B将该微弱压降信号放大(图中放大倍数为10),即输出期望的电压信号,该信号可直接连AD转换芯片。
智能仪器实验开发平台集中了单双极性输入通道、程控放大、模拟滤波、16位A/D转换及CPLD技术和单片机技术,并具有超过128KB的大存储空间,集中体现了智能仪器课程所涉及到的各种软硬件技术,非常适合大学本科生的学习以及在此基础上的进一步开发。
三.MK-4PC智能仪器实验教学系统简介
智能仪器实验开发平台采用模块化设计,整个平台设有一个母板,该母板具有四个相同规格的扩展部分,每个扩展部分设四个插口,每个插口对应的分别为单片机的P0、P1、P2、P3口,如图1所示。
设计时将单片机作为控制部分的核心,因此单片机板独立占用其中一个扩展,显示部分采用液晶模块完成,该部分还设有四个按键作为组合按键使用。
第三个部分为基于CPLD的16位数据采集部分,设有两个独立输入通道,每个通道可设置为单极性输入或双极性输入,具有程控放大、模拟滤波等功能,CPLD控制A/D转换器完成数据的采集工作,数据采集的采样频率可设置为10KHz、20KHz…500KHz,采样点数可以根据要求设置。
平台的最后一个扩展部分为空,留给平台的使用者做扩展使用,根据要求自己独立设计该部分的电路。
图1俯视尺寸规格图(单位:
毫米)
除平台能够独立完成各项实验项目外,为实现对采集的数据进行图形化显示,该平台还可以通过标准的RS-232接口与PC机连接,通过PC机的显示器将数据波形显示出来,同时还可以利用该串行接口对单片机进行仿真或传输控制参数使其工作在设定模式下。
整个功能框图如图2所示。
图2功能框图
四.硬件电路设计
1.硬件功能分析
图4硬件部分电路图
后面有CPLD及单片机,单片机控制液晶显示部分。
图5液晶显示器电路图
2.各部分硬件设计
对于热电阻的测量电路我们可以采用二线式的测量电路等。
而对于我们此次实习则选择利用恒流源模拟此测量部分。
二线式图如下:
图6二线式图
信号取回后需要进行信号的调理,信号调理电路图如下:
图7信号调理电路图
右下角OP07起偏置作用。
调节电位器Rpot1可调节偏置。
上图的差分放大电路的输出连接至程控放大电路的输入。
电路图如下:
图8程控放大电路图
程控放大器的输出信号进入电平抬高电路。
如下:
图9电平抬高电路图
两个二极管起钳位作用。
这个电路是求差电路。
电平抬高电路的输出进入程控滤波电路。
如下图:
图10程控滤波电路图
用到的程控滤波芯片为LTC1569-7,FCLK0是CPLD产生的方波信号,用来控制滤波器截止频率。
若要控制滤波器截止频率为1kHz,CPLD要产生32k的方波信号给FCLK0。
程控滤波电路之后接入A/D转换器。
图如下:
图11AD转换电路图
U20为AD780,它是基准电压芯片。
A/D转换器是AD7655,它是一款16位的A/D,它的数据口D0-D7、控制端口BUSY、CNVST、IMPULSE、BYTESWAP连接至CPLD。
单片机通过往CPLD写控制字来控制A/D的采样率。
单片机部分的电路图如下:
图12单片机部分电路图
五.软件设计
1.编程环境介绍
单片机软件开发采用目前比较通用的Keil51开发软件完成,该软件有很多详细的应用文档,在此不再赘述。
如果不使用硬件仿真器,多数通用单片机都无法实现在线仿真功能,而本实验平台所用单片机SST89V564RD可以实现在线仿真以及程序下载功能,两者皆可以通过PC机的标准RS-232串口与Keil51软件通信实现,其连接示意图如下图,本节主要介绍如何在现有Keil51软件基础上实现上述功能。
针对在线仿真功能,SST公司为方便用户使用单片机调试程序而开发了调试工具SoftICE(SoftwareInCircuitEmulator,在电路软件模拟),该调试工具可实现下述功能:
Ø
下载INTELHEX文件
在线调试及设置断点,支持汇编语言和C51语言
反汇编代码区到8051助记符
读写代码/数据存储器、FSR特殊功能寄存器及PORT端口
IAP(InApplicationProgramming,应用中再编程)功能
软件重启动
图6计算机与实验平台连接示意图
对于我们本次实习的单片机SST89V564RD,我们用keilC51编程环境进行程序的编写。
keilC51软件是众多单片机应用开发的优秀软件之一。
它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计。
界面友好,易学易用。
对于下载的软件我们可以直接用keilC51下载。
同时我们也可以在SST软件的下载页面中下载。
而且这两种下载方式都需要程序生成.HEX文件。
如下图所示:
图13
而应用SoftICE调试工具进行程序在线仿真调试的过程是这样的:
(1)利用SSTBoot-StrapLoader软件将SoftICE直接下载到单片机中,重新上电复位后,单片机中的SoftICE便可以与Keil51软件通信以进行仿真调试,下载界面如下
(2)在Keil51软件上选择使用的单片机型号SST89V564RD;
(3)在Keil51软件的Project下拉菜单中选择“OptionsforTarget‘Monitor51’”;
(4)在OptionsforTarget‘Monitor51’窗口的Debug栏中选择“UseKeilMonitor-51Driver”,由于每次RESET目标板时用户代码区会被擦除,如果用户程序需要在开始时下载到目标板,要勾上“LoadApplicationatStartup”;
(5)点击Settings项,弹出TargetSetup窗口进行配置,可以选择PC机与目标板通信的串行接口及波特率,如果需要显示存储器的实时窗口,请不要选CacheOptions,注意,如果选择了的中断向量3SerialInterrupt去StopProgramExacution,SoftICE将修改在位置0023H个字节,要确保用户程序未占用这些地址;
(6)开始调试,此时可以根据Keil51软件的Debug进行程序调试。
通过View下拉菜单的部分选项可以观察及修改特殊功能寄存器及数据存储器等的内容。
2.软件功能需求分析
单片机软件开发采用目前比较通用的Keil51开发软件完成。
如果不使用硬件仿真器,多数通用单片机都无法实现在线仿真功能,两者皆可以通过PC机的标准RS-232串口与Keil51软件通信实现。
针对在线仿真功能,SST公司为方便用户使用单片机调试程序而开发了调试工具SoftICE(SoftwareInCircuitEmulator,在电路软件模拟)。
该调试工具可实现下述功能:
(1)下载INTELHEX文件;
(2)在线调试及设置断点,支持汇编语言和C51语言;
(3)反汇编代码区到8051助记符;
(4)读写代码/数据存储器、FSR特殊功能寄存器及PORT端口;
(5)IAP(InApplicationProgramming,应用中再编程)功能;
(6)软件重启动。
利用该调试工具我们可以很方便的用计算机对MK-4PC智能仪器实验开发平台进行各项试验及实习。
3.各部分软件设计
a.软件的流程图
图1系统总流程图图2温度转换程序流程图
图3显示流程图图4主函数流程图
b.主程序
ADS7841驱动程序
#include<
iom64v.h>
macros.h>
#include"
delay.h"
ads7841.h"
LCD1602.h"
//----------------------ADS7841控制字节---------------
#definecontrol_byte0b10011000
//bitvaldescription
//bit71start,恒为1
//bit6,5,4001选择CH0为+IN
//bit41选择为单端输入
//bit2X外部MODE接GND,该位无作用,恒为12位
//bit1,000转换期间ADC为掉电模式
voidport_init(void)
{
PORTA=0xFF;
//将所有端口初始化为输入,打开上拉
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0xFF;
DDRC=0x00;
PORTD=0xFF;
DDRD=0x00;
PORTE=0xFF;
DDRE=0x00;
PORTF=0xFF;
DDRF=0x00;
PORTG=0xFF;
DDRG=0x00;
}
voidmain()
unsignedintresult;
unsignedchari,array[4],table[]="
0123456789"
;
port_init();
//端口初始化
LCD1602_init();
//1602液晶初始化
ads7841_init();
//ADS7841初始化
LCD_write_string(0x80,"
result:
"
);
while
(1)
ads7841_start();
//启动ADS7841,即拉低CS
delay_nus(10);
result=ads7841_W_R(control_byte);
//发送控制字,并得到转换数据
result&
=0b0000111111111111;
//屏蔽掉高四位
ads7841_finish();
//停止ADS7841,即拉高CS
for(i=0;
i<
4;
i++)//以下均为显示部分
array[i]=result%10;
//
esult/=10;
i++)
LCD_write_onechar(0x87+i,table[array[3-i]]);
delay_nms(300);
#ifndef_ads7841_h
#define_ads7841_h
defineDCLKPD0
#defineDCLK_ddrDDRD
#defineDCLK_portPORTD
#defineDCLK_pinPIND
#defineCSPD1
#defineCS_ddrDDRD
#defineCS_portPORTD
#defineCS_pinPIND
#defineDINPD2
#defineDIN_ddrDDRD
#defineDIN_portPORTD
#defineDIN_pinPIND
#defineBUSYPD3
#defineBUSY_ddrDDRD
#defineBUSY_portPORTD
#defineBUSY_pinPIND
#defineDOUTPD4
#defineDOUT_ddrDDRD
#defineDOUT_portPORTD
#defineDOUT_pinPIND
defineads7841_start()CS_port&
=~(1<
<
CS)//启运ADS7841
#defineads7841_finish()CS_port|=(1<
CS)//停止ADS7841
voidads7841_init(void);
unsignedintads7841_W_R(unsignedcharbyte);
#endif
/*******************************************************************************
**函数名称:
ads7841_init()
**函数功能:
初始化ADS7841端口
**备注:
无
*******************************************************************************/
voidads7841_init(void)
DCLK_port&
DCLK);
//时钟端初始化为输出低电平
DCLK_ddr|=(1<
CS_port|=(1<
CS);
//片选端初始化为输出高电平
CS_ddr|=(1<
//即不选中ADS7841
DIN_port&
DIN);
//数据输入端初始化为输出低电平
DIN_ddr|=(1<
BUSY_port|=(1<
BUSY);
//忙信号初始化为输入,打开上拉
BUSY_ddr&
DOUT_port|=(1<
DOUT);
//数据输出初始化为输入,打开上拉
DOUT_ddr&
ads7841_W_R
向ADS7841写入控制字节,读出转换好的数
**输入参数:
unsignedcharbyte:
控制字节
unsignedintresult:
AD转换好的数
数据从高位到低位写入,从高位到低位读出
unsignedintads7841_W_R(unsignedcharbyte)
unsignedchari,temp;
unsignedintresult=0;
for(i=0;
8;
i++)//8位数据计数
{
DCLK_port&
//拉低时钟端
if(byte&
0x80)//当前位是否是1
DIN_port|=(1<
//当前位是1,拉高数据端
}
else
DIN_port&
//当前位是0,拉低数据端
//调整时钟和脉冲宽度
DCLK_port|=(1<
//时钟上升沿
byte<
=1;
//数据左移1位,为送出新数据位做准备
delay_nus(10);
i=BUSY_pin;
//读BUSY的状态
if(i&
(1<
BUSY))//如果为高则说明转换完成,应将其读出
//------------------------以下先读出高八位-------------------------------------
for(i=1;
=8;
i++)
result<
//保存读入的数据位
elay_nus(10);
if(DOUT_pin&
DOUT))
result|=0x01;
else
=0xfe;
//-----------------------以下读出低四位----------------------------------------
=4;
temp<
temp|=0x01;
temp&
i++)//再给ADS7841四个时钟
result=(result<
4)+temp;
//将结果合成,返回
returnresult;
LCD驱动程序
lcdwc((GYPOS&
0x1f)|0x80);
//