1
本文介绍如何通过EsDA开发套件,快速完成一个I2C采集数据的监控报警系统,通过该系统可以减少I2C设备的故障损失和维修成本。
简介
本文基于前文的一篇I2C博客文章继续拓展I2C实时采集后的监控报警实验,PT100温度传感器的温度采集和读取显示不在本文赘述,具体详细的操作步骤可在《EsDA MPC-ZC1 快速实现I2C采集监控》文章中查看。
实验基于EsDA开发平台,MPC_ZC1作为I2C主机设备,TPS02测温模块作为从机设备。因本实验器材是高精度仪器,但实验环境有限所以温度波动范围较大,所以本实验通过报警机制模拟恒温箱(恒温45℃,误差±5℃)的实验场景。设计步骤如下:
设置过温值和低温值;
配置TPS02测温模块configurature寄存器的工作模式;
读取TPS02测温模块configurature寄存器的ALERT报警状态位,过温和低温时做相应的操作。
该实验主要用到timer、fscript、i2c_master_read、i2c_master_write和log节点,具体实现请见下文。
模拟恒温箱业务逻辑
1. 设置过温值和低温值
自TPS02RAH从机设备中读取到的实时温度 > 过温值,则说明需要减缓加热功率;自TPS02RAH从机设备中读取到的实时温度 < 过温值,则说明需要增大加热功率。通过以上逻辑去设置模拟恒温箱的过温值和低温值。
本次实现需要用到 timer,fscript, i2c_master_write 这些节点:
timer:timer节点用于触发I2C节点写入值,因过温值和低温值不需要频繁被设置所以timer的定时周期设置大一点;
fscript:根据TPS02设备的数据手册可知,设置温度的上、下限值,都是6个字节,前三个字节对应通道1的上、下限值,后三个字节对应通道2的上、下限值。
i2c_master_write:主要用于向从机设备的Thigh 寄存器写温度上限值,Tlow 寄存器写温度下限值。
本实验采用的是通道1 ,上限值是50℃(0x06 40 00),下限值是45℃(0x05 A0 00)。
1.1 添加节点并连线
timer节点触发通过I2C向TPS02RAH设备的Thigh 寄存器和Tlow 寄存器写入过温值和低温值,将timer,fscript,i2c_master_write节点加入到画布中,并绘制连线。
1.2 配置节点
双击timer节点,打开属性面板设置定时周期(ms),触发i2c_master_write节点写入温度上、下限值。
双击i2c_master_write的输入节点fscript,并查看TPS02RAH测温模块的数据手册。得知TPS02RAH的Thigh 寄存器有6个字节是设置温度的上限值,测温模块有两个通道,所以前三个字节设置通道1的温度上限值,后三个字节设置通道2 的温度上限值; 而Tlow 寄存器有6个字节是设置温度的下限值,同样,前三个字节设置通道1的温度下限值,后三个字节设置通道2的温度下限值。
设置Tlow 寄存器(0x02)如下:
print(msg.payload)
wb = wbuffer_create()wbuffer_write_uint8(wb,0x05)wbuffer_write_uint8(wb,0xA0)wbuffer_write_uint8(wb,0x00)wbuffer_write_uint8(wb,0x7F)wbuffer_write_uint8(wb,0xFF)wbuffer_write_uint8(wb,0xFA)
output.payload = wbuffer_get_data(wb)output.payloadLength = 6output.subAddress = 0x02
设置Thigh 寄存器(0x03)如下:
print(msg.payload)
wb = wbuffer_create()wbuffer_write_uint8(wb,0x06)wbuffer_write_uint8(wb,0x40)wbuffer_write_uint8(wb,0x00)wbuffer_write_uint8(wb,0x7F)wbuffer_write_uint8(wb,0xFF)wbuffer_write_uint8(wb,0xFA)
output.payload = wbuffer_get_data(wb)output.payloadLength = 6output.subAddress = 0x03
双击i2c_master_write节点,打开属性面板根据TPS02RAH数据手册设置如下图所示,并点击I2C主机配置的铅笔图标去设置I2C主机设备路径名和时钟频率。
配置I2C从机设备寄存器Tlow 寄存器(0x02)如下:
配置I2C从机设备寄存器Thigh 寄存器(0x03)如下:
2. 配置报警模式根据TPS02RAH的数据手册可知,报警模式需要在configurature寄存器中进行设置。后读取configurature寄存器的ALERT报警状态位来报警。本实验需要使能通道1 的配置,且需要连续测试的温度值有2个均大于Thigh 或者均小于Tlow 的情况下才能报警置位(防止温度不稳定,忽高忽低频繁假报警)。
本次实现需要用到 timer,fscript, i2c_master_write 这些节点:
timer: timer节点用于触发I2C节点写入值,因报警模式不需要频繁被设置所以timer的定时周期设置大一点;
fscript: 根据TPS02设备的数据手册可知,设置configurature寄存器共两个字节。分别代表两个通道,第一个字节配置通道 1,第二个字节配置通道2。本实验使用的是通道1;
i2c_master_write:主要用于向从机设备的configurature寄存器写工作模式。
2.1 添加节点并连线
timer节点触发通过I2C向TPS02RAH设备的configurature寄存器写入报警模式,将timer,fscript,i2c_master_write节点加入到画布中,并绘制连线。
2.2 配置节点
双击timer节点,打开属性面板设置定时周期(ms),触发i2c_master_write节点写入报警模式。
双击i2c_master_write的输入节点fscript,因需要使用通道1 且根据数据手册可知:因不支持待机模式所以SD置0;报警信号输出TM为0比较模式;报警引脚输出信号状态控制POL为0;因本实验采取的PT100精度颇高响应超快所以当在过温或低温状态下,触发 ALERT 输出信号的温度值测试个数为2,所以F1置0,F0置1;通道1 的EN置0,使能配置;所以读取configurature寄存器的ALERT报警状态位时,初始状态为高,当高于Thigh 超温时,则ALERT报警状态为0,当低于Tlow 超温时,则ALERT报警状态为1。
print(msg.payload)
wb = wbuffer_create()wbuffer_write_uint8(wb,0x28)wbuffer_write_uint8(wb,0xb8)
output.payload = wbuffer_get_data(wb)output.payloadLength = 2output.subAddress = 0x01
双击i2c_master_write节点,打开属性面板根据TPS02RAH数据手册设置如下图所示,并点击I2C主机配置的铅笔图标去设置I2C主机设备路径名和时钟频率。
3. 读取报警状态
根据数据手册以及2.2的操作可知,除去初始状态,configurature寄存器的ALERT报警状态变为0时为超温状态;configurature寄存器的ALERT报警状态变为1时为低温状态。
本次实现需要用到 timer,fscript, i2c_master_read, fscript, log 这些节点:
3.1 添加节点并连线
timer节点定时触发通过I2C向TPS02RAH设备的configurature寄存器读取报警模式,将timer,fscript,i2c_master_read,log节点加入到画布中,并绘制连线。
3.2 配置节点
双击timer节点,打开属性面板设置定时周期(ms),触发i2c_master_read节点读取报警模式。
双击i2c_master_read的输入节点fscript,并查看数据手册。将configurature寄存器的两个字节读取出来。
双击i2c_master_read节点,打开属性面板根据TPS02RAH数据手册设置如下图所示,并点击I2C主机配置的铅笔图标去设置I2C主机设备路径名和时钟频率。
双击i2c_master_read的消费者节点fscript,将通道1 的ALERT报警状态从读取到的两个字节的configurature寄存器数据提取出来。
因stat是ALERT报警状态位的赋值,由数据手册可知,当报警信号输出TM为0比较模式,报警引脚输出信号状态控制POL为0时,ALERT报警状态位的赋值stat的初始值是1。因为只需初始化一次所以将stat变量放在Initialize中进行初始化:
Initialize:
stat = 1;
Function:
//将读取的6个uint8_t类型的数据打印rb = rbuffer_create(msg.payload, msg.payloadLength)print("length: "+ msg.payloadLength)
for(var i=0; i1) { d = rbuffer_read_uint8(rb); if(i == 0){ msg.channel1 = (d>>6) & 0x01; } msg.channel2 = (d>>6) & 0x01;}
if(stat != msg.channel1) { stat = msg.channel1; if(stat == 0) { //通道1 从1-->0,超温报警 print("high temp error!\n"); } else if(stat == 1) { //通道1 从0--->1,低温报警 print("low temp error!\n"); }}
模拟恒温箱业务实现本模拟实验在高温报警时采取远离热水源的形式来达到减少加热功率的操作;在低温报警时采取靠近热水源的形式来达到增大加热功率的操作,来实现模拟恒温箱。并结合EsDA MPC-ZC1快速实现I2C采集监测实验来实时读取PT100的温度值。实物接线图如下:
因读取温度传感器的数据处理比报警机制处理逻辑要稍靠后一点,显示报警状态后就立马采取了相应的减缓功率措施或增加功率措施。所以下图大部分只截图到正常的温度显示和报警打印显示,而没有具体的超温/低温温度显示。实验结果如下:
读取configurature寄存器的ALERT报警状态位可知此时是低温报警,此时需要增加功率。
读取configurature寄存器的ALERT报警状态位可知此时是高温报警,此时需要减缓功率。读取configurature寄存器的ALERT报警状态位可知此时是低温报警,此时需要增加功率。实验结果:通过报警机制可保持45℃恒温,上下5℃波动。
全部0条评论
快来发表一下你的评论吧 !