飞控与喷洒系统接口控制文档
| 字段 | 内容 |
|---|---|
| 文档编号 | ICD-05-V0.1 |
| 版本 | V0.1 |
| 状态 | 草稿 |
| 作者 | 产品团队 |
| 日期 | 2026-04-14 |
| 审核人 | [待定] |
| 接口双方 | 飞控系统 (FC) ↔ 喷洒系统 (SP) |
修订记录
| 版本 | 日期 | 修订人 | 修订内容 |
|---|---|---|---|
| V0.1 | 2026-04-14 | 产品团队 | 初稿 |
1. 概述
1.1 目的
本文档定义飞控系统与喷洒系统之间的物理接口、通信协议和联动逻辑,确保双方开发团队在接口层面对齐。
1.2 接口范围
- 飞控系统(FC):指令发起方,负责下发喷洒控制指令
- 喷洒系统(SP):执行方,负责执行喷洒并上报状态
- 数据流向:FC→SP(控制指令)、SP→FC(状态反馈)
1.3 关联文档
| 文档编号 | 文档名称 | 关系 |
|---|---|---|
| SUB-FC-V0.1 | 飞控系统PRD | FC侧接口需求 |
| SUB-SP-V0.1 | 喷洒系统PRD | SP侧接口需求 |
| PRD-MASTER-V0.1 | 总体产品需求文档 | 上位需求 |
2. 物理层
2.1 接口类型
| 参数 | 规格 |
|---|---|
| 总线类型 | CAN 2.0B |
| 通信速率 | 1000 Kbps |
| 线缆 | 双绞屏蔽线(CAN_H, CAN_L, GND),线径≥AWG22 |
| 连接器 | [TBD]型号,4pin防水连接器(CAN_H, CAN_L, +V_SUPPLY, GND) |
| 终端电阻 | 飞控侧120Ω,喷洒控制板侧120Ω |
| 线束长度 | ≤1.5m(中心体至喷洒控制板) |
| 防护等级 | 连接器IP67,线束外套硅胶防护管 |
2.2 供电
| 参数 | 规格 |
|---|---|
| 喷洒控制板供电 | 由电池直供(61.2~78.3V),控制板内置降压模块 |
| 水泵电机供电 | 由电池直供,喷洒控制板内MOS管驱动 |
| 喷头电机供电 | 由喷洒控制板驱动(离心雾化喷头独立PWM调速) |
3. 协议层
3.1 节点与CAN ID分配
| 节点 | CAN节点号 | 说明 |
|---|---|---|
| 飞控 (FC) | 1 | 指令发起方 |
| 喷洒控制板 (SP) | 30 | 指令执行方+状态上报 |
3.2 消息总览
| 消息ID | 方向 | 消息名称 | 数据长度(byte) | 周期(ms) | 说明 |
|---|---|---|---|---|---|
| 0x100 | FC→SP | SprayControl | 8 | 50 | 喷洒控制指令 |
| 0x101 | FC→SP | SprayModeSet | 6 | 事件触发 | 喷洒模式/参数设置 |
| 0x200 | SP→FC | SprayStatus | 8 | 100 | 喷洒实时状态 |
| 0x201 | SP→FC | SprayDiag | 8 | 500 | 喷洒诊断数据 |
| 0x202 | SP→FC | SprayFault | 4 | 事件触发 | 喷洒故障上报 |
3.3 SprayControl(0x100,FC→SP,周期50ms)
喷洒主控制指令,飞控每50ms发送一次。
| 字节 | 位 | 字段名 | 类型 | 范围 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0 | [1:0] | spray_enable | uint2 | 0-2 | — | 0=停止喷洒, 1=开始喷洒, 2=暂停 |
| 0 | [3:2] | spray_mode | uint2 | 0-3 | — | 0=连续, 1=脉冲, 2=保留, 3=保留 |
| 0 | [7:4] | nozzle_mask | uint4 | 0x0-0xF | — | 喷头开关位图: bit4=喷头1, bit5=喷头2, bit6=喷头3, bit7=喷头4 |
| 1-2 | [15:0] | target_flow | uint16 | 0-3000 | 0.01 L/min | 目标流量,0.01精度,范围0~30 L/min |
| 3-4 | [15:0] | nozzle_rpm | uint16 | 0-20000 | rpm | 离心喷头目标转速(控制粒径),0=自动 |
| 5-6 | [15:0] | flight_speed | uint16 | 0-2000 | 0.01 m/s | 当前飞行速度(用于流量联动),由飞控填入 |
| 7 | [7:0] | reserved | uint8 | 0 | — | 保留,置0 |
3.4 SprayModeSet(0x101,FC→SP,事件触发)
喷洒模式/参数设置,作业开始前或参数变更时发送。
| 字节 | 位 | 字段名 | 类型 | 范围 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0 | [7:0] | liquid_type | uint8 | 0-10 | — | 药液类型预设: 0=水, 1=水剂, 2=乳油, 3=悬浮剂, 4-10=自定义 |
| 1-2 | [15:0] | dose_per_mu | uint16 | 0-10000 | mL/亩 | 亩用量设定 |
| 3-4 | [15:0] | swath_width | uint16 | 0-2000 | cm | 航线间距(喷幅),单位厘米 |
| 5 | [7:0] | nozzle_count | uint8 | 2/4 | — | 当前喷头数量 |
3.5 SprayStatus(0x200,SP→FC,周期100ms)
喷洒实时状态上报。
| 字节 | 位 | 字段名 | 类型 | 范围 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0-1 | [15:0] | actual_flow | uint16 | 0-3000 | 0.01 L/min | 当前实际流量 |
| 2-3 | [15:0] | total_sprayed | uint16 | 0-65535 | 10 mL | 累计喷洒量(×10mL),溢出归零 |
| 4 | [7:0] | tank_level | uint8 | 0-100 | % | 药箱液位百分比 |
| 5 | [7:0] | pump_status | uint8 | — | — | bit0:泵1运行, bit1:泵2运行, bit2:泵1故障, bit3:泵2故障 |
| 6 | [7:0] | nozzle_status | uint8 | — | — | bit0:喷头1正常, bit1:喷头2正常, bit2:喷头3正常, bit3:喷头4正常 (0=故障/堵塞, 1=正常) |
| 7 | [7:0] | spray_state | uint8 | 0-4 | — | 0=待机, 1=喷洒中, 2=暂停, 3=校准中, 4=故障 |
3.6 SprayDiag(0x201,SP→FC,周期500ms)
喷洒诊断数据,用于App显示和故障排查。
| 字节 | 位 | 字段名 | 类型 | 范围 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0-1 | [15:0] | pipe_pressure | uint16 | 0-10000 | 0.01 bar | 管路压力 |
| 2 | [7:0] | pump1_temp | uint8 | 0-150 | °C | 水泵1温度,偏移-40 |
| 3 | [7:0] | pump2_temp | uint8 | 0-150 | °C | 水泵2温度,偏移-40 |
| 4-5 | [15:0] | nozzle1_rpm | uint16 | 0-20000 | rpm | 喷头1实际转速 |
| 6-7 | [15:0] | nozzle2_rpm | uint16 | 0-20000 | rpm | 喷头2实际转速 |
3.7 SprayFault(0x202,SP→FC,事件触发)
故障发生或清除时立即发送。
| 字节 | 位 | 字段名 | 类型 | 范围 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0-1 | [15:0] | fault_code | uint16 | — | — | 故障码,见故障码表 |
| 2 | [7:0] | fault_level | uint8 | 0-3 | — | 0=清除, 1=告警, 2=严重, 3=紧急 |
| 3 | [7:0] | fault_source | uint8 | 0-5 | — | 0=泵1, 1=泵2, 2=喷头1, 3=喷头2, 4=流量计, 5=管路 |
3.8 故障码定义
| 故障码 | 名称 | 等级 | 说明 |
|---|---|---|---|
| 0x0000 | 无故障 | 0 | — |
| 0x0001 | 泵1过温 | 2 | 泵1温度超限 |
| 0x0002 | 泵2过温 | 2 | 泵2温度超限 |
| 0x0003 | 泵1堵转 | 2 | 泵1电流异常高 |
| 0x0004 | 泵2堵转 | 2 | 泵2电流异常高 |
| 0x0010 | 喷头1堵塞 | 1 | 喷头1流量异常低 |
| 0x0011 | 喷头2堵塞 | 1 | 喷头2流量异常低 |
| 0x0012 | 喷头1电机故障 | 2 | 喷头1转速异常 |
| 0x0013 | 喷头2电机故障 | 2 | 喷头2转速异常 |
| 0x0020 | 流量计故障 | 2 | 流量计信号丢失 |
| 0x0021 | 流量异常 | 1 | 实际流量与目标偏差>30% |
| 0x0030 | 管路泄漏 | 2 | 泵运转但无流量 |
| 0x0040 | 药箱空 | 1 | 液位传感器报告空箱 |
| 0x00FF | 通信超时 | 3 | 飞控指令超时>1s |
4. 联动逻辑
4.1 流量-速度联动
飞控每50ms将当前飞行速度写入SprayControl.flight_speed
→ 喷洒控制板根据 亩用量(dose_per_mu) × 航线间距(swath_width) × 飞行速度(flight_speed)
实时计算目标流量
→ 闭环调节水泵PWM使actual_flow逼近计算目标
→ 飞行器减速时自动减小流量,加速时自动增大流量
→ 悬停(speed=0)时自动停喷流量计算公式:
target_flow (L/min) = dose_per_mu (mL/亩) × swath_width (m) × flight_speed (m/s) / 666.674.2 边界喷头开关联动
飞控根据航线规划和当前位置判断是否接近地块边界
→ 设置SprayControl.nozzle_mask关闭对应侧喷头
→ 喷洒控制板在≤100ms内执行喷头开/关
→ 飞行器驶出作业区域时nozzle_mask=0x0(全关)4.3 药箱空→返航联动
喷洒控制板检测到tank_level≤5%
→ SprayStatus.tank_level上报≤5
→ 同时发送SprayFault(fault_code=0x0040, level=1)
→ 飞控收到后:关闭喷洒(spray_enable=0) → 触发自动返航
→ App显示"无药告警"4.4 通信超时保护
喷洒控制板连续1s未收到SprayControl消息
→ 自动停止喷洒(安全状态)
→ 发送SprayFault(fault_code=0x00FF, level=3)
→ 恢复通信后需飞控重新发送spray_enable=1才恢复喷洒5. 时序要求
| 参数 | 要求 | 说明 |
|---|---|---|
| FC→SP指令周期 | 50ms ±5ms | SprayControl固定周期 |
| SP→FC状态周期 | 100ms ±10ms | SprayStatus固定周期 |
| SP→FC诊断周期 | 500ms ±50ms | SprayDiag固定周期 |
| 喷洒启动延迟 | 收到spray_enable=1后≤500ms出药 | 含水泵启动时间 |
| 喷洒停止延迟 | 收到spray_enable=0后≤200ms停药 | 电磁阀关闭时间 |
| 喷头开关响应 | nozzle_mask变化后≤100ms执行 | 单喷头开关 |
| 通信超时阈值 | FC指令丢失>1000ms触发安全停喷 | — |
6. 待决事项
| 编号 | 事项描述 | 责任人 | 影响范围 |
|---|---|---|---|
| TBD-ICD05-001 | CAN连接器型号选型 | 硬件团队 | 物理层 |
| TBD-ICD05-002 | 4喷头扩展时CAN ID是否需要增加额外诊断消息 | FC+SP开发 | 协议层 |
| TBD-ICD05-003 | 脉冲喷洒模式的具体参数(频率/占空比)定义 | 喷洒团队 | SprayControl |
文档结束
