本文介紹如何通過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 4000),下限值是45℃(0x05 A000)。
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 這些節點:
- timer: timer節點用于定時觸發I2C節點讀取數據;
- fscript:根據TPS02設備的數據手冊可知,設置configurature寄存器共兩個字節。分別代表兩個通道,第一個字節配置通道 1,第二個字節配置通道2。本實驗使用的是通道1。并將讀取出來的ALERT報警狀態提取出來;
- i2c_master_read:主要用于向從機設備的configurature寄存器讀取ALERT報警狀態;
- 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文章
373瀏覽量
41372 -
I2C
+關注
關注
28文章
1537瀏覽量
127131 -
ESDA
+關注
關注
0文章
28瀏覽量
7734 -
MPC
+關注
關注
2文章
36瀏覽量
21439
發布評論請先 登錄
I2C總線通信原理 如何設計I2C總線電路
I2C總線在物聯網中的重要性
I2C總線的優缺點分析
I2C總線與Arduino的接口示例
I2C總線協議詳細解析
I2C總線故障排除技巧
I2C總線應用實例分析
RISC V的I2C操作
TAS5421-Q1和TAS5411-Q1 I2C應用說明

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

簡單認識I2C通信協議
TCA8418E I2C控制鍵盤掃描IC,帶集成ESD保護數據表

評論