本文介紹如何通過EsDA開發(fā)套件,快速完成一個I2C采集數(shù)據(jù)的監(jiān)控報(bào)警系統(tǒng),通過該系統(tǒng)可以減少I2C設(shè)備的故障損失和維修成本。
?簡介
本文基于前文的一篇I2C博客文章繼續(xù)拓展I2C實(shí)時采集后的監(jiān)控報(bào)警實(shí)驗(yàn),PT100溫度傳感器的溫度采集和讀取顯示不在本文贅述,具體詳細(xì)的操作步驟可在《EsDA MPC-ZC1 快速實(shí)現(xiàn)I2C采集監(jiān)控》文章中查看。
實(shí)驗(yàn)基于EsDA開發(fā)平臺,MPC_ZC1作為I2C主機(jī)設(shè)備,TPS02測溫模塊作為從機(jī)設(shè)備。因本實(shí)驗(yàn)器材是高精度儀器,但實(shí)驗(yàn)環(huán)境有限所以溫度波動范圍較大,所以本實(shí)驗(yàn)通過報(bào)警機(jī)制模擬恒溫箱(恒溫45℃,誤差±5℃)的實(shí)驗(yàn)場景。設(shè)計(jì)步驟如下:
設(shè)置過溫值和低溫值;
配置TPS02測溫模塊configurature寄存器的工作模式;
讀取TPS02測溫模塊configurature寄存器的ALERT報(bào)警狀態(tài)位,過溫和低溫時做相應(yīng)的操作。
該實(shí)驗(yàn)主要用到timer、fscript、i2c_master_read、i2c_master_write和log節(jié)點(diǎn),具體實(shí)現(xiàn)請見下文。
?模擬恒溫箱業(yè)務(wù)邏輯
1. 設(shè)置過溫值和低溫值
自TPS02RAH從機(jī)設(shè)備中讀取到的實(shí)時溫度>過溫值,則說明需要減緩加熱功率;自TPS02RAH從機(jī)設(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è)置大一點(diǎn);
fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊可知,設(shè)置溫度的上、下限值,都是6個字節(jié),前三個字節(jié)對應(yīng)通道1的上、下限值,后三個字節(jié)對應(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è)置定時周期(ms),觸發(fā)i2c_master_write節(jié)點(diǎn)寫入溫度上、下限值。
雙擊i2c_master_write的輸入節(jié)點(diǎn)fscript,并查看TPS02RAH測溫模塊的數(shù)據(jù)手冊。得知TPS02RAH的Thigh寄存器有6個字節(jié)是設(shè)置溫度的上限值,測溫模塊有兩個通道,所以前三個字節(jié)設(shè)置通道1的溫度上限值,后三個字節(jié)設(shè)置通道2 的溫度上限值;而Tlow寄存器有6個字節(jié)是設(shè)置溫度的下限值,同樣,前三個字節(jié)設(shè)置通道1的溫度下限值,后三個字節(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ù)手冊設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時鐘頻率。
配置I2C從機(jī)設(shè)備寄存器Tlow寄存器(0x02)如下:
配置I2C從機(jī)設(shè)備寄存器Thigh?寄存器(0x03)如下:
2. 配置報(bào)警模式根據(jù)TPS02RAH的數(shù)據(jù)手冊可知,報(bào)警模式需要在configurature寄存器中進(jìn)行設(shè)置。后讀取configurature寄存器的ALERT報(bào)警狀態(tài)位來報(bào)警。本實(shí)驗(yàn)需要使能通道1 的配置,且需要連續(xù)測試的溫度值有2個均大于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è)置大一點(diǎn);
fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊可知,設(shè)置configurature寄存器共兩個字節(jié)。分別代表兩個通道,第一個字節(jié)配置通道 1,第二個字節(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è)置定時周期(ms),觸發(fā)i2c_master_write節(jié)點(diǎn)寫入報(bào)警模式。
雙擊i2c_master_write的輸入節(jié)點(diǎn)fscript,因需要使用通道1 且根據(jù)數(shù)據(jù)手冊可知:因不支持待機(jī)模式所以SD置0;報(bào)警信號輸出TM為0比較模式;報(bào)警引腳輸出信號狀態(tài)控制POL為0;因本實(shí)驗(yàn)采取的PT100精度頗高響應(yīng)超快所以當(dāng)在過溫或低溫狀態(tài)下,觸發(fā) ALERT 輸出信號的溫度值測試個數(shù)為2,所以F1置0,F0置1;通道1 的EN置0,使能配置;所以讀取configurature寄存器的ALERT報(bào)警狀態(tài)位時,初始狀態(tài)為高,當(dāng)高于Thigh超溫時,則ALERT報(bào)警狀態(tài)為0,當(dāng)?shù)陀赥low超溫時,則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ù)手冊設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時鐘頻率。
3. 讀取報(bào)警狀態(tài)
根據(jù)數(shù)據(jù)手冊以及2.2的操作可知,除去初始狀態(tài),configurature寄存器的ALERT報(bào)警狀態(tài)變?yōu)?時為超溫狀態(tài);configurature寄存器的ALERT報(bào)警狀態(tài)變?yōu)?時為低溫狀態(tài)。
本次實(shí)現(xiàn)需要用到 timer,fscript, i2c_master_read, fscript, log 這些節(jié)點(diǎn):
- timer: timer節(jié)點(diǎn)用于定時觸發(fā)I2C節(jié)點(diǎn)讀取數(shù)據(jù);
- fscript:根據(jù)TPS02設(shè)備的數(shù)據(jù)手冊可知,設(shè)置configurature寄存器共兩個字節(jié)。分別代表兩個通道,第一個字節(jié)配置通道 1,第二個字節(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)定時觸發(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è)置定時周期(ms),觸發(fā)i2c_master_read節(jié)點(diǎn)讀取報(bào)警模式。
雙擊i2c_master_read的輸入節(jié)點(diǎn)fscript,并查看數(shù)據(jù)手冊。將configurature寄存器的兩個字節(jié)讀取出來。
雙擊i2c_master_read節(jié)點(diǎn),打開屬性面板根據(jù)TPS02RAH數(shù)據(jù)手冊設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時鐘頻率。
雙擊i2c_master_read的消費(fèi)者節(jié)點(diǎn)fscript,將通道1 的ALERT報(bào)警狀態(tài)從讀取到的兩個字節(jié)的configurature寄存器數(shù)據(jù)提取出來。
因stat是ALERT報(bào)警狀態(tài)位的賦值,由數(shù)據(jù)手冊可知,當(dāng)報(bào)警信號輸出TM為0比較模式,報(bào)警引腳輸出信號狀態(tài)控制POL為0時,ALERT報(bào)警狀態(tài)位的賦值stat的初始值是1。因?yàn)橹恍璩跏蓟淮嗡詫tat變量放在Initialize中進(jìn)行初始化:
Initialize:
stat = 1;
Function:
//將讀取的6個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)警時采取遠(yuǎn)離熱水源的形式來達(dá)到減少加熱功率的操作;在低溫報(bào)警時采取靠近熱水源的形式來達(dá)到增大加熱功率的操作,來實(shí)現(xiàn)模擬恒溫箱。并結(jié)合EsDA MPC-ZC1快速實(shí)現(xiàn)I2C采集監(jiān)測實(shí)驗(yàn)來實(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)位可知此時是低溫報(bào)警,此時需要增加功率。
讀取configurature寄存器的ALERT報(bào)警狀態(tài)位可知此時是高溫報(bào)警,此時需要減緩功率。
讀取configurature寄存器的ALERT報(bào)警狀態(tài)位可知此時是低溫報(bào)警,此時需要增加功率。
實(shí)驗(yàn)結(jié)果:通過報(bào)警機(jī)制可保持45℃恒溫,上下5℃波動。
-
開發(fā)
+關(guān)注
關(guān)注
0文章
373瀏覽量
41510 -
I2C
+關(guān)注
關(guān)注
28文章
1541瀏覽量
127801 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7800 -
MPC
+關(guān)注
關(guān)注
2文章
36瀏覽量
21470
發(fā)布評論請先 登錄
I2C總線通信原理 如何設(shè)計(jì)I2C總線電路
I2C總線在物聯(lián)網(wǎng)中的重要性
I2C總線的優(yōu)缺點(diǎn)分析
I2C總線與Arduino的接口示例
I2C總線協(xié)議詳細(xì)解析
I2C總線故障排除技巧
I2C總線應(yīng)用實(shí)例分析
RISC V的I2C操作
I2C協(xié)議的基礎(chǔ)知識

TAS5421-Q1和TAS5411-Q1 I2C應(yīng)用說明

具有熱插拔功能和IEC ESD功能的隔離式I2C緩沖器如何改進(jìn)隔離式I2C

評論