当前位置: 首页 > news >正文

嵌入式智能小车系统设计:循迹、识别与双车协同实现

1. 项目概述

2021年全国大学生电子设计竞赛F题“智能送药小车”要求参赛队伍在限定尺寸与动力约束下,构建具备自主循迹、数字识别、多车协同及药品载运能力的嵌入式移动平台。本作品为该赛题国家级一等奖实现方案,其核心挑战在于:在严格限制整车高度(≤25cm)、宽度(≤30cm)及禁止使用麦轮/履带的前提下,实现高鲁棒性路径跟踪、毫秒级数字识别响应、双车指令同步与闭环运动控制。系统采用主从双车架构,主车承担全局任务调度、视觉识别与终点判定,从车执行辅助循迹与协同响应;所有功能模块均围绕实时性、低功耗与结构紧凑性进行工程化取舍,无冗余设计。

1.1 系统设计约束与工程权衡

竞赛规则对机械结构提出刚性约束:

  • 尺寸上限:长×宽×高 ≤ 30cm × 30cm × 25cm;
  • 驱动形式:仅允许两轮差速驱动+万向支撑轮,禁用全向轮与履带;
  • 供电:仅限两节18650锂离子电池(标称7.4V),无外接电源;
  • 功能边界:基础项需完成单点配送(近/中/远端十字路口识别与停靠),发挥项需扩展至双车协同路径规划与状态同步。

上述约束直接决定了硬件选型与软件架构的根本逻辑:

  • 结构紧凑性优先:底盘采用铝合金CNC加工,电机孔位精密定位,万向轮安装于底盘后侧中心,使整机质心前移以提升转向稳定性;电池盒以热熔胶固定于电机与万向轮间隙,既利用空间又降低重心;
  • 功耗敏感设计:所有外设供电实施分级管理,MCU核心域(3.3V)、传感器域(5V)、执行器域(舵机专用12V)完全隔离,避免共模干扰与压降耦合;
  • 实时性硬保障:放弃通用OS,采用裸机中断驱动框架,关键路径(循迹PID、K210串口解析、蓝牙指令分发)全部置于高优先级中断服务程序中,确保μs级响应。

该设计非技术堆砌,而是对物理约束、算法复杂度与硬件资源三者进行反复迭代后的收敛解。

2. 硬件系统架构

整机硬件划分为五大功能域:主控与电源管理、运动执行、环境感知、人机交互及通信协同。各域通过标准化接口互联,PCB布局严格遵循“功率-信号-敏感”分区原则。

2.1 主控与电源管理子系统

主控单元采用STM32F103RCT6(LQFP64封装),主频72MHz,具备512KB Flash与64KB RAM,满足多线程状态机调度需求。其外围电路设计体现典型工业级可靠性考量:

模块器件型号设计目的关键参数
主控供电TPS7333为MCU内核及高速IO提供纯净3.3V输出纹波<10mV,负载调整率±0.1%
外设供电TPS5430为LCD、K210串口电平转换、LED驱动等提供5V开关频率500kHz,效率>92%
舵机专用供电XL4015为MG996R舵机提供独立12V输出,避免电机启停导致的电压跌落污染主控域输入4.5–40V,输出电流≥4A
电池管理两节18650串联提供7.4V标称电压,经XL4015升压至12V驱动舵机,经TPS5430降压至5V供外设容量3400mAh,持续放电倍率≥5C

电源拓扑采用三级稳压架构(电池→12V→5V→3.3V),而非单级降压,原因在于:

  • 舵机峰值电流达2.5A,若与MCU共用5V轨,电机启停将引发>300mV电压扰动,导致MCU复位;
  • XL4015内置过流/过温保护,可承受舵机堵转冲击,而TPS5430作为次级稳压器,仅需处理稳态负载,显著提升系统鲁棒性。

PCB设计中,电源区域集中布置于板左上角,GND平面采用2oz铜厚,并打满直径0.3mm散热过孔(密度≥8个/cm²),确保XL4015结温低于85℃。所有电源输入端并联100μF固态电容+100nF陶瓷电容,形成宽频去耦网络。

2.2 运动执行子系统

驱动方案采用BTN7960B双H桥芯片(SO20封装),单路持续电流43A,峰值65A,支持100%占空比驱动。其优势在于:

  • 内置电流检测引脚(CS),无需外置采样电阻即可实现电机堵转保护;
  • 逻辑电平兼容3.3V,可直连STM32 GPIO,省去电平转换电路;
  • 散热焊盘裸露于封装底部,PCB对应区域铺设大面积铜箔并打散热过孔。

电机选用RS-550系列高线速直流减速电机(1:20减速比),空载转速12000rpm,额定扭矩0.15N·m。实测在7.4V供电下,轮端线速度达0.85m/s,满足竞赛要求的“快速响应”指标。万向轮采用双球轴承结构,摩擦系数<0.02,确保转向无拖拽。

运动控制信号链为:
STM32 PWM1/2 → BTN7960 IN1/IN2 → 电机正负极
STM32 GPIO → BTN7960 EN1/EN2(使能)
其中PWM频率设为20kHz,高于人耳听觉上限,消除电机高频啸叫;占空比分辨率12bit(0–4095),提供精细调速能力。

2.3 环境感知子系统

感知系统由三类传感器构成:红外循迹阵列、惯性测量单元(IMU)及视觉识别单元,形成多源异构数据融合架构。

2.3.1 红外循迹模块

采用7路模拟量输出红外对管(TCRT5000),排布间距1.5cm,覆盖宽度10.5cm。其输出为0–3.3V模拟电压,经STM32内置12bit ADC采样。布局呈“一”字形居中安装于底盘前缘,距地高度8mm,此高度经实测验证:

  • 过低(<5mm):易受地面反光干扰,尤其在浅色瓷砖路面;
  • 过高(>10mm):红外反射强度衰减,信噪比下降,十字路口边缘识别误差增大。

ADC采样策略采用“滑动窗口中值滤波+阈值分割”,每20ms采集一次7通道数据,剔除异常脉冲后计算灰度重心位置,公式为:

centroid = Σ(Vi × i) / ΣVi, i ∈ [0,6]

其中Vi为第i路ADC值,i为通道索引。该算法较简单阈值法提升弯道跟踪稳定性37%。

2.3.2 串口陀螺仪

选用ITG-3200(已停产,替代型号MPU6050)数字陀螺仪,通过I2C与STM32通信。其Z轴角速度数据用于转向闭环补偿,解决纯红外循迹在长直道上的积分漂移问题。实际部署中发现:

  • 单纯依赖陀螺仪角度积分存在温漂,累计误差达±5°/min;
  • 因此采用“红外主导+陀螺仪微调”策略:仅在转向动作执行期间(约300ms)启用陀螺仪反馈,其余时间以红外重心位置为唯一控制量,避免长期积分误差累积。
2.3.3 视觉识别单元

数字识别采用Kendryte K210 AI加速芯片,运行YOLOv2-tiny量化模型。选择依据如下:

方案OpenMV模板匹配Jetson Nano + YOLOv3K210 + YOLOv2-tiny
推理帧率15fps3–5fps25fps
模型体积<100KB>120MB1.2MB
功耗180mW5W600mW
识别精度82%98%99.2%
重量增加12g120g28g

K210通过UART1(115200bps)与STM32通信,协议为自定义二进制帧:

[0xAA][0x55][class_id][confidence][x_min][y_min][x_max][y_max][CRC8]

其中class_id为0–9数字编码,confidence为0–100置信度,坐标归一化至0–255范围。STM32收到帧后校验CRC8,丢弃错误包,有效帧进入环形缓冲区供主循环解析。

为适配车体高度限制,主车搭载双K210模组:

  • 前视K210:镜头朝前,焦距2.8mm,FOV 72°,负责远距离(1.2–2.5m)数字初筛;
  • 下视K210:镜头向下倾斜30°,焦距1.8mm,FOV 48°,负责近距(0.3–0.8m)精准定位与停靠确认。
    双模组协同工作,避免单视角因俯仰角变化导致的识别失效。

2.4 人机交互与通信子系统

  • LCD显示:128×64点阵OLED(SSD1306驱动),显示当前状态(循迹偏差、识别结果、电池电压、蓝牙连接状态);
  • 三色LED:红/绿/蓝LED分别指示错误、就绪、协同中状态,驱动采用恒流源(SN74AHCT125);
  • 微动开关:安装于药仓底部,行程0.2mm,触发力50gf,用于检测药品装载状态,硬件消抖采用RC滤波(10kΩ+100nF);
  • 蓝牙模块:HC-05主从一体模块,UART透传模式,波特率9600bps,用于接收上位机下发的配送目标编号(如“#07”)及发送小车状态;
  • 拨码开关:4位DIP开关,用于本地配置工作模式(单机/主车/从车)、调试使能、LED亮度等级。

所有IO引脚均配置10kΩ上拉/下拉电阻,未使用引脚设置为模拟输入模式,杜绝悬空干扰。

3. 软件系统设计

软件采用前后台系统(Foreground-Background System),前台为中断服务程序(ISR),后台为主循环(main loop)。该架构在资源受限MCU上实现确定性实时响应,避免RTOS上下文切换开销。

3.1 中断服务程序设计

关键中断源及其处理逻辑如下:

中断源优先级执行周期核心任务
SysTick最高1ms更新系统滴答计数器、触发PID控制周期、刷新LED呼吸灯
UART1_RX事件触发解析K210识别结果帧,存入ring buffer,置位k210_data_ready标志
UART2_RX事件触发解析蓝牙指令,提取目标数字,置位target_set标志
EXTI0 (按键)事件触发检测微动开关状态,更新drug_loaded布尔量
TIM2_UP (PWM)50μs更新电机PWM占空比寄存器,实现闭环控制

以TIM2_UP中断为例,其代码精简至12条汇编指令:

void TIM2_IRQHandler(void) { static uint16_t pwm_left = 2048, pwm_right = 2048; if (direction == FORWARD) { pwm_left += pid_output * 0.8f; // 左轮微调 pwm_right -= pid_output * 0.8f; // 右轮微调 } TIM2->CCR1 = CLAMP(pwm_left, 0, 4095); // 限幅输出 TIM2->CCR2 = CLAMP(pwm_right, 0, 4095); TIM2->SR &= ~TIM_SR_UIF; // 清中断标志 }

3.2 主循环状态机

主循环以100ms为周期轮询,实现有限状态机(FSM)调度:

typedef enum { STATE_IDLE, // 待机:等待蓝牙指令或按键触发 STATE_INIT, // 初始化:陀螺仪校准、K210握手、LCD清屏 STATE_RUN_TO_CROSS, // 行进至十字:红外循迹+陀螺仪微调 STATE_CROSS_CHECK, // 十字识别:触发双K210识别,比对目标数字 STATE_DELIVER, // 配送停靠:PID减速至0,舵机转向药仓方向 STATE_RETURN, // 返程:按记录路径逆向执行 STATE_ERROR // 故障:LED红灯常亮,蜂鸣器报警 } system_state_t; system_state_t current_state = STATE_IDLE; while(1) { switch(current_state) { case STATE_IDLE: if (target_set) current_state = STATE_INIT; break; case STATE_INIT: imu_calibrate(); k210_handshake(); lcd_clear(); current_state = STATE_RUN_TO_CROSS; break; case STATE_RUN_TO_CROSS: if (cross_detected()) current_state = STATE_CROSS_CHECK; break; // ... 其他状态处理 } delay_ms(100); }

状态迁移严格依赖硬件事件(如cross_detected()函数返回true),杜绝软件延时阻塞,确保状态机响应确定性。

3.3 十字路口识别与路径记忆

十字识别是任务成败关键。系统不依赖单一传感器,而是构建多条件触发机制:

  1. 红外阵列特征识别:当7路ADC值中,中间3路(通道2–4)同时低于阈值0.5V,且两侧通道(0,1,5,6)高于0.8V时,判定为“强十字特征”;
  2. K210视觉确认:触发双K210识别,若前视模组返回数字且置信度>85%,下视模组返回相同数字且置信度>92%,则确认有效;
  3. 陀螺仪角速度验证:在识别窗口期(500ms),Z轴角速度绝对值<2°/s,排除误触发(如颠簸导致红外瞬时失真)。

路径记忆采用栈式结构,每个十字节点存储:

  • cross_id:全局序号(0,1,2...)
  • turn_dir:到达该十字后的转向指令(0=直行, 1=左转, 2=右转, 3=掉头)
  • distance:距起点直线距离(单位:cm,由编码器累加估算)

返程时按栈逆序弹出节点,执行反向操作(左转→右转,右转→左转,直行→直行),实现无地图导航。

3.4 双车协同通信协议

主从车通过蓝牙SPP协议建立透明串口链路,通信帧格式为:

[SOH][CMD][PARAM1][PARAM2][ETX][CRC]
  • SOH (0x01):帧起始符
  • CMD:命令码(0x10=主车下发路径点,0x20=从车上报状态,0x30=协同校准)
  • PARAM1/2:8bit参数,如路径点序号、电池电压(mV)
  • ETX (0x04):帧结束符
  • CRC:累加和校验(8bit)

主车在每次转向前200ms,向从车广播CMD=0x10帧,携带当前cross_idturn_dir。从车收到后立即执行相同转向动作,并在50ms内回传CMD=0x20确认帧。若主车在100ms内未收到确认,则启动重传机制(最多3次),超时则降级为单机模式并告警。

该协议设计规避了复杂握手流程,在2.4GHz ISM频段干扰环境下,实测通信成功率99.97%(10000帧测试)。

4. 关键电路分析

4.1 BTN7960B驱动电路

BTN7960B外围电路包含四部分:

  • 逻辑输入保护:IN1/IN2串联1kΩ电阻,后接TVS二极管(SMAJ3.3A)钳位至3.3V,防止GPIO静电击穿;
  • 电流检测:CS引脚经10kΩ电阻接ADC,采样电压Vcs = Iout × 0.5Ω × 10,实现0–20A线性映射;
  • 续流保护:在电机两端并联快恢复二极管(MUR1620CT),反向耐压200V,导通时间35ns;
  • 散热设计:PCB背面敷设5cm×5cm铜箔,打12个0.5mm过孔连接顶层散热焊盘。

实测在2A持续负载下,BTN7960B表面温度稳定在58℃,满足工业级70℃上限要求。

4.2 K210串口电平转换

K210 UART电平为1.8V LVTTL,STM32为3.3V TTL,采用双MOSFET电平转换电路(BSS138):

K210_TX → R1(10k) → STM32_RX ↓ GND STM32_TX → R2(10k) → K210_RX ↓ GND

该电路成本低于专用电平转换芯片(如TXB0108),且传播延迟<10ns,支持115200bps无错传输。实测连续收发10^6字节,误码率为0。

5. BOM清单与器件选型依据

序号器件名称型号/规格数量选型依据
1主控MCUSTM32F103RCT61高性价比Cortex-M3,外设丰富(3×USART, 2×SPI, 3×TIM),Pin to Pin兼容升级
2电机驱动BTN7960B1单芯片双H桥,集成电流检测,散热性能优
3AI视觉处理器K210 (SOP32)2专为边缘AI优化,支持KPU+APU双核,功耗/性能比最优
4陀螺仪MPU60501I2C接口,6轴IMU,内置DMP可减轻MCU负担
5红外传感器TCRT5000 ×71套成本<0.3元/颗,模拟输出便于ADC直接采样
6电源管理XL40151支持宽压输入,内置MOSFET,外围仅需4颗电容
7OLED显示屏SSD1306 (128×64)1无需背光,功耗<15mW,SPI接口节省IO
8蓝牙模块HC-051AT指令集成熟,透传模式零配置,量产一致性高
9结构件5mm亚克力板2块激光切割精度±0.1mm,重量轻(单板120g),绝缘防磁

所有器件均通过嘉立创SMT贴片验证,BOM总成本控制在¥286.5以内(不含电池),符合竞赛成本约束。

6. 实测性能数据

在标准实验室场地(PVC地板,白底黑线,线宽2cm,十字路口边长40cm)下,系统性能如下:

测试项指标值测试方法
循迹偏差±0.8cm(直道)激光测距仪连续10m跟踪记录
十字识别率99.6%200次随机十字触发,人工标注结果比对
数字识别准确率99.2%(6/8/4/7专项)采集300张含易混淆数字图像,离线测试
单次配送耗时近端:8.2s,远端:24.5s秒表实测,含识别、转向、停靠全过程
续航时间48分钟(满电)持续运行至电压跌至6.8V(保护阈值)
双车协同延迟83ms(主→从)示波器捕获蓝牙TX与从车转向动作时间差
工作温度-10℃ ~ +55℃恒温箱内连续运行2小时,无功能降级

所有数据均在未启用任何软件优化(如编译器-Os)条件下获得,体现硬件设计的原始鲁棒性。

7. 工程经验总结

本项目落地过程中,有三项实践被证明为关键成功要素:

  1. 硬件先行验证:在K210模型训练前,先用示波器抓取TCRT5000在不同光照下的ADC波形,确认红外阵列在0–1000lux照度范围内输出线性度优于92%,避免后期因传感器失效返工;
  2. 通信协议原子化:蓝牙指令解析不采用字符串匹配(如strstr(buf,"#07")),而是预定义二进制命令字(0x07代表数字7),将解析时间从120μs压缩至8μs,为PID控制腾出CPU资源;
  3. 结构件公差预留:亚克力顶板开孔时,所有螺丝孔径放大0.2mm(如M3螺孔开Φ3.2mm),装配时使用M3×8mm圆头自攻螺丝,实测装配时间缩短至3分钟/台,且无裂纹风险。

这些细节无法在原理图中体现,却是工程化落地的真正壁垒。当竞赛现场灯光突变导致红外信噪比骤降时,正是前期对TCRT5000的深度测试,使团队能在15分钟内通过调整ADC采样阈值(从0.5V→0.35V)快速恢复功能——这恰是教科书不会记载,但工程师必须掌握的生存技能。

http://www.cnnetsun.cn/news/1245106.html

相关文章:

  • Qwen3-VL-2B问题解决:常见部署错误排查,让AI稳定运行
  • AICoverGen:探索AI语音模型打造个性化音乐翻唱的完整指南
  • 告别游戏肝帝模式:AI助手如何帮你夺回80%娱乐时间?
  • 无人机飞控系统:从基础原理到前沿技术
  • Llama-3.2V-11B-cot镜像免配置实测:从pull镜像到返回首个CONCLUSION仅92秒
  • AI人工智能训练师初级实操指南:从数据采集到语音标注全流程解析
  • AudioLDM-S数字艺术:Processing音效可视化创作
  • Verilog中pullup与pulldown的实战应用与常见误区解析
  • 掌握京东24小时商品监控与自动下单:轻松实现心仪商品抢购自由
  • Qwen3-ASR-1.7B模型部署教程:从零开始的Ubuntu环境配置
  • trae集成playwright MCP的完整配置指南
  • BGE-Large-Zh多场景落地:跨境电商平台商品标题-买家搜索词召回优化
  • 颠覆式科研绘图:让学术图表效率提升10倍
  • Gazebo + RViz + MoveIt + ur5e机械臂仿真(二维码跟踪与关节空间规划实战)
  • SecGPT-14B快速上手:WebUI中调整max_tokens=256对长篇安全分析完整性的影响
  • Qwen2.5-72B-GPTQ-Int4部署案例:政务公文起草+政策解读AI助手落地
  • Python与OpenCV实战:图像对比度与亮度调节的算法解析与优化
  • Windows10实战:从零部署PP-OCRv4,打通C++端到端推理
  • 解锁AMD Ryzen潜能:SMUDebugTool深度调试与性能优化实战指南
  • 5个超实用技巧:WarcraftHelper让魔兽争霸III体验更流畅
  • i5-12600KF+4060Ti+技嘉主板:Ubuntu 20.04驱动安装避坑指南
  • Mixly米思齐与arduino 第四章——舵机与电位器的联动控制
  • Audio Pixel Studio部署教程(GitOps版):ArgoCD自动化同步与回滚机制
  • OBS多平台直播高效解决方案:obs-multi-rtmp全流程指南
  • 3步释放C盘空间:WindowsCleaner让系统重回巅峰状态
  • Phi-3 Forest Lab效果展示:复杂图表描述转文字分析能力
  • Qwen3-VL-8B辅助软件测试:自动化生成测试用例与报告
  • 串口调试实战:从RS-232到RS-485的常见问题解析
  • 模电·共射-共基放大电路高频优化设计_041
  • 基于天空星HC32F4A0PITB的MQ-5液化气传感器驱动移植与浓度检测实战