1. 项目背景与核心需求
在工业生产与实验室场景中,精确的物料添加一直是个技术痛点。传统人工加料方式不仅效率低下,还容易因操作误差导致产品质量波动。我在某化工企业实习期间就亲眼见过,因为操作员疲劳导致配料比例偏差0.5%,整批产品直接报废的案例。
这个智能加料机控制系统正是为解决这类问题而生。它通过STM32单片机作为控制核心,配合称重传感器和步进电机,实现了±1g精度范围内的自动加料。相比市面上的PLC方案,我们的设计成本降低了60%,特别适合中小型企业和科研单位使用。
2. 系统架构设计解析
2.1 硬件组成方案
整个系统采用模块化设计,主要包含:
- 控制模块:STM32F103C8T6最小系统板(72MHz主频,64KB Flash)
- 传感模块:HX711称重传感器+铝合金悬臂梁(量程5kg,精度0.1g)
- 执行机构:42步进电机+TB6600驱动器(1.8°步距角)
- 人机交互:0.96寸OLED屏+旋转编码器
- 辅助电路:光耦隔离电路、EMC滤波电路
关键设计决策:选用HX711而不是更贵的工业称重模块,是因为其24位ADC在低速场合已足够精准,且成本仅1/10。实测在50Hz工频干扰下,通过软件滤波仍能保持稳定读数。
2.2 软件控制逻辑
采用状态机模式设计主程序流程:
- 待机状态:显示当前重量和配方参数
- 配方设置:通过编码器选择物料种类和目标重量
- 加料过程:
- 电机启动(初始PWM频率200Hz)
- 实时监测重量变化率(dW/dt)
- 当接近目标值时切换为PID闭环控制
- 完成报警:蜂鸣器提示并保存本次数据
c复制// 简化版状态机代码示例
typedef enum {
STATE_IDLE,
STATE_CONFIG,
STATE_DISPENSING,
STATE_FINISH
} SystemState;
void main() {
while(1) {
switch(currentState) {
case STATE_DISPENSING:
if(weight < target*0.9) {
motor_run(FULL_SPEED);
} else {
pid_control(); // 进入PID微调模式
}
break;
// 其他状态处理...
}
}
}
3. 核心算法实现细节
3.1 自适应PID控制算法
常规PID在加料末期容易出现超调,我们改进的算法包含以下特性:
- 变参数设计:根据误差大小动态调整PID系数
- |e|>10g时:Kp=3.0, Ki=0, Kd=0(快速响应)
- 5g<|e|≤10g:Kp=1.5, Ki=0.2, Kd=0.5
- |e|≤5g时:Kp=0.8, Ki=0.5, Kd=1.0(抑制震荡)
- 死区补偿:针对粉末物料的粘附特性,当|e|<0.3g时额外追加0.5g补偿量
c复制float pid_update(float error) {
static float integral = 0;
float kp, ki, kd;
// 参数自适应
if(fabs(error) > 10.0) {
kp = 3.0; ki = 0.0; kd = 0.0;
} else if(fabs(error) > 5.0) {
kp = 1.5; ki = 0.2; kd = 0.5;
} else {
kp = 0.8; ki = 0.5; kd = 1.0;
}
integral += error * dt;
float output = kp*error + ki*integral + kd*(error - last_error)/dt;
last_error = error;
// 死区补偿
if(fabs(error) < 0.3 && output < 0.5) {
output = 0.5;
}
return output;
}
3.2 数字滤波方案
现场测试发现的主要干扰源:
- 机械振动(50-100Hz)
- 电源纹波(100-150Hz)
- 电磁干扰(高频随机脉冲)
采用三级滤波组合:
- 硬件RC滤波(截止频率35Hz)
- 软件滑动平均(窗口大小8)
- 中值滤波(窗口大小5)
实测数据对比:
| 滤波方式 | 标准差(g) | 响应延迟(ms) |
|---|---|---|
| 无滤波 | 1.28 | 0 |
| 仅硬件滤波 | 0.75 | 20 |
| 三级组合滤波 | 0.12 | 45 |
4. 关键电路设计要点
4.1 称重传感器接口
HX711典型连接电路需要注意:
- 差分输入引脚(IN+, IN-)需加TVS二极管防护(如SMBJ6.0CA)
- 基准电压滤波:10μF钽电容+0.1μF陶瓷电容并联
- 时钟线串联100Ω电阻抑制振铃
常见故障排查:
- 读数漂移:检查传感器受力是否均匀,排除侧向力干扰
- 数据跳变:用示波器查看AVDD电源纹波(应<5mVpp)
- 通讯失败:测量CLK线上升时间(应<500ns)
4.2 电机驱动电路
TB6600驱动板的优化配置:
- 细分设置:选择1/8细分(平衡精度和速度)
- 电流调节:根据电机额定电流的70%设置(如1.5A电机设1.0A)
- 使能信号:增加光耦隔离(PC817+1kΩ电阻)
实测发现:在电机启停瞬间,电源线上会产生高达40V的电压尖峰。解决方法是在电源输入端并联100μF电解电容+0.1μF陶瓷电容,同时电机线加磁环。
5. 系统校准与调试
5.1 重量校准流程
采用两点校准法:
- 空载校准:记录传感器零点AD值(AD0)
- 加载已知重量(如500g标准砝码),记录AD值(AD1)
- 计算系数:K = (AD1 - AD0)/500.0
校准注意事项:
- 环境温度变化超过5℃需重新校准
- 校准前预热系统30分钟
- 砝码应置于称台中心位置
5.2 运动参数调试
通过串口发送调试命令(格式:!CMD,PARAM):
- !SPD,300 - 设置电机基础转速(单位:Hz)
- !ACC,50 - 设置加速度(Hz/s)
- !DEC,70 - 设置减速度(Hz/s)
调试技巧:
- 先用低速(如100Hz)测试电机转向是否正确
- 逐步提高速度,观察是否有失步现象
- 粉末物料建议加速度≤80Hz/s,液体可设120Hz/s
6. 实际应用案例
在某涂料厂的生产线改造中,我们部署了3台该加料机:
- 原人工配料时间:8分钟/批次
- 现自动配料时间:2.5分钟/批次
- 配料精度从±5g提升到±1g
- 半年故障率:0次(对比PLC方案的2次/年)
成本对比表:
| 项目 | 本方案 | 传统PLC方案 |
|---|---|---|
| 单台硬件成本 | ¥680 | ¥3200 |
| 开发周期 | 3天 | 2周 |
| 维护复杂度 | 低 | 高 |
7. 常见问题解决方案
7.1 加料末期抖动问题
现象:当接近目标重量时,出料口出现规律性抖动
解决方法:
- 检查PID微分项是否过大(建议D项≤P/3)
- 在机械结构上加装硅胶减震垫
- 软件增加"静止判断":当连续5次采样变化<0.05g时才判定完成
7.2 通讯干扰处理
RS485总线干扰典型表现:
- 称重数据偶尔跳变
- 电机无故启动
处理步骤:
- 用屏蔽双绞线替换普通导线
- 总线两端加120Ω终端电阻
- 在A/B线间并联6.8V稳压管
- 修改波特率从115200降为57600
8. 升级优化方向
当前系统还可扩展:
- 物联网功能:通过ESP-01S模块上传数据到云平台
- 条码扫描:增加HC-305扫码枪自动识别物料
- 语音提示:加入SYN6288语音芯片播报状态
- 双秤联动:主从机模式实现同步配料
最近测试发现,改用TMC2209静音驱动芯片后,电机噪音从45dB降到了32dB,特别适合实验室环境。下一步计划加入自适应学习功能,让系统能根据物料特性自动优化控制参数。