ARTICLE DETAIL

资讯详情

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

基于MSP430的电子设计竞赛小车跟随系统设计与控制解析

基于MSP430的电子设计竞赛小车跟随系统设计与控制解析 简介2022年江苏省电子设计竞赛C题一等奖作品以MSP432为主控面向电子设计竞赛参赛者与嵌入式视觉开发者提供完整的小车寻迹与视觉导航方案可直接用于课程设计、毕业设计或竞赛备赛参考。包内共1026个文件压缩包大小18.45MB以642个C源码和172个头文件为主体同时包含工程配置文件、库文件、汇编脚本与Python辅助脚本目录结构完整便于直接导入开发环境阅读。硬件上主车选用OpenMV完成寻迹、停止线识别与障碍物测距替代传统超声波和光电传感器从车协同完成视觉任务软件上覆盖MSP432外设驱动、FreeRTOS任务调度、串口通信协议、电源管理及图像处理算法优化等关键知识点。已有3076人学习下载适合需要参考完整赛题工程、快速上手MSP432与OpenMV开发或准备电子设计竞赛的读者可从中获得模块化代码、封装库和软硬联调经验。 2022年7月底电子设计竞赛正式开赛我们三个人在实验室里熬了四天三夜最终拿下了C题“小车跟随行驶系统”的江苏省赛区一等奖。这块奖牌的主控用的就是MSP430整套系统从OpenMV视觉识别、PID差速控制到PCB板卡都是我们自己画板和调通的。比赛结束后我复盘了很久发现真正让我们走到最后的关键因素并不是某一个高深算法而是一些看起来平平无奇的东西——比如一套经过验证的MSP430封装库。很多队伍在四天三夜里光画板子、找封装就浪费了大半天有的甚至打样回来发现封装不匹配被迫临时改成飞线。这篇文章我想把C题的拆解思路、硬件设计、软件控制逻辑以及封装库整理方法完整写出来给以后参加电赛的朋友做一个参考。1. 赛题拆解C题到底在考什么1.1 题目任务与隐藏难点2022年C题“小车跟随行驶系统”要求做一个主-从两车系统。主车由队员控制从车必须自主识别主车位置并自动跟随。基础要求包括直线跟随、主车中途停车时从车同步停车并再次启动、弯道跟随发挥部分则要把路线升级成S弯、8字绕行甚至要求主车倒车时从车也能正确跟随。从表面看这题只需要测距加控速但真正做起来会发现三个难点。第一跟随距离要稳。题目对跟随距离有明确范围要求从车不能贴太近也不能掉太远纯靠人为标定很难保持全场稳定必须有闭环控制。第二目标识别要可靠。主车在移动过程中从车上的传感器必须持续锁定主车光线、角度、速度变化都会影响识别。第三启停和弯道考验逻辑设计。主车停车从车要跟着停主车启动从车要跟着启动弯道上主车转向从车如果调整不及时很容易跑偏。这些难点叠加起来就是一道典型的“感知决策执行”系统题。第一天方案怎么定基本决定了后面三天的顺畅程度。1.2 为什么主控选了MSP430关于主控芯片的选择赛前我们组里真吵过一架。有人想用STM32理由是性能更强、例程多。但最后我们统一决定用MSP430原因很朴素这个芯片我们最熟。MSP430F5529是TI的16位低功耗单片机主频25MHzFlash 128KBSRAM 8KB。它的CPU在性能上确实不如Cortex-M系列但用于小车控制完全够用。真正打动我们的是三点中断响应很稳定适合在定时中断里跑PID计算。定时器资源灵活多路PWM输出和编码器捕获可以同时工作。低功耗特性在电池供电场景下优势明显整场比赛下来不用担心额外发热和掉电。更重要的是备赛阶段我们已经用MSP430写过大量外设代码串口收发、PWM调速、编码器读取闭着眼都能写。电赛比的是系统稳定性和调参速度不是谁的芯片纸面性能更强。用自己最熟的主控就是在四天三夜里给自己上保险。1.3 感知方案怎么选视觉为主从车要“看”到主车常见方案有这几种。方案成本识别稳定性实现难度是否推荐多路红外测距低差无法判断横向位置中不推荐单目摄像头OpenMV中较好受环境光影响中推荐激光雷达高优高视预算而定摄像头超声波测距中高优中高可作加强方案我们最终选的是OpenMV摄像头。OpenMV可以直接运行Python视觉算法识别色块、AprilTag都很方便通过UART和MSP430通信数据格式可控。主车尾部贴一个高对比度靶标从车上的OpenMV就能实时给出靶标在画面中的坐标和宽度MSP430拿这些数据做跟随控制就够了。方案定下来后系统结构非常清晰感知层靠OpenMV控制层用MSP430执行层是TB6612驱动直流减速电机。三个层级各司其职调试时也能分开验证翻车概率大大降低。2. 硬件设计与MSP430封装库2.1 MSP430外设资源分配我们用的是MSP430F5529LQFP80封装。80个引脚看着多但很多引脚是复用的需要提前规划。我的分配方案是TA0.0、TA0.1左右电机PWM输出TA1.0、TA1.1编码器脉冲捕获UART0连接OpenMV波特率115200P1.x、P2.x电机方向控制、LED指示灯这里有个容易被忽略的细节MSP430F5529的引脚复用需要配置PxSEL寄存器如果漏配PWM和UART就不会工作。我早期有一次UART接上了但没设PxSEL浪费了半天查问题。所以画原理图和写代码前我习惯先在手册里查一遍引脚复用表把需要用到的引脚和复用功能列成一张表再开始布局这样可以避免后面改板子。2.2 电机驱动与电源树设计电机驱动选用TB6612FNG比L298N体积小很多压降也小适合小车这种电压有限的场景。接线时注意STBY引脚必须拉高否则电机不转AIN1/AIN2、BIN1/BIN2控制正反转PWM引脚接收MSP430的调速信号。电源方面我用一块7.4V两节锂电池直接接TB6612的VM引脚给电机供电。MSP430和OpenMV分别用稳压模块供电。我踩过的一个坑是电机启动瞬间电流很大如果控制芯片和电机共用同一路电源很容易把MSP430拉复位。解决办法是在电机电源端并联一个大容量电解电容我用的是470uF同时把MSP430的供电独立到一路稳压输出。比赛现场如果看到MSP430无故重启八成是电源问题而不是程序问题。2.3 MSP430封装库赛前必须攒好的硬资产这是我最想强调的部分。电赛只有四天三夜硬件设计和PCB画板往往只给你半天到一天时间。如果不提前准备好封装库现场从零画一个LQFP80的芯片封装先查手册、再一个个对引脚间距半天就没了。更惨的是画出来后打样回来才发现焊盘尺寸不对芯片焊不上去那是整个比赛里最让人崩溃的时刻。我那套MSP430封装库是在备赛阶段慢慢攒起来的主要包含这几个型号MSP430F5529LQFP80MSP430F149LQFP64MSP430G2553TSSOP20/PDIP20MSP430FR2433VQFN32整理一套靠谱封装库我建议按下面的步骤来。找到芯片手册里的Mechanical Data页把封装体尺寸、引脚间距、引脚宽度都记下来优先参考官方给出的Land Pattern数据。在EDA工具里用封装向导生成基础封装再根据自己习惯调整丝印比如把1脚位置画一个明显的圆点或斜角方便焊接时对方向。用3D预览检查封装与芯片模型的匹配度重点看引脚形状和丝印方向。打样回来后拿真芯片试焊一块测试板确认每个引脚都能良好接触再把这个封装标记为“验证可用”。没有经过实际打样验证的封装都不算真正可靠。因为在EDA里看3D模型很完美实际焊接时可能因为焊盘太短或引脚间距偏差导致虚焊。我们队里有一位队员就是因为太信任网上下载的封装结果打样回来芯片引脚对不上整块板子报废白白浪费一晚上。2.4 画板与焊接心得PCB打样我用的2层板。MSP430F5529虽然引脚密但大部分走线可以放在顶层底层铺铜做地。四天三夜的时间不允许我们在PCB工艺上折腾2层板打样周期短、成本低完全够用。焊接LQFP80这种贴片封装我的方法是先固定对角然后堆锡拖焊最后用助焊剂清理引脚间的短路。焊完第一件事就是拿万用表量电源和地之间的阻值如果有短路先不要上电用放大镜逐脚排查。还有一个小技巧封装库里的排针、电容电阻封装尽量统一用自己习惯的那一套不要今天用这个人的库明天用那个人的库。统一封装风格会减少画板时的低级错误而且出图前用EDA的DRC检查跑一遍能提前发现不少问题。3. 软件控制让从车“看见”并跟上3.1 软件框架状态机加定时器中断MSP430端的软件不算复杂但我们一开始就用状态机来组织逻辑后续调试特别顺利。状态机一共四个状态INIT上电初始化外设等待按键启动SEARCHOpenMV没有找到主车靶标从车原地等待FOLLOW正常跟随模式STOP主车停车从车停车等待状态切换规则是开机进入INIT按下启动键进入SEARCH。若OpenMV连续10帧找到靶标进入FOLLOW。若连续20帧没有找到靶标则判定主车停车或目标丢失进入STOP。主车重新启动并被识别后从车再回到FOLLOW。20帧这个阈值是实测调出来的。如果太小OpenMV偶尔丢一帧就会让从车急刹如果太大主车停了半天从车还在往前拱。控制循环放在定时器中断里周期20ms每次中断执行一次PID计算并更新PWM占空比。主循环则负责按键扫描、串口数据读取和LED状态指示。这样即使主循环被一些延迟函数阻塞高速PID控制也不会断。3.2 OpenMV识别LAB色块与串口协议OpenMV端的任务很单纯找到主车尾部靶标返回坐标和宽度。我们用find_blobs识别一块纯色靶标靶标是A4纸打印的荧光绿色矩形贴在主车后部。图像尺寸设置为320x240帧率约30fps每帧执行一次目标识别输出两个关键量cx靶标中心的x坐标w靶标的像素宽度有了这两个量MSP430就能推算主车的横向位置和大致距离。距离和像素宽度成反比所以实际距离约等于一个标定系数除以w。赛前用卷尺在几个固定距离做了标定得到系数K然后在PID距离环里用这个值。OpenMV和MSP430之间通过UART发送固定帧0xAA 0x55 x_high x_low w_high w_low checksum其中checksum是前面几个字节的和校验。MSP430端串口接收用中断收到一帧后放进环形缓冲区主循环再解析。注意OpenMV和MSP430必须共地否则串口电平不稳定数据会丢。我第一版只接了两根线结果串口乱码严重后来加上GND立刻就好了。3.3 PID控制与差速转向从车的控制本质上分两路。距离环控制基础速度v_base目标是让从车与主车保持设定距离用PI控制。横向偏差控制左右轮的差速量delta_v目标是让靶标始终处于画面中心用PD控制。速度分配为v_left v_base - delta_v v_right v_base delta_v转向不用I项的原因是电机和机械结构本身存在死区积分容易积累之后导致来回振荡。PD控制响应快又没有稳态误差要求在弯道跟随时表现更好。PID参数我这样调先单独调转向PD把从车固定在原地手持靶标左右移动观察两个电机差速是否平滑再调距离环PI让主车慢速直线行驶从车稳定跟随且不冲过头。整个调参过程最好在比赛场地、或类似光照条件下的场地进行不然参数到现场会变。3.4 启停逻辑的细节自动启停看起来就是丢目标就停车、找到目标就启动实际操作时有很多细节。OpenMV在快速转弯时靶标可能因为角度问题偶尔丢失如果立刻停车从车就会频繁顿挫。我的处理是连续丢帧才判定为停车并且恢复跟随前要求靶标宽度超过某个阈值也就是主车不能离得太远就冲过去。另外从车启动时速度要从零缓慢爬升否则突然给一个大PWM会原地打滑。我在代码里加了一段启动斜坡让PWM在一秒内从0线性增加到目标值。这个小改动对稳定性影响非常大强烈建议大家也这么做。4. 实测调试与高频问题排查4.1 场地实测流程比赛前我把调试过程固定在五个阶段。静态图像测试人拿着靶标在不同距离、不同角度移动看OpenMV输出数据是否稳定。直线跟随主车低速直行调距离环参数。弯道跟随先大半径弯后小半径弯调转向PD。启停测试主车多次启停观察从车的启停延迟和距离变化。综合路线S弯、8字绕行按发挥部分的要求模拟。每个阶段都记录现象和修改的参数方便回退。这样到比赛现场即使状态不对也能快速判断是哪个环节出了问题。4.2 高频问题速查下面这些问题是我们在调试中真实遇到过的整理成表供参考。问题现象主要原因解决方案跟随距离忽远忽近从车前后窜动距离环P过大或I过大降低P适当加D弯道跟不住从车冲出赛道差速量不足提高转向P降低基础速度上限目标丢失从车频繁停走光线变化/反光换LAB阈值加滞回逻辑电机抖动电机异响PWM频率过低PWM频率提到10kHz以上MSP430复位系统重启电机浪涌拉低电压加大电容独立稳压串口丢帧从车反应卡顿没共地/帧校验缺失共地并加帧头校验4.3 比赛现场的时间分配与备份四天三夜我大致这样分配第一天定方案、搭机械和电气平台第二天OpenMV识别和MSP430通信跑通直线跟随第三天搞弯道、启停和综合测试第四天稳定参数、整理文件和准备答辩。这样安排的好处是最后一天留有半天缓冲来处理突发问题而不是把所有事情压到最后。备份方面我坚持把源码放到两个U盘和一份网盘多备份不会吃亏。板子也准备了第二块以防现场烧芯片。电池至少两块以上比赛现场的电力情况不可控。电机突然不转时先用万用表量驱动板电源和方向引脚再看STBY有没有被拉高而不是一上来就怀疑代码这个排查顺序能省很多时间。最后再说一点个人体会。电赛比的并不是谁现场更聪明而是谁赛前积累得更扎实。一套经过验证的MSP430封装库看起来只是画板时的一个工具背后却是你曾经踩过的封装坑、验证过的板卡稳定性。这些东西在四天三夜的冲刺里会真真切切地帮你节省时间、降低风险。如果你也在备战电赛请一定尽早把你主控芯片的封装库、外设例程这类基础资产整理好。等题目出来的那一刻才动手时间是真的不够用。本文还有配套的精品资源点击获取
返回列表