Ⅰ、 三线 PT100 温度测量原理

三线连接法的核心目的是消除引线电阻对测量精度的影响。PT100 的电阻值非常小(100Ω @ 0℃),而连接导线的电阻(十分之几欧姆到几欧姆,写成 R6、R7、R15,见三线热电阻测试原理图)会带来不可忽略的误差。三线制系统通过巧妙的电路设计解决了这一问题,三线热电阻的所有三根导线通常长度相同,因此假设三根导线的电阻相等(RL1 = RL2 = RL3,即原理图中的 R6=R7=R15),SSP1220 的内部双电流源 (IDAC) 用于抵消这些导线电阻的影响。

详细解释测量原理:

  1. 在 SSP1220 内部使用两个匹配的可编程电流源(IDAC1 和 IDAC2)并输出相同的电流: ,建议电流源选择小于 1mA,本测试的电流源选择值为 500uA。
  2. 假定 PT100 的三个引线电阻相等:R6 = R7 = R15 = Rl
  3. SSP1220 通过一对差分输入(AIN0、AIN1)测量 PT100 上的电压: VIN = VAIN1 - VAIN0

而VAIN1 = IIDAC1 x (RL1+RPT100)+ (IIDAC1 + IIDAC2) x RL3, VAIN0 = IIDAC2 x RL2 + (IIDAC1 + IIDAC2) x RL3

因为:我IDAC1 = IIDAC2 = IIDAC 和 RL1 = RL2 = RL3 = RL

代入VIN = [IIDAC x (RL + RPT100)+ 2IIDAC x RL]- [IIDAC x RL + 2IIDAC x RL] = IIDAC x RL + IIDAC x RPT100 + 2IIDAC x RL - 2IIDAC x RL = IIDAC x RPT100

通过巧妙的电路配置,差分输入电压 VIN 完全消除了引线电阻的影响,只包括 PT100 电阻上的压降。

  1. SSP1220 的基准电压 Vref 是通过高精度外部基准电阻器 Rref (R5) 合并两个 IDAC 电流产生的,即 Vref = (Iidac1 + Iidac2) * R
  2. 在进行比率测量时,无论 IDAC 电流的绝对值、精度和漂移如何,最终 ADC 输出代码都与 (Rpt100) / (Rref) 成比例,同时还能抵消引线电阻 Rl1 和 Rl2 的影响:

对于 24 位 SSP1220,输出数字代码为

代码 = (223 - 1) x (VIN/VREF) = (223 - 1) x [RPT100/(2 x RREF) ]

通过 ADC 代码反转 PT100 电阻值:

RPT100 = [代码/(223-1)] x 2 x RREF

最后,根据 PT100 的电阻-温度特性(通常使用 Callendar-Van Dusen 方程或查表法),将 Rpt100 转换为温度值:T = f (Rpt100)。对于 PT100,在 0℃、R0 = 100.00Ω 时,电阻温度系数约为α≈ 0.00385 Ω/Ω/℃

Ⅱ、硬件电路设计

根据数据表中的典型应用,典型的三线 PT100 连接电路如下:

  1. 电路连接说明
  • PT100 连接:PT100 (三线制)的连接如示意图所示。
  • 电压基准生成:IDAC1 输出端连接至 AIN2(需要内部软件配置),IDAC2 输出端连接至 AIN3(需要内部软件配置),两个 IDAC 电流在节点处汇合,一起流经外部基准电阻 Rref(R5)。REF 的另一端连接到模拟地 AVSS。SSP1220 的正基准输入 REFP0 连接到 RREF (R5) 的上端(IDAC 合并点)。SSP1220 的负基准输入端 REFN0 连接至 AVSS。因此,基准电压 VREF= (IIDAC1 + IIDAC2) * RREF。
  • 信号测量:SSP1220 的 AIN1 配置为差分正输入 AINP,SSP1220 的 AIN0 配置为差分负输入 AINN,因此测量电压为 AIN1 和 AIN0 之间的电位差。
  • 滤波电路:需要在模拟输入(AIN0、AIN1、AIN2)和基准输入(REFP0)上添加 RC 低通滤波器,以实现抗锯齿和噪声抑制。输入滤波器:由 R1、R2、C1 和 C6、C5 组成。参考滤波器:由 R3、R4、C2 和 C3、C4 组成。为保持刻度测量的准确性,参考滤波器的截止频率应与输入滤波器相匹配。

Ⅲ、设备选择和参数计算

假设设计目标如下:PT100 类型:三线制;温度测量范围:-200°C ~ +850°C;电源电压 AVDD:3.3V(AVSS = 0V);DAC 电流:500μA(每通道);数据速率:20 SPS(以获得最佳噪声性能)。

  1. 参考电阻 (Rref) 的选择和计算

Rref 是整个系统准确性的核心。其功能是产生 ADC 的基准电压 V ref,其精度和稳定性直接决定测量结果。

电阻计算:

为了最大限度地提高 ADC 的量程并满足 PGA 的共模电压要求,通常将 Vref 设置为电源电压的一半左右。在本设计中,AVDD = 3.3V,目标 VREF 约为 1.65V。

IIDAC = I_IDAC1 + I_IDAC2 = 500uA + 500uA = 1mA

RREF = VREF /(IIDAC1 + IIDAC2) = 1.65V/1mA = 1.65kΩ

可以选择标称值为 1.65 kΩ 的电阻器。如果找不到,1.62kΩ 或 1.69kΩ 也是可以接受的近似值。

遴选要求:

精度:至少 ±0.1%,高精度应用建议 ±0.05% 或更高。

温度漂移:必须非常低,建议使用 ±5 ppm/°C 或 ±10 ppm/°C 的精密薄膜电阻。

长期稳定性:高。

切勿使用普通的 1%、100ppm/°C 片式电阻器。

  1. IDAC 电流和 PGA 增益选项

IDAC 电流:选择 500μA。该值在功耗、自热效应和信号幅度之间取得了良好的平衡。如果电流太小,信号会很弱,容易受噪声影响;电流太大可能会导致 PT100 自热或超过 IDAC 兼容电压。

PGA 增益选择:PT100 的电压较小(例如 500μA × 100Ω = 50mV),但使用比率测量(参考电压也来自 IDAC),因此无需放大以避免饱和,增益选择为 1X。

  1. 滤波电路元件选择

滤波电阻器(R1、R2、R3、R4):通常选择 1kΩ。该值足够大以有效滤波,足够小以避免输入端出现明显的偏移电压(由于输入偏置电流)。它们还起到限流保护作用。

差分滤波电容器(C1、C2):与电阻一起设置截止频率。fc = 1 / (2π * (R1+R2) * C1)。 如果 R1+R2=2kΩ 并期望 fc ≈ 16Hz,则 C1 ≈ 1 / (2* 2000 * 16) ≈ 4.7μF。在实际应用中,通常使用 100nF (0.1μF) 来获得更宽的噪声抑制带宽。类型:推荐使用 C0G(NPO)陶瓷电容器,因为它具有稳定的介电常数、低电压系数和低微声效应。

共模滤波电容器(C5、C6、C3、C4):通常选择比差分电容小一个数量级的电容,如 10nF,以确保差分电容的不匹配不会导致过多共模噪声转换成差分噪声。

Ⅳ、软件配置

  1. 主逻辑

float SSP1x20_read_temperature(void)

{

uint32_t ADC_data;

uint32_t ADC_temp1;

//SSP1x20_read_register(SSP1x20_REG0, 4, &Read_REGTab[0]);

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

Write_REGTab[1]=SSP1x20_DR_20SPS|SSP1x20_MODE_NORMAL|SSP1x20_SC|SSP1x20_TS_ON| SSP1x20_BCS_OFF;

Write_REGTab[2]=SSP1x20_VREF_2048|SSP1x20_REJECT_OFF|SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

SSP1x20_SendCommand(SSP1x20_CMD_START);

spi_adc_cs_low();

while (ADC_DRDY_GAIN == 1);//SSP1x20_DRDYM_DRDY

  1. 程序的主要配置和说明
  • 配置寄存器 0:多路复用器和增益

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

容量配置功能说明
BIT7~BIT4MUX_AIN0_AIN1差分输入通道选择AIN0 - AIN1 → 用于 PT100 电压测量
BIT3~BIT1GAIN_1(1 倍增益)增益设置1×(无需放大,因为 Vin ≈ 1V)
BIT0PGA_BYPASS_ONPGA 旁路关闭可编程增益放大器,防止信号失真
  • 配置寄存器 1:采样率和模式

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

容量配置功能说明
BIT7~BIT5DR_20SPS数据传输速率20 次/秒 → 适用于缓慢的温度变化
BIT4~BIT3模式_正常正常工作模式非单一或连续
比托SC已启用自动校准功能提高精确度(建议开启)
BIT1TS_OFF禁用内部温度传感器TS_ON 打开内部温度传感器,测量外部温度的配置不起作用(该配置具有最高优先级)。

 

  • 配置寄存器 2:带 IDAC 的基准电压

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

容量配置功能说明
BIT7~BIT6VREF_2048外部基准电压使用外部 R_REFR_REF 生成基准电压(例如 1.65kΩ)。
BIT5~BIT4REJECT_OFF无陷波滤波无需抗电源频率干扰
BIT3PSW_OFF不要启用电源开关保持正常供电
BIT2~BIT0IDAC_500uA激励电流设置为 500 μA,以避免 3.9kΩ × 1mA = 3.9V > 3.3V 过压

  

容量配置功能说明
BIT7~BIT5IDAC1_AIN2IDAC1 输出至 AIN2激励电流流经 PT100 的上端
BIT4~BIT2IDAC2_AIN3IDAC2 输出至 AIN3返回路径以抵消导线电阻
BIT1DRDYM_DRDYDRDY 模式使用 DRDY 信号通知您转换已完成

 

(4) 配置寄存器 3:带 DRDY 的 IDAC 路由通道

  1. 三线 PT100 磁芯:

当前路径:

  • IDAC1 → AIN2 → PT100 → AIN1
  • IDAC2 → AIN3 → AIN1(返回)
  • 两个电流相等 → 抵消 R_LEAD2R_LEAD2 上的压降

uint32_t raw_u24 = SSP1x20_read_data_drdy();

 

SSP1220 输出 24 位数据但 MCU 通常以 32 位读取(SPI 一次读取 4 个字节)。

 

如果 (raw < 0) raw = -raw;

PT100 电压 始终为正 (电流从 AIN0 流向 AIN1)。

如果 raw < 0,则 AIN0 和 AIN1 软件配置相反。

printf("Raw: %ld, R=%.3f Ω, Temp=%.2f °C\r\n", raw, R_pt100, temperature);

打印 计算电阻值和最终温度 便于调试

如果 Raw 为负值→ 配置则相反

如果 R > 1400Ω → 表示 IDAC 或 Rref 设置错误

如果温度 = -999 → 表示 R 值超出合理范围

 

Ⅴ、测量程序和结果

  1. 两端的 PT100 电压测量程序:

void SSP1x20_ADC_MeasurePt100(void)

{

float V_ref = 2.048; // 内部基准电压 2.048V

//printf("\rrn Multi-point single voltage measurement\r\n");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

 

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

当 (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); // 启用连续测量时,该命令只发送一次

HAL_Delay(100);

spi_adc_cs_low();

}

 

SSP1220 测试结果

  1. SSP1220 内部温度测量

内部温度测试功能

float SSP1x20_read_temperature(void)

{

uint32_t ADC_data;

uint32_t ADC_temp1;

 

//SSP1x20_read_register(SSP1x20_REG0, 4, &Read_REGTab[0]);

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_ON | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

 

SSP1x20_SendCommand(SSP1x20_CMD_START);

spi_adc_cs_low();

 

while (ADC_DRDY_GAIN == 1);//SSP1x20_DRDYM_DRDY

 

内部温度测试配置详情:

 Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_ON | SSP1x20_BCS_OFF;

  • SSP1x20_TS_ON: 启用内部温度传感器 (重要),该配置具有最高优先级
  • SSP1x20_SC: 执行自校准(推荐)
  • 20SPS:低速、高精度,适用于温度测量

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

  • SSP1x20_VREF_2048: 使用 内置 2.048V 基准电压 (非外部 REF0!)。
    • 因为内部温度传感器 绝对电压输出, a 固定基准电压 必须用来转换温度。
  • IDAC_1000uA:虽然启用了 IDAC、 处于 TS_ON 模式的 IDAC 不影响内部温度测量 (可忽略不计)。

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

  • 配置 IDAC 引脚和 DRDY,但 对内部温度测量没有影响 (只需保持寄存器完好无损)。
  • 2 启动转换并等待 DRDY

SSP1x20_SendCommand(SSP1x20_CMD_START); SPI_ADC_CS_LOW();虽然 (adc_drdy_gain == 1); // 等待 drdy 变低

  • 发送 START(开始)命令启动连续转换
  • 等待 将 DRDY 引脚置低表示数据已准备就绪

室内室温的测量如下图所示:

3.外部温度测量(方法 1,简化系数 0.385 计算)

外部温度测试相关代码:

uint32_t ADC_gain_value = 0; // 读出数据

uint32_t ADC_value = 0; // 测量数据值

浮点数 tmpPt100=0;

float RTD=0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\rr\n Multi-point single voltage measurement (多点单电压测量)");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF; SSP1x20_MUX_AIN1_AIN0 接口 AIN1 AIN0 应根据实际电路图进行选择

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

当 (1)

{

 

SSP1x20_SendCommand(SSP1x20_CMD_START); 启用连续测量时,该命令只发送一次

HAL_Delay(100);

spi_adc_cs_low();

ADC_gain_value =0;

 

ADC_gain_value = SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

 

spi_adc_cs_high();

 

RTD = 1650*( (float)ADC_gain_value /(0x3fffff));//Reference 电阻 1650 欧姆

tmpPt100 = (RTD-100)/0.38;

__NOP();

 

printf("R=%.3f Ω, Temp=%.2f °C\r\n",RTD, tmpPt100 );

}

三线热电阻测量冰水混合物温度的结果如下图所示:

外部温度测量(方法二,通过卡伦达-范杜森方程计算)更为精确

 

主代码

//高精度 RTD -> 温度

静态浮子 rtd_to_温度_iec60751(浮子 rtd)

{

if (rtd < 0.0f) return -999.0f; // 非法值

 

float t = (rtd - R0_PT100) / 0.385f; // initial guess

 

如果 (rtd <= R0_PT100) {

//T < = 0°C:使用完整方程

for (int i = 0; i < 10; i++) {

float rt_calc = R0_PT100 * (1.0f + A_COEFF*t + B_COEFF*t*t + C_COEFF*(t - 100.0f)*t*t*t);

float dr_dt = R0_PT100 * (A_COEFF + 2.0f*B_COEFF*t + C_COEFF*(4.0f*t*t*t - 300.0f*t*t));

float error = rt_calc - rtd;

t -= 误差 / dr_dt;

if (fabsf(error) < 0.001f) break;

}

否则 {

// T >= 0°C:: 使用简化方程

for (int i = 0; i < 10; i++) {

float rt_calc = R0_PT100 * (1.0f + A_COEFF*t + B_COEFF*t*t);

float dr_dt = R0_PT100 * (A_COEFF + 2.0f*B_COEFF*t);

float error = rt_calc - rtd;

t -= 误差 / dr_dt;

if (fabsf(error) < 0.001f) break;

}

}

返回 t;

}

/**

* 简单模拟通道 ADC 测量(外部温度测量)

* 参数 无

* @retval 无

*/

uint32_t ADC_gain_value = 0; // 读出数据

uint32_t ADC_value = 0; // 测量数据值

浮点数 tmpPt100=0;

float RTD=0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\rr\n Multi-point single voltage measurement (多点单电压测量)");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

// Write_REGTab[3] = SSP1x20_IDAC1_AIN3 | SSP1x20_IDAC2_AIN2 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

当 (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); 启用连续测量时,该命令只发送一次

HAL_Delay(100);

spi_adc_cs_low();

 

ADC_gain_value =0;

ADC_gain_value = SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

 

spi_adc_cs_high();

 

#define CALIBRATED_FULL_SCALE 4210300.0f // 校准数据

 

RTD = 1650.0f * ((float)ADC_gain_value / CALIBRATED_FULL_SCALE);

tmpPt100 = rtd_to_temperature_iec60751(RTD);

__NOP();

 

printf("R=%.3f Ω, Temp=%.2f °C\r\n",RTD, tmpPt100 );

}

}

 

测试结果如图所示:

 

热水温度测试:

冰水混合物测试:

4.外部温度测试配置详情:

注册配置值(您的代码)功能说明为什么选择这个?
REG0
Write_REGTab[0]
SSP1x20_MUX_AIN1_AIN0
| SSP1x20_GAIN_1
|SSP1x20_PGA_BYPASS_OFF
输入通道选择 + 增益设置 
SSP1x20_MUX_AIN1_AIN0差分输入 AIN1 为正,AIN0 为负PT100 连接到 AIN0 和 AIN1 的两端,需要差分电压测量。⚠️ 注意极性注意:如果配置相反,则 ADC 输出负值(如 0x800000),导致温度为负值。
SSP1x20_GAIN_1增益 = 1PT100 的电压较小(例如 500μA × 100Ω = 50mV),但使用比率测量(参考电压也来自 IDAC),因此 无放大 以避免饱和。
SSP1x20_PGA_BYPASS_OFF无旁路 PGA保持 PGA 功能(即使增益=1),以确保信号路径正常。
REG1
Write_REGTab[1]
SSP1x20_DR_20SPS
| SSP1x20_MODE_NORMAL
| SSP1x20_SC
| SSP1x20_TS_OFF
| SSP1x20_BCS_OFF
数据传输速率 + 运行模式 
SSP1x20_DR_20SPS采样率 = 每秒 20 个采样点低速可提高精度、抑制噪音,并适用于温度测量(缓慢变化)。
SSP1x20_MODE_NORMAL正常连续转换模式连续数据输出,用于实时监控。
SSP1x20_SC进行自我校准每次配置后进行校准,可消除偏移/增益误差并提高精度。
SSP1x20_TS_OFF关闭内部温度传感器我们测量外部 PT100,不需要内部温度。
SSP1x20_BCS_OFF禁用烧断电流源不,你没有。
REG2
Write_REGTab[2]
SSP1x20_VREF_REF0
| SSP1x20_REJECT_OFF
| SSP1x20_PSW_OFF
SSP1x20_IDAC_500uA
基准电压 + IDAC 设置 
 SSP1x20_VREF_REF0使用 外部参照 电压(REF0 = AIN2/AIN3 之间的电压)。实施 基于比率的测量:ADC 结果 = (Vpt100 / Vref) × 224、 与 IDAC 电流绝对值无关仅与 Rref 有关,不受电源波动的影响。
 SSP1x20_REJECT_OFF未启用 50/60Hz 抑制功能如果环境干扰较小,可以关闭;如果处于工频环境,建议打开 REJECT_50。
 SSP1x20_PSW_OFF关闭传感器电源开关PT100 由 IDAC 供电,不需要额外的 PSW。
 SSP1x20_IDAC_500uA设置恒流源电流 = 500 μA通用电流值,平衡功耗和信号幅度(100Ω → 50mV)。
REG3
Write_REGTab[3]
SSP1x20_IDAC1_AIN2
| SSP1x20_IDAC2_AIN3
| SSP1x20_DRDYM_DRDY
IDAC 输出引脚 + DRDY 配置 
SSP1x20_IDAC1_AIN2IDAC1 输出至 AIN2AIN2 至 PT100(激励)
SSP1x20_IDAC2_AIN3IDAC2 输出至 AIN3AIN3 连接到 R_ref 一端的基准电阻器(形成回路)
→ 实现 三线补偿 (抵消导线电阻)。
SSP1x20_DRDYM_DRDY启用 DRDY 引脚 (数据就绪信号)。MCU 通过 GPIO 检测 DRDY 低电平,以了解何时正在读取数据并避免轮询。

 

----------------------------------

关键零件代码公式计算:

RTD = 1650*( (float)ADC_gain_value /(0x3fffff)); //参考电阻 1650 欧姆 tmpPt100 = (RTD-100)/0.385;

参考电阻 1650 欧姆、

第一行代码 RTD = 1650 * (ADC / 0x3FFFFF)

旨在将 ADC 原始值转换为 PT100 的电阻值(比率测量)

  • VIN = I × RPT100(PT100 两端的电压)
  • VREF = I × RREF(参考电阻两端的电压)

两端使用相同的恒流源 I adc

 

那么     Vin/Vref = Rpt100/Rref

 

ADC 的输出是这一比率的数字化结果

ADC_Code = Vin/Vref x 224

 

因此被推回

Rpt100= Rref x ADC_Code /224

 

---------------------------------------

第二行代码: tmpPt100 = (RTD - 100) / 0.385;

用线性近似公式估算温度

0°C 时,Rpt100 = 100 Ω

温度每升高 1°C,电阻增加约 0.385 Ω。

那么

 

T (R-100)/0.385

 

 

Ⅵ、常见问题调试指南

异常可能的原因故障排除步骤
ADC 的原始值(原始值)为负值AIN0 与 AIN1 配置相反1.检查软件配置是否与硬件连接一致
r_pt100 > 1400ω1.IDAC 电流配置不正确; 2. Rref 打开1.检查 REG2 的 IDAC 配置(确保为 500μA); 2. 用万用表测量 R ref 电阻值,确认电路未开路
温度值为 - 999°CPT100 超过 18Ω~330Ω 范围1.检查 PT100 是否断开(测量 PT100 电阻); 2. 验证 SPI 通信(读取寄存器配置值)
温度波动 > 0.1°C1.电源纹波大; 2. 电磁干扰1.测量 SSP1220 VDD 纹波(要求 ≤ 10mV); 2.检查屏蔽线的接地情况,以避免干扰

Ⅶ、 SSP1220 核心寄存器配置表

注册配置项目值(外部温度测量)功能说明
REG0差分通道AIN1-AIN0匹配 PT100 的接线,避免出现负的原始接线
收获避免信号饱和,适应比率测量
PGA 旁路关闭保持信号路径完整性
REG1采样率20SPS低速可提高精度并适应缓慢的温度信号
工作模式正常模式连续转换和实时输出温度数据
自动校准以便消除偏移/增益误差,提高精度
内部 TS关闭外部温度测量不需要内部传感器
 REG2参考电压外部 REF0基于比率的测量可抵消 IDAC 电流波动
IDAC 电流500μA平衡功耗和信号幅度(50mV 100Ω)
REG3IDAC1 路线AIN2励磁电流输入 PT100
IDAC2 路由AIN3抵消引线电阻 R7

Ⅷ、卡伦达-范杜森方程系数表

系数数值单位适用范围
R0100.0Ω0°C 基准电阻
A3.9083×10-3-1-200℃~600℃
B-5.775×10-7-2-200℃~600℃
C-4.183×10-12-4-200℃~0℃

如需完整代码,请联系我们的技术支持。联系方式:1801420372718014203727