Ⅰ、 三线 PT100 温度测量原理
三线连接法的核心目的是消除引线电阻对测量精度的影响。PT100 的电阻值非常小(100Ω @ 0℃),而连接导线的电阻(十分之几欧姆到几欧姆,写成 R6、R7、R15,见三线热电阻测试原理图)会带来不可忽略的误差。三线制系统通过巧妙的电路设计解决了这一问题,三线热电阻的所有三根导线通常长度相同,因此假设三根导线的电阻相等(RL1 = RL2 = RL3,即原理图中的 R6=R7=R15),SSP1220 的内部双电流源 (IDAC) 用于抵消这些导线电阻的影响。
详细解释测量原理:
- 在 SSP1220 内部使用两个匹配的可编程电流源(IDAC1 和 IDAC2)并输出相同的电流: ,建议电流源选择小于 1mA,本测试的电流源选择值为 500uA。
- 假定 PT100 的三个引线电阻相等:R6 = R7 = R15 = Rl
- 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 电阻上的压降。
- SSP1220 的基准电压 Vref 是通过高精度外部基准电阻器 Rref (R5) 合并两个 IDAC 电流产生的,即 Vref = (Iidac1 + Iidac2) * R
- 在进行比率测量时,无论 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 连接电路如下:

- 电路连接说明
- 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(以获得最佳噪声性能)。
- 参考电阻 (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 片式电阻器。
- IDAC 电流和 PGA 增益选项
IDAC 电流:选择 500μA。该值在功耗、自热效应和信号幅度之间取得了良好的平衡。如果电流太小,信号会很弱,容易受噪声影响;电流太大可能会导致 PT100 自热或超过 IDAC 兼容电压。
PGA 增益选择:PT100 的电压较小(例如 500μA × 100Ω = 50mV),但使用比率测量(参考电压也来自 IDAC),因此无需放大以避免饱和,增益选择为 1X。
- 滤波电路元件选择
滤波电阻器(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,以确保差分电容的不匹配不会导致过多共模噪声转换成差分噪声。
Ⅳ、软件配置
- 主逻辑
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
- 程序的主要配置和说明
- 配置寄存器 0:多路复用器和增益
Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;
| 容量 | 配置 | 功能 | 说明 |
| BIT7~BIT4 | MUX_AIN0_AIN1 | 差分输入通道选择 | AIN0 - AIN1 → 用于 PT100 电压测量 |
| BIT3~BIT1 | GAIN_1(1 倍增益) | 增益设置 | 1×(无需放大,因为 Vin ≈ 1V) |
| BIT0 | PGA_BYPASS_ON | PGA 旁路 | 关闭可编程增益放大器,防止信号失真 |
- 配置寄存器 1:采样率和模式
Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;
| 容量 | 配置 | 功能 | 说明 |
| BIT7~BIT5 | DR_20SPS | 数据传输速率 | 20 次/秒 → 适用于缓慢的温度变化 |
| BIT4~BIT3 | 模式_正常 | 正常工作模式 | 非单一或连续 |
| 比托 | SC | 已启用自动校准功能 | 提高精确度(建议开启) |
| BIT1 | TS_OFF | 禁用内部温度传感器 | TS_ON 打开内部温度传感器,测量外部温度的配置不起作用(该配置具有最高优先级)。 |
- 配置寄存器 2:带 IDAC 的基准电压
Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;
| 容量 | 配置 | 功能 | 说明 |
| BIT7~BIT6 | VREF_2048 | 外部基准电压 | 使用外部 R_REFR_REF 生成基准电压(例如 1.65kΩ)。 |
| BIT5~BIT4 | REJECT_OFF | 无陷波滤波 | 无需抗电源频率干扰 |
| BIT3 | PSW_OFF | 不要启用电源开关 | 保持正常供电 |
| BIT2~BIT0 | IDAC_500uA | 激励电流 | 设置为 500 μA,以避免 3.9kΩ × 1mA = 3.9V > 3.3V 过压 |
| 容量 | 配置 | 功能 | 说明 |
| BIT7~BIT5 | IDAC1_AIN2 | IDAC1 输出至 AIN2 | 激励电流流经 PT100 的上端 |
| BIT4~BIT2 | IDAC2_AIN3 | IDAC2 输出至 AIN3 | 返回路径以抵消导线电阻 |
| BIT1 | DRDYM_DRDY | DRDY 模式 | 使用 DRDY 信号通知您转换已完成 |
(4) 配置寄存器 3:带 DRDY 的 IDAC 路由通道
- 三线 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 值超出合理范围
Ⅴ、测量程序和结果
- 两端的 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 测试结果

- 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 | 增益 = 1 | PT100 的电压较小(例如 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_AIN2 | IDAC1 输出至 AIN2 | AIN2 至 PT100(激励) | |
| SSP1x20_IDAC2_AIN3 | IDAC2 输出至 AIN3 | AIN3 连接到 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°C | PT100 超过 18Ω~330Ω 范围 | 1.检查 PT100 是否断开(测量 PT100 电阻); 2. 验证 SPI 通信(读取寄存器配置值) |
| 温度波动 > 0.1°C | 1.电源纹波大; 2. 电磁干扰 | 1.测量 SSP1220 VDD 纹波(要求 ≤ 10mV); 2.检查屏蔽线的接地情况,以避免干扰 |
Ⅶ、 SSP1220 核心寄存器配置表
| 注册 | 配置项目 | 值(外部温度测量) | 功能说明 |
| REG0 | 差分通道 | AIN1-AIN0 | 匹配 PT100 的接线,避免出现负的原始接线 |
| 收获 | 1× | 避免信号饱和,适应比率测量 | |
| PGA 旁路 | 关闭 | 保持信号路径完整性 | |
| REG1 | 采样率 | 20SPS | 低速可提高精度并适应缓慢的温度信号 |
| 工作模式 | 正常模式 | 连续转换和实时输出温度数据 | |
| 自动校准 | 以便 | 消除偏移/增益误差,提高精度 | |
| 内部 TS | 关闭 | 外部温度测量不需要内部传感器 | |
| REG2 | 参考电压 | 外部 REF0 | 基于比率的测量可抵消 IDAC 电流波动 |
| IDAC 电流 | 500μA | 平衡功耗和信号幅度(50mV 100Ω) | |
| REG3 | IDAC1 路线 | AIN2 | 励磁电流输入 PT100 |
| IDAC2 路由 | AIN3 | 抵消引线电阻 R7 |
Ⅷ、卡伦达-范杜森方程系数表
| 系数 | 数值 | 单位 | 适用范围 |
| R0 | 100.0 | Ω | 0°C 基准电阻 |
| A | 3.9083×10-3 | ℃-1 | -200℃~600℃ |
| B | -5.775×10-7 | ℃-2 | -200℃~600℃ |
| C | -4.183×10-12 | ℃-4 | -200℃~0℃ |
如需完整代码,请联系我们的技术支持。联系方式:1801420372718014203727