1. 从零理解RoboMaster硬件体系:这份讲义到底在讲什么
如果你刚加入学校的机器人战队,或者正准备参加RoboMaster这类对抗性机器人竞赛,大概率会遇到一个很现实的问题:软件组的同学在群里催着要CAN通信协议,视觉组的同学问相机装在哪个位置、用什么接口,而硬件组的新人连一块主控板上有哪些接口都还没认全。这种信息不对称在备赛初期非常致命,往往导致整机联调时才发现供电方案不对、通信接口不够用、传感器装不上去。
RoboMaster硬件基础讲义V0.2.1这个标题,本质上是一份面向新队员的硬件入门材料。它要解决的核心问题不是教你画多么复杂的PCB,而是让你在最短时间内建立起对整个机器人硬件系统的认知框架——知道有哪些模块、它们之间怎么连接、供电怎么分配、通信怎么走线、常见坑在哪里。适合阅读这份内容的人包括:刚入队的硬件新人、需要了解硬件边界的软件开发者、以及负责整车方案设计的机械和电控负责人。
我见过太多战队在赛季初花了两三周时间反复讨论方案,结果发现选的主控板串口数量不够、电调协议和飞控不匹配、电池放电倍率带不动峰值负载。这些问题的根源都不是技术难度高,而是对硬件体系缺乏全局认知。这份讲义的价值就在于,它把散落在各个文档、论坛帖子和学长口口相传中的碎片信息,整理成了一条从供电到通信、从主控到执行器的完整链路。接下来我会按照实际备赛的推进顺序,把这条链路上的关键节点逐一拆开讲清楚。
2. 供电架构:从电池选型到分电板的完整链路
2.1 电池参数背后的真实含义
很多新人拿到一块航模锂电池,第一反应是看容量多少毫安时,觉得数字越大越好。实际上在RoboMaster这类高动态对抗场景中,放电倍率(C值)和电压平台稳定性比容量更关键。一块6S 10000mAh 15C的电池,理论持续放电电流是150A,但实际比赛中电机频繁急停急起,瞬时电流可能冲到200A以上。如果电池C值虚标或者老化,电压会被瞬间拉低,导致主控板复位、图传断流。
选电池的时候,我一般会按整车峰值功率反推。假设四个底盘电机各200W峰值、云台两个电机各50W、加上图传和主控约30W,总峰值约930W。6S电池标称电压22.2V,那么峰值电流约42A。看起来15C的电池绰绰有余,但要注意电池在实际使用中电压会从25.2V降到21V左右,而且大电流下内阻导致的压降不可忽略。所以通常建议留出2倍以上余量,选25C以上的电池更稳妥。
注意:电池的XT60或XT90插头要定期检查,大电流下接触电阻过大会发热甚至熔毁。我见过比赛打到一半插头融化导致全车断电的情况,赛前用电子负载测一下满功率放电时的插头温升,能避免大部分这类问题。
2.2 分电板的设计逻辑与常见误区
分电板是整个供电系统的枢纽,它把电池的一路电分配到主控、电调、图传、云台等各个模块。很多战队直接用现成的分电板,但现成的板子往往有几个问题:走线宽度不够导致大电流下压降明显、滤波电容容量不足、没有预留足够的电压监测接口。
自己设计分电板时,铜箔宽度要按电流来算。一般1oz铜厚、温升10℃的条件下,1mm宽度约走1A电流。底盘电调那一路如果峰值42A,至少需要6mm以上的走线宽度,而且最好双面铺铜并打过孔阵列。滤波方面,每个电调输入端并一个低ESR的电解电容(比如470uF/35V)再加一个0.1uF陶瓷电容,能有效吸收电机换向产生的高频噪声。
还有一个容易被忽略的点:分电板上的电压采样点要尽量靠近电池输入端,不要放在经过长走线之后的位置。否则主控读到的电压会比实际电池电压低0.5V以上,导致低压报警提前触发。我自己习惯在分电板输入端直接焊一根20AWG的硅胶线到主控的电压检测引脚,中间不加任何接插件。
2.3 各级电源转换的选型与散热
主控板一般需要5V和3.3V,图传可能需要12V,云台电机可能是24V直驱或者12V。这些不同电压等级之间的转换,常用的方案有线性稳压器(LDO)和开关电源(DCDC)。LDO的优点是纹波小、电路简单,缺点是效率低、发热大。比如从24V降到5V给主控供电,如果主控电流0.5A,LDO上的功耗就是(24-5)×0.5=9.5W,不加散热片的话几分钟就烫手了。
所以主控供电我强烈建议用DCDC降压模块,效率通常在85%以上,发热小很多。但DCDC的输出纹波比LDO大,如果主控对电源噪声敏感,可以在DCDC后面再级联一个LDO做二级稳压。图传供电也要注意,有些图传模块对电压波动很敏感,电压低于11V就可能断流,所以最好单独用一路DCDC供电,不要和电机共用。
散热方面,DCDC芯片底部如果有散热焊盘,一定要在PCB上对应位置打过孔并连接到背面的大面积铜皮。我实测过,同样一颗3A的DCDC芯片,散热焊盘打过孔和没打过孔,满载时芯片表面温度能差20℃以上。
3. 主控与通信总线:CAN、UART、SPI怎么选怎么用
3.1 CAN总线的物理层与终端电阻
在RoboMaster机器人里,CAN总线几乎是电调控制的标配。它抗干扰能力强、支持多主通信、有硬件CRC校验,非常适合电机这种噪声大的环境。但很多新人第一次接CAN的时候会遇到通信不稳定甚至完全不通的问题,十有八九是终端电阻没接对。
CAN总线在物理层上要求两端各接一个120Ω的终端电阻,并联后总线等效阻抗约60Ω。如果只接一端或者不接,信号反射会导致波形畸变,通信距离短的时候可能还能凑合,一旦线缆超过半米或者波特率上到1Mbps,误码率就会飙升。我一般会在主控板CAN接口处焊一个120Ω电阻,然后在总线最远端的电调接口处再焊一个。中间节点的电调不要接终端电阻,否则并联后阻抗太低,总线驱动能力不够。
线缆方面,CAN_H和CAN_L一定要用双绞线,而且尽量和电源线分开走。如果必须捆在一起,至少保证CAN线在电源线的对面位置。我见过把CAN线和电机三相线扎在一起的,结果电机一转CAN就丢包,分开走线后问题立刻消失。
3.2 UART与SPI的适用场景对比
UART和SPI在主控与传感器、图传、上位机之间的通信中很常见。UART是异步通信,只需要TX和RX两根线,接线简单,但速率一般不高,常用115200或460800bps。SPI是同步通信,需要时钟线,速率可以到几十Mbps,适合高速数据传输比如IMU原始数据或者图像数据。
选择的时候主要看数据量和实时性要求。比如IMU如果只是输出姿态角,100Hz的UART足够;但如果要读原始加速度和角速度做卡尔曼滤波,可能就需要1kHz以上的SPI。图传模块的控制指令用UART就行,但如果是传输图像数据,那肯定走SPI或者专用的高速接口。
这里有个实际经验:UART的TX和RX一定要交叉连接,即主控TX接模块RX,主控RX接模块TX。我见过不止一个新人把TX接TX、RX接RX,然后纳闷为什么收不到数据。另外UART的地线一定要接,而且最好和电源地单点共地,避免地环路引入噪声。
3.3 通信协议设计中的防坑要点
通信协议的设计直接决定了整车联调的效率。我建议在协议里至少包含以下字段:帧头、目标地址、功能码、数据长度、数据负载、校验和。帧头用两个字节的固定值比如0xAA 0x55,可以有效过滤掉总线上的随机噪声。校验和推荐用CRC16而不是简单的累加和,累加和对于字节顺序变化不敏感,容易漏检。
数据负载的字节序也要统一。小端模式在ARM架构上更自然,但如果和某些传感器通信,它们可能用大端。我一般会在协议文档里明确标注每个多字节字段的字节序,并且在代码里用统一的宏来处理转换,避免每个地方手动拼字节。
还有一个容易被忽略的点:通信超时处理。如果主控发了一帧指令给电调,电调因为某种原因没有回复,主控不能一直等下去。我通常设置10ms的超时,超时后重发一次,连续三次失败就报错并进入安全状态。这个逻辑在比赛场上能救命,避免因为一个电调失联导致整车失控。
4. 执行器与传感器:电机、电调、IMU的硬件接口
4.1 无刷电机与电调的匹配原则
RoboMaster里常用的无刷电机有M2006、M3508等,配套的电调一般是C620。选型和匹配的时候,核心参数是电调的持续电流和峰值电流要覆盖电机的需求。M3508的峰值电流可以到20A以上,C620的持续电流是20A,短时峰值能到30A,匹配是合理的。但如果用C610去带M3508,持续电流只有10A,电机一加速电调就过热保护了。
电机和电调的接线顺序也有讲究。三相线如果接错,电机会反转或者抖动。一般电调上会标A、B、C,电机上也有对应的相序标记。如果标记看不清,可以随便接上后通过CAN指令让电机低速转一下,观察转向是否正确,不对就任意交换两根线。注意一定要在低速下测试,高速反转可能损坏电调。
电调的CAN ID设置也很关键。一条CAN总线上如果有多个电调,每个电调的ID必须唯一。C620电调一般通过拨码开关或者专用配置软件来设ID。我建议在装配前就把所有电调的ID设好并贴上标签,避免装到车上之后再拆下来改。
4.2 IMU的安装位置与减震处理
IMU(惯性测量单元)是机器人姿态控制的核心传感器,它输出三轴加速度和三轴角速度。IMU的安装位置直接影响姿态解算的准确性。理想情况下,IMU应该安装在机器人的重心附近,并且和底盘刚性连接。如果装在云台上,云台转动时IMU会跟着转,底盘姿态就解算不准了。
减震是另一个大问题。电机转动、轮子过坎产生的振动会耦合到IMU上,导致加速度计读数里混入大量高频噪声。我一般会在IMU和安装面之间垫一层3M减震胶或者硅胶垫,但要注意减震不能太软,否则IMU会相对于底盘晃动,低频姿态反而漂移。实测下来,硬度适中的硅胶垫(邵氏硬度30-40A)效果比较好。
IMU的通信接口通常是SPI或I2C。SPI速率高、抗干扰好,推荐优先用SPI。I2C接线少但速率低,而且总线上挂多个设备时地址冲突很麻烦。如果一定要用I2C,记得加上拉电阻,一般4.7kΩ,总线电容大的话要减小到2.2kΩ。
4.3 传感器数据的时间同步问题
整车控制里,IMU数据、电机编码器数据、视觉数据的时间戳必须对齐,否则融合出来的姿态和位置会有滞后。硬件上能做的时间同步手段有限,但至少可以做到:所有传感器数据在同一个控制周期内读取,并且给每个数据打上主控的定时器时间戳。
我通常会在主控里开一个1kHz的定时器中断,在中断里依次读取IMU、电机编码器、遥控器接收机等所有传感器的数据,然后统一打上时间戳放入缓冲区。控制算法在另一个任务里从缓冲区取数据,这样能保证同一帧控制用的所有传感器数据是同一时刻的。如果某个传感器是异步更新的,比如视觉每30ms来一帧,那就需要做时间对齐,用最近邻或者线性插值把视觉数据对齐到控制周期上。
5. 整车联调中的硬件排查思路
5.1 上电前的静态检查清单
整车装配完成后,第一次上电前一定要做静态检查,这一步能避免大部分烧板子的事故。我自己的检查清单包括:用万用表蜂鸣档测电源正负极是否短路、测各电压输出点对地阻值是否正常、检查所有接插件是否插紧、确认电调ID和CAN地址没有冲突、确认电机三相线没有短路。
特别要强调的是,第一次上电建议用可调电源限流,比如设成24V、限流2A。如果哪里短路了,电源会直接限流保护,不会烧东西。等确认各电压都正常后,再换电池全功率上电。我见过新人直接上电池,结果分电板上一个电容焊反了,一上电就炸了,还烧了主控。
5.2 通信不通的逐层排查方法
CAN通信不通是最常见的问题之一。排查的时候不要一上来就怀疑代码,先查物理层。我的排查顺序是:万用表测CAN_H和CAN_L之间的阻值,正常应该是60Ω左右(两个120Ω并联)。如果测出来是120Ω,说明只接了一个终端电阻;如果是无穷大,说明两个都没接或者线断了。然后测CAN_H对地电压和CAN_L对地电压,正常应该在2.5V左右,如果偏差很大说明收发器可能坏了。
物理层没问题后,再用CAN分析仪抓包。如果没有分析仪,可以用主控的CAN回环模式自测,确认主控的CAN控制器配置正确。最后才去查电调的波特率、ID、协议格式是否匹配。这个逐层排查的思路能帮你快速定位问题在哪一层,而不是盲目改代码。
5.3 电机抖动与失控的硬件原因
电机抖动或者失控,软件上可能是PID参数不对,但硬件上也有几个常见原因。一是电源功率不足,电机加速时电压被拉低,电调欠压保护导致输出异常。二是CAN总线负载过高,多个电调同时反馈数据时总线冲突,指令丢失。三是电机编码器线接触不良,电调读到的位置跳变,导致换向错误。
我遇到过一次电机低速抖动的问题,查了半天代码没找到原因,最后发现是电调电源线太细,大电流下压降导致电调内部逻辑电源不稳。换了一根更粗的硅胶线后问题消失。所以硬件排查的时候,电源线的线径和接插件质量一定要重视,不要觉得能通电就行。
6. 讲义之外的个人经验补充
这份讲义覆盖了RoboMaster硬件体系的主要模块,但有些东西是文档里不会写的。比如备赛期间一定要准备一套备用的主控和电调,比赛现场烧了板子能立刻换。再比如所有接插件最好用热熔胶或者扎带固定,机器人跑起来振动很大,插头松脱是赛场上最常见的故障之一。
还有一点关于版本管理:硬件方案一旦定下来,不要轻易改。我见过战队在比赛前一周改分电板布局,结果新板子有bug,连夜飞线抢救。硬件不像软件,改一版要打样、焊接、测试,周期至少一周。所以方案评审的时候就要把供电余量、接口数量、安装尺寸都确认好,留出足够的冗余。
最后说一个关于文档的习惯。我建议每个战队都维护一份自己的硬件接口定义表,包括每个接插件的引脚定义、线色、对应主控的哪个引脚、通信协议版本。这份表在联调和排障的时候能省下大量时间。讲义是入门的框架,但真正让整车跑起来的,是这些落到实处的细节。