最后成果(STM32F103C8T6):
要點1 參考電阻
一般PT100選400歐姆參考電阻,但是板子上給的是4300,也就是430歐姆。程序里需要設(shè)置參考電阻為430。為啥選4300呢,因為我猜400歐姆沒有精致電阻生產(chǎn)。
#define REF_RES 430
temps = temps / 32768.0 * REF_RES; /* Here is the rtd R value; */
1
要點2 接線
板子上有三個位置用于設(shè)置線的。
四線最后這樣:
三線這樣:
要點3 體會
遇到問題一定要好好找找設(shè)計這塊板子的資料,不然自己瞎轉(zhuǎn)悠。
PT100電阻本身就是一個隨溫度變化的電阻,可以直接用萬用表測其電阻。
要點4 max31865模塊重要細節(jié)
SPI對其寄存器進行讀寫,寄存器如下圖。
配置寄存器,想讀就讀0x00,想寫就寫0x80。
轉(zhuǎn)化后的RTD數(shù)值存放于0x01和0x02這2個8位寄存器。
可以設(shè)置錯誤報警門限上限和下限,通俗來說,比如一個PT100能測溫范圍是-200℃到420℃,用戶想設(shè)置下限報警值為-180℃,上限報警值為400℃,那么當(dāng)max31865轉(zhuǎn)換RTD后,會將0x01和0x02寄存器結(jié)果與上限值和下限值比較,如果不在設(shè)置的范圍,就會產(chǎn)生錯誤標(biāo)志。
錯誤標(biāo)志存在0x07寄存器中。
讀取溫度過程:
(1)讀取0x07寄存器,看是不是等于0x00,即是說無錯誤標(biāo)志。有錯誤標(biāo)志時,0x07寄存器里面某個值就是1。
錯誤標(biāo)志可以手動清除,但如果沒實際解決問題,下次檢測這個標(biāo)志還是會被模塊拉起。
//清除錯誤
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)如果能過錯誤檢測,就開始下面的過程。向0x80寫入配置,這里寫入的是說進行一次轉(zhuǎn)換(One_Shot_Conversion ),然后等待DRDY 引腳變成低電平(意味轉(zhuǎn)換結(jié)束)。然后讀取0x01和0x02這2個8位寄存器,0x02的最低位裝的是錯沒錯的標(biāo)志,沒錯的話就可以利用0x01和0x02這2個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電阻變成溫度
這個就各顯神通了,有各種各樣的轉(zhuǎn)換公式。