1. 项目背景与核心需求
里程速度测试表是车辆性能测试、运动装备研发和工业设备监测中的基础工具。传统机械式仪表存在精度低、功能单一的问题,而市面上的电子测试设备往往价格昂贵。这个项目就是要用最基础的单片机开发板,打造一个成本控制在50元以内,但精度能达到0.1km/h的便携式测试方案。
我在电动车改装圈混了八年,见过太多车友为了调试控制器参数,花大价钱买专业测速仪。其实用STM32F103C8T6这种"蓝色药丸"开发板(就是那个淘宝8块钱包邮的板子),配合霍尔传感器,完全能实现商用级测速功能。这个方案特别适合:
- 电动车/摩托车DIY玩家
- 自行车运动爱好者
- 大学生电子竞赛
- 小型物流车队
2. 硬件系统设计
2.1 核心器件选型
主控芯片:
STM32F103C8T6是性价比之王,72MHz主频足够处理速度信号,内置的定时器能实现高精度脉冲计数。相比Arduino,它的定时器中断响应快10倍以上,这对捕捉高速旋转信号至关重要。
传感器方案对比:
| 传感器类型 | 成本 | 安装复杂度 | 适用场景 |
|---|---|---|---|
| 霍尔传感器 | ¥3 | 需磁铁对位 | 车轮/电机轴 |
| 光电编码器 | ¥25 | 需精密安装 | 工业设备 |
| 激光测距 | ¥80 | 即贴即用 | 实验室环境 |
最终选择3144霍尔传感器,因为:
- 电动车辐条加装磁铁最方便
- 防水防尘性能好
- 实测在100km/h下仍能稳定触发
2.2 电路设计要点
电源部分采用LM2596降压模块,支持12-24V宽电压输入,这是考虑到电动车电瓶的电压波动。信号处理电路有两个关键设计:
- 施密特触发器整形电路(用LM393比较器)
- 光耦隔离(防止电机干扰)
重要提示:一定要在霍尔传感器输出端加10k上拉电阻,我早期版本没加这个电阻,导致在高温环境下信号丢失。
3. 软件算法实现
3.1 速度计算模型
假设车轮周长L=2.1米(常见电动车规格),磁铁数量N=5,则速度公式:
code复制速度(km/h) = (脉冲数 × L × 3.6) / (N × 采样时间)
STM32的TIM2定时器配置为输入捕获模式,关键参数:
c复制TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; // 上升沿触发
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 不分频
TIM_ICInitStructure.TIM_ICFilter = 0x08; // 滤波系数
3.2 抗干扰处理
实测发现电机运行时会产生两种干扰:
- 高频毛刺(>1MHz)
- 电压波动导致的误触发
解决方案:
c复制// 在中断服务函数中加入滤波判断
if(TIM_GetITStatus(TIM2, TIM_IT_CC1) == SET) {
uint16_t period = TIM_GetCapture1(TIM2);
if(period > 50) { // 过滤小于50us的脉冲
calculate_speed(period);
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
4. 实际测试数据
在标准400米跑道进行的对比测试:
| 速度标准值 | 本设备测量值 | 误差率 |
|---|---|---|
| 20km/h | 20.3km/h | +1.5% |
| 40km/h | 39.8km/h | -0.5% |
| 60km/h | 60.6km/h | +1.0% |
关键发现:误差主要来自轮胎气压变化导致的周长偏差,建议:
- 每月校准一次轮胎周长
- 磁铁间距要均匀(用3D打印夹具辅助安装)
5. 常见问题排查
问题1:高速时数据跳变
- 检查TIM时钟配置,必须72MHz满频运行
- 确保中断优先级最高(NVIC_SetPriority)
问题2:停车后仍有微小读数
- 在代码中加入速度阈值判断
c复制if(pulse_interval > 2000) { // 2秒无脉冲
speed = 0;
}
问题3:LCD显示闪烁
- 改用DMA传输显示数据
- 降低刷新率到10Hz(速度变化本来就不快)
这个项目的精髓在于用最廉价的硬件实现专业功能。有个小技巧:把备用磁铁用热熔胶固定在轮毂内侧,这样既不影响美观,又能在主磁铁脱落时自动替补。