1. 项目概述:当RFID遇上智能小车
最近在整理工作室资料时,翻出了去年做的RFID小车控制系统的全套设计文档。这个项目最初是为了解决仓库AGV小车在复杂路径中的精确定位问题,后来发现这套方案在智能仓储、生产线物料配送等场景都有不错的应用潜力。系统核心是通过RFID标签实现厘米级定位,配合STM32主控完成路径规划和运动控制,整套硬件成本控制在200元以内,定位精度达到±3cm,比传统二维码方案更适合粉尘环境。
2. 系统架构设计解析
2.1 硬件选型方案
主控芯片最终选择了STM32F103C8T6,这款Cortex-M3内核的MCU有足够的GPIO接口驱动RFID读卡器和电机,72MHz主频也能满足实时路径计算需求。RFID模块选用MFRC522,支持ISO14443A协议,最远7cm的读取距离刚好适配小车底盘高度。电机驱动用的是L298N双H桥模块,配合12V减速电机实现差速转向。
关键提示:MFRC522需要5V供电但通信电平是3.3V,记得加电平转换电路,我最初没注意这点导致通信异常
2.2 软件控制逻辑
系统上电后先初始化各外设,然后进入主循环持续扫描RFID标签。当检测到预设的路径标签时,立即通过串口发送坐标信息给上位机,同时根据标签ID查询预存路径表,计算出下一目标点的转向角度和行进距离。运动控制采用PID算法调节左右轮速差,实测转向误差可控制在±5°以内。
c复制// RFID数据读取示例
void Read_RFID() {
if (PCD_ReadCardSerial() == MI_OK) {
uint8_t uid[10];
memcpy(uid, serNum, 5);
Send_To_PC(uid); // 上传标签ID
}
}
3. 核心功能实现细节
3.1 高精度定位实现
在2m×2m的测试场地铺设了36个RFID标签组成网格,每个标签写入唯一的坐标信息。小车底部呈三角形布置3个读卡器,通过多点定位算法计算质心位置。实测数据显示,当标签间距15cm时,系统可稳定识别当前所在网格区域,配合编码器数据可实现亚网格级定位。
| 定位方式 | 精度 | 抗干扰性 | 成本 |
|---|---|---|---|
| RFID | ±3cm | 强 | 低 |
| 二维码 | ±1cm | 弱 | 中 |
| UWB | ±10cm | 强 | 高 |
| 激光雷达 | ±2cm | 中 | 极高 |
3.2 路径规划优化
路径数据采用邻接表存储结构,每个RFID标签节点记录相邻可达节点及其距离。当收到目标指令时,先用Dijkstra算法计算最短路径,再通过三次样条插值生成平滑曲线。实际运行中发现,在直角转弯处适当添加过渡标签能显著减少小车抖动。
4. 常见问题与解决方案
4.1 标签冲突处理
当多个标签同时进入读卡范围时,会出现数据碰撞。我们的解决方案是:
- 硬件上调整天线Q值降低读取范围
- 软件采用时分复用策略,按固定时序轮询各读卡器
- 对重复读取的标签ID进行投票过滤
4.2 电机控制异常
初期测试中出现过电机突然停转的问题,排查发现是:
- L298N散热不足导致过热保护(加装散热片解决)
- 电池电压跌落引发MCU复位(增加1000μF电容缓冲)
- PWM频率过高引起电机啸叫(调整至15kHz最佳)
5. 完整资料包说明
项目资料包含:
- 硬件:原理图(Altium Designer)、PCB文件、BOM清单
- 软件:Keil工程源码、路径规划算法库、上位机通信协议
- 文档:RFID标签布置规范、系统测试报告、PID参数整定指南
这套系统后来被改装成图书馆寻书小车,通过书架上的RFID标签实现书籍定位。有意思的是,有学生把标签贴在宿舍门口,改造成了自动送餐车