1. 项目背景与核心需求
最近在帮朋友改造一个老式推拉门,需要实现自动开关功能。这个看似简单的需求背后,其实涉及传感器选型、电机控制、安全防护等多个技术环节的协同工作。市面上虽然有成品的自动门控制器,但要么功能过剩价格昂贵,要么扩展性不足。于是决定用最常见的51单片机为核心,设计一套高性价比的自动门控制系统。
这套系统需要满足几个核心需求:
- 可靠检测人员接近(检测距离1.5米内可调)
- 平稳的开关门动作(速度可调且带软启动)
- 完善的防夹保护机制
- 停电时可手动操作
- 整体成本控制在200元以内
2. 硬件系统设计
2.1 核心控制器选型
对比STC89C52、STC12C5A60S2和STM32F103C8T6三款主流方案:
- STC89C52价格最低(约5元)但无PWM硬件输出
- STM32性能最强但开发复杂度高
- 最终选择STC12C5A60S2(约8元),内置PWM和ADC,性价比最优
实测发现:STC12系列在电机控制场景下的抗干扰能力明显优于89系列,特别是在PWM输出稳定性方面
2.2 传感器方案设计
测试了三种人体检测方案:
- 热释电红外传感器(HC-SR501)
- 优点:成本低(约6元),功耗小
- 缺点:检测角度固定,易受温度影响
- 微波雷达传感器(RCWL-0516)
- 优点:穿透性强,可检测静止人体
- 缺点:误触发率高(约15%)
- 红外对射传感器
- 优点:检测精度高
- 缺点:安装复杂,需成对使用
最终采用"HC-SR501+RCWL-0516"双传感器冗余设计,通过软件逻辑实现:
- 任一传感器触发即视为有效信号
- 双传感器同时触发才执行动作
- 设置500ms防抖延时
2.3 电机驱动电路
门体重量约20kg,计算所需扭矩:
code复制扭矩 = 重量 × 力臂 × 安全系数
= 20kg × 0.6m × 1.5
= 18N·m
选用JGA25-370直流减速电机(额定扭矩2kg·cm),搭配1:30减速箱,实际输出扭矩:
code复制2kg·cm × 30 × 9.8 ≈ 5.88N·m
需采用双电机并联方案,通过L298N驱动模块控制,关键参数:
- 工作电压:12V DC
- 峰值电流:2×1.2A
- PWM频率:15kHz(避免可闻噪声)
3. 软件系统实现
3.1 主控制逻辑
采用状态机设计模式,定义6个系统状态:
c复制typedef enum {
DOOR_CLOSED, // 门已关闭
DETECT_OPEN, // 检测到开门信号
OPENING, // 正在开门
DOOR_OPENED, // 门已全开
DETECT_CLOSE, // 检测到关门信号
CLOSING // 正在关门
} DoorState;
状态转换条件:
- CLOSED → DETECT_OPEN:双传感器任一触发
- DETECT_OPEN → OPENING:500ms后仍检测到信号
- OPENING → OPENED:限位开关触发
- OPENED → DETECT_CLOSE:持续5秒无信号
- DETECT_CLOSE → CLOSING:2秒后无阻碍
- CLOSING → CLOSED:限位开关触发
3.2 PWM调速算法
实现S曲线加减速算法,关键参数:
c复制#define ACCEL_STEPS 20 // 加速段步数
#define DECEL_STEPS 15 // 减速段步数
#define MAX_DUTY 80 // 最大占空比(%)
uint8_t calc_duty_cycle(uint16_t step) {
if (step < ACCEL_STEPS) {
// 加速阶段:二次曲线
return MAX_DUTY * step * step / (ACCEL_STEPS * ACCEL_STEPS);
} else if (step > (total_steps - DECEL_STEPS)) {
// 减速阶段:余弦曲线
uint16_t decel_step = total_steps - step;
return MAX_DUTY * (1 - cos(PI * decel_step / (2 * DECEL_STEPS)));
} else {
// 匀速阶段
return MAX_DUTY;
}
}
3.3 安全防护机制
-
电流检测防夹:
- 通过ACS712模块监测电机电流
- 当电流超过阈值(1.5A)持续300ms时紧急停止
-
红外防夹条:
- 沿门框布置红外对射传感器
- 任何光束被遮挡立即反转电机
-
软件看门狗:
c复制void feed_dog() { static uint8_t dog = 0; dog++; if (dog > 10) { motor_stop(); system_reset(); } }
4. 系统调试与优化
4.1 现场安装要点
- 传感器安装高度建议1.2-1.5米
- 微波雷达传感器轴线向下倾斜15°
- 电机安装后需手动测试门体滑动阻力
- 所有线缆需用缠绕管保护
4.2 参数调优记录
通过串口调试工具调整的关键参数:
code复制[PID参数]
P=0.35, I=0.02, D=0.15
[运动参数]
加速时间=1.2s
减速时间=0.8s
最大速度=0.4m/s
[检测参数]
存在检测延时=1.5s
消失检测延时=3.0s
4.3 常见故障排查
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 门体抖动 | PWM频率过低 | 调整至15kHz以上 |
| 误触发 | 传感器灵敏度过高 | 调整电位器至3/4位置 |
| 电机过热 | 减速比不匹配 | 增加减速箱级数 |
| 限位不准 | 机械松动 | 紧固安装支架螺丝 |
5. 成本核算与改进方向
5.1 BOM清单与成本
| 部件 | 型号 | 单价(元) | 数量 | 小计 |
|---|---|---|---|---|
| MCU | STC12C5A60S2 | 8.5 | 1 | 8.5 |
| 电机 | JGA25-370 | 35 | 2 | 70 |
| 驱动 | L298N | 12 | 1 | 12 |
| 传感器 | HC-SR501 | 6 | 1 | 6 |
| 雷达 | RCWL-0516 | 9 | 1 | 9 |
| 其他 | 结构件/线材 | - | - | 45 |
| 总计 | 150.5 |
5.2 后续优化方向
- 增加蓝牙/WiFi模块实现手机控制
- 改用步进电机+编码器实现位置闭环
- 添加RFID实现权限管理
- 开发太阳能供电版本
实际使用中发现,在雨雾天气微波雷达的误报率会上升约8%,后续考虑增加环境湿度补偿算法。另外门体运行时的噪音主要来自链条传动,改用同步带可降低约6dB。
