1. 项目概述:当单片机遇上垂直交通
电梯控制系统作为现代建筑的核心部件,每天承载着数以亿计的人流。传统继电器控制系统正逐步被智能化的电子方案取代,而基于单片机的解决方案因其高性价比和灵活可编程性,成为中小型电梯改造项目的首选。这个设计用51单片机作为主控芯片,通过按键矩阵采集各楼层呼叫信号,配合光电传感器检测轿厢位置,最终驱动继电器控制电机实现平稳运行。
我在参与某老旧小区电梯改造时发现,机械式控制柜故障率高达每月2-3次,而改用单片机方案后连续运行18个月无故障。这种方案特别适合7层以下的低层建筑,硬件成本可控制在300元以内,比PLC方案节省60%以上。
2. 核心需求解析
2.1 基础功能要求
- 楼层呼叫响应:识别各层上行/下行按钮信号
- 轿厢位置检测:通过红外对射传感器实时定位
- 运行方向指示:LED箭头显示当前行进方向
- 楼层显示:7段数码管显示目标楼层
- 安全保护:超载报警、门锁检测、急停功能
2.2 关键性能指标
- 响应延迟:从按钮按下到系统响应≤50ms
- 定位精度:平层误差±3mm以内
- 抗干扰能力:通过EMC Class B测试
- 故障恢复:断电后自动复位到1楼
实测中发现,电梯门机电磁阀工作时会产生200mV的电压波动,必须在电源端增加TVS二极管和1000μF电解电容组合进行滤波。
3. 硬件架构设计
3.1 主控模块选型
采用STC89C52RC单片机,相比传统AT89C51具有:
- 内置8K Flash存储器(可存储更多控制逻辑)
- 最高35MHz工作频率(满足实时性要求)
- 4个8位I/O口(足够连接所有外设)
- 看门狗定时器(防止程序跑飞)
c复制// 典型引脚分配
sbit MOTOR_UP = P1^0; // 电机上行控制
sbit MOTOR_DN = P1^1; // 电机下行控制
sbit DOOR_OPEN = P1^2; // 开门继电器
sbit DOOR_CLOSE = P1^3; // 关门继电器
3.2 传感器网络布局
-
平层传感器:每层安装槽型光电开关(EE-SX670)
- 检测距离:5mm
- 响应时间:0.5ms
- 安装间距:轿厢地坎与门楣平齐时触发
-
称重传感器:BHF-1型悬臂梁传感器
- 量程:1000kg
- 输出:0-5V模拟信号
- 连接ADC0804进行模数转换
-
门区安全光幕:对射式红外阵列
- 检测高度:距地面50cm
- 光束间距:20mm
- 触发时立即停止关门动作
3.3 驱动电路设计
电机控制采用两级隔离方案:
- 单片机输出光耦隔离(TLP521-4)
- 继电器驱动(ULN2003达林顿阵列)
- 交流接触器(CJX2-1210 10A)
重要教训:曾因未使用隔离电路导致电机反电动势击穿单片机IO口,现强制要求所有输出端加装1N4148续流二极管。
4. 软件控制逻辑实现
4.1 主程序流程图
plaintext复制开始
↓
初始化IO/定时器/中断
↓
扫描按键矩阵
↓
检测平层信号 → 更新当前楼层
↓
执行调度算法 → 确定目标楼层
↓
控制电机转向 → 驱动继电器
↓
到达目标层 → 开门延时
↓
循环检测超载 → 禁止启动
4.2 核心调度算法
采用LOOK算法的变种实现:
- 记录所有内外呼信号
- 根据当前方向优先响应同向请求
- 无同向请求时反转方向
- 紧急情况(消防模式)直驶基站
c复制void schedule_task() {
if(emergency_mode) {
target_floor = 1;
return;
}
if(current_dir == UP) {
for(int i=current_floor+1; i<=TOP_FLOOR; i++) {
if(call_up[i] || call_down[i] || car_call[i]) {
target_floor = i;
return;
}
}
current_dir = DOWN;
}
// 下行方向处理同理...
}
4.3 关键中断服务
-
定时器0中断(1ms周期)
- 数码管动态扫描
- 按钮消抖处理
- 运行时间统计
-
外部中断0(平层信号)
- 精确停靠控制
- 楼层计数器修正
- 方向指示灯更新
-
ADC中断(称重检测)
- 实时重量计算
- 超载报警触发
- 载重曲线记录
5. 抗干扰设计实录
5.1 电源处理方案
-
三级滤波架构:
- 输入端:10μF陶瓷电容 + 10Ω/1W电阻
- 稳压前端:1000μF电解电容 + 0.1μF薄膜电容
- 芯片旁路:0.01μF贴片电容
-
实测数据:
条件 纹波电压 改善措施 原始电源 120mV - 一级滤波 80mV 增加LC滤波器 二级滤波 30mV 改用LDO稳压 最终方案 5mV 加入磁珠隔离
5.2 软件看门狗配置
c复制void watchdog_init() {
WDT_CONTR = 0x35; // 预分频256,约2.3秒复位
}
void feed_dog() {
WDT_CONTR |= 0x10; // 喂狗指令
}
5.3 信号隔离技巧
- 光电编码器信号:采用6N137高速光耦
- RS485通信:ADM2483隔离型收发器
- 模拟信号:ISO124线性光耦
6. 现场调试问题集锦
6.1 典型故障现象
| 故障表现 | 可能原因 | 解决方案 |
|---|---|---|
| 楼层显示错乱 | 平层传感器间距过大 | 调整安装位置至±3mm精度 |
| 偶尔误开门 | 光幕电源接触不良 | 改用焊接连接并点胶固定 |
| 电机启动困难 | 继电器触点氧化 | 更换为银合金触点型号 |
| 数码管显示暗淡 | 限流电阻过大 | 将560Ω改为330Ω |
6.2 参数优化记录
-
平层制动距离:
- 初始值:150mm开始减速
- 问题:停靠冲击明显
- 优化:改为200mm开始线性PWM减速
-
开门保持时间:
- 标准值:5秒
- 实际需求:老年社区需延长至8秒
- 实现:通过EEPROM存储可调参数
-
超载判定阈值:
- 理论值:额定载重100%
- 安全余量:设置为85%触发报警
- 动态校准:每月自动校零
7. 扩展功能实现
7.1 语音报站模块
采用WT588D语音芯片:
- 内置12bit DAC
- 支持PWM直接驱动扬声器
- 存储容量:16Mbit(可录制约40条语音)
接线示例:
c复制sbit VOICE_BUSY = P2^0; // 播放状态检测
sbit VOICE_PLAY = P2^1; // 触发播放
void announce_floor(uint8_t floor) {
VOICE_PLAY = 1;
_nop_(); _nop_();
VOICE_PLAY = 0;
while(VOICE_BUSY); // 等待播放完成
}
7.2 远程监控接口
通过ESP8266实现:
- 协议:MQTT over WiFi
- 上报数据:运行次数/故障代码/载重曲线
- 配置方式:手机APP配网
数据帧格式:
json复制{
"devID": "ELEV-01",
"timestamp": 1634567890,
"current_floor": 3,
"direction": "up",
"load": 65.2,
"error_code": 0
}
7.3 节能模式设计
- 空闲超过30分钟:关闭轿厢照明
- 夜间模式(22:00-6:00):自动返回基站层
- 轻载运行:电机电压降额15%
实测节电效果:
| 运行模式 | 日均耗电 | 节电率 |
|---|---|---|
| 常规运行 | 18.7kWh | - |
| 启用节能 | 15.2kWh | 18.7% |
| 深度节能 | 12.8kWh | 31.5% |
这个项目最让我意外的是,通过优化控制算法,竟然能使老式曳引机的能耗降低近三分之一。建议在程序初始化时加入电机型号选择菜单,不同型号匹配对应的节能参数表。
