1. 项目概述
作为一名在嵌入式系统领域摸爬滚打多年的工程师,今天想和大家分享一个非常实用的项目——基于STC单片机的公交语音报站系统。这个系统是我去年指导本科生毕业设计时开发的,经过多次实地测试和优化,目前已经具备商业应用潜力。
公交语音报站系统看似简单,但实际上涉及硬件设计、软件编程、多模块协同等多个技术难点。传统的报站系统多采用专用芯片或工控机方案,成本高昂且灵活性不足。而我们这个方案使用常见的STC单片机作为主控,配合GPS模块实现自动定位报站,整套硬件成本可以控制在百元以内。
2. 系统整体设计
2.1 硬件架构设计
系统采用模块化设计思路,核心硬件架构如下:
-
主控芯片:STC12C5A60S2单片机
- 选择理由:内置60K Flash ROM,1280字节RAM,双串口,完全满足系统需求
- 工作电压:5V±10%
- 工作频率:11.0592MHz(保证串口通信波特率准确)
-
外围模块:
- 语音模块:WT588D语音芯片,支持MP3格式,内置16MB Flash
- 显示模块:12864液晶屏(ST7920控制器)
- 定位模块:UBLOX NEO-6M GPS模块
- 环境监测:DS18B20温度传感器+DS1302时钟芯片
- 人机交互:4×4矩阵键盘+LED状态指示灯
2.2 软件架构设计
软件采用分层架构:
- 硬件驱动层:各模块的底层驱动
- 功能模块层:报站逻辑、显示控制等
- 应用层:主程序调度
关键设计考虑:
- 采用状态机模型处理不同工作模式
- 使用环形缓冲区管理串口数据
- 通过软件定时器实现多任务调度
3. 核心电路设计
3.1 主控电路设计
主控电路设计要点:
-
复位电路:
- 采用经典的RC复位(10kΩ电阻+10μF电容)
- 增加手动复位按钮
-
时钟电路:
- 11.0592MHz晶振+22pF负载电容
- 靠近芯片布局,缩短走线
-
电源电路:
- AMS1117-5.0稳压芯片
- 输入电容:100μF电解+0.1μF陶瓷
- 输出电容:10μF电解+0.1μF陶瓷
注意:STC单片机对电源噪声敏感,建议在VCC和GND之间就近放置0.1μF去耦电容。
3.2 语音模块电路
WT588D语音模块接口设计:
- 通信方式:串口模式(9600bps)
- 控制引脚:
- BUSY:连接单片机IO,检测播放状态
- RST:硬件复位
- SPK+/-:连接8Ω/1W喇叭
电路设计技巧:
- 喇叭驱动增加100μF隔直电容
- 串联10Ω电阻限流保护
- 预留SPI接口焊盘,方便固件升级
4. 软件实现细节
4.1 主程序流程
c复制void main() {
sys_init(); // 系统初始化
while(1) {
gps_process(); // GPS数据处理
key_scan(); // 键盘扫描
display_update();// 显示更新
station_check(); // 站点检测
}
}
4.2 GPS数据处理
关键代码片段:
c复制void gps_process() {
if(UART1_RX_Flag) { // 收到完整GPS帧
parse_gps_data(uart1_rx_buf);
if(gps_data.fix == 1) { // 定位有效
calc_distance_to_station();
}
UART1_RX_Flag = 0;
}
}
数据处理要点:
- 使用NMEA-0183协议
- 主要解析GPRMC和GPGGA语句
- 采用滑动窗口校验数据完整性
4.3 语音播报控制
播站策略:
- 进站预告:距站点300米时播放"下一站是XXX"
- 到站播报:距站点50米时播放"XXX站到了"
- 紧急播报:按键触发人工播报
c复制void play_voice(uint8_t id) {
WT588D_Play(id);
while(WT588D_BUSY); // 等待播放完成
}
5. 系统调试与优化
5.1 硬件调试要点
-
电源问题:
- 实测工作电流:待机80mA,峰值播放时250mA
- 建议使用2000mAh以上锂电池
- 增加1000μF储能电容应对瞬时电流
-
GPS信号:
- 天线应远离金属遮挡
- 冷启动时间约45秒(室外)
- 使用有源天线可提升室内接收效果
5.2 软件调试技巧
-
串口调试:
- 使用USB转TTL工具监控数据
- 编写简单的PC端测试程序
-
性能优化:
- 将常用站点信息存入code区
- 使用查表法计算距离
- 关键代码用汇编优化
6. 实际应用中的问题解决
6.1 常见问题排查
-
GPS定位不准:
- 检查天线连接
- 确认模块固件版本
- 增加软件滤波算法
-
语音播放杂音:
- 检查电源稳定性
- 调整喇叭阻抗匹配
- 优化音频文件采样率(建议16kHz)
-
显示乱码:
- 检查12864初始化序列
- 确认对比度电压(通常10-20kΩ可调电阻)
- 重新烧录字库
6.2 可靠性提升方案
-
看门狗应用:
- 启用STC内部看门狗
- 超时时间设为1秒
- 关键任务完成后喂狗
-
数据备份:
- 站点信息写入EEPROM
- 定期保存运行参数
- 上电时自动恢复
7. 项目扩展与改进
在实际部署后,我们发现了几个值得改进的方向:
-
无线升级功能:
- 增加蓝牙或WiFi模块
- 设计OTA升级协议
- 实现远程配置更新
-
智能调度集成:
- 对接公交调度系统
- 实时调整报站策略
- 支持异常情况预警
-
能耗优化:
- 增加光感自动调光
- 实现低功耗休眠模式
- 优化语音播放功耗
这个项目从设计到实现大约耗时3个月,期间遇到了不少挑战,比如GPS在城市峡谷中的定位漂移问题、语音播放时的电源干扰等。通过反复测试和优化,最终系统达到了以下指标:
- 定位精度:<15米(开阔地带)
- 报站准确率:>99%
- 连续工作时间:>8小时
- 环境适应性:-20℃~60℃正常