跳转至

LuatOS OneWire协议调试注意事项

一,LuatOS 及 OneWire 说明;

  1. LuatOS,是合宙开发的、基于 Lua 脚本语言、适用于合宙模组和工业引擎产品的、嵌入式操作系统;
  2. 支持合宙 LuatOS 二次开发方式的模组和工业引擎产品型号有 Air8000、Air8000、Air8101 等;
  3. LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器和 Air8000 搭配来举例说明;

"Air8000开发板V1.3(有CAN&RJ45)相关硬件资料20250214",点我下载

二,关于 DS18B20 温度传感器;

以下内容来自于 Deepseek;

在 DS18B20 温度传感器的实际应用中,需特别注意其单总线(1-Wire)协议特性及硬件设计。以下是分硬件和软件的详细注意事项:


(一)硬件注意事项

  1. 电源模式选择

  2. 寄生供电模式: 若使用寄生供电(VDD 接地,数据线供电),需在强上拉(通过 MOSFET)时提供足够电流(典型 1mA)。温度转换期间必须保持强上拉,否则数据可能丢失。

  3. 独立供电模式: 推荐优先选择独立电源(3.0-5.5V),可避免寄生供电的时序复杂性,稳定性更高。
  4. 上拉电阻配置

    • 单总线需接 4.7kΩ 上拉电阻(标准值,5V 系统常用),长距离通信可适当减小阻值(如 2.2kΩ)。
    • 错误示例:未接上拉电阻会导致总线无法拉高,通信失败。
    • 布线设计

    • 总线长度建议 < 50 米(实际应用中通常 <20 米),过长会引入电容效应,导致信号边沿延迟。

    • 避免与高频信号线平行走线,减少电磁干扰(EMI)。
    • 接地优化

    • 确保传感器与 MCU 共地,必要时采用星型接地,防止地环路干扰。

    • 在工业环境中,可增加磁珠或隔离器抑制共模噪声。
    • 电源滤波

    • 在 VDD 引脚并联 100nF 陶瓷电容,滤除高频噪声。

    • 长线缆供电时,可增加 10μF 电解电容缓冲。
    • 多器件连接

    • 每个 DS18B20 有唯一 64 位 ROM ID,需通过搜索算法(如树状搜索)识别多个设备。

    • 总线挂载设备数受驱动能力限制,一般不超过 50 个
    • ESD 防护

    • 在易受静电干扰的环境中,数据线串联 100Ω 电阻并并联 TVS 二极管(如 SMAJ5.0A)。


(二)软件注意事项

  1. 严格的时序控制

    • 单总线协议对时序敏感,需精确控制复位脉冲(480-960μs)、应答时隙(15-60μs)及读写时隙(1-15μs)。
    • 错误处理与重试机制

    • 每次操作前检查总线是否存在短路(持续低电平)。

    • 若读取的 CRC 校验失败,需重试 3-5 次,避免偶发干扰。
    • 温度转换时间管理

    • 转换时间与分辨率相关(9 位:93.75ms,12 位:750ms),需在 CONVERT T 命令后等待足够时间。

    • CRC 校验强制启用

    • 始终验证读取数据的 CRC8 校验码,防止错误数据被误用。

    • 示例校验函数需优化为查表法以提高效率。
    • 多设备枚举

    • 使用递归搜索算法遍历总线上的所有 ROM ID,需处理冲突和分支选择。

    • 温度精度校准

    • 若需要高精度,可进行两点校准:冰水混合物(0°C)和沸水(100°C)环境下的数据修正。


(三)常见问题与解决

  1. 传感器无响应

    • 检查上拉电阻是否虚焊,总线是否对地/电源短路。
    • 用示波器观察总线波形,确认复位脉冲是否合规。
    • 温度值跳变

    • 增加软件滤波(如滑动平均滤波)。

    • 检查电源电压波动,确保转换期间供电稳定。
    • 长距离通信失败

    • 改用屏蔽双绞线,降低波特率(减少时序敏感性)。

    • 使用总线驱动器(如 DS2480B)增强驱动能力。

(四)推荐设计流程

  1. 硬件设计 → 2. 单设备基础通信测试 → 3. CRC 校验验证 → 4. 多设备枚举 → 5. 抗干扰测试(如开关电源噪声注入)→ 6. 长期稳定性测试。

    通过系统化设计,DS18B20 可在-55°C 至 +125°C 范围内实现 ±0.5°C 精度(典型值)。

三,Air8000 硬件适配说明;

  1. Air8000 共支持 4 路 OneWire 接口,默认使用 Air8000 第 23 管脚;

  1. Air8000 的 IO 电平默认 3.0V,当 DS18B20 是 2.8V-3.3V 供电时,OneWire 信号线不需要电平转换,可以直连;
  2. Air8000 LuatOS OneWire 协议,虽然有 4 个管脚可以复用,但硬件通道只有 1 个,大家在设计时:

    • 默认使用管脚 23(GPIO2),结合 OneWire 协议的 ROM Search,根据各自的 ROM ID,实现多个 DS18B20 数据的读取;
    • 使用管脚 23 和另外 3 个管脚,实现最多 4 个 DS18B20 的独立连接,这种情况下注意:由于 Air8000 只有 1 路 OneWire 硬件通道,软件读取时需要“分时轮询操作”;

四,Air8000 软件适配说明;

接线说明:

DS18B20    Air8000
   GND    ->  GND
   VDD    ->  3.3V
   DATA   ->  GPIO2

注意:

  1. OneWire 功能支持在 Air8000 的 4 个管脚使用, 但硬件通道只有 1 个, 默认是 GPIO2(管脚号 PIN23);
  2. 如需切换到其他管脚, 参考如下切换逻辑, 选其中一种;
mcu.altfun(mcu.ONEWIRE, 0, 17, 4, 0) -- GPIO2, 也就是默认值
mcu.altfun(mcu.ONEWIRE, 0, 18, 4, 0) -- GPIO3
mcu.altfun(mcu.ONEWIRE, 0, 22, 4, 0) -- GPIO7
mcu.altfun(mcu.ONEWIRE, 0, 53, 4, 0) -- GPIO28
  1. 具体代码参考 demo/onewire 运行截图

五,Air8000 开发板调试说明;

我们以支持 CAN 接口和以太网接口版本的 Air8000 开发板举例说明。

接线位置如下图所示:

注意事项: 1. 如果使用外部电源给 DS18B20 供电,请确保外部电源与开发板共地连接;

  1. GPIO2(Air8000 模组管脚 PIN23)已在 Air8000 开发板顶部 46PIN 插针连接器的 PIN14 引出,非常方便调试,但仍需特别注意的是: GPIO2(Air8000 模组管脚 PIN23)在 Air8000 开发板上已经作为控制摄像头供电 LDO 启动的 GPIO 使用,调试时需要将该部分电路的 R19 和 R29 用热风枪吹掉;

下图为Air8000开发板原理图,用于示意R19和R29的位置;

更多开发板资料,详见:

"Air8000开发板V1.3(有CAN&RJ45)相关硬件资料20250214",点我下载