LM75A 数字温度传感器使用总结
本文档详细介绍了LM75A数字温度传感器的应用方法,包括寄存器定义、温度数据格式解析、配置建议和告警处理机制。LM75A通过I²C接口提供9位温度数据(0.5°C分辨率),内置超温报警功能。文档重点阐述了温度寄存器、配置寄存器及阈值寄存器的使用方法,提供了进/出风口传感器的推荐配置参数,并详细说明了超温告警触发与恢复的处理流程。此外,还给出了基于mcpld_cli工具的实际操作示例,包括温度读取、
在某项目中,我们采用了LM75A数字温度传感器来监测主控板的进风口和出风口温度。LM75A是一款基于I²C接口的高精度温度传感器,能够提供9位温度读数,并内置过温报警输出(O.S.引脚)。本文档旨在总结LM75A的寄存器定义、温度数据格式、配置建议、告警处理机制,以及基于mcpld_cli工具的实际操作示例,为后续的单板温度测量和过温策略设置提供参考。
- 寄存器定义

LM75A 内部寄存器通过指针地址访问,定义如下:
|
寄存器名称 |
指针地址 |
寄存器值/位定义 |
描述 |
|
温度寄存器 |
0x00 |
D15-D7: 温度值 (MSB在前) |
只读 |
|
配置寄存器 |
0x01 |
1、D0: 关机控制 |
读写 |
|
THYST寄存器 |
0x02 |
1、D15-D7: 滞后温度值 |
读写 |
|
TOS寄存器 |
0x03 |
1、D15-D7: 超温阈值 |
读写 |
|
产品ID寄存器 |
0x07 |
1、D7-D4: 1010 (0xA) |
只读 |
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、工作模式:连续转换 |
|
THYST 滞后温度 (0x02) |
0x4B00 (75°C) |
0x5500 (85°C) |
1、进风口:低于75°C解除报警(快速响应环境变化) |
|
TOS 超温阈值 (0x03) |
0x5000 (80°C) |
0x5A00 (90°C) |
1、进风口:>80°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.不触发 |
1、T_OS设置过高 |
1、检查寄存器写入值 |
|
O.S.不恢复 |
1、未读取温度寄存器 |
1、确保ISR包含读取操作 |
|
误触发 |
1、电源噪声干扰 |
1、增加滤波电容 |
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°C(0x4B00) |
|
写THYST 阈值(-25°C) |
mcpld_cli i2c-wr 0x48 0x2 0xe700 |
0xE700对应 -25°C |
|
读取 TOS 阈值 |
mcpld_cli i2c-rd 0x48 0x3 |
默认 80°C(0x5000) |
|
写 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 时触发中断,读取当前温度自动清除
更多推荐


所有评论(0)