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倍 不懂的留言问我哟