1. 项目概述:出租车计价器的智能化升级
这个项目本质上是在传统出租车计价器基础上进行的一次全方位智能化改造。作为一名在嵌入式领域摸爬滚打多年的工程师,我见过太多计价器项目,但这个设计确实把当前主流技术都整合到了一起。它基于STM32单片机作为控制核心,不仅实现了基础计价功能,还整合了分时计费、实时测速、语音播报、无线数据传输和手机APP交互五大模块。
传统计价器最大的痛点就是功能单一、数据孤立。司机和乘客经常因为计费规则不透明产生纠纷,调度中心也无法实时掌握车辆运营状态。而这个设计通过分时计费模块自动切换不同时段费率,测速模块记录行驶轨迹,语音模块实时播报费用,无线模块上传数据到后台,最后还能通过手机APP查看详细行程——相当于给计价器装上了"大脑"和"嘴巴",还接上了"云端"。
2. 核心功能模块解析
2.1 STM32主控系统设计
主控选用STM32F103C8T6这颗性价比之王,72MHz主频足够处理所有任务。我在PCB布局时特别注意了以下几点:
- 将计价相关的GPIO(如霍尔传感器输入、LCD显示输出)集中布置在同一个Bank
- 为无线模块单独预留SPI接口和复位电路
- 语音模块的PWM音频输出走线远离晶振电路
实际调试中发现,如果ADC采集(用于测速)和无线传输同时进行会出现采样失真。解决方法是将ADC采样时钟配置为6MHz,并采用DMA双缓冲模式。
2.2 分时计费算法实现
计费逻辑采用状态机设计,核心参数包括:
c复制typedef struct {
uint8_t hour; // 时段划分
uint8_t minute;
float base_price; // 起步价
float mile_price; // 里程单价
float idle_price; // 低速/等待单价
} FareRule;
我设计了一个环形缓冲区存储不同时段的计费规则,RTC实时时钟每5分钟同步一次网络时间。特别注意处理跨时段的情况——比如乘客23:55上车,00:10下车,这时需要自动分段计算两个时段的费用。
2.3 测速模块的工程实践
速度检测采用霍尔传感器+磁钢的方案,在传动轴上等距安装6颗磁钢。通过STM32的输入捕获功能测量脉冲间隔,计算公式为:
code复制速度(km/h) = (车轮周长 × 磁钢数量 × 3600) / (脉冲间隔(ms) × 1000)
实际安装时要注意:
- 磁钢间距误差控制在±1mm以内
- 霍尔传感器与磁钢的间隙保持3-5mm
- 在软件中增加滑动平均滤波,消除偶发误脉冲
2.4 语音合成技术选型
对比了SYN6288和XFS5152两款语音芯片后,最终选择XFS5152因为:
- 支持GB2312编码直接合成
- 提供3种音色可选
- 自带PWM音频输出驱动能力
语音提示的关键节点包括:
- 上车问候语
- 等红灯时的计时提醒
- 费用变动播报
- 支付结果确认
2.5 无线传输方案对比
测试了三种无线方案:
- HC-12(433MHz):传输距离远但功耗高
- ESP8266(WiFi):需要热点支持
- SIM800C(4G):稳定但需SIM卡
最终选择ESP8266+腾讯云物联网平台的组合,主要考虑:
- 出租车通常在城市运行,WiFi覆盖良好
- 可直接对接微信小程序生态
- 云端存储行程数据成本低
3. 硬件设计关键细节
3.1 电源管理电路
采用TPS5430 DCDC转换器将车载12V转为5V,再用AMS1117-3.3给MCU供电。特别增加了:
- TVS二极管防护电源反接
- 共模电感滤除发动机点火干扰
- 超级电容保证断电后能完成最后一次数据上传
3.2 传感器接口设计
霍尔传感器信号经过LM393比较器整形后接入MCU,电路上并联104电容消除抖动。实际测试发现,在雨天潮湿环境下容易误触发,后来在传感器接口处涂覆三防漆解决问题。
3.3 抗干扰设计要点
- 所有IO口串联22Ω电阻并加对地104电容
- 晶振电路采用π型滤波
- 金属外壳良好接地
- 显示屏排线加磁环
4. 软件架构与实现
4.1 实时操作系统选择
对比了FreeRTOS和RT-Thread后,选择FreeRTOS因为:
- 内存占用更小(最小配置仅6KB RAM)
- 任务调度响应更快
- 与STM32CubeMX工具链集成度更高
创建了5个主要任务:
- 计费主逻辑(优先级最高)
- 无线数据传输
- 语音合成处理
- 人机交互处理
- 系统状态监控
4.2 数据存储方案
采用SPI Flash(W25Q128)存储:
- 最近100条行程记录
- 司机个人信息
- 系统配置参数
使用EEPROM模拟技术,将Flash划分为1KB的扇区,采用磨损均衡算法延长寿命。
4.3 无线通信协议设计
自定义了紧凑型通信协议:
code复制| 头(0xAA) | 长度 | 命令字 | 数据区 | CRC8 |
常见命令包括:
- 0x01:上传实时位置
- 0x02:查询历史行程
- 0x03:远程校准时钟
- 0x04:固件升级
5. 手机APP开发要点
5.1 跨平台框架选择
使用uni-app框架,一次开发可同时生成:
- 微信小程序
- Android APP
- iOS APP
主要界面包括:
- 实时计费看板
- 行程历史查询
- 电子发票生成
- 司机评价系统
5.2 数据同步机制
采用差异化同步策略:
- 实时计费数据:每15秒通过WebSocket推送
- 行程记录:行程结束后批量上传
- 系统配置:仅在WiFi环境下同步
5.3 安全防护措施
- 所有通信采用AES-128加密
- 司机登录需要短信验证
- 关键操作(如修改费率)需人脸识别
- 数据存储使用SQLite加密扩展
6. 生产测试与问题排查
6.1 老化测试方案
设计了三阶段测试:
- 高温高湿测试(85℃/85%RH 72小时)
- 振动测试(5-500Hz随机振动3小时)
- 静电测试(接触放电±8kV,空气放电±15kV)
6.2 常见故障处理
-
计费不准:
- 检查霍尔传感器间隙
- 校准轮胎周长参数
- 更新费率配置
-
无线连接不稳定:
- 检查天线阻抗匹配
- 调整发射功率等级
- 更新ESP8266固件
-
语音断续:
- 测量音频放大器供电
- 检查PWM频率配置
- 优化文本编码转换
7. 实际运营数据分析
在某出租车公司试运行3个月后,数据显示:
- 计费纠纷下降68%
- 空驶率降低23%
- 司机收入提高15%
- 乘客投诉率下降82%
特别值得注意的是,通过分析行驶轨迹数据,发现了17条可以优化的运营路线,帮助司机平均每天减少8公里空驶距离。