最近在用stm32做关于max31855的程序,总结了一些使用经验。
1.Max31855的介绍
MAX31855具有冷端补偿,将K、J、N、T或E型热电偶信号转换成数字量。 器件输出14位带符号数据,通过SPITM兼容接口、以只读 格式输出。转换器的温度分辨率为0.25℃,最高温度读数 为+1800℃,最低温度读数为-270℃,对于K型热电偶, 温度范围为-200℃至+700℃,保持±2℃精度 。
总的来说,MAX31855测温范围非常广。
2.使用Max31855的具体实现方法
对于max31855,我们只需要了解是如何传输数据的,我们采用的是软件模拟SPI获取温度,驱动CS为低电平时,改变SCK的高低电平,再通过检查SO的高低电平,来获取温度。读取完整的冷端补偿热电偶温度,需要14个时钟周期。读取热电偶和参考端温度需要32个时钟周期。D31为热电偶温度符号位。其中D18到D31为热电偶周围温度的数据,(D4到D15为参考端温度的数据,一般这一部分我们不需要使用,如果需要测量参考端温度,温度分辨率应该变为0.625。那我们需要改变位数)
主要注意延时时间的控制。
3.代码如下
int32_t ReadMAX31855(void)
{
u8 count;
int32_t temp=0;
GPIO_SetBits(GPIOB,D_CS);
delay_ms(180);
GPIO_ResetBits(GPIOB, D_CS);//CS=0;
for(count=0;count<=31;count++)
{
GPIO_SetBits(GPIOB, D_SCK);//read data SO
delay_ms(1);
temp<<=1;
if(GPIO_ReadInputDataBit(GPIOB,D_SO))
temp|=0x00000001;
GPIO_ResetBits(GPIOB, D_SCK);
delay_ms(1);
}
GPIO_SetBits(GPIOB, D_CS);//CS=1;
temp>>=17;
Value = (temp*100)/4;
return Value;
}
主要注意延时时间的控制。
4.实际测试结果如下
我首先是室内温度的测试,然后再测量冰块的温度,后两位为小数。测试结果还可以。