2. 无人机通信总线概述

无人机不是单一处理器加几个传感器的简单系统,而是一个由飞控、电调、云台、GPS/RTK、激光雷达、避障雷达、数传电台、图传模块、电池管理单元(BMS)等组成的分布式嵌入式系统。这些部件之间必须持续交换姿态、控制、状态与配置数据,因此通信总线的选型直接决定了系统的实时性、可靠性与可扩展性。在中小型无人机中,最常用的两类总线是 UART(异步串行总线)与 CAN(控制器局域网总线)。理解它们的作用边界,是后续编写设备驱动的基础。

一、两类总线在无人机中的角色定位

UART 是一种点对点、异步、全双工的串行通信接口。它没有时钟线,收发双方依靠预先约定的波特率进行采样,因此硬件成本极低,几乎所有 MCU 都自带多路 UART。在无人机中,UART 通常承担“处理器与外设模块之间的私有链路”:飞控与 GPS 模块、飞控与数传电台、飞控与光流模块、机载计算机与图传模块之间,绝大多数都是 UART 连接。它适合传输配置命令、NMEA 定位语句、MAVLink 遥测帧等中低速数据。

CAN 是一种多主、差分、带仲裁的广播式总线。它使用 CAN_H/CAN_L 双绞线传输差分信号,天然具备抗共模干扰能力,并内置 CRC 校验、应答机制与自动重发。在无人机中,CAN 主要承担“多节点实时控制网络”的角色:飞控与多个电调之间的油门/转速指令、电池管理单元上报的电压电流温度、云台与雷达的状态广播,都适合挂在同一条 CAN 总线上。CAN 的报文 ID 同时决定优先级,ID 越小优先级越高,这使得高优先级的控制帧在总线拥塞时仍能优先发送。

核心区别一句话概括:UART 是“一根线连一个设备”的私有通道,CAN 是“一根线挂多个设备”的共享网络。前者胜在简单通用,后者胜在可靠与实时。

二、典型拓扑结构

UART 的典型拓扑是点对点星型:每个外设独占一路 UART,飞控通过 TX/RX/GND 三根线与模块相连。若飞控需要连接 6 个 UART 外设,就需要 6 路 UART 控制器,引脚和 PCB 走线都会迅速增加。这也是为什么飞控上常见“UART1 接 GPS、UART2 接数传、UART3 接光流”的固定分配方式。

CAN 的典型拓扑是总线型:所有节点并联在 CAN_H 与 CAN_L 之间,两端各接一个 120Ω 终端电阻,形成阻抗匹配,抑制信号反射。节点以短支线方式接入主干,支线长度应尽量短。这种拓扑让新增一个电调或 BMS 只需并入总线,不必占用飞控的额外串口,扩展性明显更好。

无人机 UART 点对点拓扑 与 CAN 总线拓扑对比 UART:点对点星型 飞控 MCU GPS / RTK 数传电台 光流 图传模块 机载计算机 避障雷达 每路独占 TX/RX/GND,串口数量受限 CAN:总线型多主网络 CAN_H / CAN_L 双绞线 120Ω 120Ω 飞控 MCU BMS 电池管理 电调 1 电调 2 云台 / 雷达 节点并联共享总线,新增设备不占串口

三、带宽与实时性对比

带宽方面,UART 常见波特率为 9600、57600、115200、460800、921600 bps,高波特率下有效吞吐约几十到几百 KB/s,且每帧通常只有 1 字节有效载荷加起止位,协议开销比例较高。CAN 经典帧在 1 Mbps 速率下单帧最多携带 8 字节数据,CAN FD 可扩展到 64 字节并提升数据段速率,但单节点可用带宽仍受总线仲裁与帧开销限制。

实时性方面,UART 是点对点独占链路,只要双方不丢字节,延迟基本可预测;但它没有优先级概念,一旦某路串口被大量日志占满,控制指令就会被排队延迟。CAN 依靠非破坏性仲裁实现优先级抢占,高优先级控制帧可以“插队”发送,且硬件自动重发保证不丢帧,因此在多电调同步控制场景中实时性更优。代价是 CAN 总线利用率过高时,低优先级帧可能被长时间推迟,需要合理规划报文 ID 与发送周期。

对比维度 UART CAN
拓扑点对点星型总线型多主
物理层单端 TTL/RS232/RS485差分 CAN_H/CAN_L
典型速率115200 ~ 921600 bps500 kbps ~ 1 Mbps(FD 更高)
单帧载荷通常 1 字节起,按协议打包经典 8 字节,FD 最多 64 字节
优先级机制无ID 仲裁,越小越优先
错误检测依赖上层校验CRC + ACK + 自动重发
抗干扰较弱(单端)较强(差分)
扩展成本每设备占一路串口并入总线即可

四、应用场景分析与选型建议

UART 适合“模块化、协议成熟、速率要求不高”的场景:GPS/RTK 输出 NMEA 或 UBX 语句、数传电台透传 MAVLink、光流模块上报速度、机载计算机与飞控之间的 MAVLink 链路。这些场景的共同点是设备数量少、协议固定、对布线复杂度敏感。

CAN 适合“多节点、强实时、强可靠”的场景:四轴/六轴的多路电调控制、电池管理单元的多节电芯数据上报、云台与避障雷达的状态广播、以及需要冗余总线的工业级无人机。当电调数量超过 4 个、或需要毫秒级同步更新转速时,CAN 的优势非常明显。

选型口诀:单设备、慢数据、协议固定选 UART;多设备、快控制、要可靠选 CAN。两者不是替代关系,而是互补关系——现代飞控往往同时使用多路 UART 和一路 CAN。

五、常见误区与复盘

  • 误区一:波特率越高越好。高波特率对时钟误差和线缆质量更敏感,长距离或干扰环境下反而容易误码。应根据线长与噪声环境选择合适速率。
  • 误区二:CAN 挂上就能通。缺少 120Ω 终端电阻、支线过长、共地不良都会导致通信失败,必须用示波器或 CAN 分析仪确认波形与错误帧计数。
  • 误区三:UART 不需要协议。裸串口没有帧边界,必须依赖固定帧头、长度字段与校验,否则一旦丢字节就会解析错位。
  • 误区四:忽略总线负载。CAN 总线利用率长期超过 70% 时,低优先级帧延迟会急剧上升,需要重新分配 ID 与发送周期。
# Linux 下查看 CAN 接口状态与错误计数
ip -details link show can0
candump can0
ip -s -d link show can0

# 配置 CAN 波特率 1Mbps 并启动
ip link set can0 type can bitrate 1000000
ip link set can0 up

# 查看 UART 设备与波特率
ls -l /dev/ttyS* /dev/ttyUSB*
stty -F /dev/ttyS1 115200 cs8 -cstopb -parenb