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

资讯详情

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

从零打造竞技机器人:有刷电机驱动与PCB集成设计实战

从零打造竞技机器人:有刷电机驱动与PCB集成设计实战 1. 从零到一我的迷你相扑机器人项目缘起几年前我在一个创客展会上第一次看到机器人相扑比赛两个巴掌大的小机器人在一个黑色圆盘上互相推挤、试探、寻找机会将对手推出界外那种紧张刺激和精巧的策略感瞬间吸引了我。当时我就想这玩意儿看着简单不就是两个电机带轮子吗但真要做出来从机械结构、电路设计到程序策略每一个环节都藏着大学问。后来我陆陆续续接触过一些基于舵机或步进电机的机器人但总觉得少了点“原汁原味”的对抗感——直到我决定动手做一个使用有刷直流电机的迷你相扑机器人。为什么选择有刷电机在很多人追求无刷电机的高效率、长寿命时我这个选择似乎有点“复古”。但恰恰是这种“复古”带来了最直接的乐趣和最低的入门门槛。有刷电机结构简单驱动电路极其容易一个H桥就能搞定成本低廉而且扭矩输出直接粗暴特别适合这种需要瞬间爆发力的推挤对抗。你不需要复杂的电调不需要担心启动算法通电就转简单可靠。这个项目的核心就是想证明用最基础、最易得的元件同样能打造出一个战斗力不俗、乐趣十足的竞技机器人。整个项目从构思到最终落地我选择了与JLCPCB合作进行PCB的打样与制造。作为一名个人开发者或小型团队直接开模做结构件成本太高而3D打印的强度又往往难以满足高速碰撞的需求。因此我将机器人的核心“骨架”——主控板、电机驱动板甚至传感器板——全部设计成了PCB。PCB不仅提供了精确的安装孔位和电气连接其本身的FR4材质也具备一定的结构强度可以作为机器人的承载底板。通过JLCPCB的在线下单系统我可以以极低的成本和极快的速度获得专业质量的电路板这让我能将精力集中在机器人的逻辑设计和策略调试上而不是耗费在手工搭棚焊接的繁琐与不稳定上。所以这篇内容我想和你分享的不仅仅是一个相扑机器人的零件清单和接线图。我更想带你走一遍我完整的思考、设计、踩坑和优化的过程。你会看到如何为有刷电机设计一个既安全又暴力的驱动电路如何用一块主控板统筹所有传感器并做出毫秒级的决策以及如何利用现成的PCB制造服务将一个想法快速、可靠地变为可以拿在手里、放在赛场上对抗的实体。无论你是对机器人感兴趣的初学者还是想寻找一个紧凑型对抗机器人方案的同好希望我的这些经验都能给你带来一些直接的参考和启发。2. 核心战力的源泉有刷电机驱动系统深度解析相扑机器人的灵魂在于其移动和攻击能力而这一切的动力都来自于电机。我选择了常见的N20系列小型有刷直流减速电机。这类电机通常工作电压在3-6V自带减速箱输出轴转速在每分钟几十到几百转同时能提供可观的扭矩。对于一个小型相扑机器人来说速度和扭矩的平衡至关重要速度太快容易失控冲出界外扭矩不足则根本无法推动对手。2.1 电机选型与特性考量我最终选定的电机参数是工作电压6V空载转速200RPM减速比1:100额定扭矩0.8kg.cm。这个选择基于以下几点计算和权衡速度估算机器人轮子直径我定为约4cm。那么轮子周长 π * 直径 ≈ 3.14 * 4 12.56 cm。电机输出轴转速200RPM即每分钟轮子转200圈。理论最大直线速度 200圈/分钟 * 12.56 cm/圈 2512 cm/分钟 ≈ 0.42 m/s。这个速度对于直径通常只有1米左右的相扑擂台来说已经足够迅猛既能快速调整位置又不会因为惯性过大而难以控制。扭矩验证额定扭矩0.8kg.cm。假设机器人自重含所有部件约为300克0.3kg。在理想情况下电机需要克服机器人自重产生的滚动摩擦和推动对手所需的力。推动力F与扭矩T和轮半径r的关系为 F T / r。轮半径 r 2 cm 0.02 m。扭矩 T 0.8 kg.cm 0.8 * 9.8 * 0.01 ≈ 0.0784 N.m换算成国际单位。因此单轮理论最大推力 F ≈ 0.0784 / 0.02 ≈ 3.92 N。两个轮子合力理论上可提供近8N的推力推动一个自重相当的对手是可行的。实际中由于摩擦、重心等因素会打折扣所以需要留有余量。供电匹配电机标称6V我计划使用一节7.4V的2S锂聚合物电池。直接供电会超压可能导致电机过热或寿命缩短。因此驱动电路必须具备稳压或PWM调速功能将电压有效值控制在电机舒适区间。注意不要盲目追求超高扭矩电机。过大的扭矩如果匹配轻量级的车身和抓地力不足的轮胎会导致启动或急停时轮胎打滑空转反而损失了有效推力。轮胎材质和场地表面的匹配度同样关键。2.2 驱动电路设计从H桥到集成方案驱动有刷电机正反转最经典的电路就是H桥。我最初也考虑过用四个MOSFET自己搭建这样可以极致地优化内阻和电流能力。但考虑到PCB面积和布局复杂度我最终选择了集成电机驱动芯片方案这能大大提高系统的可靠性和开发效率。我选用的是DRV8833双路H桥驱动芯片。选择它的理由很充分双路输出一颗芯片就能驱动两个电机完美契合我的双轮差分驱动结构节省空间。宽电压范围2.7V到10.8V的供电范围完全覆盖我的电池电压7.4V和逻辑电压3.3V或5V。大电流能力每路持续输出电流可达1.5A峰值可达2A驱动N20电机绰绰有余且留足了余量应对堵转等极端情况。丰富的保护功能内置过流保护、欠压锁定和过热关断。这对于对抗激烈的相扑机器人至关重要能有效防止因卡死、短路或电池电量不足而导致的芯片或电机烧毁。控制简单每路电机只需两个GPIO口控制IN1, IN2通过设置高低电平即可实现正转、反转、刹车和滑行四种状态。配合主控的PWM输出还能实现无级调速。在我的驱动板PCB设计上围绕DRV8833我做了以下关键布局和优化电源路径电池输入BAT BAT-首先经过一个大的电解电容例如100uF进行储能和滤波然后直接进入DRV8833的VM引脚。电机的大电流回路芯片VM→输出A/B→电机→输出A/B→芯片GND尽可能短而粗我用的是至少2mm宽的走线以减少寄生电感和压降。续流二极管虽然DRV8833内部有寄生体二极管但在频繁正反转、急停的工况下电机电感会产生很高的反向电动势。为了更可靠地保护芯片我在每个电机输出端到VM和GND之间额外并联了肖特基二极管如1N5819为反向电流提供低阻抗通路。电流采样DRV8833有两个电流采样输出引脚nFAULT, AISEN/BISEN。我通过一个小的采样电阻例如0.1欧姆连接到地并将nFAULT引脚上拉到逻辑高电平。当芯片检测到过流或过热时nFAULT会拉低我可以让主控MCU检测这个引脚从而在程序层面做出紧急刹车或后退的反应策略这是一个重要的安全冗余设计。逻辑电平转换我的主控MCU是3.3V系统而DRV8833的输入高电平阈值最低约为2V因此3.3V GPIO可以直接驱动无需电平转换电路。2.3 实战调试让电机听你的话板子焊好程序写完后电机的调试才是真正让机器人“活”过来的过程。这里有几个关键点PWM频率选择对于有刷电机PWM频率不宜太高也不宜太低。太高比如20kHz以上MOSFET开关损耗增加且可能因为电机电感的滤波作用导致响应变慢太低比如低于1kHz你会听到明显的电机啸叫声且电流纹波大电机发热严重。我经过测试选择在5kHz到8kHz之间这是一个兼顾效率、噪音和响应速度的甜点区。死区时间设置虽然在硬件上我通过程序逻辑避免同时设置IN1和IN2为高那是短路刹车状态但在软件PWM控制中当从一个方向切换到另一个方向的瞬间如果控制不当仍可能出现极短时间的同侧导通。虽然DRV8833内部可能有死区保护但我在软件上依然加入了几个毫秒的“全停”间隔确保转向切换平滑无冲击。启动与加速曲线直接给电机全速PWM有时会因为静摩擦力导致启动瞬间电流极大甚至打滑。我采用了一个软启动策略在100-200ms内将PWM占空比从0线性增加到目标值。这不仅能保护电机和电池还能让机器人的起步更平稳更容易控制。“推土机模式”与“灵巧模式”通过程序我可以定义两种运动模式。一种是“推土机模式”当检测到前方有对手时左右电机同时输出最大PWM提供最大向前推力。另一种是“灵巧模式”用于巡线或搜索对手此时使用较低的PWM基础值并辅以差速转向动作更柔和、精准。3. 机器人的“感官”与“大脑”传感器集成与主控设计一个只会瞎撞的机器人是走不远的。为了让我的相扑机器人能感知环境、识别边界、发现对手并制定策略必须给它装上“感官”和“大脑”。3.1 传感器阵列配置我采用了多传感器融合的方案以提高系统的鲁棒性。边界检测红外反射传感器相扑擂台通常是白色底板黑色边界。我使用了五路TCRT5000型红外反射传感器在机器人底盘前部一字排开。中间一路正对前方左右各两路呈一定角度向外形成一个约150度的扇形探测区域。这样不仅能检测正前方的边界还能在机器人斜向接近边界时提前感知。传感器输出的是模拟量距离黑线越近接收到的反射光越弱输出电压越低。通过设置合适的阈值可以可靠地判断是否“踩线”。为了防止环境光干扰我给每个传感器都加上了黑色的海绵套作为遮光罩。对手检测多种方案互补前向红外对管在机器人最前端安装一对红外发射管和接收管调制发射例如38kHz接收管只解调该频率的信号。这样可以检测正前方一定距离内是否有物体对手遮挡。优点是电路简单成本低。缺点是易受环境红外光干扰且只能检测有无无法测距。超声波传感器HC-SR04我尝试过在机器人顶部安装一个超声波模块用于中远距离的对手探测和粗略测距。但在实际对抗中发现由于擂台较小机器人动作剧烈超声波的回波容易被对手的复杂表面或快速移动干扰数据不稳定。且其探测角度较宽容易误判擂台围栏。因此我只将其作为辅助参考而非主要依据。接触式传感器胡须开关这是最直接、最可靠的检测方式。我在机器人底盘前缘左右两侧各安装了一个轻触开关或弹性金属片制作的“胡须”。一旦与对手发生物理接触开关立即闭合产生一个明确的中断信号。这个信号优先级最高用于触发最紧急的对抗策略如全力前冲或顶住。姿态参考陀螺仪模块MPU6050这是一个进阶选项。我集成了一片MPU6050用于测量机器人的角速度。主要目的不是做复杂的姿态解算而是用于防滑补偿。在高速转向或激烈碰撞时轮胎可能会打滑导致编码器反馈的位移与实际不符。通过陀螺仪的Z轴角速度积分我可以估算出机器人的实际转向角度与编码器期望值进行对比如果偏差过大则动态调整左右轮速差进行纠偏让转向更精准。3.2 主控系统设计与PCB布局主控芯片我选择了STM32F103C8T6也就是常说的“蓝色药丸”。它拥有72MHz的Cortex-M3内核足够的GPIO、定时器和ADC资源以及丰富的社区支持。我将整个控制系统设计在了一块四层PCB上通过JLCPCB制作。为什么用四层对于这种数字模拟混合、且有电机驱动大电流路径的板子四层板能提供更好的电磁兼容性EMC性能。层叠结构第一层Top为主要元件和信号走线层第二层为完整的地平面GND Plane第三层为电源平面PWR Plane和部分关键信号第四层Bottom为剩余元件和信号走线。关键布局原则强弱电分离板子左侧区域放置电机驱动芯片DRV8833、电机接口、电池输入接口及大容量滤波电容。右侧区域放置主控MCU、传感器接口、晶振、调试接口等数字逻辑部分。两者之间留有清晰的“隔离带”仅通过必要的电源和信号线连接。地平面完整性确保第二层地平面尽可能完整为所有高频信号提供最短的回流路径。数字地和模拟地主要是传感器部分在一点通过磁珠或0欧电阻相连连接点选在电源输入滤波电容的接地端附近。电源树设计电池电压7.4V经过一个开关稳压芯片如MP2307降压到5V为超声波传感器、红外发射管等外设供电。5V再经过一个LDO如AMS1117-3.3降压到3.3V为STM32和部分传感器供电。电机驱动芯片的VM直接接电池电压其逻辑供电VCC接5V或3.3V需确认芯片兼容性。每个电源芯片的输入输出端都就近放置大小不一的去耦电容如10uF 0.1uF。传感器接口所有传感器接口都设计了上拉/下拉电阻和滤波电容。例如红外接收管的输出端除了接MCU的ADC还通过一个RC低通滤波器如1k电阻0.1uF电容接地以滤除高频噪声。3.3 控制逻辑与策略实现程序框架基于FreeRTOS实时操作系统创建了几个主要任务传感器数据采集任务以固定频率如1kHz读取ADC红外传感器、GPIO胡须开关、I2CMPU6050数据并进行初步滤波如滑动平均滤波。状态融合与决策任务这是核心“大脑”。它接收处理后的传感器数据维护一个机器人状态机例如搜索、接近、接触、脱离边界、被推挤等。根据当前状态和传感器输入决策出下一个动作指令目标速度、转向角度。电机控制任务接收决策任务发出的指令通过PID控制器结合编码器反馈如果安装了编码器或开环控制计算出实时的左右轮PWM占空比并写入定时器寄存器。PID参数需要在实际场地上反复调试特别是对抗时的“抗积分饱和”处理很重要。调试与通信任务通过串口输出机器人内部状态、传感器数值、电池电压等信息方便通过电脑上位机进行实时监控和参数调整。一个简单的策略示例当中间红外传感器检测到黑线边界立即触发“后退-转向”例程左右电机全速反转一定时间如200ms然后根据左边或右边哪一侧的传感器先检测到边界来决定向相反方向差速转向一定角度确保机器人回到擂台中心区域。4. 机械结构设计与实战优化电路是神经和肌肉机械结构则是骨骼和躯体。一个合理的结构设计直接决定了机器人的稳定性、推力和生存能力。4.1 底盘与重心设计我的机器人采用经典的“楔形”底盘设计。前部低矮且尖锐像一个铲子目的是能够钻到对手底盘下方利用杠杆原理将其撬起。底盘主体由2mm厚的FR4 PCB主控板和1.5mm厚的铝板电机安装板层叠构成既保证了强度又控制了重量。重心是相扑机器人的生命线。理想的重心应该尽可能低并且略微靠前。低重心将所有重的部件电池、电机安装在底盘的下层。我的2S锂电池约1000mAh平铺在底盘最底部。电机也通过支架安装在底盘下方。这样能极大提高机器人的稳定性不易被对手掀翻。重心靠前在不超过前轮轴的前提下将电池等配重稍微前移。这样能增加前轮的正压力提高前轮的抓地力在向前推挤时更有优势。但同时要小心如果重心太靠前在急停或后退时容易“点头”甚至前翻。重量分配左右重量尽量对称以保证直线行驶和转向的平衡。我甚至用电子秤仔细测量了左右半边的重量并通过粘贴配重块如小块铜片进行微调。4.2 动力传输与轮胎选择电机通过联轴器直接驱动轮轴这是最简单高效的方式。我使用了硅胶联轴器它有一定的弹性可以补偿微小的安装不同心并且能吸收一部分冲击。轮轴采用3mm不锈钢光轴两端用法兰轴承支撑。轮胎的选择是另一个胜负手。我测试过多种材质普通橡胶轮胎抓地力一般在光滑的擂台表面容易打滑。聚氨酯PU轮胎抓地力优秀耐磨是很好的选择。我最终使用的是带花纹的PU轮。硅胶轮胎抓地力极强甚至有些“粘”但在灰尘多的环境下容易沾灰导致性能下降。DIY轮胎我尝试过在轮毂上缠绕数层电工胶带或热缩管以增加直径和抓地力。这是一种低成本可调的方案可以根据不同场地快速更换“胎皮”。轮胎的宽度也很重要。较宽的轮胎接触面积大抓地力好但转动惯量也大加速减速不够灵敏。我选择了宽度约2cm的轮胎作为抓地力和灵活性的折中。4.3 防护与攻击结构除了推挤一些“非致命性”的攻击和防护结构也能增加胜算。前铲我用1mm厚的弹簧钢片制作了一个前铲用螺丝固定在底盘最前端略微上翘。它的作用有两个一是保护底盘前部的传感器和电路二是在与对手接触时试图滑入对方底盘下方。弹簧钢有很好的弹性碰撞后能恢复形状。侧翼在机器人两侧我安装了轻质的塑料或碳纤维片作为侧翼。主要作用是防止对手从侧面轻易勾住我的轮子。侧翼不宜过大否则会增加被对手抓住借力的风险。防翻杆在机器人尾部我安装了一根可以自由旋转的碳纤维杆长度略大于机器人半径。当机器人因冲撞即将后翻时这根杆会先触地形成一个支点配合电机的反向驱动有很大几率让机器人自己“摇”回来避免被直接判负。5. 系统集成、调试与赛场心得当所有硬件准备就绪程序也初步编写完成后真正的挑战才刚刚开始——系统集成与调试。这是一个不断发现问题、解决问题的循环。5.1 上电前检查与静态测试在焊接完所有元件特别是给主控板首次上电前必须进行严格的检查目视检查用放大镜检查所有焊点确保无虚焊、短路、连锡。重点检查电源芯片、MCU、电机驱动芯片等引脚密集的器件。万用表测试电源短路测试断开电池用万用表蜂鸣档测量电池输入接口的正负极电阻应为无穷大。依次测量3.3V、5V等各路电源对GND的电阻不应出现直接短路阻值接近0欧姆。电压测试接上电池可在电源路径中串入一个0.5A或1A的自恢复保险丝以防万一先不接电机和主控MCU。测量各稳压芯片的输出电压是否正常5V 3.3V。电流测试使用可调电源或带电流显示的电池给系统供电。在空载不接电机MCU未程序时整机静态电流应非常小几个mA。然后下载一个最简单的LED闪烁程序到MCU观察电流是否正常增加通常到几十mA。5.2 分模块动态调试确认电源正常后开始分模块调试电机驱动测试编写一个测试程序让MCU依次输出让电机正转、反转、刹车、滑行的控制信号。用万用表测量电机接口两端的电压变化是否符合预期。此时先不要接电机用万用表或示波器观察波形。确认无误后再接上电机观察电机转动是否顺畅有无异响。传感器测试逐个测试传感器。对于红外传感器用白纸和黑胶带在它面前移动通过串口打印出ADC数值确认其变化范围和阈值。对于胡须开关手动触碰打印GPIO状态。对于超声波测量不同距离下的回波时间是否准确。控制逻辑测试将各个传感器模块的测试程序整合编写简单的状态机。例如用手挡住前红外传感器机器人后退触碰左胡须机器人向右转等。在桌面上进行初步的功能验证。5.3 场地实测与策略调优桌面测试通过后就要进入真正的擂台进行实战化调试。边界识别校准擂台的黑白对比度、环境光照都会影响红外传感器。需要在实际比赛灯光环境下重新校准每个红外传感器的阈值。我通常在程序里设置一个“校准模式”机器人原地旋转自动记录扫描到黑线和白板时的ADC最大值和最小值并计算中间值作为动态阈值。运动控制PID整定如果使用了编码器进行闭环速度控制PID参数比例、积分、微分系数需要仔细调整。在擂台上让机器人直线行驶观察其是否跑偏快速指令它转向90度观察是否准确到位且无振荡。这是一个需要耐心的过程。对抗策略优化找另一个机器人或一个重物作为假想敌进行对抗测试。攻击性测试前铲的角度和高度是否合适能否有效钻入对手底部。防御性测试被对手从不同角度冲撞时机器人的稳定性如何防翻杆是否有效。策略有效性观察机器人在不同情境下的决策是否合理。例如当同时检测到边界和对手时优先级如何设定是冒险进攻还是优先自保这些都需要根据实战数据来调整状态机的转换条件。可靠性与压力测试让机器人连续运行10-15分钟进行频繁的加速、减速、碰撞。用手触摸电机驱动芯片、电机、稳压芯片的温度是否在可接受范围内。检查所有螺丝、线缆连接是否因振动而松动。5.4 常见问题与解决思路在调试过程中我遇到了不少典型问题问题电机干扰MCU导致复位。现象每当电机启动或换向时主控MCU有时会无故重启。排查首先用示波器观察给MCU供电的3.3V电源纹波。在电机动作时果然看到了大幅度的毛刺。解决① 加强电源滤波在电机驱动电源入口处增加更大的电解电容如470uF和陶瓷电容0.1uF并联。② 优化PCB布局确保电机大电流回路远离MCU的电源和晶振走线。③ 软件上在电机控制信号变化前后短暂关闭全局中断防止电压毛刺触发异常中断。问题红外传感器受环境光干扰严重。现象在靠近窗户或灯光变化时边界检测时灵时不灵。解决① 为所有红外传感器加装物理遮光罩黑色热缩管或海绵。② 将红外发射管改为脉冲调制驱动接收端只解调特定频率的信号这能极大抑制环境光的直流分量干扰。③ 在软件中采用动态阈值算法或数字滤波如中值滤波。问题机器人直线跑偏。现象即使给了左右轮相同的PWM值机器人也不是绝对直线。解决① 机械校准检查左右轮直径是否完全一致轮胎是否打滑轮轴是否平行。② 电气校准由于电机个体差异和驱动电路微小不对称即使相同PWM转速也可能不同。我引入了一个“校准系数”。在程序初始化时让机器人原地旋转通过陀螺仪测量实际旋转速度反推出左右轮的速度比例差并将这个系数用于后续的PWM输出补偿。③ 闭环控制如果安装了编码器使用PID控制可以很好地解决这个问题。经过这样一轮从电路设计、PCB制造、机械装配到软硬件联调的完整流程一个活灵活现、能征善战的迷你相扑机器人就从图纸变成了现实。每一次调试每一次对抗都能让你对机电系统集成有更深的理解。最后关于利用JLCPCB这类制造服务我的体会是它极大地降低了硬件创新的门槛。你可以专注于设计本身而将高精度的制造交给专业工厂。在提交Gerber文件前务必用好他们的在线DRC设计规则检查和3D预览功能仔细核对每一个孔位、每一条走线。第一次打样不妨选择最便宜的工艺和数量验证设计无误后再考虑使用更好的板材如FR4 TG150或表面处理如沉金来提升最终版的可靠性。这个项目最吸引我的地方就在于它完美地结合了电子、机械、编程和竞技的乐趣每一个环节都有深度可挖每一次改进都能直观地体现在赛场上的胜负之间。
返回列表