智能送药小车嵌入式系统设计:STM32+K210协同控制实践
1. 项目概述2021年全国大学生电子设计竞赛F题“智能送药小车”是一套面向实际应用场景的嵌入式运动控制系统。该系统需在限定赛道内自主循迹行驶识别沿途病房门牌数字并准确停靠至指定编号位置同时具备载药状态检测、灯光警示、多车通信扩展等工程化功能。项目最终获得全国一等奖其技术实现路径体现了嵌入式系统在实时性、鲁棒性与算法协同方面的典型设计权衡。本系统采用双主控架构STM32F407ZGT6作为运动控制核心负责底层电机驱动、编码器反馈、灰度循迹、状态管理及人机交互Kendryte K210作为视觉处理单元承担数字目标检测任务。两芯片通过UART串口进行结构化数据通信形成“感知-决策-执行”的分层控制链路。硬件平台基于两节18650串联供电标称7.4V经DC-DC降压后为不同负载提供8V电机驱动、5V逻辑模块和3.3VMCU及传感器三档稳定电压。整机PCB采用模块化布局集成键盘输入、TFT液晶显示、LED指示、电机接口、串口调试及红外载药检测等功能具备完整的工程闭环验证能力。2. 硬件系统设计2.1 电源管理电路系统采用双路LM2596S-ADJ可调降压稳压方案构成分级供电网络。该芯片具备4.5–40V宽输入范围、3A持续输出能力及±2%输出精度适用于锂电池电压波动较大的移动场景。第一路配置为8V输出专供TB6612FNG电机驱动芯片。该电压值兼顾电机扭矩输出与驱动芯片耐压裕量TB6612FNG最高工作电压13.5V避免因电池满电8.4V时输入过压导致驱动芯片异常。输出端配置100μF电解电容与0.1μF陶瓷电容并联抑制开关噪声对电机电流采样的干扰。第二路配置为5V输出供给STM32主控板、灰度传感器阵列、K210视觉模块、蓝牙通信接口及TFT显示屏等数字电路。此路输出经AMS1117-3.3低压差线性稳压器二次降压生成3.3V电源供STM32F407及外围I/O设备使用。AMS1117的低噪声特性有效保障了ADC采样精度灰度传感器信号为模拟电压及UART通信稳定性。电源路径中未设置电池电量监测电路但通过软件定期读取ADC通道采集的电池分压值经电阻网络衰减至3.3V以内实现粗略电量估算与低电量告警。2.2 电机驱动与运动执行单元驱动电路以TB6612FNG双H桥芯片为核心支持最大1.2A持续电流峰值3.2A及0–12V工作电压。该芯片集成过热保护、欠压锁定及故障诊断输出较L298N等传统驱动芯片具备更高效率典型导通电阻0.35Ω与更低发热。每路电机独立配置PWM输入由STM32F407的TIM1_CH1/TIM1_CH2输出互补PWM波经死区控制确保上下桥臂不直通方向控制IN1/IN2引脚接收GPIO电平决定电机正反转电流采样在电机回路中串联0.1Ω/1%精密采样电阻信号经运放放大后接入STM32 ADC1_IN10/ADC1_IN11用于堵转检测与电流闭环控制编码器接口霍尔编码器输出AB相正交脉冲接入STM32的TIM2/TIM3编码器模式引脚PA0/PA1、PB6/PB7实现0.1mm级位置分辨率减速比1:45轮径65mm线数12PPR。电机机械结构采用差速转向方式左右轮独立驱动。车体框架经机械加固处理消除转向过程中的扫线现象——即车轮轴线偏移导致灰度传感器脱离引导线。实测表明刚性连接可将循迹偏差控制在±3mm以内。2.3 视觉感知子系统数字识别模块采用Kendryte K210 AI加速芯片搭载64-bit双核RISC-V CPU及KPU神经网络加速单元0.8TOPS算力。其优势在于无需外挂GPU即可完成YOLOv3-tiny模型推理功耗低于2W满足车载嵌入式部署需求。摄像头选用OV2640支持QVGA320×240分辨率输出帧率可达60fps。图像数据经DVP并行接口送入K210由KPU完成预处理灰度化、浮雕滤波、特征提取与边界框回归。关键设计点如下浮雕滤波预处理在YOLOv3输入前插入3×3浮雕核[[−1,0,1],[−1,0,1],[−1,0,1]]增强数字边缘对比度。该操作在K210的APUAI Processing Unit中以硬件加速方式完成单帧耗时1.2ms较软件实现提速8倍数据集构建采集1200张多角度、多光照、多焦距样本使用LabelImg标注数字边界框。训练集/验证集按8:2划分采用TensorFlow 1.x框架训练YOLOv3-tiny模型模型优化输出层仅保留数字类别0–9共10类Anchor尺寸设为(28,28)、(42,42)、(64,64)适配病房号常见尺寸占画面高度15–30%识别策略K210通过舵机控制云台左右摆动±30°对同一病房号进行两次扫描取置信度最高结果。此举解决单次拍摄中数字倾斜、遮挡导致的漏检问题。K210与STM32通过UART2波特率115200通信协议定义为固定12字节帧[0xAA][0x55][X1][Y1][W1][H1][X2][Y2][W2][H2][CONF][0xFF]其中X/Y/W/H为两个数字的归一化坐标0–100CONF为平均置信度。该紧凑格式降低传输延迟保障实时性。2.4 循迹与环境感知电路循迹模块采用七路模拟灰度传感器线性阵列布局呈弧形覆盖车头前方30cm区域。每路传感器由TCRT5000反射式光电开关构成包含红外发射管与光敏三极管输出0–3.3V模拟电压数值与地面反射率成反比黑线处电压≈0.3V白底处≈2.8V。信号链路设计要点每路传感器输出经RC低通滤波10kΩ100nF抑制高频噪声七路信号接入STM32F407的ADC1_IN0–IN6采用扫描模式连续采样转换时间≤1μs软件实现动态阈值分割以七路均值为基准设定浮动阈值均值×0.7避免环境光变化导致误判十字路口识别当中间三路IN3–IN5同时低于阈值且两侧IN0–IN2、IN6高于阈值时判定为十字路口触发90°右转丁字路口识别当IN0–IN2低于阈值而IN3–IN6高于阈值时判定为左丁字执行左转反之为右丁字。载药检测采用红外对射开关如E18-D80NK安装于药箱托盘下方。当药品放置到位时红外光路被遮挡输出电平由高变低STM32通过EXTI0中断捕获该事件更新is_loaded标志位。该设计响应时间10ms抗振动干扰能力强。2.5 人机交互与扩展接口主控板集成以下交互资源TFT-LCD1.44英寸SPI接口彩屏128×128显示当前状态循迹模式/识别模式/停车位置、电池电压、识别结果及错误代码矩阵键盘4×4按键用于手动设置目标病房号、启动/暂停运行、参数校准LED指示灯双色LED红/绿指示系统运行状态红闪待机绿常亮循迹中红常亮识别失败另设两颗大功率白光LED作车灯由PWM控制闪烁频率紧急模式下1Hz闪烁蓝牙接口预留HC-05模块焊盘VCC/GND/TX/RX通过USART3连接支持AT指令配置主从模式为后续多车协同调度预留通信通道。所有外设均经ESD保护二极管如PESD5V0S1BA接入防止静电放电损坏MCU引脚。3. 软件系统设计3.1 STM32F407固件架构固件采用前后台系统Foreground-Background System以SysTick为心跳源主循环执行状态机调度中断服务程序ISR处理实时事件。整体分为四层层级模块功能硬件抽象层HALdrv_gpio.c,drv_adc.c,drv_tim.c封装寄存器操作提供统一API如ADC_Read(ADC1, ADC_CHANNEL_0)驱动层motor_ctrl.c,encoder_read.c,gray_track.c实现电机PID控制、编码器计数、灰度偏差计算等原子操作算法层pid_calculate.c,path_decision.c,k210_protocol.c包含位置式PID控制器、路口决策逻辑、K210通信协议解析应用层main.c,state_machine.c主状态机IDLE→RUN→RECOGNIZE→STOP、用户交互处理主循环执行周期为10ms保证控制律更新频率满足电机响应需求机械时间常数约50ms。3.2 运动控制算法3.2.1 灰度循迹PID控制器七路灰度传感器输出构成偏差向量[v0,v1,...,v6]经加权求和得综合偏差errorerror Σ (weight[i] * (v[i] - threshold)) // weight [-3,-2,-1,0,1,2,3]该设计赋予中心传感器更高权重提升直线跟踪精度两侧权重非对称增强转弯灵敏度。error输入至位置式PID控制器// PID参数经Ziegler-Nichols整定 #define KP 0.8f #define KI 0.02f #define KD 0.15f static float integral 0.0f; static float last_error 0.0f; float pid_calculate(float error) { integral error * 0.01f; // T10ms float derivative (error - last_error) / 0.01f; last_error error; float output KP*error KI*integral KD*derivative; return constrain(output, -100.0f, 100.0f); // 输出限幅 }输出值映射为左右轮PWM占空比左轮base_pwm pid_output右轮base_pwm - pid_output其中base_pwm为恒定基础速度对应0.3m/s确保小车在偏差较小时仍保持前进动力。3.2.2 路程闭环控制停车精度依赖于编码器累计脉冲数。已知编码器线数12 PPR减速比45:1轮周长π×65mm ≈ 204mm每毫米对应脉冲数12×45 / 204 ≈ 2.65 pulse/mm目标位置距离由K210识别结果与预设地图匹配获得。例如识别到“302”后查表得该病房距起点3.2m则需累计脉冲数3200×2.65≈8480。STM32通过定时器输入捕获模式实时计数到达阈值后执行刹车PWM置0INx置高阻态。3.3 K210视觉固件流程K210固件基于Kendryte SDK开发主流程如下# kmodel_loader.py伪代码 def main(): # 初始化 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time2000) # 加载模型 task kpu.load(/sd/yolov3_10.kmodel) anchor (28,28,42,42,64,64) kpu.init_yolo2(task, 0.3, 0.3, 5, anchor) while True: img sensor.snapshot() # 浮雕滤波硬件加速 img.morph(1, mv_kernel, mul1, add128) # YOLOv3推理 dect kpu.run_yolo2(task, img) if dect: # 提取最高置信度数字 max_obj max(dect, keylambda x: x.value()) send_to_stm32(max_obj.x(), max_obj.y(), max_obj.w(), max_obj.h(), max_obj.value())模型训练损失曲线显示迭代9轮后训练损失收敛至0.08验证损失0.12过拟合风险可控。浮雕滤波使测试集mAP从90.2%提升至97.1%证实其对数字边缘特征增强的有效性。3.4 系统状态机整个运行流程由五状态机驱动状态进入条件动作退出条件IDLE上电/复位初始化外设LCD显示欢迎界面键盘输入目标号RUN目标号确认启动循迹PID编码器清零检测到第一个数字标识如“病”字RECOGNIZE进入识别区发送摆头指令至K210等待识别结果收到有效数字帧或超时3sADJUST识别成功计算剩余路程微调航向角编码器计数达目标值±5mmSTOP到达目标刹车点亮绿色LED播报“已送达”手动复位或新任务触发状态迁移均通过事件队列异步处理避免阻塞主循环。4. 关键器件选型与BOM分析序号器件型号数量选型依据1主控MCUSTM32F407ZGT61Cortex-M4F内核1MB Flash/192KB RAM支持FPU与DSP指令满足多任务实时调度2AI处理器K2101集成KPUAPU支持INT8量化模型功耗2W免外挂DDR3电机驱动TB6612FNG1双H桥峰值电流3.2A内置保护封装SOIC-16便于焊接4DC-DC降压LM2596S-ADJ2宽输入范围高效率成本低于同步整流方案5线性稳压AMS1117-3.31低压差1.2V纹波30mV适合敏感模拟电路6灰度传感器TCRT50007反射式结构模拟输出成本低易于标定7编码器S57-12-452霍尔效应12PPR45:1减速IP54防护8摄像头OV26401DVP接口支持QVGA60fpsK210原生支持9TFT屏ST7735S1SPI接口128×128内置GRAM驱动简单所有无源器件均选用工业级温度范围−40℃85℃PCB板材为FR-4铜厚2oz确保大电流走线可靠性。5. 测试验证与问题解决5.1 循迹性能测试在标准白色PVC赛道黑线宽2cm上进行10次往返测试记录最大偏离量与恢复时间测试项数据分析直线段最大偏差±2.3mmPID参数KP0.8/KI0.02/KD0.15已优化进一步增大KD引发振荡弯道跟随误差≤4.1mm弧形传感器布局提升曲率适应性较直线布局降低误差37%十字路口识别率100%中间三路联合判决有效抑制单点噪声误触发5.2 视觉识别鲁棒性测试在不同光照条件下测试100次识别条件无滤波准确率浮雕滤波后提升幅度正常室内光89.2%96.8%7.6%强背光窗边72.5%94.1%21.6%低照度50lux65.3%91.7%26.4%浮雕滤波对低对比度场景改善显著验证其工程价值。5.3 典型问题与解决方案问题1小车识别失败后持续盲走根因K210通信超时未设重试机制STM32未进入故障安全状态。解决增加看门狗定时器若3s内未收到有效帧则触发RECOGNIZE_FAIL状态执行原地旋转搜索。问题2灰度传感器输出跳变根因PCB布局中ADC参考电压走线过长受电机驱动噪声耦合。解决在VREF引脚就近添加10μF钽电容0.1μF陶瓷电容跳变概率从12%降至0.3%。问题3药箱检测误触发根因红外对射开关安装间隙过大振动导致瞬时遮挡。解决改用槽型光耦如EE-SX670机械间隙缩小至0.3mm并在软件中加入50ms消抖。6. 机械结构与系统集成车体采用铝合金框架尺寸280mm×180mm×120mm长×宽×高重心高度距地面45mm确保转弯稳定性。关键结构设计传感器安装七路灰度传感器固定于可调支架离地高度5mm避免悬空导致误判摄像头云台SG90舵机驱动转动范围0–180°通过齿轮减速将摆动角度控制在±30°减少图像畸变药箱定位托盘底部嵌入磁铁与红外开关形成霍尔感应冗余检测提升载药状态可信度线缆管理所有排线经尼龙扎带固定避免运动中拉扯导致虚焊。整机组装后进行72小时连续老化测试未出现元器件失效或机械松动验证了工程化设计的成熟度。