2、串口通信基础:UART协议原理、波特率与帧格式、RS232与RS485对比
好,咱们进入第二个章节。串口通信,说白了就是无人机地面站和飞控之间最古老、也最可靠的那条「脐带」。你想想看,飞控在天上飞,地面站在地上控,它们之间怎么说话?
我最早做无人机那会儿,用的就是串口。那时候WiFi模块还贵得要死,数传电台动不动就丢包。反而是最简单的串口,一根线,两根线,稳稳当当传数据。嗯,这里要注意,串口通信虽然看起来简单,但坑其实不少。今天我就把压箱底的经验翻出来,跟你好好聊聊。
2.1 UART协议原理:说白了就是「异步聊天」
UART的全称是Universal Asynchronous Receiver/Transmitter,通用异步收发器。异步是什么意思?就是没有时钟线。不像SPI和I2C,还得专门拉一根时钟线来同步。UART就两根数据线:TX(发送)和RX(接收),交叉连接就完事了。
我习惯把UART比作两个人隔空喊话。没有时钟线,那就得提前约定好:说话速度多快(波特率),一句话几个字(数据位),有没有校验(奇偶校验),说完怎么结束(停止位)。这些约定,就是帧格式。
UART的传输过程,其实就三步:
- 空闲状态:线上保持高电平。没有数据时,线就是「闲」着的。
- 起始位:要发数据了,先把电平拉低一个位的时间。这相当于喊一声「注意,我要说话了!」
- 数据位 + 校验位 + 停止位:按顺序把数据发出去,最后拉高电平表示「我说完了」。
我在项目中遇到过一个问题:飞控和地面站明明波特率都设成了115200,但就是收不到数据。查了半天,发现是晶振精度不够,两边的时间基准差了那么一点点。时间长了,累积误差就把数据吞掉了。所以啊,UART虽然简单,但对时钟精度是有要求的。
2.2 波特率与帧格式:速度与格式的约定
波特率,就是每秒传输的符号数。对于UART来说,一个符号就是一个bit。所以波特率就等于比特率。常见的波特率有:9600、19200、38400、57600、115200。
我个人习惯,无人机地面站和飞控之间,如果距离近(1米以内),用115200;如果距离远或者环境干扰大,降到57600甚至38400。别一味追求高速,稳定才是王道。
帧格式,就是数据包的「包装方式」。一个标准的UART帧包含:
| 字段 | 长度 | 说明 |
|---|---|---|
| 起始位 | 1 bit | 固定为0(低电平) |
| 数据位 | 5~9 bit | 常用8 bit,正好一个字节 |
| 校验位 | 0或1 bit | 奇校验、偶校验、或无校验 |
| 停止位 | 1、1.5或2 bit | 固定为1(高电平) |
举个例子,最常用的配置是:115200波特率,8数据位,无校验,1停止位。简写为115200-8-N-1。你在地面站软件里看到的配置界面,基本就是这个套路。
为什么会这样配置?8位数据位刚好对应一个字节,无校验省去了校验位的开销,1位停止位足够。说白了,这是效率和可靠性的平衡点。
2.3 RS232与RS485对比:电平标准的选择
UART协议是逻辑层面的,而RS232和RS485是物理层面的。说白了,UART定义了数据怎么「组织」,RS232和RS485定义了数据怎么「传输」。
RS232: 这是最古老的串口标准。用正负电压表示逻辑0和1。逻辑1是-3V~-15V,逻辑0是+3V~+15V。特点是:
- 传输距离短,一般不超过15米
- 抗干扰能力一般
- 只能点对点通信(一个发,一个收)
- 电平范围大,容易损坏芯片
RS485: 这是工业现场最常用的标准。用差分信号传输,两根线(A和B)的电压差来表示逻辑。特点是:
- 传输距离远,可达1200米
- 抗干扰能力强(差分信号的优势)
- 支持多点通信(一条总线上可以挂多个设备)
- 电平范围小,对芯片友好
我建议,无人机地面站和飞控之间,如果距离在10米以内,用RS232转TTL电平就行,简单便宜。如果距离超过10米,或者现场有电机、变频器等强干扰源,果断上RS485。
你想想看,飞控在天上飞,地面站可能放在几十米外的帐篷里。中间还有电机在转,电磁环境复杂得很。RS232在这种场景下,分分钟被干扰得数据全乱。RS485就不一样了,差分信号天生抗共模干扰,稳得很。
| 对比项 | RS232 | RS485 |
|---|---|---|
| 传输方式 | 单端信号 | 差分信号 |
| 最大距离 | 约15米 | 约1200米 |
| 最大节点数 | 2(点对点) | 32(标准),可扩展 |
| 抗干扰能力 | 弱 | 强 |
| 电平范围 | ±3V~±15V | ±1.5V~±6V |
| 典型应用 | 调试、短距离通信 | 工业现场、长距离通信 |
2.4 实际项目中的选择建议
好了,理论说完了,咱们来点实际的。如果你现在要设计一个无人机地面站和飞控的通信链路,我的建议是这样的:
- 调试阶段:直接用USB转TTL模块,接飞控的UART口。波特率设115200,8-N-1。简单粗暴,能跑就行。
- 原型验证:如果地面站和飞控距离在5米以内,用RS232转TTL。注意加一个MAX232芯片做电平转换,别直接把TTL电平怼到RS232接口上。
- 正式产品:如果距离超过10米,或者现场有电机干扰,用RS485。推荐用SP3485或MAX485芯片,便宜又好买。记得在A、B线上加120欧姆的终端电阻,防止信号反射。
我曾经在一个农业无人机项目上吃过亏。地面站放在田边的车上,飞控在天上飞,距离大概50米。我图省事用了RS232,结果数据丢包率高达30%。后来换成RS485,丢包率直接降到0.1%以下。嗯,从那以后,我对RS485就特别有好感。
最后说一句,串口通信虽然看起来「老土」,但它是无人机通信的基石。你想想看,现在的数传电台、4G模块、甚至WiFi模块,底层很多还是用UART和MCU通信的。把串口吃透了,后面的通信协议设计才能游刃有余。
下一章,咱们聊聊更高级的通信协议——MAVLink。那是无人机领域的「通用语言」,学会了它,你就能让飞控和地面站无障碍交流了。