前言
热误差是数控机床的最大误差源,数控机床的温度测试为机床热误差的补偿提供依据。传统的测温方案是将模拟信号通过电缆远距离传输至数据采集卡进行A/D转换并处理,实用中必须解决长线传输和模拟量传感器布线等问题。本文介绍了一种新型的设计方案,控制器采用SAMSUNG公司的32位ARM微控制器S3C44BOX,温度传感器采用单总线数字温度传感器DS18B20。采用数字温度传感器即在测试点完成了信号的数字化,提高了传输的可靠性,同时简化了外围电路,也便于传感器在机床上的布置安装。ARM处理器控制数字温度信号的采集,并与上位PC机通讯,同时其他硬件资源提供热补偿系统其他功能。本文在介绍数字温度传感器DS18B20的基础上,给出了系统的软硬件设计方案,对软件实现中的关键点做了详尽的注释说明。
1 数字温度传感器DS18B20介绍
1.1 DS18B20的结构
DS18B20是美国DALLAS公司推出的一种可组网数字温度传感器。DS18B20只有一个数据输入/输出口,是单总线专用芯片。DS18B20工作时,被测温度值直接以单总线的数字方式传输。
DS18B20体积小,电压适用范围宽(3V-5V),可以通过编程实现9~12位的温度读数,即有可调的温度分辨率。测温范围-55℃~+125℃,在-10℃~+85℃时,精度为±0.5℃。其可选封装有TO-92、SOIC及CSP封装。
每个DS18B20出厂时都有一个唯一的64位序列号,因此一条总线上可以同时挂接多个DS18B20而不会出现混乱。 DS18B20包括一个暂存RAM和一个E2RAM。暂存存储器RAM用于存放工作参数和测量值,其作用是保证在单线通讯时的完整性,包括8个字节。E2RAM用于设定非易失性温度报警上下限值TH和TL(调电后依然保存)。内部结构如图1所示。
头两个字节表示测得的温度读数,数据格式如图2所示:
S=1时表示温度为负,S=0时表示温度为正,其余低位以二进制补码形式表示,最低位为1,表示0.0625℃
内部存储器的第五个字节是结构寄存器,主要用于温度值的数字转换分辨率。
1.2 DS18B20的工作时序
DS18B20严格遵循单总线协议,工作时,主机先发一复位脉冲,使总线上的所有DS18B20都被复位,接着发送ROM操作指令,使序列号编码匹配的DS18B20被激活,准备接受下面的RAM访问指令。RAM访问指令控制选中的DS18B20工作状态,完成整个温度转换,读取等工作。在ROM命令发送之前,RAM命令命令不起作用。表1列出了所有操作命令。
整个操作主要包括三个关键过程:主机搜索DS18B20序列号、启动在线DS18B20做温度转换、读取温度值。
其工作流程如图3:
DS18B20对时序及电特性参数要求较高,必须严格按照DS18B20的时序要求去操作。它的数据读写主要由主机读写特定的时间片来完成,包括复位(初始化)、读时间片和写时间片。
(1) 复位时序
使用DS18B20时,首先需将其复位,然后才能执行其它命令。复位时,主机将数据线拉为低电平并保持480μs~960μs,然后释放数据线,再由上拉电阻将数据线拉高15~60μs,等待DS18B20发出存在脉冲,存在脉冲有效时间为60~240μs,这样,就完成了复位操作。其复位时序如图4所示。
(2) “写”时序
在主机对DS18B20写数据时,先将数据线置为高电平,再变为低电平,该低电平应大于1μs。在数据线变为低电平后15μs内,根据写“1”或写“0”使数据线变高或继续为低。DS18B20将在数据线变成低电平后15μs~60μs内对数据线进行采样。要求写入DS18B20的数据持续时间应大于60μs而小于120μs,两次写数据之间的时间间隔应大于1μs。写时隙的时序如图5所示。“读”时序机理类似,不再赘述。
2 系统软硬件设计
2.1 硬件设计
我们采用的控制器是SAMSUNG公司的32位ARM微控制器S3C44BOX,是三星公司为一般应用提供的高性价比和高性能的微控制器的解决方案,功耗小,可靠性高。它使用ARM7TDMI核,工作在66MHz。采用的该ARM控制器将服务于整个热误差补偿系统,完成包括数据处理与通讯、控制等多任务的实现。机床测温系统只使用小部分片上资源。
我们主要通过对I/O引脚的电平读写来完成单总线的通讯,采用ARM内部的定时器产生中断来完成有时隙要求的工作。由于我们通过预分频后产生的计时值单位达到1μs,完全能够满足时序工作的需要。
DS18B20与控制器的接口及其简单,只需将DS18B20的信号线与控制器的一位双向端口连接即可。系统连接如图8所示:
2.2 软件设计
遵循DS18B20单总线通讯协议,温度转换与读取工作的软件流程可表示为图9(该流程是在已经选中激活某个选中的DS18B20以后,选中激活流程软件原理类似,此处省略)。 可见,与DS18B20进行通讯主要完成以下三个基本子程序:初始化程序(复位程序)、‘读’子程序,‘写’子程序。系统采用 C语言进行设计,以下是初始化(复位)子程序,设计如下:
U8 resetpulse(void) //复位函数定义
{
U8 RX=1; //函数返回值设置
rPCONF=0x01; //PF0输出口
rPDATF=0x0; //PF0输出0,拉低
rTCNTB1=0x1f4; //定时缓冲器设定,延时500us
rTCON=0x0200; //定时控制器设定,将定时器1手动更新
rTCON=0x0100; //定时器开启,手动更新关闭
while(TIME); //在定时中断产生以前踏步等待(我们在中断中改变这个标志值)
rPDATF=0x01; //低脉冲时间500us已过,PF0置高
TIME=1; //将TIME值恢复
rTCON=0x0; //关闭定时器
rTCNTB1=60; //延时60us
rTCON=0x0200;
rTCON=0x0100;
while(TIME);
TIME=1;
rTCON=0x0;
rPCONF=0x0; //改为输入口,进行读值
if((rPDATF & 0x01)==0) //读到PF0口为低时说明存在脉冲收到
{RX=0;}
rTCNTB1=0x0190; //延时400us
rTCON=0x0200;
rTCON=0x0100;
while(TIME);
TIME=1;
rTCON=0x0;
return(RX); //函数返回RX值,在收到存在脉冲时RX为零
}
调用该初始化程序就可以实现复位要求。“读”子程序、“写”子程序实现机制类似,代码不再赘述。在单总线协议下,通过调用这几个子程序进行相应的控制,就能完成主机与DS18B20的通讯,实现温度的采集。
3 结论
本系统接口电路简单,通讯可靠,集成后的系统运行良好,测试精度高,试验证明能完成预定测试任务。