本文介紹如何通過EsDA開發(fā)套件,快速完成一個(gè)I2C采集數(shù)據(jù)的監(jiān)控報(bào)警系統(tǒng),通過該系統(tǒng)可以減少I2C設(shè)備的故障損失和維修成本。
?簡介
本文基于前文的一篇I2C博客文章繼續(xù)拓展I2C實(shí)時(shí)采集后的監(jiān)控報(bào)警實(shí)驗(yàn),PT100溫度傳感器的溫度采集和讀取顯示不在本文贅述,具體詳細(xì)的操作步驟可在《EsDA MPC-ZC1 快速實(shí)現(xiàn)I2C采集監(jiān)控》文章中查看。
實(shí)驗(yàn)基于EsDA開發(fā)平臺(tái),MPC_ZC1作為I2C主機(jī)設(shè)備,TPS02測(cè)溫模塊作為從機(jī)設(shè)備。因本實(shí)驗(yàn)器材是高精度儀器,但實(shí)驗(yàn)環(huán)境有限所以溫度波動(dòng)范圍較大,所以本實(shí)驗(yàn)通過報(bào)警機(jī)制模擬恒溫箱(恒溫45℃,誤差±5℃)的實(shí)驗(yàn)場(chǎng)景。設(shè)計(jì)步驟如下:
設(shè)置過溫值和低溫值;
配置TPS02測(cè)溫模塊configurature寄存器的工作模式;
讀取TPS02測(cè)溫模塊configurature寄存器的ALERT報(bào)警狀態(tài)位,過溫和低溫時(shí)做相應(yīng)的操作。
該實(shí)驗(yàn)主要用到timer、fscript、i2c_master_read、i2c_master_write和log節(jié)點(diǎn),具體實(shí)現(xiàn)請(qǐng)見下文。
?模擬恒溫箱業(yè)務(wù)邏輯
1. 設(shè)置過溫值和低溫值
自TPS02RAH從機(jī)設(shè)備中讀取到的實(shí)時(shí)溫度>過溫值,則說明需要減緩加熱功率;自TPS02RAH從機(jī)設(shè)備中讀取到的實(shí)時(shí)溫度
本次實(shí)現(xiàn)需要用到 timer,fscript, i2c_master_write 這些節(jié)點(diǎn):
timer:timer節(jié)點(diǎn)用于觸發(fā)I2C節(jié)點(diǎn)寫入值,因過溫值和低溫值不需要頻繁被設(shè)置所以timer的定時(shí)周期設(shè)置大一點(diǎn);
fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊(cè)可知,設(shè)置溫度的上、下限值,都是6個(gè)字節(jié),前三個(gè)字節(jié)對(duì)應(yīng)通道1的上、下限值,后三個(gè)字節(jié)對(duì)應(yīng)通道2的上、下限值。
i2c_master_write:主要用于向從機(jī)設(shè)備的Thigh寄存器寫溫度上限值,Tlow寄存器寫溫度下限值。
本實(shí)驗(yàn)采用的是通道1 ,上限值是50℃(0x06 4000),下限值是45℃(0x05 A000)。
1.1添加節(jié)點(diǎn)并連線
timer節(jié)點(diǎn)觸發(fā)通過I2C向TPS02RAH設(shè)備的Thigh寄存器和Tlow寄存器寫入過溫值和低溫值,將timer,fscript,i2c_master_write節(jié)點(diǎn)加入到畫布中,并繪制連線。
1.2 配置節(jié)點(diǎn)
雙擊timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),觸發(fā)i2c_master_write節(jié)點(diǎn)寫入溫度上、下限值。
雙擊i2c_master_write的輸入節(jié)點(diǎn)fscript,并查看TPS02RAH測(cè)溫模塊的數(shù)據(jù)手冊(cè)。得知TPS02RAH的Thigh寄存器有6個(gè)字節(jié)是設(shè)置溫度的上限值,測(cè)溫模塊有兩個(gè)通道,所以前三個(gè)字節(jié)設(shè)置通道1的溫度上限值,后三個(gè)字節(jié)設(shè)置通道2 的溫度上限值;而Tlow寄存器有6個(gè)字節(jié)是設(shè)置溫度的下限值,同樣,前三個(gè)字節(jié)設(shè)置通道1的溫度下限值,后三個(gè)字節(jié)設(shè)置通道2的溫度下限值。
設(shè)置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
設(shè)置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節(jié)點(diǎn),打開屬性面板根據(jù)TPS02RAH數(shù)據(jù)手冊(cè)設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時(shí)鐘頻率。
配置I2C從機(jī)設(shè)備寄存器Tlow寄存器(0x02)如下:
配置I2C從機(jī)設(shè)備寄存器Thigh?寄存器(0x03)如下:
2. 配置報(bào)警模式根據(jù)TPS02RAH的數(shù)據(jù)手冊(cè)可知,報(bào)警模式需要在configurature寄存器中進(jìn)行設(shè)置。后讀取configurature寄存器的ALERT報(bào)警狀態(tài)位來報(bào)警。本實(shí)驗(yàn)需要使能通道1 的配置,且需要連續(xù)測(cè)試的溫度值有2個(gè)均大于Thigh或者均小于Tlow的情況下才能報(bào)警置位(防止溫度不穩(wěn)定,忽高忽低頻繁假報(bào)警)。
本次實(shí)現(xiàn)需要用到 timer,fscript, i2c_master_write 這些節(jié)點(diǎn):
timer: timer節(jié)點(diǎn)用于觸發(fā)I2C節(jié)點(diǎn)寫入值,因報(bào)警模式不需要頻繁被設(shè)置所以timer的定時(shí)周期設(shè)置大一點(diǎn);
fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊(cè)可知,設(shè)置configurature寄存器共兩個(gè)字節(jié)。分別代表兩個(gè)通道,第一個(gè)字節(jié)配置通道 1,第二個(gè)字節(jié)配置通道2。本實(shí)驗(yàn)使用的是通道1;
i2c_master_write:主要用于向從機(jī)設(shè)備的configurature寄存器寫工作模式。
2.1添加節(jié)點(diǎn)并連線
timer節(jié)點(diǎn)觸發(fā)通過I2C向TPS02RAH設(shè)備的configurature寄存器寫入報(bào)警模式,將timer,fscript,i2c_master_write節(jié)點(diǎn)加入到畫布中,并繪制連線。
2.2配置節(jié)點(diǎn)
雙擊timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),觸發(fā)i2c_master_write節(jié)點(diǎn)寫入報(bào)警模式。
雙擊i2c_master_write的輸入節(jié)點(diǎn)fscript,因需要使用通道1 且根據(jù)數(shù)據(jù)手冊(cè)可知:因不支持待機(jī)模式所以SD置0;報(bào)警信號(hào)輸出TM為0比較模式;報(bào)警引腳輸出信號(hào)狀態(tài)控制POL為0;因本實(shí)驗(yàn)采取的PT100精度頗高響應(yīng)超快所以當(dāng)在過溫或低溫狀態(tài)下,觸發(fā) ALERT 輸出信號(hào)的溫度值測(cè)試個(gè)數(shù)為2,所以F1置0,F0置1;通道1 的EN置0,使能配置;所以讀取configurature寄存器的ALERT報(bào)警狀態(tài)位時(shí),初始狀態(tài)為高,當(dāng)高于Thigh超溫時(shí),則ALERT報(bào)警狀態(tài)為0,當(dāng)?shù)陀赥low超溫時(shí),則ALERT報(bào)警狀態(tài)為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節(jié)點(diǎn),打開屬性面板根據(jù)TPS02RAH數(shù)據(jù)手冊(cè)設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時(shí)鐘頻率。
3. 讀取報(bào)警狀態(tài)
根據(jù)數(shù)據(jù)手冊(cè)以及2.2的操作可知,除去初始狀態(tài),configurature寄存器的ALERT報(bào)警狀態(tài)變?yōu)?時(shí)為超溫狀態(tài);configurature寄存器的ALERT報(bào)警狀態(tài)變?yōu)?時(shí)為低溫狀態(tài)。
本次實(shí)現(xiàn)需要用到 timer,fscript, i2c_master_read, fscript, log 這些節(jié)點(diǎn):
- timer: timer節(jié)點(diǎn)用于定時(shí)觸發(fā)I2C節(jié)點(diǎn)讀取數(shù)據(jù);
- fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊(cè)可知,設(shè)置configurature寄存器共兩個(gè)字節(jié)。分別代表兩個(gè)通道,第一個(gè)字節(jié)配置通道 1,第二個(gè)字節(jié)配置通道2。本實(shí)驗(yàn)使用的是通道1。并將讀取出來的ALERT報(bào)警狀態(tài)提取出來;
- i2c_master_read:主要用于向從機(jī)設(shè)備的configurature寄存器讀取ALERT報(bào)警狀態(tài);
- log:將報(bào)警狀態(tài)打印顯示。
3.1添加節(jié)點(diǎn)并連線
timer節(jié)點(diǎn)定時(shí)觸發(fā)通過I2C向TPS02RAH設(shè)備的configurature寄存器讀取報(bào)警模式,將timer,fscript,i2c_master_read,log節(jié)點(diǎn)加入到畫布中,并繪制連線。
3.2配置節(jié)點(diǎn)
雙擊timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),觸發(fā)i2c_master_read節(jié)點(diǎn)讀取報(bào)警模式。
雙擊i2c_master_read的輸入節(jié)點(diǎn)fscript,并查看數(shù)據(jù)手冊(cè)。將configurature寄存器的兩個(gè)字節(jié)讀取出來。
雙擊i2c_master_read節(jié)點(diǎn),打開屬性面板根據(jù)TPS02RAH數(shù)據(jù)手冊(cè)設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時(shí)鐘頻率。
雙擊i2c_master_read的消費(fèi)者節(jié)點(diǎn)fscript,將通道1 的ALERT報(bào)警狀態(tài)從讀取到的兩個(gè)字節(jié)的configurature寄存器數(shù)據(jù)提取出來。
因stat是ALERT報(bào)警狀態(tài)位的賦值,由數(shù)據(jù)手冊(cè)可知,當(dāng)報(bào)警信號(hào)輸出TM為0比較模式,報(bào)警引腳輸出信號(hào)狀態(tài)控制POL為0時(shí),ALERT報(bào)警狀態(tài)位的賦值stat的初始值是1。因?yàn)橹恍璩跏蓟淮嗡詫tat變量放在Initialize中進(jìn)行初始化:
Initialize:
stat = 1;
Function:
//將讀取的6個(gè)uint8_t類型的數(shù)據(jù)打印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,超溫報(bào)警 print("high temp error!\n"); } else if(stat == 1) { //通道1 從0--->1,低溫報(bào)警 print("low temp error!\n"); }}
?模擬恒溫箱業(yè)務(wù)實(shí)現(xiàn)本模擬實(shí)驗(yàn)在高溫報(bào)警時(shí)采取遠(yuǎn)離熱水源的形式來達(dá)到減少加熱功率的操作;在低溫報(bào)警時(shí)采取靠近熱水源的形式來達(dá)到增大加熱功率的操作,來實(shí)現(xiàn)模擬恒溫箱。并結(jié)合EsDA MPC-ZC1快速實(shí)現(xiàn)I2C采集監(jiān)測(cè)實(shí)驗(yàn)來實(shí)時(shí)讀取PT100的溫度值。實(shí)物接線圖如下:
因讀取溫度傳感器的數(shù)據(jù)處理比報(bào)警機(jī)制處理邏輯要稍靠后一點(diǎn),顯示報(bào)警狀態(tài)后就立馬采取了相應(yīng)的減緩功率措施或增加功率措施。所以下圖大部分只截圖到正常的溫度顯示和報(bào)警打印顯示,而沒有具體的超溫/低溫溫度顯示。實(shí)驗(yàn)結(jié)果如下:
讀取configurature寄存器的ALERT報(bào)警狀態(tài)位可知此時(shí)是低溫報(bào)警,此時(shí)需要增加功率。
讀取configurature寄存器的ALERT報(bào)警狀態(tài)位可知此時(shí)是高溫報(bào)警,此時(shí)需要減緩功率。讀取configurature寄存器的ALERT報(bào)警狀態(tài)位可知此時(shí)是低溫報(bào)警,此時(shí)需要增加功率。實(shí)驗(yàn)結(jié)果:通過報(bào)警機(jī)制可保持45℃恒溫,上下5℃波動(dòng)。
-
開發(fā)
+關(guān)注
關(guān)注
0文章
364瀏覽量
40788 -
I2C
+關(guān)注
關(guān)注
28文章
1477瀏覽量
123052 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7496 -
MPC
+關(guān)注
關(guān)注
2文章
36瀏覽量
21193
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論