max31865 3线PT100温度读取

PT100读取有很多种方案,常用的惠斯通电桥,和专用IC  max31865 ,下面采用专用IC51单片机采样的方法。先上电路原理图

本原理图为3线PT100 以在项目中实际用到3

3线要配置max31865寄存器  地址0X80  写0XD3

/* MAX31865 配置*/
void MAX31865_Cfg(void)
{
    //MAX31865_Write(0x80, 0xC3); //BIAS ON,自动,4线,50HZ  根据文件修改四线还是三线
    MAX31865_Write(0x80, 0xD3); //BIAS ON,自动,3线,50HZ  根据文件修改四线还是三线
}
首先上电初始化 MAX31865

void MAX31865_Init(void)
{
    MAX31865_CS=1;
    MAX31865_SCLK=1;
}

MAX31865 写寄存器

void MAX31865_Write(unsigned char addr, unsigned char ddata)
{
    unsigned char i;
    
    MAX31865_CS=0;
    for(i=0;i<8;i++)  //写地址
    {
        MAX31865_SCLK=0;
        if(addr&0x80) MAX31865_SDI=1;
        else MAX31865_SDI=0;
        MAX31865_SCLK=1;
        addr<<=1;
    }
    for(i=0;i<8;i++)  //写数据
    {
        MAX31865_SCLK=0;
        if(ddata&0x80) MAX31865_SDI=1;
        else MAX31865_SDI=0;
        MAX31865_SCLK=1;
        ddata<<=1;
    }
    MAX31865_CS=1;
}

/* MAX31865 读寄存器 
addr:寄存器地址
*/
unsigned char MAX31865_Read(unsigned char addr)
{
    unsigned char i;
    unsigned char ddata=0;
    
    MAX31865_CS=0;
    for(i=0;i<8;i++)  //写地址
    {
        MAX31865_SCLK=0;
        if(addr&0x80) MAX31865_SDI=1;
        else MAX31865_SDI=0;
        MAX31865_SCLK=1;
        addr<<=1;
    }
    for(i=0;i<8;i++)  //读数据
    {
        MAX31865_SCLK=0;
        ddata<<=1;        
        MAX31865_SCLK=1;        
        if(MAX31865_SDO) ddata|=0x01;
        else ddata|=0x00;
    }
    MAX31865_CS=1;
    return ddata;
}

最关键的是温度读取直接带入程序就可以了哟

/* MAX31865 获取温度 */
float MAX31865_GetTemp(void)

    unsigned int ddata;
    float Rt;
    float Rt0 = 100;  //PT100    
    float Z1,Z2,Z3,Z4,temp;
    float a = 3.9083e-3;
    float b = -5.775e-7;
    float rpoly;

//    MAX31865_Write(0x80, 0xD3);
    ddata=MAX31865_Read(0x01)<<8;
    ddata|=MAX31865_Read(0x02);
    ddata>>=1;  //去掉Fault位

    Rt=(float)ddata/32768.0*RREF;
    

    
    Z1 = -a;
  Z2 = a*a-4*b;
  Z3 = 4*b/Rt0;
  Z4 = 2*b;

  temp = Z2+Z3*Rt;
  temp = (sqrt(temp)+Z1)/Z4;
  inadcr=temp*100;
  if(temp>=0) return inadcr;

  rpoly = Rt;
  temp = -242.02;
  temp += 2.2228 * rpoly;
  rpoly *= Rt;  // square
  temp += 2.5859e-3 * rpoly;
  rpoly *= Rt;  // ^3
  temp -= 4.8260e-6 * rpoly;
  rpoly *= Rt;  // ^4
  temp -= 2.8183e-8 * rpoly;
  rpoly *= Rt;  // ^5
  temp += 1.5243e-10 * rpoly;
    inadcr=temp*100;
    
    return inadcr;
}

这个程序是放大100倍 不懂的留言问我哟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunshine123567

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值