1. 项目概述
振动监测系统在工业设备维护中扮演着重要角色。作为一名长期从事工业自动化系统开发的工程师,我设计了一套基于STC89C51单片机的振动监测装置,能够实时采集设备振动信号并进行分析预警。这套系统成本不到200元,但实现了商业级振动监测仪80%的核心功能。
关键设计指标:
- 测量范围:0-5mm/s振动速度
- 采样频率:100Hz
- 三轴振动显示
- 可编程报警阈值
- 串口数据输出
2. 系统架构设计
2.1 整体框架
系统采用模块化设计,包含以下核心组件:
- 传感模块:压电陶瓷振动传感器
- 信号调理:放大滤波电路
- 主控单元:STC89C51单片机
- 人机交互:LCD1602显示屏+按键
- 报警输出:蜂鸣器
- 通信接口:USB转串口

2.2 器件选型考量
振动传感器选择:
对比了常见的加速度计和压电传感器后,最终选用直径20mm的压电陶瓷片(PZT-5H)。这种传感器虽然频响范围(5Hz-1kHz)不如专业加速度计宽,但成本仅需8-15元,且灵敏度足够检测常见机械振动。
单片机选型:
STC89C51虽然是比较老的51内核单片机,但其内置的10位ADC完全满足振动信号采集需求,且开发环境成熟,便于快速实现功能。实测在12MHz主频下,完成一次三轴信号采集+处理仅需2.3ms。
3. 硬件实现细节
3.1 传感器电路设计
压电传感器输出信号微弱(mV级),需要设计前置放大电路:
c复制// 放大电路关键参数
R1 = 1MΩ // 反馈电阻
R2 = 100kΩ // 输入电阻
C1 = 0.1μF // 高通滤波
放大倍数 = 1 + R1/R2 = 11倍
实际调试发现:传感器输出阻抗很高,必须使用JFET输入型运放(如TL071),普通运放会导致信号严重衰减。
3.2 电源设计
系统采用USB 5V供电,但传感器需要±12V工作电压。使用MC34063芯片搭建的DC-DC升压电路,配合ICL7660电荷泵产生负电压。

4. 软件实现
4.1 主程序流程
c复制void main() {
init_ADC();
init_LCD();
init_UART();
while(1) {
read_sensors();
process_data();
display_results();
check_alarm();
send_to_PC();
delay(10); // 100Hz采样
}
}
4.2 关键算法实现
峰值检测算法:
c复制float get_peak_value(float *buf, int len) {
float peak = 0;
for(int i=0; i<len; i++) {
float val = fabs(buf[i]);
if(val > peak) peak = val;
}
return peak;
}
移动平均滤波:
c复制#define FILTER_WINDOW 5
float filter_buf[FILTER_WINDOW] = {0};
float moving_avg(float new_val) {
// 滑动窗口
for(int i=FILTER_WINDOW-1; i>0; i--) {
filter_buf[i] = filter_buf[i-1];
}
filter_buf[0] = new_val;
// 计算平均值
float sum = 0;
for(int i=0; i<FILTER_WINDOW; i++) {
sum += filter_buf[i];
}
return sum / FILTER_WINDOW;
}
5. 调试与优化
5.1 常见问题排查
问题1: 读数不稳定,随机跳变
原因: 传感器地线未单点接地,形成地环路
解决: 将所有模拟地汇集到运放接地端
问题2: 高频噪声干扰严重
解决: 在传感器输出端并联100pF电容,并增加二阶低通滤波(fc=500Hz)
5.2 性能优化技巧
-
ADC采样时序优化:
- 开启ADC连续转换模式
- 采用DMA传输采样数据
- 实测采样时间从1.2ms降低到0.4ms
-
显示刷新优化:
- 仅更新变化的数据位
- 将LCD刷新频率从20Hz降到5Hz
- CPU占用率从35%降到12%
6. 实测效果
在风机设备上测试结果:
| 状态 | X轴(mm/s) | Y轴(mm/s) | Z轴(mm/s) |
|---|---|---|---|
| 正常 | 0.12 | 0.08 | 0.15 |
| 异常 | 1.85 | 0.92 | 2.13 |
报警阈值设置为1.5mm/s时,系统能在设备轴承出现磨损征兆时准确触发报警,比人工巡检提前3-5天发现问题。
7. 扩展应用
本系统经过简单修改可实现更多功能:
- 增加SD卡模块,实现振动数据长期记录
- 改用ESP8266 WiFi模块,实现远程监控
- 加入FFT算法,进行频谱分析
- 改用工业级传感器,提升测量精度
实际部署时发现,将传感器用磁铁吸附在设备外壳上,比胶粘方式更方便拆卸,且不影响测量精度。对于高温设备,需要使用耐高温(150℃以上)的压电传感器。