ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

立创梁山派智能送药小车电路设计:电源、驱动与抗干扰实战

立创梁山派智能送药小车电路设计:电源、驱动与抗干扰实战 去年整理工位的时候翻出了2021年电赛那会儿留下的几块板子其中就有这台智能送药小车。当时F题的赛题要求在模拟病房场景里完成药盒的定点配送、房间识别、自主避障和返程很多人第一反应是去卷算法但我个人一直认为这类移动机器人能不能稳七成看电路设计。算法再漂亮电源一抖、电机一启动就复位编码器一跑就丢脉冲那也是白搭。这台小车的电路设计是以立创梁山派为核心主控做的从电源域规划到驱动、采样、接口保护前后改了三版才做到连续跑半小时不掉链子。下面我把整套硬件设计的思路、参数计算和踩过的坑按模块完整拆一遍给准备做类似项目或者想系统练一遍硬件电路设计的朋友一个可以直接抄作业的参考。1. 项目整体电路架构与设计思路拆解1.1 从赛题需求倒推电路设计指标智能送药小车这类题目的功能需求其实很明确沿着地面标线自主行驶、识别路口和房间编号、在指定房间停下并卸药、遇到障碍能绕行或停车等待最后原路返回起点。把这些功能翻译成电路语言就得到了几个硬指标。第一主控要同时处理多路传感器输入和实时电机控制需要一个主频足够、定时器资源多的MCU这是选立创梁山派的直接原因。第二整套系统在电机频繁启停、负载突变的工况下电源必须扛得住冲击不能因为一次堵转就掉压复位。第三循迹和测距的信号都是弱信号容易受电机换向产生的尖峰干扰需要从布线和滤波上做隔离。第四整车要在有限的电池容量下跑够比赛时间电源转换效率不能太低。我把这些需求整理成了一份设计指标清单作为后面每个模块选型和参数计算的依据。说白了电路设计不是把器件堆上去就行每一项指标背后都要能对应到一个具体的电路决策。比如不能在电机启动时复位这一条直接决定了我要在3.3V域前面加LC滤波并且把数字地和功率地做单点汇合而不是随便铺一片地就完事。提示先写需求再画原理图是硬件设计里回报率最高的一个习惯。需求列表越具体后面改板次数越少。1.2 模块划分与供电电压域规划整台车的电路我拆成了五个模块电源模块、主控最小系统、电机驱动与测速模块、传感器模块、人机交互模块。模块化最大的好处是调试时可以单独供电、单独测试出问题能快速定位到哪一块。供电电压域一共分了三级。电池直接用2节18650串联标称7.4V满电约8.4V这一路直接喂给电机驱动因为电机要的就是大电流和高压差。中压域做成5V供给超声波、舵机、OLED这些外设。低压域是3.3V供给主控、灰度传感器和编码器上拉。这样分域的考量是电机是最大的干扰源和耗电大户让它走一条独立的高压粗线路径和数字信号在物理上尽量分开5V域用开关电源保证效率3.3V域用线性稳压保证纹波干净。各电压域之间用磁珠或者0欧电阻做单点连接避免地环路把电机的噪声耦合进敏感回路。电压域标称电压供电对象稳压方式关键要求VBAT7.4V6.0-8.4V电机驱动、蜂鸣器电池直供大电流路径走线短粗5V5.0V超声波、舵机、OLED、风扇Buck降压效率高扛得住2A峰值3.3V3.3V主控、灰度、编码器上拉LDO线性纹波小噪声低1.3 立创梁山派作为主控的资源盘点立创梁山派用的是GD32F450ZGT6Cortex-M4内核跑到200MHzFlash 512KBSRAM 256KBLQFP144封装引脚很多板载了Type-C下载口、复位按键、若干用户LED、SD卡槽和外扩排针直接拿来当核心板用非常省事。我选它主要是看中三点一是定时器资源丰富高级定时器TIMER0、TIMER7能输出互补PWM带死区通用定时器一串可以拿来做编码器接口正好一台车两路编码器两个高级定时器通道绰绰有余二是ADC通道多12位精度做电池电压采样和若干模拟量监测够用三是主频高跑PID和传感器融合时不至于捉襟见肘。不过要注意梁山派核心板的3.3V是板载LDO从5V转出来的如果整车主控的电流都从它那一路走负载会偏重。我的做法是核心板单独用一个5V转3.3V的小LDO供电把板载LDO当作备份实际大电流的3.3V域由外部LDO提供。这样主控的供电和外围传感器供电分开互相不拖累。引脚分配上我把两路电机PWM和方向脚放在同一侧排针方便走线编码器AB相放在带硬件编码器模式的定时器引脚上I2C腾出来给OLEDADC留给电池检测。分配图我在纸上画了三遍才定稿这个提前规划的动作能省掉后面很多飞线。2. 电源系统设计从电池到各路供电2.1 电池选型与放电能力核算2节18650串联的理由很直接7.4V的母线扣掉电机驱动H桥的导通压降和电机自身的最低工作电压还能保证在电池放到7V甚至6.5V时电机依然有劲。单个18650的标称容量在2500mAh到3500mAh之间两串后容量不变、电压翻倍能量比单节高两倍而整车功耗里电机占大头。我实测过这台车在正常巡线工况下平均电流约0.8A峰值在启动瞬间能到3A以上一块3000mAh的电池理论上能撑两三个小时实际因为要留余量和电池老化跑完一场比赛没有问题。这里有个容易忽略的点电池的持续放电倍率。18650里有些高容量型号放电倍率只有1C3000mAh也就是3A持续勉强够用但启动冲击会让电压瞬间跌落。所以我更倾向用放电倍率2C以上的电芯或者直接上动力电芯。放电能力算清楚才能保证拐弯加速时电源不塌。另外电池接口我用了XT30比杜邦线靠谱得多接触电阻小插拔也不容易松。电池到驱动板的这段线我用了18AWG长度压到10cm以内线损能明显降下来。2.2 Buck降压电路设计与关键参数计算5V域我用了同步Buck芯片开关频率高、外围简单、效率能到90%以上。以常见的500kHz开关频率为例来算一下储能电感。Buck的电感计算公式是 L (Vin - Vout) × Vout / (Vin × fsw × ΔIL)其中ΔIL一般取输出电流的20%到40%。代入最坏情况Vin8.4V、Vout5V、fsw500kHz、输出电流2A、ΔIL取30%也就是0.6A得到 L (8.4-5)×5 / (8.4×500000×0.6) ≈ 3.37μH。工程上取标准值3.3μH或者4.7μH都行我选4.7μH让纹波电流更小一些代价是体积略大。输出电容同样要算。纹波电压 ΔVout ≈ ΔIL × (ESR 1/(8×fsw×Cout))为了把纹波压到20mV以内我用了两颗22μF的X5R陶瓷电容并联再并一颗0.1μF滤高频。陶瓷电容的ESR极低主要靠容值项控制纹波。反馈电阻按 Vout Vref × (1 R1/R2) 来配芯片Vref常见是0.6V或0.8V。以0.8V为例要得到5VR1/R2 5.25取R210kR152.3k实际输出会落在4.98V左右完全够用。分压电阻的精度直接影响输出电压这里要用1%的金属膜电阻别用5%的碳膜。注意Buck的输入电容必须紧贴芯片Vin和GND引脚走线越短越好否则开关瞬间的di/dt会在寄生电感上产生尖峰轻则效率下降重则炸芯片。2.3 LDO与3.3V数字电源的取舍3.3V域我坚持用LDO而不是再挂一级Buck原因有二。一是3.3V这路的负载电流不大主控加传感器也就两三百毫安LDO的损耗 (5-3.3)×0.3 ≈ 0.5W加个小铜箔散热就压得住效率低一点无所谓。二是LDO的输出纹波能做到微伏级而开关电源哪怕做得再好几十毫伏的开关纹波对ADC采样和弱的模拟信号都是干扰源。用LDO换来一个干净的数字和模拟参考地这笔账很划算。选LDO的时候我重点看了三个参数压差、静态电流和PSRR。压差要小保证5V掉到4.5V时3.3V还能稳住静态电流要低减少待机损耗PSRR在几百kHz到1MHz要够高才能把上游Buck的开关噪声进一步压制。输入端并10μF、输出端并10μF加0.1μF这是LDO的标准配置。要注意有些LDO对输出电容的ESR有要求用陶瓷电容时要确认芯片手册支持否则可能振荡。2.4 电源树搭建与去耦电容布置实操把所有电源关系画成一棵树从电池这个根出发分出电机支路、5V支路5V再分出3.3V和若干外设。每个分支的汇合点我用了0欧电阻或者磁珠方便调试时断开测量也能在特定频段抑制噪声传导。电机支路和数字支路的地线在电池负极处单点汇合形成一个星型接地结构避免电机的大电流在数字地上产生压差。去耦电容的布置有个经验每个芯片的电源引脚旁边都要有一颗0.1μF位置越近越好理想情况下和引脚在同一个焊盘附近。主控周围再放几颗10μF的体电容做能量缓冲。超声波的5V输入端我加了一颗100μF的电解电容因为它发射瞬间的电流冲击很大没有大电容兜着会把5V拉低。整个电源部分的布局原则就是大电流路径短粗、敏感器件远离功率回路这一步做好后面调试能省一大半事。我在第一版上偷懒把Buck和传感器放得太近结果超声波一工作OLED就闪后来把Buck挪到板边并加了地隔离才解决。3. 主控最小系统与接口电路细节3.1 主控引脚分配与信号分组原则引脚分配看着是体力活其实最能体现设计水平。我的原则是把同一类信号放在物理上相邻的引脚减少交叉走线同时把功率相关的引脚和模拟相关的引脚在布局上分开。具体来说两路电机的PWM和方向信号安排在板子一侧编码器AB相安排在带编码器模式的定时器引脚上I2C的SCL/SDA配对相邻ADC采样脚尽量放在远离PWM输出的位置减少数字开关噪声耦合进模拟通道。梁山派做核心板时底板和核心板之间通过排针连接这里的引脚复用要提前对照手册确认。比如某个脚默认是JTAG你要拿来做GPIO就得先关闭调试复用否则信号出不来。我在第一版上就吃过这个亏有一个电机方向脚死活拉不动查了半天才发现是SWD引脚复用冲突。这种问题不看手册是绝对想不到的。3.2 时钟、复位与BOOT电路主控要跑得稳时钟源是根基。梁山派核心板板载了外部晶振一般不用自己再搭但如果要自己做底板8MHz的HSE晶振要配两颗22pF左右的负载电容具体容值按晶振手册的负载电容减去PCB寄生电容来取一般取15pF到22pF。复位电路用一个10k上拉加0.1μF到地再加一个复位按键保证上电时能产生足够宽的低电平脉冲。BOOT电路决定芯片从哪启动正常跑程序时BOOT0拉低。为了调试方便我留了一个跳线帽需要进下载模式时短接一下即可。复位和BOOT这两个电路虽然简单但一旦出问题就是上电不跑这种最让人抓狂的故障所以我在PCB上都留了测试点用示波器一夹就能看波形。3.3 下载调试接口与保护电路调试接口用SWD只需要SWDIO、SWCLK、GND和3.3V四根线比JTAG省引脚。接口旁边我加了一颗TVS管做静电防护因为调试时手经常碰到排针静电打进来可能直接损伤IO。TVS的钳位电压要选比3.3V略高但低于IO绝对最大值的响应时间要快。下载口和数据线之间我串了22欧姆的小电阻作用是抑制信号过冲尤其是排线较长的时候。这个电阻阻值不能太大否则信号上升沿变缓影响下载稳定性。实测下来22欧到33欧都是安全区间。所有对外接口包括传感器排针、电机接口我都做了同样处理TVS加串阻能极大降低野外调试时接口损坏的概率。4. 电机驱动与测速电路设计4.1 H桥驱动芯片选型与外围设计电机驱动是整车的动力核心也是干扰最大的地方。我用的是双路H桥驱动芯片每路持续电流1.2A、峰值能到3A多逻辑供电和电机供电分开逻辑侧3.3V兼容。选这类芯片而不是分立MOS搭H桥主要是省事、省面积而且内置了续流二极管和死区逻辑新手不容易把上下管同时导通炸掉。外围设计有几个关键点。电机供电脚旁边要并一颗100μF的电解电容加0.1μF陶瓷吸收换向时的反向电动势。芯片的散热焊盘必须好好焊到铜箔上因为堵转时芯片会发热。PWM频率我选在10kHz到20kHz之间太低会有可闻噪声太高开关损耗上来。逻辑控制上每路电机配两个方向脚加一个PWM脚正反转和调速都能覆盖。驱动方案持续电流优点缺点适用场景集成H桥1.2A外围简单、内置保护大电流发热中小型减速电机分立MOS H桥5A以上电流大、效率高驱动复杂、易炸管大功率电机电机驱动模块视模块免设计、即插即用占空间、接口多快速验证4.2 编码器测速接口与信号调理减速电机尾部带霍尔编码器输出AB两相正交信号。这信号是方波直接接主控定时器的编码器模式引脚即可主控硬件自动计正反转方向。但这里有个坑编码器是开漏输出需要上拉电阻才能形成干净的高低电平我用了4.7k上拉到3.3V。上拉太大会导致上升沿变缓高转速时丢失脉冲太小则功耗增加还可能拉不动。4.7k到10k是常用区间。信号调理方面编码器线往往很长容易串入干扰我在AB相和地之间各并了一颗1nF电容做RC滤波截止频率算下来在几十kHz量级既能滤毛刺又不影响正常计数。编码器地线要和主控地可靠连接最好用双绞线把A、B、GND三根线绞在一起走减少共模干扰。我在第一版上编码器单独走排线电机一加速计数就乱跳换成双绞线加RC滤波后彻底稳定。4.3 舵机与执行机构控制电路小车的取药/送药动作我最初考虑用舵机做机械臂后来简化成舵机推动挡板。舵机的控制信号是50Hz的PWM脉宽0.5ms到2.5ms对应角度。信号线直接接主控PWM脚但舵机的供电要单独拉一路5V因为它启动瞬间电流能到1A以上和主控共用一路会被拉低导致复位。我在舵机电源入口加了一颗470μF的电解电容专门对付这种大电流瞬态。舵机地线和信号地要回流到电源地不要从主控的模拟地引否则舵机的电流会在细地线上产生压降。这个细节很小但很多小车舵机一动主控就死的问题根子都在这里。如果执行机构需要更大扭矩可以考虑用带抱闸的直流减速电机配合限位开关这里就不展开了。5. 传感器与信号调理电路设计5.1 灰度循迹传感器电路原理循迹用的是红外对管阵列常见的是TCRT5000一路是红外发射管一路是光敏接收管。工作原理是红外光照到地面反射回来白色区域反射强接收管内阻小输出电平变化黑色巡线反射弱接收管基本不导通。八路排成一排贴在车头通过ADC或者比较器读取判断黑线在哪个位置从而算出偏差去修正方向。这里有两种读法模拟量读法和数字比较器读法。模拟量用ADC采样能得到灰度值大小抗干扰能力更强能适应不同反光的地面数字读法电路简单靠一个电位器调阈值。我建议用模拟量虽然多占ADC通道但调参空间大赛场地板颜色深浅不一的时候优势明显。每路接收管我配了可调电位器做参考实际调试时现场标定比固定阈值靠谱得多。5.2 超声波测距电路与接口保护避障用超声波模块工作电压5VTrig触发、Echo回响。Trig是输入主控给一个10微秒以上的高电平脉冲Echo是输出高电平持续时间对应往返时间除以声速再除以2就是距离。电路上最大的问题是Echo输出是5V电平而主控IO是3.3V耐压直接接会长期损伤IO。我加了一级电平转换用一个分压电阻或者专用电平转换芯片把5V降到3.3V。超声波供电也要单独处理。发射瞬间电流冲击大模块的5V脚旁边并100μF电解前文提过。另外超声波容易受温度影响声速随温度变化精度要求高的话可以加一个温度传感器做补偿普通避障不需要。多个超声波同时用会互相干扰我的做法是分时触发两个之间间隔至少60ms避免串扰。5.3 按键、拨码与OLED显示接口按键电路最简单也最容易忽略。我用的是机械按键一端接IO另一端接地IO内部或外部上拉。问题是机械按键有抖动硬件上并一颗0.1μF电容能滤掉一部分软件再配合消抖。按键数量多的话可以考虑ADC键盘用一路ADC通过不同分压值区分多个按键省IO口。OLED用的是0.96寸I2C屏SCL/SDA两根线配上拉电阻4.7k。I2C走线长了容易受干扰我在排针附近加了小电容和上拉并且把OLED的电源和主控3.3V用同一路避免地电位差。显示内容主要是实时速度、传感器状态、房间号和调试信息比赛时用来快速判断小车状态非常有用。5.4 电池电压采样与运放调理电路电池电压监测是让小车知道电量、避免过放的关键。但ADC的输入范围是0到3.3V而电池满电8.4V直接接会烧掉。解决方法是电阻分压分压比按最大电压留余量设计。比如最高按10V算分压到3V以内取上电阻20k、下电阻8.2k分压比约3.448.4V得到约2.44V落在ADC量程内。分压电阻同样要用1%精度同时并联小电容滤高频。为了不让分压电阻被ADC采样电流影响我加了一级电压跟随器用运放做缓冲输入阻抗高、输出阻抗低采样更准。运放选通用轨到轨的即可比如常见的低功耗运放供电3.3V。运放的同相输入端接分压点反相端接输出构成跟随器反馈线要短。这个电路还能顺便扩展到电流采样在电源主回路上串一个小阻值采样电阻用差分放大电路放大压差就能算出实时电流为堵转保护提供依据。滤波电容的取值按 f 1/(2πRC) 来算想要100Hz截止就配相应的RC。6. PCB布局布线与抗干扰实战6.1 层叠设计与电源地平面处理这块板子我用的是双层板顶层走信号和部分电源底层大面积铺地。双层板成本低适合学生项目但要求布局更讲究。地平面尽量保持完整不要被走线割得七零八落因为高频回流走的是地平面地平面一断回流路径绕远干扰就上来了。如果条件允许用四层板把电源和地各占一层信号层就好过得多。功率地和信号地我做了分区铺铜最后在电池负极处单点连接。这个单点连接很关键用一颗0欧电阻或者一个窄铜桥连起来能防止电机的大电流流过敏感区域的地。很多干扰问题本质上是地回流路径设计不当不是器件不好。6.2 大电流路径与信号隔离实操电机驱动的走线是整个板子最粗的我按每安培40mil的思路估算3A峰值就留了至少120mil的宽度实际上直接铺了一大片铜。走线尽量短、直、宽减少寄生电感。电机接口旁边放续流和滤波电容回路面积越小越好。信号线绝不和电机线平行长距离走如果非要交叉就垂直交叉把耦合降到最低。编码器这种弱信号线我做了包地处理两侧铺地并打接地过孔相当于给它穿了一层屏蔽衣。模拟采样线远离PWM输出线必要时中间用一条地线隔开。这些做法都是实战里总结出来的第一版板子电机一跑ADC就飘加了隔离和包地之后稳定多了。6.3 走线宽度估算与机械安装考虑走线宽度不能拍脑袋。粗略的估算可以用IPC公式但工程上常用经验值外层1盎司铜、允许温升10度时1A大约需要10到20mil。功率路径我按最保守的算留了充足余量。下表是我这块板子常用线宽供参考。用途线宽说明电机主回路100mil以上铺铜峰值3A走平面5V主供电40mil峰值2A3.3V供电20mil300mA普通信号8-10mil常规信号编码器信号8mil加包地弱信号防干扰机械安装也要在电路设计阶段就考虑。板子的安装孔位要和车架对齐接口位置要方便插拔超声波模块要朝前不被遮挡灰度传感器要贴地。我在画板子之前先用纸板做了个一比一的模板把各模块位置摆了一遍确认了接口朝向和线长再落到PCB上避免打样回来装不进去。7. 常见问题排查与调试经验实录7.1 上电复位与电机启动掉压这是最常见的坑。现象是电机一启动主控就重启或者程序跑着跑着莫名其妙复位。原因通常是电机启动瞬间的大电流把母线电压拉低导致3.3V LDO输入不足主控欠压复位。解决思路有三条加大电池到驱动板的走线和电池容量减少线损和压降在主控供电入口加LC滤波和大电容把瞬态能量兜住软件上缓慢加速而不是一上来满PWM减少冲击电流。我三条一起用复位问题彻底消失。7.2 循迹误判与阈值标定方法循迹误判的表现是小车在黑白交界处左右摇摆或者干脆冲出线外。原因往往是阈值定死、地面反光不一致或者传感器高度不合适。我的做法是现场标定把车放在白区记录各路的ADC读数放到黑区再记录一组取两次的中间值作为阈值并且给每一路单独标定因为红外管的个体差异很大。传感器离地高度也影响很大太高信号弱太低容易蹭地3到8mm是比较好的区间实测5mm左右最稳。7.3 编码器计数异常与噪声抑制编码器计数异常表现为速度环震荡、里程不准。除了前面说的上拉和RC滤波还有一个高频坑是编码器供电和主控供电不共地或者地线太细导致电位漂移。另外电机换向的电磁干扰会耦合进编码器线解决办法一是双绞加包地二是在编码器电源上串磁珠。还有一点定时器的编码器模式要配置好计数方向和溢出处理软件层面也要做滤波比如速度突变时做限幅。7.4 常见问题速查表我把调试中遇到的问题整理成一张表方便快速定位。现象可能原因排查方法解决电机启动主控复位母线掉压示波器看3.3V加电容、限加速循迹误判阈值不当读ADC值现场标定编码器跳变干扰或上拉不当看方波质量双绞包地、调上拉OLED花屏I2C干扰看总线波形缩短走线、加上拉超声波乱报供电冲击或串扰单独测距加大电容、分时触发ADC采样飘地噪声查地回流数模地分开、加滤波除了这些我还想强调一个心态问题遇到故障先别急着改代码很多时候是硬件问题。用示波器和万用表一步步量比盲改程序快得多。我习惯在关键节点留测试点这个习惯让我的调试时间缩短了一半。8. 成本控制与打样复盘的一些体会做学生项目成本是需要算的。整块主控加驱动板打样控制在几十块钱主要成本在芯片和连接器上。我的省钱策略是能用集成芯片就不用分立方案能复用的接口就不重复设计。但有两处我不省电源芯片和电机驱动芯片这两个地方省下来的钱最后都会用调试时间的代价还回去。电池和连接器也建议买好一点的接触不良是最隐蔽的故障源。打样前我养成了一个习惯把原理图打印出来用红笔过一遍重点看电源有没有短路、极性有没有接反、引脚有没有复用冲突、封装有没有选错。这最后一道人工检查帮我拦下过好几次封装脚位画反的低级错误。PCB打样回来后先不上电用万用表量一遍电源和地的阻值确认没有短路再通电通电时串一个限流电阻或者用带限流的电源第一次上电观察电流是否正常正常了再全压上电。我个人在几版迭代之后最大的体会是智能小车这类项目电路设计做扎实了算法调试会变得非常轻松。反过来如果电源和信号链没搞好软件怎么调都会觉得玄学。所以别嫌电源和地线麻烦把功夫下在前面。这套基于立创梁山派的电路方案后来我又拿去做过几台类似的移动平台改了传感器接口就能直接复用算是沉淀下来的一套可靠底子。下一个版本我打算把灰度传感器改成集成式的模拟前端再加一路电流采样的堵转保护让整车的鲁棒性再上一个台阶。
返回列表