跳转到内容

AS5600 12 位磁性位置传感器

as5600 传感器平台允许您通过 ESPHome 使用 AS5600(数据手册, AMS)或 AS5600L(数据手册, AMS)12 位磁性位置传感器。单独传感器将使用 AS5600 传感器平台 添加。要使用此中心,请先设置 I²C 总线 并将传感器连接到指定的引脚。

AS5600 12 位磁性位置传感器。
as5600:
dir_pin: GPIOXX
start_position: 0deg
range: 180deg
  • dir_pin (可选, int): 连接到 AS5600 方向引脚的引脚。 有关更多信息,请参阅 方向。

  • direction (可选, string): 磁铁应旋转以增加值的方向。 与 dir_pin 配合使用。

    • clockwise(默认)
    • counterclockwise
  • start_position (可选, int): 应视为起始位置(即 0)的原始位置。 请参阅 位置/范围。

  • end_position (可选, int): 应视为允许旋转范围末端(例如 180deg)的原始位置。 与 range 互斥。请参阅 位置/范围。

  • range (可选, int): 从 start_position 开始的允许旋转范围。与 end_position 互斥。请参阅 位置/范围。

  • hysteresis (可选, string): 请参阅数据手册。

    • none(默认)
    • lsb1
    • lsb2
    • lsb3
  • power_mode (可选, string): 传感器运行的功耗模式。注意:当启用 watchdog 时, 如果位置没有太多变化,它会将设备切换到 low3。

    • nominal(默认)
    • low1
    • low2
    • low3
  • watchdog (可选, boolean): 是否启用将芯片置于 低功耗模式 3 的看门狗。请参阅数据手册获取更多信息。 默认为 off。

  • slow_filter (可选, string): 请参阅数据手册。

    • 16x(默认)
    • 8x
    • 4x
    • 2x
  • fast_filter (可选, string): 请参阅数据手册。

    • none(默认)
    • lsb6
    • lsb7
    • lsb9
    • lsb18
    • lsb21
    • lsb24
    • lsb10
  • address (可选, int): 传感器的 i²c 地址。 请参阅 I²C 地址 获取更多信息。

  • id (可选, ID): 手动指定此 AS5600 中心的 ID。

  • 来自 I²C 总线 中描述的 I²C 设备的所有其他选项。

AS5600 有一个 direction 引脚,用于控制哪个旋转方向会使位置值增加。 此引脚应拉低以顺时针旋转,拉高以逆时针旋转。如果悬空,很可能会 遇到异常行为。

如果您希望 ESP 控制器将该引脚拉高或拉低,可以配置 dir_pin 并可选地配置 direction 选项,使 ESP 控制器将该引脚拉高或拉低。

位置和范围可以配置为以下之一:

  • -4095 到 4095 之间的值
  • -360deg 到 360deg 之间的角度
  • -100% 到 100% 之间的百分比

NOTE

负位置值将归一化为相应的正位置(例如,-90deg 将转换为 270deg)。

AS5600 报告 2 个位置值。两种类型位置值的值始终是 0 到 4095 之间的整数。

“原始”位置值未经过滤、缩放等处理。因此,0 始终表示磁铁北极位于芯片顶部, 2048 始终表示磁铁北极位于芯片底部,以此类推。

常规/缩放位置根据传感器配置(例如 start_position、end_position、range 等)进行过滤和缩放。 例如,假设我们有以下组件配置:

as5600:
start_position: 90deg
range: 180deg
direction: clockwise
dir_pin: GPIOXX
  • 如果磁铁北极位于芯片右侧(即 1024 / 90deg 原始位置),缩放位置将报告值 0。
  • 如果磁铁北极位于芯片底部(即 2048 / 180deg 原始位置),缩放位置将报告值 2048。
  • 如果磁铁北极位于芯片左侧(即 3096 / 270deg 原始位置),缩放位置将报告值 4095。
  • 如果磁铁北极位于芯片顶部(即 0 / 0deg 原始位置),缩放位置将超出范围(这也有 其自身的注意事项,将在下文讨论)。

NOTE

您可以指定一个小于 start_position 的 end_position。这样做时,允许范围将从 start_position 开始,一直延续到最高位置值(即 4095),然后从 0 继续,直到达到 end_position。

WARNING

数据手册指出,可以配置的最小角度(起始和结束位置,或起始和范围)为 18 度。 配置低于此值的内容可能会产生意外结果。

AS5600 的地址不可配置,必须为 0x36。但是,如果使用 AS5600L, 默认地址应为 0x40,且它是可配置的。

as5600 传感器允许您通过 ESPHome 发布来自 AS5600 的角度/位置测量值。 首先,为您的 AS5600 传感器设置一个 AS5600 中心,然后使用此 传感器平台创建单独传感器,将位置报告给 Home Assistant。

as5600:
dir_pin: GPIOXX
sensor:
- platform: as5600
name: Position
raw_position:
name: Raw Position
gain:
name: Gain
magnitude:
name: Magnitude
status:
name: Status
  • out_of_range_mode (可选, string): 如何处理超出范围的值。仅适用于配置 为小于 360 度范围的情况。默认为 min_max。请参阅 超出范围模式。

  • as5600_id (可选, ID): 手动指定 AS5600 中心 的 ID。

  • update_interval (可选, Time): 检查 传感器的时间间隔。默认为 60s。

  • raw_position (可选): 报告磁铁的原始(未缩放、未过滤)位置。

    • 来自 Sensor 的所有其他选项。
  • gain (可选): 关于自动增益控制的信息。通常用于诊断目的。 数据手册说,在 5V 供电时该值将在 0-255 之间,在 3.3V 供电时将在 0-128 之间。 理想情况下,值应接近相应范围的中部。

    • 来自 Sensor 的所有其他选项。
  • magnitude (可选): 关于检测到的幅值的信息。通常用于诊断目的。 数据手册中似乎没有定义预期的刻度,不过,AMS 提供了 用户指南 其中包含的图片显示它是一个 0 到 3000 之间的刻度。对于位置良好的磁铁,此值通常在 2100 附近。

    • 来自 Sensor 的所有其他选项。
  • status (可选): 关于磁铁状态的信息。通常用于诊断目的。 请参阅 磁铁状态

    • 来自 Sensor 的所有其他选项。
  • 来自 Sensor 的所有其他选项。

  • min_max(默认)
  • nan

当使用小于 360deg 的范围时,会有一系列原始值被视为”超出范围”。默认情况下(min_max 模式),AS5600 将”超出范围”范围分成两半,在靠近 start_position 的一半报告 0,并在靠近 end_position / range 末端的一半报告 4095。或者,您可以设置为 nan 模式,在此模式下,当位置超出缩小范围时,传感器将发布 NAN(即”未知”)。

磁铁状态应报告以下值之一:

  • 2 表示未检测到磁铁。
  • 4 表示检测到磁铁且读数良好。
  • 5 表示检测到磁铁,但磁铁太强。如果磁铁太强,测量值可能会显得卡住。
  • 6 表示检测到磁铁,但磁铁太弱。在此状态下仍可能进行测量。

您可能希望将位置从原生的 0 到 4095 转换为角度,或者是允许范围的百分比。 以下是一些实现此目的的示例:

as5600:
id: my_as5600
sensor:
- platform: as5600
update_interval: 1s
name: Angle
unit_of_measurement: '°'
accuracy_decimals: 2
icon: mdi:rotate-right
filters:
- delta: 1
- lambda: 'return x * as5600::RAW_TO_DEGREES * id(my_as5600).get_range_scale();'
as5600:
id: my_as5600
sensor:
- platform: as5600
update_interval: 1s
name: Percent
unit_of_measurement: '%'
accuracy_decimals: 2
icon: mdi:rotate-right
filters:
- delta: 1
- lambda: 'return (x / as5600::POSITION_COUNT) * 100;'