尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Dynamixel AX接口板:机器人舵机通信协议转换与多轴同步控制实战

Dynamixel AX接口板:机器人舵机通信协议转换与多轴同步控制实战 1. 项目概述Dynamixel AX接口板是什么如果你玩过机器人尤其是关节型机器人或者自己动手做过一些需要精密控制的机械臂、仿生机器人那你大概率听说过Robotis的Dynamixel系列伺服舵机。这个系列以其高精度、高扭矩、内置反馈和菊花链式的总线通信而闻名是很多机器人爱好者和研究者的首选。而今天要聊的这个“Dynamixel AX Interface Board”就是连接你的主控大脑比如电脑、树莓派、Arduino和Dynamixel AX系列舵机之间的那座关键桥梁。简单来说它是一块专用的通信转换板。你的电脑通过USB或者串口TTL电平发送指令这块板子负责把这些指令“翻译”成Dynamixel舵机能够理解的TTL半双工异步串行通信协议并驱动总线。同时它也从总线上读取舵机的状态位置、速度、温度、负载等数据再“翻译”回电脑能理解的格式。没有它你很难直接用电脑的USB口去控制一串Dynamixel舵机。市面上常见的型号有USB2Dynamixel、U2D2等它们本质上都是这类接口板。这块板子解决的痛点非常明确协议转换与总线驱动。Dynamixel舵机使用的是3线制电源、地、数据的半双工总线逻辑电平是TTL0-5V而电脑的USB是差分信号电平标准完全不同。直接连接不仅无法通信还可能损坏设备。这块接口板内置了电平转换芯片、总线驱动芯片增强带负载能力可以挂更多舵机以及最重要的一个微控制器MCU来运行Dynamixel协议栈处理所有底层的通信细节。它适合谁呢首先是机器人开发者、高校实验室的研究生和工程师他们需要稳定可靠地控制多个舵机进行算法验证。其次是机器人竞赛团队比如RoboCup、FRC中用到Dynamixel的队伍。最后是硬核的DIY爱好者和创客想要打造自己的高性能机器人项目。对于新手理解这块板子是迈入Dynamixel世界的第一步对于老手如何用好它、避开它的坑则是提升项目稳定性的关键。2. 核心硬件解析与选型考量市面上的Dynamixel接口板不止一种虽然都叫“Interface Board”但内部方案、性能、兼容性和价格差异不小。选择哪一块直接关系到你后续开发的便利性和系统的稳定性。我们不能只看标题得拆开看里面。2.1 主流型号对比与内部方案拆解最常见的有两款经典的USB2Dynamixel和较新的U2D2。此外还有一些第三方或开源方案。USB2Dynamixel (USB2DXL):这是Robotis官方老牌的型号非常经典。它的核心是一颗FTDI的FT232RLUSB转串口芯片以及一颗ATMega8单片机。FT232RL负责USB通信ATMega8则负责实现Dynamixel协议处理数据包的组装、解析、校验CRC以及控制总线方向因为半双工需要切换收发。它的供电设计比较灵活可以通过USB取电5V也可以外接7-24V的电源给舵机供电。接口是通用的3针JST PH系列端子。它的优点是久经考验稳定性好官方SDK支持完善。缺点是通信速率受限于ATMega8和FT232RL的性能在挂载大量舵机且高频率通信时可能会成为瓶颈。U2D2:这是Robotis推出的更新、性能更强的型号。它最大的变化是核心MCU换成了ARM Cortex-M3内核的芯片具体型号未公开但性能远超ATMega8并且直接集成了USB PHY不再需要FTDI芯片。这意味着它的数据处理能力、通信速度支持更高的波特率如4.5Mbps和实时性都大大提升。同时它增加了RS485电平转换电路使得一块板子既能支持TTL电平的AX/MX/X系列舵机也能支持RS485电平的MX/X/P系列舵机通过一个拨码开关切换兼容性极强。U2D2还提供了一个4针的AUX端口可以连接额外的传感器或模块。它的供电设计也更合理有独立的逻辑电源和舵机电源输入。U2D2是目前大多数新项目的首选除非你的项目只用到老旧的AX系列且预算极其有限。第三方与开源方案比如基于STM32或ESP32自己设计的板子或者一些开源硬件项目。这些方案的优势是成本可能更低并且可以根据自己的需求定制功能例如集成Wi-Fi/蓝牙增加更多的IO口。但劣势也很明显需要自己搞定固件实现Dynamixel协议栈稳定性需要时间验证并且可能无法完美兼容官方最新的SDK和软件工具如RoboPlus Suite, Dynamixel Wizard。对于大多数以应用为目的的开发者我不建议从零开始折腾第三方方案除非你有很强的嵌入式开发背景和充足的调试时间。注意选择接口板时务必确认其支持的通信电平TTL还是RS485与你的舵机型号匹配。AX系列是TTL但很多MX、X、P系列是RS485。U2D2之所以成为主流就是因为它的双模支持能力避免了买错板子的尴尬。2.2 关键电路设计与原理解读即使我们不自己造轮子理解接口板的关键电路设计也大有裨益尤其是在排查一些诡异的硬件故障时。1. 电平转换与总线驱动电路这是接口板的核心功能之一。对于TTL总线虽然单片机IO口本身就是TTL电平3.3V或5V但直接驱动长距离、挂载多个舵机的总线驱动能力电流是不够的会导致信号衰减、通信不稳定。因此需要一颗总线驱动器常见的是74HC244或类似的八路缓冲器/线驱动器。它起到信号放大和隔离的作用确保总线信号质量。 对于RS485模式则需要专用的RS485收发器芯片如MAX3485。它负责将TTL电平的UART信号转换为差分信号A、B线在RS485总线上传输抗干扰能力远强于TTL适合更长距离可达千米级的通信。U2D2板上的电平切换开关本质上就是在选择信号是通向74HC244还是MAX3485。2. 电源设计与隔离电源是稳定性的基石。一个好的接口板会有清晰的电源分区逻辑电源 (VDD):给板载MCU、电平转换芯片供电通常是3.3V或5V。这部分电流很小通常可以从USB取电。舵机电源 (VM):这是给整个Dynamixel总线上的舵机供电的。Dynamixel舵机工作电压范围较宽常见7.4V-12V且峰值电流很大一个MX-64堵转时可能超过2A。因此这部分必须外接大功率开关电源绝对不能依赖USB供电。接口板上会有大电容进行储能和滤波以及可能有的反接保护电路和保险丝。电源隔离:高级的设计会考虑将逻辑电源和舵机电源进行隔离例如使用光耦或隔离DC-DC。这样可以防止电机启停、堵转时产生的大电流噪声通过地线串扰到MCU导致MCU复位或通信错误。虽然官方板子未必做到完全隔离但在自己设计或遇到疑难杂症时这是一个重要的排查方向。3. 通信方向控制 (DIR Control):由于Dynamixel总线是半双工同一时刻总线只能处于发送Tx或接收Rx一种状态。这就需要MCU的一个GPIO引脚来控制总线驱动器或RS485收发器的方向。通信时序是当MCU要发送指令包时先将DIR引脚拉高设为发送模式然后通过UART发送数据发送完毕后立即将DIR引脚拉低设为接收模式切换至监听总线状态等待舵机返回状态包。这个切换时机非常关键过早或过晚都会导致数据丢失。这个逻辑由接口板MCU中的固件精确控制对用户透明但理解它有助于调试“有去无回”的通信问题。3. 软件栈与通信协议深度剖析硬件是躯体软件才是灵魂。接口板的上位机软件生态和其实现的通信协议是我们能高效开发的基础。3.1 官方SDK与上位机工具链Robotis提供了相对完善的软件支持这是使用官方接口板的一大优势。Dynamixel SDK:这是核心的开发库提供了C, C, Python, Java, MATLAB, LabVIEW等多种语言的API。它的作用是对底层串口通信和Dynamixel协议进行封装提供像write1ByteTxRx(),read2ByteTxRx()这样直观的函数让你无需关心数据包的具体构造和CRC计算。SDK支持多种操作系统Windows, Linux, macOS和多种平台包括ROS。强烈建议在你的项目中使用SDK而不是自己从头实现协议这能节省大量时间并减少错误。RoboPlus Suite:这是一套图形化工具对于初学者和调试阶段非常有用。Dynamixel Wizard:这是最常用的工具。它可以自动扫描总线上的舵机检查ID冲突实时读取和修改舵机的所有控制表Control Table参数如目标位置、运行模式、PID增益、温度上限等还可以进行拖动测试和固件升级。在硬件连接好后我第一个打开的就是它用于快速验证硬件连接和舵机基本功能是否正常。RoboPlus Manager/Task:更偏向于为Robotis的成套机器人产品进行配置和编程对于通用开发用处不大。ROS (Robot Operating System) 支持:Dynamixel在ROS社区有很好的支持主要有两个功能包dynamixel_sdk: 这是ROS版本的SDK提供了底层通信节点。dynamixel_workbench: 这是一个更高级的框架提供了启动文件、配置工具和多种控制器位置、速度、电流、扩展位置等能让你快速搭建一个基于Dynamixel的机器人关节控制器。如果你做机器人研究或开发ROS几乎是必选项这套工具链能让你事半功倍。3.2 Dynamixel通信协议层解构接口板固件和上位机SDK共同实现了Dynamixel协议。这个协议是理解一切通信行为的关键。它基于数据包Packet进行通信。1. 数据包结构一个完整的指令包或状态包结构如下[0xFF][0xFF][ID][Length][Instruction][Param1]...[ParamN][CRC_L][CRC_H]Header (0xFF 0xFF):固定包头标识一个数据包的开始。ID:舵机ID范围0-2520xFE为广播ID。这是总线寻址的依据。Length:从本字节之后到CRC之前的数据长度。Instruction:指令类型如PING (0x01), READ (0x02), WRITE (0x03), REG_WRITE (0x04), ACTION (0x05), SYNC_WRITE (0x83)等。Parameter:指令参数内容因指令而异。例如WRITE指令的参数包括控制表地址、数据长度、要写入的数据值。CRC (Cyclic Redundancy Check):循环冗余校验码用于检测数据传输过程中是否出错。Dynamixel使用CRC-16多项式0x8005。这是协议可靠性的重要保障。所有官方SDK和接口板固件都自动处理CRC计算和校验。2. 关键指令解析PING:用于探测总线上是否存在某个ID的舵机。不涉及参数读写开销小。READ/WRITE:最常用的指令用于读写控制表中的单个参数。每次只能操作一个地址的一段数据1,2,4字节。对于频繁的单个参数操作这是标准方式。SYNC_WRITE (同步写):这是实现多舵机协同运动的关键指令也是提升性能的利器。它允许在一个数据包内向多个或所有舵机写入相同或不同的数据。例如让6个关节舵机同时开始运动到不同位置。使用SYNC_WRITE可以极大减少总线通信时间避免因顺序写入造成的动作“波浪”效应。接口板的性能MCU处理速度、缓冲区大小会影响SYNC_WRITE能一次性处理的舵机数量上限。BULK_READ (批量读):与SYNC_WRITE对应用于从多个舵机一次性读取数据提高状态反馈效率。3. 控制表 (Control Table):这是Dynamixel舵机的“内存映射表”定义了所有可读写参数寄存器的地址、长度和含义。例如舵机ID的地址是3目标位置的地址是30AX系列。协议中的READ/WRITE操作本质上就是对这个表进行访问。接口板不关心控制表的具体内容它只负责可靠地传输读写这些地址的指令。理解控制表是你精确控制舵机的基础。4. 实战连接、配置与驱动开发理论说得再多不如动手接上线跑起来。这里以目前主流的U2D2接口板和AX-12A舵机为例展示从零开始的完整流程。4.1 硬件连接与上电检查步骤1连接舵机与U2D2准备一个大功率开关电源例如12V 5A。关闭电源。将电源的正极V连接到U2D2的VM(Motor Power)端子负极GND连接到GND端子。使用3线舵机线通常随舵机附送将AX-12A舵机连接到U2D2的DATA端口。注意线序黑色(GND), 红色(VCC), 白色/黄色(DATA)。确保连接牢固。通过Micro-USB线将U2D2连接到电脑。重要检查U2D2板上的电平选择开关。对于AX-12ATTL舵机开关应拨到TTL一侧。步骤2上电与观察先打开舵机电源开关电源。此时舵机上的LED可能会亮起或闪烁。观察U2D2板上的指示灯PWR LED (红色/绿色):常亮表示逻辑电源正常来自USB。VMLED (红色):常亮表示舵机电源已接入。STAT LED (黄色):闪烁表示U2D2已枚举为USB串行设备等待通信。TX/RX LED (绿色):在通信时会闪烁。如果VMLED不亮检查电源连接如果STAT LED不闪烁检查USB线或电脑驱动。实操心得务必遵循“先接信号线后上电先断电后拔信号线”的原则。热插拔舵机数据线是损坏接口板或舵机通信芯片的常见原因。上电顺序上先开逻辑电USB还是先开动力电VM影响不大但稳定的做法是先接好所有线最后再打开动力电源。4.2 软件环境配置与基础测试步骤1安装驱动与工具在Windows上U2D2通常会被识别为USB串行设备COM口。如果系统没有自动安装驱动可能需要从FTDI官网下载VCP驱动尽管U2D2不是FTDI芯片但模拟了同类设备。在Linux如Ubuntu或macOS上它通常会被识别为/dev/ttyUSB0或/dev/ttyACM0无需额外驱动。 然后从Robotis官网下载并安装RoboPlus Suite主要用其中的Dynamixel Wizard 2.0。步骤2使用Dynamixel Wizard进行扫描与配置打开Dynamixel Wizard 2.0。在端口选择中选择U2D2对应的串口号如COM3或/dev/ttyUSB0。设置波特率。AX-12A的默认波特率是1Mbps。在Wizard中选中该波特率。点击“Scan”按钮。如果一切正常软件会扫描ID从0到253的舵机并在左侧列表中找到你的AX-12A默认ID是1。点击找到的舵机右侧会显示其完整的控制表。你可以在这里修改ID如果总线上有多个相同ID的舵机必须修改以避免冲突。在控制表中找到“ID”(地址3)写入新值如2点击“Apply”。注意修改后需要重新扫描并使用新ID连接。测试运动切换到“Monitor”或“Control”标签页你可以拖动滑块或输入数值来改变“Goal Position”目标位置地址30观察舵机是否转动。读取状态查看“Present Position”当前位置、“Present Load”当前负载、“Temperature”温度等监控舵机状态。步骤3使用Python SDK进行编程控制图形化工具适合配置和调试真正的项目需要代码控制。这里以Python为例安装SDK:pip install dynamixel-sdk编写测试脚本import os import sys import time from dynamixel_sdk import * # 使用SDK # 控制表地址AX系列 ADDR_AX_TORQUE_ENABLE 24 ADDR_AX_GOAL_POSITION 30 ADDR_AX_PRESENT_POSITION 36 ADDR_AX_MOVING_SPEED 32 # 协议版本和默认设置 PROTOCOL_VERSION 1.0 # AX系列使用协议1.0 DXL_ID 1 # 舵机ID BAUDRATE 1000000 # 1Mbps DEVICENAME COM3 # Windows端口号。Linux: /dev/ttyUSB0 TORQUE_ENABLE 1 # 值1使能扭矩 TORQUE_DISABLE 0 # 值0禁用扭矩 DXL_MINIMUM_POSITION_VALUE 0 # AX-12A位置范围0-1023 DXL_MAXIMUM_POSITION_VALUE 1023 DXL_MOVING_STATUS_THRESHOLD 20 # 停止移动的阈值 # 初始化PortHandler和PacketHandler portHandler PortHandler(DEVICENAME) packetHandler PacketHandler(PROTOCOL_VERSION) # 打开端口 if portHandler.openPort(): print(Succeeded to open the port) else: print(Failed to open the port) quit() # 设置波特率 if portHandler.setBaudRate(BAUDRATE): print(Succeeded to change the baud rate) else: print(Failed to change the baud rate) quit() # 使能扭矩 dxl_comm_result, dxl_error packetHandler.write1ByteTxRx(portHandler, DXL_ID, ADDR_AX_TORQUE_ENABLE, TORQUE_ENABLE) if dxl_comm_result ! COMM_SUCCESS: print(%s % packetHandler.getTxRxResult(dxl_comm_result)) elif dxl_error ! 0: print(%s % packetHandler.getRxPacketError(dxl_error)) else: print(Dynamixel has been successfully connected) # 写入目标位置例如中间位置512 goal_position 512 dxl_comm_result, dxl_error packetHandler.write2ByteTxRx(portHandler, DXL_ID, ADDR_AX_GOAL_POSITION, goal_position) if dxl_comm_result ! COMM_SUCCESS: print(%s % packetHandler.getTxRxResult(dxl_comm_result)) elif dxl_error ! 0: print(%s % packetHandler.getRxPacketError(dxl_error)) else: print(Goal position set to: %d % goal_position) # 循环读取当前位置直到到达目标 while True: dxl_present_position, dxl_comm_result, dxl_error packetHandler.read2ByteTxRx(portHandler, DXL_ID, ADDR_AX_PRESENT_POSITION) if dxl_comm_result ! COMM_SUCCESS: print(%s % packetHandler.getTxRxResult(dxl_comm_result)) elif dxl_error ! 0: print(%s % packetHandler.getRxPacketError(dxl_error)) print([ID:%03d] GoalPos:%03d PresPos:%03d % (DXL_ID, goal_position, dxl_present_position)) if not (abs(goal_position - dxl_present_position) DXL_MOVING_STATUS_THRESHOLD): break time.sleep(0.1) # 延时100ms # 禁用扭矩 dxl_comm_result, dxl_error packetHandler.write1ByteTxRx(portHandler, DXL_ID, ADDR_AX_TORQUE_ENABLE, TORQUE_DISABLE) if dxl_comm_result ! COMM_SUCCESS: print(%s % packetHandler.getTxRxResult(dxl_comm_result)) elif dxl_error ! 0: print(%s % packetHandler.getRxPacketError(dxl_error)) # 关闭端口 portHandler.closePort() print(Port closed. Program finished.)这段代码完成了连接、使能扭矩、设置目标位置、等待运动完成、禁用扭矩并退出的完整流程。运行它你的舵机应该会转动到指定位置。5. 高级应用、性能优化与故障排查当你能用单个舵机完成基本运动后接下来就是构建更复杂的多关节系统并确保其稳定、高效地运行。5.1 多舵机组网与同步控制实践单个舵机很简单真正的挑战在于协调多个舵机。这里涉及到物理连接和逻辑控制两个方面。物理组网菊花链Dynamixel舵机支持菊花链连接这是它的一大优势。每个舵机上有两个3针端口一个输入IN一个输出OUT。你只需要用舵机线将U2D2的DATA口连接到第一个舵机的IN口然后用另一根线从第一个舵机的OUT口连接到第二个舵机的IN口以此类推。电源是并联的所有舵机的VCC和GND都通过总线并联在一起。务必确保电源功率足够总功率需求是所有舵机可能同时工作的最大电流之和并留有余量建议30%以上。逻辑控制与同步写在代码中你需要管理多个舵机ID。最基础的循环控制方式效率低下# 不推荐顺序写入动作不同步 for id in [1, 2, 3]: packetHandler.write2ByteTxRx(portHandler, id, ADDR_GOAL_POSITION, goal_pos[id])这会导致舵机1先动然后舵机2最后舵机3动作是“波浪形”的。正确的做法是使用sync_writefrom dynamixel_sdk import GroupSyncWrite # 创建同步写组针对目标位置地址长度为2字节 groupSyncWrite GroupSyncWrite(portHandler, packetHandler, ADDR_AX_GOAL_POSITION, 2) # 为每个舵机准备数据并添加到组 all_ids [1, 2, 3] goal_positions [300, 512, 700] # 每个舵机的目标位置 for dxl_id, goal_pos in zip(all_ids, goal_positions): # 将目标位置16位整数拆分为低字节和高字节 param_goal_position [DXL_LOBYTE(goal_pos), DXL_HIBYTE(goal_pos)] # 添加参数到同步写组 dxl_addparam_result groupSyncWrite.addParam(dxl_id, param_goal_position) if not dxl_addparam_result: print([ID:%03d] groupSyncWrite addparam failed % dxl_id) # 执行同步写指令所有舵机同时收到指令并开始运动 dxl_comm_result groupSyncWrite.txPacket() if dxl_comm_result ! COMM_SUCCESS: print(%s % packetHandler.getTxRxResult(dxl_comm_result)) # 清除同步写组的参数 groupSyncWrite.clearParam()使用GroupSyncWrite所有目标位置被打包进一个数据包发送总线上的舵机几乎同时收到指令从而实现同步启动。这是实现流畅、协调的多关节运动的基础。5.2 通信稳定性优化与抗干扰设计在实际项目尤其是移动机器人上通信不稳定是常见问题。以下是一些优化技巧波特率选择在能满足通信速率的前提下优先使用较低的波特率。1Mbps在短距离1米内很稳定但如果线缆较长或环境嘈杂尝试降低到57600或115200bps通信鲁棒性会显著提高。修改波特率需要逐个修改舵机控制表中的“Baud Rate”参数并确保接口板和所有舵机波特率一致。终端电阻在RS485总线中必须在总线最远端的舵机OUT端口上安装一个120欧姆的终端电阻以消除信号反射。对于TTL总线虽然不强制但在长距离或多舵机情况下在总线末端最后一个舵机的OUT口数据线与GND之间加一个100-500欧姆的电阻有时也能改善信号质量。U2D2板子通常自带一个可焊接的终端电阻位。电源去耦与布线电源线要粗给舵机供电的导线截面积要足够大以减少压降。建议使用AWG18或更粗的线。星型接地如果系统中有多个电源如主板电源、舵机电源、传感器电源尽量采用星型单点接地避免形成地环路引入噪声。添加滤波电容在U2D2的VM输入端口附近并联一个大容量的电解电容如470uF-1000uF/25V和一个小容量的陶瓷电容0.1uF可以很好地吸收电机启停产生的电流尖峰。数据线保护数据线尽量使用双绞线并远离电机驱动线、电源线等强干扰源。如果无法避开可以尝试使用屏蔽线并将屏蔽层单点接地。5.3 典型故障排查速查表遇到问题不要慌按照以下流程排查现象可能原因排查步骤舵机完全无反应LED不亮1. 电源未接通或电压不对。2. 电源线接反。3. 舵机损坏。1. 用万用表测量总线VCC和GND之间电压应在舵机工作范围内AX-12A约7-12V。2. 检查电源极性。3. 单独给一个舵机供电测试。Dynamixel Wizard扫描不到舵机1. 接口板驱动未安装或端口错误。2. 波特率设置错误。3. 舵机ID冲突或损坏。4. 数据线连接错误或断路。5. 电平模式开关错误。1. 检查设备管理器中的端口号确认与软件选择一致。2. 尝试所有可能的波特率默认1Mbps。3. 总线上只接一个舵机用广播PINGID 254测试。4. 检查数据线是否插反、松动用万用表通断档检查。5. 确认U2D2电平开关位置TTL/RS485。能扫描到但无法控制写参数失败1. 舵机扭矩未使能。2. 目标位置超出软件限位。3. 舵机处于报警状态如过热、过载。1. 检查控制表地址24Torque Enable是否为1。2. 检查目标位置值是否在0-1023范围内。3. 读取报警寄存器地址根据手册排查。温度过高则冷却负载过大则减轻。通信时好时坏随机出错1. 电源功率不足或电压波动大。2. 总线过长或未加终端电阻RS485。3. 电磁干扰严重。4. 接触不良。1. 监测电源电压尤其在多个舵机同时运动时。2. RS485总线末端加120Ω电阻。缩短总线长度。3. 重新布线远离干扰源使用屏蔽线。4. 检查所有接头确保接触紧密。舵机运动不流畅有抖动或异响1. PID增益参数不合适。2. 机械结构卡顿或负载过重。3. 目标位置变化过快速度指令值过大。1. 通过Dynamixel Wizard调整位置P增益、I增益、D增益。通常先调P增加刚度有稳态误差加I有振荡加D。2. 检查机械安装是否同心轴承是否顺畅负载是否在舵机额定范围内。3. 降低“Moving Speed”参数值。使用SYNC_WRITE控制多个舵机个别舵机不响应1. 个别舵机ID设置重复。2. 个别舵机处于错误状态。3. 总线局部供电不足线损导致末端电压低。1. 用PING指令或单独扫描确认每个ID唯一。2. 单独连接有问题的舵机检查其状态。3. 尝试从总线中间点额外并联供电或使用更粗的电源线。我个人在实际项目中的一个深刻教训是关于电源的。早期做一个六足机器人用了18个AX-12A。理论上单个堵转电流2A多我配了一个12V 20A的电源觉得绰绰有余。但在快速动态 gait 测试时机器人经常莫名抽搐或复位。后来用示波器抓取总线电压才发现在18个舵机同时高速启停的瞬间电源线上的压降能超过2V导致U2D2和舵机的逻辑电压被拉低引发复位。解决方案是一、在U2D2的VM端口并上了多个大电容总计超过2000uF作为“能量水池”二、将电源从机器人本体中央引入改为从身体两侧分别供电缩短了供电距离。之后系统就再没出过电源问题。所以对于动力系统电源的“瞬时功率”和“布线”远比“平均功率”重要。
返回列表