max31865與pt100典型電路
最后成果(STM32F103C8T6):
要點(diǎn)1 參考電阻
一般PT100選400歐姆參考電阻,但是板子上給的是4300,也就是430歐姆。程序里需要設(shè)置參考電阻為430。為啥選4300呢,因?yàn)槲也?00歐姆沒(méi)有精致電阻生產(chǎn)。
#define REF_RES 430
temps = temps / 32768.0 * REF_RES; /* Here is the rtd R value; */
1
要點(diǎn)2 接線
板子上有三個(gè)位置用于設(shè)置線的。
四線最后這樣:
三線這樣:
要點(diǎn)3 體會(huì)
遇到問(wèn)題一定要好好找找設(shè)計(jì)這塊板子的資料,不然自己瞎轉(zhuǎn)悠。
PT100電阻本身就是一個(gè)隨溫度變化的電阻,可以直接用萬(wàn)用表測(cè)其電阻。
要點(diǎn)4 max31865模塊重要細(xì)節(jié)
SPI對(duì)其寄存器進(jìn)行讀寫,寄存器如下圖。
配置寄存器,想讀就讀0x00,想寫就寫0x80。
轉(zhuǎn)化后的RTD數(shù)值存放于0x01和0x02這2個(gè)8位寄存器。
可以設(shè)置錯(cuò)誤報(bào)警門限上限和下限,通俗來(lái)說(shuō),比如一個(gè)PT100能測(cè)溫范圍是-200℃到420℃,用戶想設(shè)置下限報(bào)警值為-180℃,上限報(bào)警值為400℃,那么當(dāng)max31865轉(zhuǎn)換RTD后,會(huì)將0x01和0x02寄存器結(jié)果與上限值和下限值比較,如果不在設(shè)置的范圍,就會(huì)產(chǎn)生錯(cuò)誤標(biāo)志。
錯(cuò)誤標(biāo)志存在0x07寄存器中。
讀取溫度過(guò)程:
(1)讀取0x07寄存器,看是不是等于0x00,即是說(shuō)無(wú)錯(cuò)誤標(biāo)志。有錯(cuò)誤標(biāo)志時(shí),0x07寄存器里面某個(gè)值就是1。
錯(cuò)誤標(biāo)志可以手動(dòng)清除,但如果沒(méi)實(shí)際解決問(wèn)題,下次檢測(cè)這個(gè)標(biāo)志還是會(huì)被模塊拉起。
//清除錯(cuò)誤
void maxim_clear_fault_status(void)
{
uint8_t uch_config;
uch_config=MAX31865_SB_Read(0x00);
uch_config&=0xd3;
uch_config|=0x02;
MAX31865_SB_Write(0x80, uch_config);
}
(2)如果能過(guò)錯(cuò)誤檢測(cè),就開始下面的過(guò)程。向0x80寫入配置,這里寫入的是說(shuō)進(jìn)行一次轉(zhuǎn)換(One_Shot_Conversion ),然后等待DRDY 引腳變成低電平(意味轉(zhuǎn)換結(jié)束)。然后讀取0x01和0x02這2個(gè)8位寄存器,0x02的最低位裝的是錯(cuò)沒(méi)錯(cuò)的標(biāo)志,沒(méi)錯(cuò)的話就可以利用0x01和0x02這2個(gè)8位寄存器合成電阻數(shù)值。
MAX31865_SB_Write( 0x80, ON + One_Shot_Conversion + RTD_3wire + Filter_50Hz );
while ( DRDY == 1 );
auch_rtd[0] = MAX31865_SB_Read( 0x01 );
auch_rtd[1] = MAX31865_SB_Read( 0x02 );
if ( (auch_rtd[1] & 0x01) == 0x01 )
{
}else{
tempture = (int)Get_tempture();
}
(3)合成電阻
data_temp = (dtemp[0] << 8) | dtemp[1];/* Get 15Bit DATA; */
data_temp >>= 1;/* Get 15Bit DATA; */
temps = temps / 32768.0 * REF_RES; /* Here is the rtd R value; */
(4)PT100電阻變成溫度
這個(gè)就各顯神通了,有各種各樣的轉(zhuǎn)換公式。