赞
踩
国内资料少,找到个非常详细的资料:
https://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier?view=all
最后成果(STM32F103C8T6):
一般PT100选400欧姆参考电阻,但是板子上给的是4300,也就是430欧姆。程序里需要设置参考电阻为430。为啥选4300呢,因为我猜400欧姆没有精致电阻生产。
#define REF_RES 430
temps = temps / 32768.0 * REF_RES; /* Here is the rtd R value; */
板子上有三个位置用于设置线的。
四线最后这样:
三线这样:
遇到问题一定要好好找找设计这块板子的资料,不然自己瞎转悠。
PT100电阻本身就是一个随温度变化的电阻,可以直接用万用表测其电阻。
SPI对其寄存器进行读写,寄存器如下图。
配置寄存器,想读就读0x00,想写就写0x80。
转化后的RTD数值存放于0x01和0x02这2个8位寄存器。
可以设置错误报警门限上限和下限,通俗来说,比如一个PT100能测温范围是-200℃到420℃,用户想设置下限报警值为-180℃,上限报警值为400℃,那么当max31865转换RTD后,会将0x01和0x02寄存器结果与上限值和下限值比较,如果不在设置的范围,就会产生错误标志。
错误标志存在0x07寄存器中。
读取温度过程:
(1)读取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);
}
(2)如果能过错误检测,就开始下面的过程。向0x80写入配置,这里写入的是说进行一次转换(One_Shot_Conversion ),然后等待DRDY 引脚变成低电平(意味转换结束)。然后读取0x01和0x02这2个8位寄存器,0x02的最低位装的是错没错的标志,没错的话就可以利用0x01和0x02这2个8位寄存器合成电阻数值。
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电阻变成温度
这个就各显神通了,有各种各样的转换公式。
读取PT100和PT1000:
代码:https://github.com/xddun/blog_code_search
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。