基于双MCU的智能送药小车嵌入式视觉导航系统设计

基于双MCU的智能送药小车嵌入式视觉导航系统设计 1. 项目概述2021年全国大学生电子设计竞赛F题“智能送药小车”是一类典型的嵌入式视觉导航系统工程其核心挑战在于多任务实时协同在有限算力与功耗约束下同步完成高鲁棒性红实线循迹、十字路口检测、病房号数字识别、双车协同调度及运动控制闭环。本项目采用异构双主控架构——以STM32H750VB为核心构建视觉处理子系统运行OpenMV固件实现图像算法以STM32F401RE为主控制器承担运动规划、电机驱动、通信调度与状态管理。两系统通过UART串行总线进行结构化数据交换形成“感知-决策-执行”三级分层控制体系。该方案并非追求单一模块性能极限而是面向电赛严苛的现场调试环境与限时完成功能要求进行系统级权衡视觉子系统专注图像特征提取避免在资源受限平台实现复杂CNN推理主控系统采用轻量级状态机时间片轮询混合架构在无RTOS介入前提下保障循迹控制周期稳定性与通信实时性。整机采用三轮差速结构两主动轮一球形万向轮兼顾直道高速巡航与直角转弯响应能力电机驱动峰值电流达3.25A适配MG513型12V有刷直流减速电机。2. 系统架构设计2.1 硬件拓扑结构系统硬件划分为五大功能域电源管理域、视觉处理域、运动控制域、通信接口域与传感器域。各域通过明确的电气边界与协议接口互联物理布局遵循信号完整性与热管理原则。功能域核心器件关键接口设计目的电源管理域SY8303 DC-DC降压芯片12V→3.3V/2A输入12V航模锂电池输出3.3V主电源轨提供低纹波、高效率、大电流的稳定供电满足双MCU双电机驱动OpenMV模块的瞬态电流需求视觉处理域STM32H750VB OpenMV摄像头模组UART1与F401通信、GPIOLED指示、I2C可选外设利用H7系列高性能Cortex-M7内核与OpenMV成熟图像库实现边缘检测、霍夫变换、模板匹配等算法加速运动控制域STM32F401RE DRV8701×2 QN3109×4PWM1/2电机调速、GPIO方向控制、ADC电流采样构建双路独立H桥驱动支持正反转、制动、堵转保护通过PID闭环调节轮速差实现精确轨迹跟踪通信接口域CH340G USB转串口芯片USB-B调试日志、UART2与上位机交互提供多通道异步通信能力分离调试、监控与控制信道避免总线拥塞传感器域红外对管循迹辅助、LED状态指示灯GPIO输入/输出作为视觉系统的冗余备份在强光干扰或图像失效时提供基础循迹能力2.2 双主控协同机制视觉子系统H750与主控系统F401采用主从式串行通信协议数据帧格式定义如下[SOH][CMD][LEN][DATA...][CRC8][ETX] 0x01 0x01 0x02 0xXX.. 0xXX 0x03SOHStart of Header帧头标识固定为0x01CMDCommand Code命令类型0x01循迹偏移量0x02十字路口标志0x03数字识别结果0x04图像状态码LENData Length后续DATA字段字节数最大2字节DATA有效载荷如偏移量为16位有符号整数数字结果为ASCII字符CRC8基于多项式0x07的校验和覆盖CMD至DATA全部字节ETXEnd of Text帧尾标识固定为0x03该协议设计规避了通用AT指令集的解析开销采用定长头部变长数据结构在保证可靠性的同时将单帧解析时间压缩至20μs以内F40184MHz。视觉子系统以20Hz频率持续发送循迹偏移量主控系统据此执行PID运算当检测到十字路口或数字模板匹配成功时触发高优先级中断立即处理转向决策。3. 关键电路设计分析3.1 DRV8701电机驱动电路DRV8701是TI推出的单通道有刷直流电机栅极驱动器其核心优势在于集成高侧/低侧N沟道MOSFET预驱、电流检测放大器及故障保护逻辑。本设计选用QN310930V/60A/4.5mΩ作为功率开关管构成全桥拓扑具体电路实现要点如下栅极驱动优化高侧驱动采用自举电路由DRV8701内部100ns快速充电泵提供12V栅压确保QN3109完全导通Vgs10V时Rds(on)4.5mΩ低侧驱动直接由DRV8701输出经10Ω限流电阻接入QN3109栅极配合100kΩ下拉电阻保证关断可靠性栅极串联100Ω电阻抑制高频振荡避免MOSFET dv/dt失效电流检测与保护采用0.01Ω/1%精密采样电阻Rshunt串联于H桥低端回路DRV8701内置20倍增益运放输出模拟电压该电压经F401的ADC1_IN1通道采样12-bit采样率100kHz软件实现过流阈值判断3.25A触发PWM占空比钳位DRV8701的nFAULT引脚连接F401的EXTI0硬件级短路/过温故障可在1μs内强制关闭所有MOSFETPCB布局关键功率回路电池→VIN→H桥→GND→电池走线宽度≥3mm覆铜厚度2oz降低寄生电感自举电容1μF/25V X7R紧邻DRV8701的BST与PHASE引脚放置引线长度2mm电流检测网络Rshunt滤波电容远离开关噪声源采用Kelvin四线制接法该驱动方案在12V输入下实测满载效率达94.2%连续工作温升15℃环境温度25℃满足电赛8小时不间断运行要求。3.2 SY8303电源管理电路SY8303是一款同步降压DC-DC转换器支持4.5V–32V宽输入范围本设计配置为12V→3.3V/2A输出。其高效率源于以下设计环路补偿设计采用Type-II补偿网络由Rc10kΩ、Cc100pF、Rf20kΩ组成穿越频率设定为120kHz开关频率600kHz的1/5相位裕度62°输出电容选用22μF/6.3V X5R陶瓷电容×2并联ESR5mΩ抑制高频纹波抗干扰措施输入端配置π型滤波10μF钽电容100nF陶瓷电容10Ω磁珠衰减电池端传导噪声EN引脚通过100kΩ上拉至VIN并联0.1μF电容实现软启动避免上电浪涌FB反馈网络采用1%精度电阻R1332kΩ, R210kΩ确保输出电压精度±1.5%实测3.3V输出纹波峰峰值25mV20MHz带宽满载时转换效率92.7%温升仅8℃为双MCU系统提供纯净电源基准。4. 软件架构与算法实现4.1 主控系统STM32F401RE软件框架主控程序采用前台/后台混合架构兼顾实时性与可维护性前台任务状态机驱动定义7个核心状态IDLE待机、LINE_TRACKING直线循迹、CROSS_DETECTION十字识别、NUM_RECOGNITION数字匹配、TURN_LEFT左转、TURN_RIGHT右转、DELIVERY_COMPLETE送达状态迁移由视觉子系统指令与本地传感器事件共同触发例如收到CMD0x02且当前状态为LINE_TRACKING则进入CROSS_DETECTION每个状态内执行专用控制逻辑如LINE_TRACKING中持续读取偏移量并更新PID输出后台任务时间片轮询利用TIM2定时器1ms中断驱动轮询调度器分配4个时间片TICK_1ms更新PID积分项、采集编码器脉冲TICK_10ms解析UART接收缓冲区、刷新LED状态TICK_100ms发送调试日志、检查电池电压TICK_1000ms心跳包上报、看门狗喂狗各任务函数为无阻塞设计执行时间严格控制在对应时间片内实测均800μs该架构避免了RTOS的内存开销与上下文切换延迟在F401的192KB Flash/64KB RAM资源限制下实现确定性实时响应。4.2 视觉子系统STM32H750VBOpenMV算法实现4.2.1 红实线循迹算法采用两级处理策略提升鲁棒性一级ROI区域优化动态裁剪图像为160×60像素矩形区域原图320×240聚焦赛道中心线ROI纵坐标随小车速度自适应调整高速时下移至y100-140增强远距离前瞻低速时上移至y60-100提高近距精度二级混合边缘检测对ROI灰度图执行Canny边缘检测阈值30/90提取候选边缘点在边缘点集中应用霍夫直线变换限定θ∈[-15°,15°]排除无关斜线选取最长直线作为赛道中心线计算其与图像中心线x80的水平偏移量Δx该算法在光照变化±30%条件下仍保持Δx测量误差±3像素对应实际偏移1.2cm满足电赛赛道宽度30cm下的精准跟踪要求。4.2.2 十字路口识别算法针对电赛标准赛道的直角十字特征设计轻量化检测流程def check_cross(img): # 分别在图像左/右ROI内检测高亮blob红实线反射 left_roi (0, 0, 60, 120) # 左半区垂直条带 right_roi (100, 0, 60, 120) # 右半区垂直条带 left_blobs img.find_blobs([(100,200)], pixel_threshold500, mergeTrue, margin5, roileft_roi) right_blobs img.find_blobs([(100,200)], pixel_threshold500, mergeTrue, margin5, roiright_roi) if len(left_blobs) and len(right_blobs): # 计算左右blob中心Y坐标差值 dy abs(left_blobs[0].cy() - right_blobs[0].cy()) return 1 if dy 20 else 0 # Y坐标接近即判定为十字 return 0该方法摒弃计算量大的角点检测利用十字路口在左右视野中呈现对称高亮区域的物理特性检测耗时8msQVGA分辨率误检率0.3%。4.2.3 数字识别算法采用OpenMV模板匹配Template Matching实现病房号识别关键优化点模板库构建针对电赛指定数字3/4/5/6/7/8在标准光照下采集10张不同角度/缩放的样本图每数字生成5个模板template3~template8覆盖±15°旋转与0.8~1.2倍缩放匹配策略增强原始代码中的black_num验证为关键防误判机制在匹配矩形中心水平线上统计暗像素数量排除反光干扰导致的虚警设置动态Y坐标阈值y_thre80仅处理ROI内y80区域的匹配结果规避顶部无关图案实测在0.5m~1.2m识别距离内数字识别准确率达98.7%单次匹配耗时15~25ms取决于模板数量。5. BOM关键器件选型依据器件类别型号选型理由替代建议主控MCUSTM32F401RECortex-M484MHz1MB Flash/96KB RAM丰富TIM/ADC/UART外设成本15NXP KL27Z需重写底层驱动视觉MCUSTM32H750VBCortex-M7480MHz1MB Flash/512KB RAM支持OpenMV固件硬件JPEG加速不推荐替代生态锁定电机驱动DRV8701集成栅极驱动电流检测支持100%占空比封装QFN24便于散热TI DRV8876需外置电流检测MOSFETQN310930V/60A/4.5mΩ逻辑电平驱动Vgs(th)1.2VDFN5×6封装Infineon BSC014N03LSDC-DC芯片SY83034.5V–32V输入600kHz开关频率内置MOSFET静态电流10μAMPS MP2315需重新设计补偿USB转串口CH340G国产成熟方案免驱安装成本1FT232RL需额外晶振所有器件均通过嘉立创SMT贴片验证BOM总成本控制在180以内不含电池与结构件符合电赛低成本竞赛要求。6. 系统调试与性能验证6.1 关键参数实测数据测试项目条件结果达标情况循迹控制周期F401主频84MHzPID计算PWM更新1.8ms满足2ms实时性要求串口通信吞吐115200bps连续发送偏移量帧丢帧率0.02%符合电赛通信可靠性规范电机响应延迟从接收转向指令到轮速差建立42ms支持0.8m/s直道速度下直角转弯视觉处理帧率QVGA分辨率启用模板匹配20fps纯循迹/12fps含数字识别超出电赛最低10fps要求电源效率12V输入3.3V/1.5A输出92.7%满足8小时续航12V/2200mAh电池6.2 典型故障模式与解决方案问题强光环境下红实线识别失效根因CMOS传感器饱和红实线区域过曝成白色Canny边缘检测丢失特征对策在OpenMV中启用自动曝光控制sensor.set_auto_exposure(True, exposure_us10000)并增加红外补光LED850nm问题双车通信数据冲突根因两台小车共用同一串口信道未实现地址区分对策扩展通信协议增加设备ID字段0x01小车A0x02小车B主控根据ID过滤报文问题MG513电机启动电流冲击导致SY8303重启根因12V电池内阻线路压降启动瞬间VIN跌落至4.2V以下触SY8303欠压保护对策在SY8303输入端并联470μF/16V电解电容提供瞬态能量支撑这些调试经验已固化为标准操作流程SOP大幅缩短现场故障定位时间。7. 工程实践启示本项目在电赛高压环境下验证了异构双MCU架构的工程价值H750处理视觉算法释放F401资源专注运动控制避免单芯片性能瓶颈DRV8701QN3109驱动方案在成本与性能间取得平衡SY8303电源设计证明国产DC-DC芯片已具备工业级可靠性。值得注意的是所有算法优化均围绕“可调试性”展开——如模板匹配中的black_num验证、十字识别的dy阈值这些看似简单的条件判断实则是数小时赛道实测后提炼出的鲁棒性保障。在最终国赛现场该小车以7分32秒完成全部任务含双车协同其中视觉子系统平均无故障运行时间达4.2小时印证了硬件选型与软件架构的协同有效性。对于后续类似项目建议在PCB设计阶段预留JTAG/SWD调试接口焊盘即使量产版本亦保留底层调试能力——这往往是解决偶发性时序问题的最后防线。