在某项目中,我们采用了LM75A数字温度传感器来监测主控板的进风口和出风口温度。LM75A是一款基于I²C接口的高精度温度传感器,能够提供9位温度读数,并内置过温报警输出(O.S.引脚)。本文档旨在总结LM75A的寄存器定义、温度数据格式、配置建议、告警处理机制,以及基于mcpld_cli工具的实际操作示例,为后续的单板温度测量和过温策略设置提供参考。

  1. 寄存器定义

LM75A 内部寄存器通过指针地址访问,定义如下:

寄存器名称

指针地址

寄存器值/位定义

描述

温度寄存器

0x00

D15-D7: 温度值 (MSB在前)
D6-D0:
未定义

只读
二进制补码格式
• 1 LSB = 0.5°C
• D15
为符号位 (1=负温)

配置寄存器

0x01

1D0: 关机控制
0=正常模式
1=低功耗关机
2D1: 工作模式
0=比较器模式
1=中断模式
3D2: O.S. 输出极性
0=低电平有效
1=高电平有效
4D3-D4: 故障队列
设置触发 O.S.输出所需的连续故障次数(防止噪声误触发)
00=1次故障触发
01=2
10=4
11=6
5D5-D7: 保留 (0)

读写
上电默认值: 00 00 0000
控制工作模式和噪声容错

THYST寄存器

0x02

1D15-D7: 滞后温度值
2D6-D0: 未定义

读写
滞后温度阈值 (单位同温度寄存器)
上电默认值: 75°C

TOS寄存器

0x03

1D15-D7: 超温阈值
2D6-D0: 未定义

读写
超温报警阈值 (单位同温度寄存器)
上电默认值: 80°C

产品ID寄存器

0x07

1D7-D4: 1010 (0xA)
2
D3-D0: 0001 (0x1)

只读
固定值 0xA1
4 0xA: LM75A标识
4 0x1: 版本号

2. 温度数据格式

温度数据可从温度寄存器、TOS 和 THYST寄存器中读取,也可写入 TOS和THYST。数据采用9 位二进制补码格式,LSB = 0.5°C。

- 位宽:9 位有效数据(存储于寄存器的 D15-D7 位,D6-D0 未定义,通常为 0)

- 编码方式:

  - 正温度:D15 = 0

  - 负温度:D15 = 1(需按补码规则转换)

- 分辨率:1 LSB = 0.5°C

示例如下:

寄存器值(高9位)

计算过程

实际温度

0001 1001 (0x19)

25 × 0.5 = 12.5°C

+12.5°C

1110 0111 (0xE7)

补码转原码0001 1001 = 25 → -25 × 0.5 = -12.5°C

-12.5°C

编程注意事项:

- 读取温度:读取16位数据,提取高9位(`raw >> 7`)并乘以 0.5。

- 写入阈值:向TOS/THYST写入时,只需填充高9位有效数据,低7位可任意(通常写0)。

- 负温度转换:若读取的 16 位值最高位为 1,需进行补码转换(例如:`(int16_t)raw >> 7` 再乘以 0.5,注意符号扩展)。

代码示例:

int16_t raw = (data[0] << 8) | data[1];  // 合并16位数据

float temp = (raw >> 7) * 0.5f;       // 提取高9位并转换

注:raw是有符号16位整数,右移7位时会自动进行符号扩展,因此负温度值会正确保留。

3. 寄存器配置建议

针对进风口和出风口的不同应用场景,推荐以下配置值:

寄存器

进风口传感器

出风口传感器

配置原因

配置寄存器

(0x01)

0x0A

(00001010)

0x0A

(00001010)

1、工作模式:连续转换
2、报警极性:低电平有效(兼容多数MCU
3、故障队列:4次容错(防瞬时干扰)
4、报警模式:比较器模式(自动复位)

THYST

滞后温度

(0x02)

0x4B00

(75°C)

0x5500

(85°C)

1、进风口:低于75°C解除报警(快速响应环境变化)
2、出风口:低于85°C解除报警(适应设备热惯性)

TOS

超温阈值

(0x03)

0x5000

(80°C)

0x5A00

(90°C)

1、进风口>80°C报警(预防散热失效)
2、出风口:>90°C报警(避免核心过热损坏)

4. 告警处理

LM75A 的O.S.引脚在温度超过 TOS 时触发,并保持有效直到被清除。下图描述了超温信号输出与温度的关系:

4.1 准备阶段

- 硬件连接:将O.S引脚连接至CPLD的外部中断引脚,配置为下降沿触发。

- 初始化:通过I²C配置LM75A:

  - 设置 TOS(超温阈值)

  - 设置 THYST(滞后阈值)

  - 设置 O.S 模式(推荐中断模式 `OS_INTERRUPT=1`)

4.2 超温事件处理流程

1. OS 引脚下降沿触发 CPLD 中断。

2. 在中断服务程序(ISR)中:

   - 读取温度寄存器(`0x00`)——此操作会清除 O.S 锁存状态,释放引脚。

   - (可选)读取配置寄存器确认模式。

   - 比较读取的温度值与 TOS,确认超温。

   - 执行报警动作(如上报、点灯、记录日志)。

   - 设置软件标志 `over_temp_flag = true`。

4.3 恢复事件处理

在主循环或低优先级任务中,定期(如每秒)读取温度寄存器:

- 如果 `over_temp_flag == true` 且当前温度 < THYST:

  - 清除标志 `over_temp_flag = false`

  - 执行报警消除动作(如关闭报警灯、记录恢复日志)

4.4 常见问题及解决方案

现象

可能原因

解决方案

O.S.不触发

1T_OS设置过高
2OS_INTERRUPT配置错误

1、检查寄存器写入值
2、示波器监测I²C波形

O.S.不恢复

1、未读取温度寄存器
2T_HYST迟滞值过小

1、确保ISR包含读取操作
2、增大T_HYST

误触发

1、电源噪声干扰
2、温度波动大

1、增加滤波电容
2、调整fault_queue参数

5. I²C 读写示例

以下示例使用 `mcpld_cli` 工具进行 I²C 操作,LM75A 默认设备地址为 `0x48`。

操作

命令示例

说明

读取温度寄存器

mcpld_cli i2c-rd 0x48 0x0

返回16位温度值

读取配置寄存器

mcpld_cli i2c-rd 0x48 0x1

返回当前配置

写配置寄存器

mcpld_cli i2c-wr 0x48 0x1 0x18

写入配置值(如0x18

读取 THYST 阈值

mcpld_cli i2c-rd 0x48 0x2

默认 75°C0x4B00

THYST 阈值(-25°C

mcpld_cli i2c-wr 0x48 0x2 0xe700

0xE700对应 -25°C

读取 TOS 阈值

mcpld_cli i2c-rd 0x48 0x3

默认 80°C0x5000

TOS 阈值(125°C

mcpld_cli i2c-wr 0x48 0x3 0x7d00

0x7D00对应125°C

读取产品 ID

mcpld_cli i2c-rd 0x48 0x7

返回0xA1

6. 读取温度

使用专用命令读取指定传感器的温度(参数 0 表示传感器索引):

mcpld_cli temp-read 0

7. 传感器配置与查询

mcpld_cli temp-cfg <sensor> <shutdown> <mode> <polarity> <fault_queue>

参数说明:

- `sensor`:传感器索引(0 表示第一个)

- `shutdown`:0=正常模式,1=低功耗关机

- `mode`:0=比较器模式,1=中断模式

- `polarity`:0=低电平有效,1=高电平有效

- `fault_queue`:0=1次,1=2次,2=4次,3=6次

配置示例:

命令示例

说明

mcpld_cli temp-cfg 0 0 0 0 0

正常、比较器、低有效、1次故障

mcpld_cli temp-cfg 0 1 0 0 0

关机模式

mcpld_cli temp-cfg 0 0 1 0 0

中断模式

mcpld_cli temp-cfg 0 0 0 1 0

高电平有效

mcpld_cli temp-cfg 0 0 0 0 1

故障队列 2

mcpld_cli temp-cfg 0 0 0 0 2

故障队列 4

mcpld_cli temp-cfg 0 0 0 0 3

故障队列 6

mcpld_cli temp-cfg 0 1 1 1 3

关机+中断+高有效+6次故障

8. T_hyst 和 T_os 阈值查询与配置

8.1 查询阈值

- 查询 THYST(类型 0):`mcpld_cli temp-threshold-get 0 0`

- 查询 TOS(类型 1):`mcpld_cli temp-threshold-get 0 1`

8.2 配置阈值

mcpld_cli temp-threshold <sensor> <type> <value>

- `type`:0=THYST,1=TOS

- `value`:温度值,支持正负,例如 `25.0` 或 `N25.0`(表示 -25.0)

示例:

命令示例

说明

mcpld_cli temp-threshold 0 0 25.0

设置 THYST 25.0°C

mcpld_cli temp-threshold 0 0 N25.0

设置 THYST -25.0°C

mcpld_cli temp-threshold 0 1 125.0

设置 TOS 125.0°C

mcpld_cli temp-threshold 0 1 N25.0

设置 TOS -25.0°C

9. 产品 ID 获取

mcpld_cli temp-get-id 0

10. 告警相关操作

10.1 触发与清除机制

触发条件:温度超过 TOS 时,O.S. 引脚变为有效(电平取决于配置)。

清除条件:通过 I²C 读取任意寄存器(如温度寄存器)可清除中断状态;进入关机模式也会清除。

再次触发:温度必须下降到 THYST 以下,再回升到 TOS 以上才能再次触发。

10.2 示例:阈值设置与中断观察

以下命令演示设置 THYST=26°C、TOS=28°C,观察中断触发与自动清除:

mcpld_cli temp-read 0

mcpld_cli temp-cfg 0 0 1 0 2

mcpld_cli temp-threshold-get 0 0

mcpld_cli temp-threshold-get 0 1

mcpld_cli temp-alert-status 0

mcpld_cli temp-threshold 0 0 26

mcpld_cli temp-threshold 0 1 28

mcpld_cli i2c-rd 0x48 0

mcpld_cli i2c-rd 0x48 1

- 温度高于 28°C 时触发中断,读取当前温度自动清除 

- 温度低于 26°C 时触发中断,读取当前温度自动清除 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐