用STM32F103C8T6和F9P模组DIY一台RTK高精度导航小车(附PCB文件与源码) 用STM32F103C8T6和F9P模组打造高精度RTK导航小车的完整指南在创客圈子里导航小车一直是热门项目但普通GPS的定位精度往往让人失望——误差动辄两三米根本无法满足精准控制的需求。而RTK实时动态定位技术能将定位精度提升到厘米级这为DIY导航小车打开了全新可能。本文将手把手教你如何用STM32F103C8T6主控和F9P RTK模块从零开始打造一台真正可用的高精度导航小车。1. 核心硬件选型与原理1.1 为什么选择STM32F103C8T6作为主控这款经典的蓝色药丸开发板在创客圈经久不衰是有原因的性价比突出20元左右的价位提供了72MHz主频的Cortex-M3内核丰富外设3个USART、2个SPI、2个I2C接口完美适配各类传感器开发生态成熟无论是HAL库还是标准库都有海量参考资料引脚兼容性48脚的LQFP封装方便自制PCB时布线实际项目中我们主要用到了它的以下资源USART1 - 连接F9P模块获取RTK数据 USART2 - 连接蓝牙模块用于调试 TIM1/TIM4 - 生成PWM控制电机 SPI1 - 连接陀螺仪模块1.2 F9P RTK模块的工作原理F9P是u-blox推出的双频RTK接收模块其核心技术特点包括参数普通GPSF9P RTK定位精度2-5米1-2厘米刷新率1-10Hz最高20Hz启动时间30秒10秒价格100-300元约800元RTK实现厘米级定位的关键在于基站与移动站同时接收卫星信号基站将定位误差数据通过无线数传发送给移动站移动站进行载波相位差分计算提示如果预算有限可以使用开源RTK基站方案如RTKLIB但商用基站(如千寻位置)的稳定性更好。2. 电路设计与PCB制作2.1 电机驱动电路设计TB6612FNG是比传统L298N更优的选择效率更高MOSFET驱动比L298N的达林顿管发热小集成度高单芯片包含双H桥和逻辑控制保护完善内置过热关断和短路保护典型应用电路如下VM - 接7-12V电源 VCC - 接5V逻辑电源 AO1/AO2 - 接电机A BO1/BO2 - 接电机B PWMA/PWMB - 接STM32 PWM输出 AIN1/AIN2 - 电机方向控制2.2 PCB布局注意事项在绘制四层PCB时我总结了几个关键经验电源分区电机驱动部分单独供电数字地与模拟地通过0Ω电阻单点连接每个IC旁放置0.1μF去耦电容信号完整性F9P的UART走线远离PWM信号晶振下方禁止走线保持差分对等长(如USB D/D-)散热设计TB6612底部敷铜并开窗LDO加装小型散热片避免大电流走线过孔注意首次打板建议选择嘉立创的经济型选项5元/10片足够验证设计。3. 软件架构与关键算法3.1 多任务调度设计在FreeRTOS上我划分了以下任务RTK数据处理任务(优先级3)解析UBX协议坐标转换(WGS84转局部坐标系)卡尔曼滤波电机控制任务(优先级4)增量式PID计算PWM占空比更新编码器计数读取无线通信任务(优先级2)蓝牙AT指令处理数传模块数据打包状态监控任务(优先级1)电池电压检测系统异常报警任务间通过消息队列通信关键数据使用互斥锁保护。3.2 增量式PID实现小车直线行驶的稳定性全靠PID算法以下是经过实测调优的参数typedef struct { float Kp; // 比例系数 float Ki; // 积分系数 float Kd; // 微分系数 float integral_limit; // 积分限幅 float output_limit; // 输出限幅 float last_error; // 上次误差 float prev_error; // 上上次误差 } PID_HandleTypeDef; void PID_Update(PID_HandleTypeDef *pid, float error) { float p_out pid-Kp * error; pid-integral error; pid-integral constrain(pid-integral, -pid-integral_limit, pid-integral_limit); float i_out pid-Ki * pid-integral; float d_out pid-Kd * (error - pid-last_error); pid-output p_out i_out d_out; pid-output constrain(pid-output, -pid-output_limit, pid-output_limit); pid-prev_error pid-last_error; pid-last_error error; }调试技巧先调P直到出现小幅振荡加入D抑制振荡最后加I消除静差户外测试时准备螺丝刀随时微调4. 组装调试与实战技巧4.1 机械组装要点经过三次迭代我的结构设计总结重心分配电池放在底盘中部偏后位置轮距选择20cm轮距适合室内外通用天线安装F9P天线尽量远离电机和金属部件减震设计在底盘与上层板之间加装橡胶柱常见问题排查表现象可能原因解决方法定位漂移天线被遮挡调整天线位置电机抖动PWM频率过低改为20kHz串口丢包波特率不匹配检查两端配置突然重启电源线虚焊重新焊接4.2 场地测试经验在不同环境下的实测表现开阔广场固定解时间30秒定位精度±1cm续航时间2小时林荫道固定解时间1-2分钟定位精度±3cm需注意树叶遮挡室内近窗仅能获得浮点解精度下降至±50cm需融合陀螺仪数据一个实用技巧在场地四角放置反射标记当RTK信号丢失时可以通过视觉辅助定位。