ADAM4015是研华公司生产的六路电阻温度探测(RTD)模块,可以采集不同类型的电阻温度探测信号,支持两线或者三线的热电阻输入,支持Pt, Balco, Ni等热电阻。在工业和建筑自动化中应用非常广泛。详细的使用说明可以参考研华公司ADAM系列电阻温度探测模块的用户手册,不过是四百多页的纯英文文档,一点一点看还是蛮费事的。独乐乐不如众乐乐,最近在一个项目中用到此温度采集模块,就随手整理了一下,方便大家学习,如有不足,多多包涵。下面来看一下ADAM4015的技术说明书。
支持协议 | ASCII或者MODBUS |
输入连接 | 2线或3线 |
输入类型和温度范围 | Pt100:-50~150℃ 0~100℃ 0~200℃ 0~400℃ -200~200℃ Pt1000:-40~160℃ Balco500:-30~120℃ Ni 50 RTD:-80~100℃ Ni 508 RTD:0~100℃ |
可隔离电压 | 3000VDc |
输入阻抗 | 10MΩ |
位数 | 16位 |
精确度 | 0.1%或者更好 |
供电电压 | +10~+30Vdc |
功耗 | 1.2W(24V供电电压下) |
ADAM系列温度采集模块官方配置了相应的上位机软件Utility,在使用的过程中我们可以配置地址,输入类型,波特率,数据格式,校验和位、每路输入量程范围、通信协议等参数。一个比较简单的方法是先通过Utility配置好,然后直接通过RS485发送指令获取反馈的字符串,然后进行解析,即可以得到各路温度。但是在实际工程中如果要实时更改每路量程范围这就不得不通过其他方法进行配置。我们可以通过ASCII或者MODBUS两种协议来进行配置,但ASCII更简单,下面主要讲解一下如何通过控制器发送ASCII码形式进行配置。
1、首先讲解一下如何获取温度:
指令:#XX(cr)
其中XX是模块的地址编号,默认为01。注意获取温度的指令:#01,其中01为ADAM4015的默认地址,有的4015模块地址为03,我们在使用的时候把地址改成03即可。
ADAM4015模块内置了485电平转换芯片,在使用的时候直接通过485电平进行通信即可,注意两根差分电平信号不要接错。
void RS485_Send_Command(void)
{
RS485_TX_EN=1; //Configure RS485 for sending mode
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==0);
USART_SendData(USART2,'#'); //Send '#'
USART_SendData(USART2,'0'); //Send '0'
USART_SendData(USART2,'1'); //Send '1'
USART_SendData(USART2,0x0D); //Send '\r'
RS485_TX_EN=0; //Configure RS485 as Receiving mode
}
若接收到:>+037.01+023.04+047.98+023.04+041.68+033.34等即为正确。使用起来非常方便,而且精度高、稳定性高、测量范围广。
若未接通六路热电阻,则ADAM4015在接收到获取温度的指令后,响应ASCII为:>+888888+888888+888888+888888+888888+888888
当时在打研华技术咨询时建议发ASCII,并以0XOD 0XOA结束。结果接收直接乱码或者如下所示:
????888+888888+888888+028.70+888888+888888。6路温度中有一路无法解析,当时要哭晕,希望大家不要像我一样走弯路。
2、接下来讲一下如何配置每路的输入类型和量程范围。
指令:%AA7CiRrr(cr)
%:是起始分隔符 AA:(范围是00-FF),代表你将要配置的模拟输入地址
7:是单通道量程配置命令(实际使用中就发送7)
Ci:i表示你想配置的具体输入通道数(对于ADADM4015来说,i取0~5)
Rrr:R就发送R,rr来决定具体的输入类型和量程范围。rr的值详见用户手册,这里就不一一列出。
(cr):终止符。
响应:若为!AA(cr) 则配置成功; 若为?AA(cr)则配置失败;如果输入语法错误或者通道配置错误则没有响应。
例如: 通过485发送: $017C0R21(cr) 响应:!02(cr)
则表示在地址01上配置通道0为模拟输入模块,输入类型为Pt100(IEC) 0~100℃。