最终成果展示(STM32F103C8T6)
要点1:参考电阻
通常PT100的参考电阻选择400欧姆,但板子上给的是430欧姆。所以程序里需要设置参考电阻为430。为什么选430欧姆呢?因为我猜400欧姆的精密电阻不常见。
#define REF_RES 430
temps = temps / 32768.0 * REF_RES; /* Here is the rtd R value; */
要点2:接线
板子上有三个位置用于设置线的。
四线接法:
三线接法:
要点3:心得体会
遇到问题时一定要仔细查找板子的设计资料,否则容易走弯路。PT100电阻本身会随温度变化,可以直接用万用表测其电阻。
要点4:MAX31865模块的关键细节
通过SPI对寄存器进行读写,寄存器如下图所示。配置寄存器时,读用0x00,写用0x80。转换后的RTD数值存放在0x01和0x02这两个8位寄存器中。可以设置错误报警的上下限,如PT100测温范围为-200℃到420℃,用户可设置下限报警值为-180℃,上限报警值为400℃。当max31865转换RTD后,如果结果超出设置范围,就会产生错误标志,错误标志存在0x07寄存器中。
读取温度过程:
- 读取0x07寄存器,确认其值为0x00,即无错误标志。如果有错误标志,0x07寄存器中的某个值为1。
错误标志可以手动清除,但如果问题未解决,下次检测时标志还是会被模块拉起。
//清除错误
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);
}
- 如果通过错误检测,开始下面的过程。向0x80写入配置,进行一次转换(One_Shot_Conversion),等待DRDY引脚变为低电平(表示转换结束)。然后读取0x01和0x02两个8位寄存器,0x02的最低位装有错误标志,若无错误即可利用0x01和0x02合成电阻数值。
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)
{
// Handle error
}
else
{
temperature = (int)Get_temperature();
}
- 合成电阻
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 */
- PT100电阻转换为温度
这个步骤有多种转换公式,具体根据需求自行选择。
程序代码
读取PT100和PT1000:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2