# I2C 总线外设
I2C (打开新窗口) 是一种串行通信协议,通常(至少在小型无人机上)用于连接测距仪、LED、指南针等外围组件。
建议用于
I2C 允许多个主设备连接多个从设备,每个连接只需 2 根导线(SDA、SCL)。理论上,一条总线可支持 128 个设备,每个设备通过其唯一的地址进行访问。
备注
在需要较高数据传输速率的情况下,以及在较大的飞行器上,传感器安装在离飞行控制器较远的地方时,通常会首选 UAVCAN。
# 布线
I2C 使用一对导线:SDA(串行数据)和 SCL(串行时钟)。总线属于开漏型,即设备将数据线接地。它使用一个上拉电阻将其推至 log.1
(空闲状态)--每根导线都有它的位置,通常位于总线终端设备上。一条总线可连接多个 I2C 设备。单个设备的连接没有任何交叉。
连接时(根据 dronecode 标准)使用配有 JST-GH 接头的 4 线电缆。为确保通信可靠并减少串扰,建议采用以下建议 电缆缠绕 和上拉电阻的位置。
# 检查总线和设备状态
总线分析的一个有用工具是 i2cdetect.它按地址列出了可用的 I2C 设备。它可用于查找总线上的设备是否可用,以及自动驾驶仪是否能与之通信。
可在 PX4 终端中使用以下命令运行该工具:
i2cdetect -b 1
后指定总线编号。 -b
规范
# 常见问题
# 地址冲突
如果总线上的两个 I2C 设备具有相同的 ID,就会发生冲突,两个设备都无法正常工作(或根本无法工作)。出现这种情况的原因通常是用户需要将两个相同类型的传感器连接到总线上,但如果设备默认使用重复的地址,也可能出现这种情况。
某些 I2C 设备可能允许为其中一个设备选择一个新地址,以避免冲突。有些设备不支持此选项,或者没有可使用的地址的广泛选项(即不能用于避免冲突)。
如果无法更改地址,可以使用 I2C 地址转换器.
# 传输能力不足
每个设备的可用带宽通常会随着设备数量的增加而减少。具体减少的幅度取决于每个设备使用的带宽。因此,可以连接许多低带宽设备,例如 转速计.如果添加的设备过多,可能会导致传输错误和网络不可靠。
有几种方法可以减少这一问题:
- 将设备分成若干组,每组设备数量大致相同,并将每组设备连接到一个自动驾驶仪端口
- 提高总线速度限制(外部 I2C 总线通常设置为 100kHz)
# 接线电容过大
总线布线的电容量会随着设备/电线数量的增加而增加。具体的减少量取决于总线布线的总长度和布线的特定电容。使用示波器可以分析这一问题,我们可以看到 SDA/SCL 信号的边缘不再尖锐。
有几种方法可以减少这一问题:
- 将设备分成若干组,每组设备数量大致相同,并将每组设备连接到一个自动驾驶仪端口
- 尽可能使用最短和最高质量的 I2C 电缆
- 将带弱开漏驱动器的设备分离到电容更小的总线上
- I2C 总线加速器
# I2C 总线加速器
I2C 总线加速器是独立的电路,可用于支持 I2C 总线上更长的布线长度。它们通过物理方式将 I2C 网络分成两部分,并使用各自的晶体管放大 I2C 信号。
可用的加速器包括
- 雷飞 TFI2CEXT01 (打开新窗口):
- 它带有 Dronecode 连接器,因此很容易添加到 Pixhawk I2C 设置中。
- 模块没有任何设置(开箱即用)。
# I2C 地址转换器
在没有其他方法分配唯一地址的系统中,I2C 地址转换器可用于防止 I2C 地址冲突。其工作原理是监听 I2C 通信,并在调用从属设备时(根据预设算法)转换地址。
支持的 I2C 地址转换器包括
# I2C 开发
I2C 设备的软件开发在 I2C 总线(开发概述).
# 更多信息
- I2C (打开新窗口) (维基百科)
- I2C 比较概述 (打开新窗口) (learn.sparkfun.com)
- 驱动程序框架