智能仪表设计原理
2.多路温度测量仪总体设计方案
2.1 系统的硬件结构设计 根据设备的控制需求,CPU控制电路选用性能优良的8位单片机 (ATMEL公司生产的,型号:AT89C52)为控制核心。 2.1.1 微控制器AT89C52主要特性和功能框图 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取 数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技 术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和 Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系 统控制应用场合。 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同 时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信 口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在 线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储 器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发
_nop_();_nop_();_nop_();_nop_();_nop_(); begin_addr ++; /* 写一个字节 */ ISP_ADDRH = (unsigned char)(begin_addr >> 8); ISP_ADDRL = (unsigned char)(begin_addr & 0x00ff);
图2- LM35的接口电路
2.1.4 温度采样电路设计 本装置采用4个单8通道数字控制模拟电子开关(CD4051),做 多可采集32路温度信号。检测电路原理图如下:
图3-检测电路原理图
2.1.5 AD转换和DA转换电路设计 本装置AD转换采用10位的AD芯片TCL1549,DA转换采用10位的 TLC5615,确保了测量的精度。 具体电路如下:
for(i = 0; i< counter; i++) { /* 写一个字节 */ ISP_ADDRH = (unsigned char)(begin_addr >> 8); ISP_ADDRL = (unsigned char)(begin_addr & 0x00ff); ISP_DATA = (unsigned char)(array[i]>>8); ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */ ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_ 0000,0010 */ ISP_TRIG = 0x5a; /* 触发ISP_IAP命令 */ ISP_TRIG = 0xa5; /* 触发ISP_IAP命令 */ _nop_();_nop_();_nop_();_nop_();_nop_();
图4- AD转换电路
图5- DA转换电路
2.1.6 人机界面电路设计 本装置面板上采用1个四位LED数码显示,显示各路温度,同时面 板上还有三个轻触按键,按键的功能分别是:上升键、下降键、确认 键。通过按键和显示电路,可以单独设定每路温度的过/欠温值。具体 电路1.7通信电路设计 本装置在背板上配有一个RS485通信端口,用户通过该通讯端口, 可以在后台读取温度信息,并可以设定每路温度的过/欠温值。具体电 路如下图:
图7- RS485 通信电路
2.2 系统的软件设计 在软件系统设计方面,整个温度测控制的软件设计可分为以下几个 内容: 1、初始化(采集系统参数设置和参数的存储) 2、AD转换的控制和数据读取 3、显示采集数据 4、后台通信 软件的内容只有通过合理的分配,才能确保整个装置运行的稳定 性。 软件的主程序的流程图如下:
图8- 温度监控系统的软件流程图
2.2.1采集系统参数设置和参数的存储的程序设计 根据实际工况的需求可以单独设定每路测量温度的过/欠温值,并 将设置好的参数存到CPU内部自带的EEPROM内。 #include <reg52.h> #include <intrins.h> sfr ISP_DATA = 0xc2; sfr ISP_ADDRH = 0xc3; sfr ISP_ADDRL = 0xc4; sfr ISP_CMD = 0xc5; sfr ISP_TRIG = 0xc6; sfr ISP_CONTR = 0xc7; extern void Delay (unsigned int y); #define READ_AP_and_Data_Memory_Command 0x01 /* 字节读应用程序区和数据存储区 */ #define PROGRAM_AP_and_Data_Memory_Command 0x02 /* 字节编程应用程序区和数据存储区 */ #define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 /* 扇区擦除应用程序区和数据存储区 */ /* 定义Flash 操作等待时间 */ #define WAIT_TIME 0x02 void ISP_IAP_enable(void) { EA = 0; /* close intermit */
成本。
2.1.2主要功能特性 · 兼容MCS51指令系统 · 8k可反复擦写(>1000次)Flash ROM · 32个双向I/O口,256x8bit内部RAM · 3个16位可编程定时/计数器中断,时钟频率0-24MHz · 2个串行中断 ,可编程UART串行通道 · 2个外部中断源 · 共8个中断源 · 2个读写中断口线 ,3级加密位 · 低功耗空闲和掉电模式 · 软件设置睡眠和唤醒功能
ISP_CONTR */ ISP_CONTR ISP_CONTR */
= = =
ISP_CONTR & 0x18; ISP_CONTR | WAIT_TIME; ISP_CONTR | 0x80;
/* 0001,1000
/* 1000,0000
} void ISP_IAP_disable(void) { ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */ ISP_TRIG = 0x00; EA = 1; } /* 读字节 */ unsigned int byte_read(unsigned int byte_addr) { unsigned int m; ISP_ADDRH = (unsigned char)(byte_addr >> 8); ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */ ISP_CMD = ISP_CMD | READ_AP_and_Data_Memory_Command /* 0000,0001 read */ ISP_IAP_enable(); ISP_TRIG = 0x5a; ISP_TRIG = 0xa5; _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); ISP_IAP_disable();
图1- 微控制器AT89C52接口电路 2.1.3 温度传感器选型 温度传感器采用LM35CA(可测温度范围为-40- +110℃),LM35 是由 国半公司所生产的温度传感器,其输出电压与摄氏温标呈线性关系,转 换公式如式,0 时输出为0V,每升高1℃,输出电压增加10mV。 LM35 有多种不同封装型式,在常温下,LM35 不需要额外的校准处 理即可达到 ±1/4℃的准确率。 其电源供应模式有单电源与正负双电 源两种,正负双电源的供电模式可提供负温度的量测;两种接法的静止 电流-温度关系,在静止温度中自热效应低(0.08℃),单电源模式在 25℃下静止电流约50μA,工作电压较宽,可在4—20V的供电电压范围 内正常工作非常省电。
多点温度测控仪系统的设计
1.多路温度测量系统概述
在工农业生产和日常生活中,对温度的监测始终占据着极其重要 的地位。当前使用广泛硬件电路直接采集温度的系统,虽然可以满足大 部分的需求,但是随着科学技术的不断发展,对温度监测的要求不断提 高,比如在精度、实时性、和功能扩展性等。此时,硬件电路系统的性 能局限性问题就比较突出。基于以上原因,设计并实现了基于51系列单 片机位控制核心的温度监测系统。在温度测量上,使用高精度的LM35CA 温度传感器,具有精度高、系统扩展性强、可靠性高、实时性能好、体 积小、功耗低等特点。
ISP_DATA = (unsigned char)(array[i]&0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */ ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_ 0000,0010 */ ISP_TRIG = 0x5a; /* 触发ISP_IAP命令 */ ISP_TRIG = 0xa5; /* 触发ISP_IAP命令 */ _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); begin_addr ++; } ISP_IAP_disable(); } 2.2.2 温度信号经AD转换的程序设计 A/D转换程序是将温度信号的模拟值转换成数字值送给CPU。 unsigned int AD_transition(void) { unsigned char i; unsigned int adtemp; AD_CS = 1; //屏蔽I/O CLOCK Delay(2); AD_CS = 0; //使能I/O CLOCK,DATA
sector_addr = (begin_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */ ISP_ADDRH = (unsigned char)(sector_addr >> 8); ISP_ADDRL = 0x00; ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */ ISP_CMD = ISP_CMD | SECTOR_ERASE_AP_and_Data_Memory_Command; /* 0000,0011 */ ISP_IAP_enable(); ISP_TRIG = 0x5a; /* 触发ISP_IAP命令 */ ISP_TRIG = 0xa5; /* 触发ISP_IAP命令 */ _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();