Marlin硬件监控:温度传感器和风扇控制

Marlin硬件监控:温度传感器和风扇控制

【免费下载链接】Marlin Marlin 是一款针对 RepRap 3D 打印机的优化固件,基于 Arduino 平台。 【免费下载链接】Marlin 项目地址: https://gitcode.com/GitHub_Trending/ma/Marlin

引言:3D打印的"生命体征"监控系统

在3D打印过程中,温度控制和散热管理是确保打印质量和设备安全的关键因素。Marlin固件作为业界领先的3D打印机固件,提供了强大而灵活的硬件监控系统。本文将深入探讨Marlin中温度传感器和风扇控制的实现原理、配置方法和最佳实践。

通过本文,您将掌握:

  • 温度传感器的类型和工作原理
  • PID温度控制算法的实现机制
  • 风扇控制策略和配置选项
  • 硬件故障检测和保护机制
  • 高级温度监控功能的配置技巧

温度传感器系统架构

传感器类型支持

Marlin支持多种温度传感器类型,从常见的NTC热敏电阻到高精度的PT100/PT1000 RTD和热电偶:

// 温度传感器类型定义示例
#define TEMP_SENSOR_0 1      // 100kΩ EPCOS热敏电阻
#define TEMP_SENSOR_1 0      // 未使用
#define TEMP_SENSOR_BED 1    // 热床使用相同类型传感器

// 高级传感器配置
#if TEMP_SENSOR_IS_MAX_TC(0)
  #define MAX31865_SENSOR_OHMS_0 100      // PT100电阻值
  #define MAX31865_CALIBRATION_OHMS_0 430 // 校准电阻值
#endif

温度测量流程

Marlin使用ADC(模数转换器)采样和数字滤波技术来获得准确的温度读数:

mermaid

多传感器管理

Marlin支持同时监控多个温度传感器:

传感器类型配置标识典型应用场景
热端温度TEMP_SENSOR_0-7挤出机加热器
热床温度TEMP_SENSOR_BED打印平台加热
探头温度TEMP_SENSOR_PROBE自动调平探头
腔室温度TEMP_SENSOR_CHAMBER封闭式打印机
冷却器温度TEMP_SENSOR_COOLER水冷系统
主板温度TEMP_SENSOR_BOARD电子元件监控

PID温度控制算法

PID控制原理

Marlin实现了先进的PID(比例-积分-微分)控制算法来精确维持目标温度:

// PID控制器数据结构
typedef struct {
  float Kp, Ki, Kd;    // PID参数
  float work_p, work_i, work_d;  // 工作变量
  bool pid_reset;      // 重置标志
  float temp_dState;   // 微分状态
} PID_t;

// PID输出计算
float get_pid_output(const float target, const float current) {
  const float pid_error = target - current;
  float output_pow;
  
  if (!target || pid_error < -(PID_FUNCTIONAL_RANGE)) {
    pid_reset = true;
    output_pow = 0;
  }
  else if (pid_error > PID_FUNCTIONAL_RANGE) {
    pid_reset = true;
    output_pow = MAX_POW;
  }
  else {
    if (pid_reset) {
      work_i = 0;
      work_d = 0;
      pid_reset = false;
    }
    
    work_p = Kp * pid_error;
    work_i = constrain(work_i + Ki * pid_error, 0, float(MAX_POW - MIN_POW));
    work_d += (Kd * (temp_dState - current) - work_d) * PID_K2;
    
    output_pow = constrain(work_p + work_i + work_d + float(MIN_POW), 0, MAX_POW);
  }
  
  temp_dState = current;
  return output_pow;
}

PID参数整定

Marlin提供了多种PID参数整定方法:

// PID自动整定命令
void GcodeSuite::M303() {
  // 执行PID自动整定过程
  // 通过加热冷却循环确定最优参数
}

// PID参数保存
void GcodeSuite::M301() {
  // 设置和保存PID参数
  // 格式: M301 P[Kp] I[Ki] D[Kd]
}

风扇控制系统

风扇类型和配置

Marlin支持多种风扇类型,每种都有特定的控制策略:

// 风扇配置示例
#define FAN_SOFT_PWM              // 启用软件PWM控制
#define FAN_KICKSTART_TIME 100    // 风扇启动延时(ms)
#define FAN_MAX_PWM 255           // 最大PWM值

// 风扇速度映射
uint8_t fan_speed[FAN_COUNT];     // 风扇速度数组

// 设置风扇速度
void Temperature::set_fan_speed(const uint8_t fan, const uint16_t speed) {
  fan_speed[fan] = constrain(speed, 0, 255);
  // 应用软件PWM或硬件PWM
}

智能风扇控制策略

Marlin实现了多种智能风扇控制模式:

mermaid

风扇故障检测

Marlin提供了风扇状态监控和故障检测功能:

// 风扇检查功能
#if HAS_FANCHECK
class FanCheck {
private:
  static uint16_t edge_counter[TACHO_COUNT];
  static uint8_t rps[TACHO_COUNT];  // 转速(RPS)
  
public:
  static void update_tachometers();  // 更新转速计
  static void compute_speed(uint16_t elapsedTime); // 计算速度
  static void check_deferred_error(); // 检查延迟错误
};
#endif

硬件保护机制

温度保护设置

Marlin提供了全面的温度保护机制防止硬件损坏:

// 温度保护阈值
#define HEATER_0_MINTEMP   5    // 最低温度保护(°C)
#define HEATER_0_MAXTEMP 275    // 最高温度保护(°C)
#define BED_MINTEMP        5    // 热床最低温度
#define BED_MAXTEMP      120    // 热床最高温度

// 看门狗定时器
#if WATCH_HOTENDS
typedef struct HeaterWatch<WATCH_TEMP_INCREASE, TEMP_HYSTERESIS, WATCH_TEMP_PERIOD> hotend_watch_t;
static hotend_watch_t watch_hotend[HOTENDS];
#endif

故障检测和恢复

Marlin实现了多级故障检测机制:

保护类型检测机制恢复策略
热电偶断开ADC读数异常紧急停止加热
加热器故障温度不随功率变化触发热失控保护
风扇故障转速检测异常降低打印速度或暂停
电源故障电压监测保存状态并安全关机

高级配置技巧

自定义热敏电阻表

对于特殊的热敏电阻,可以创建自定义温度表:

#if HAS_USER_THERMISTORS
// 用户自定义热敏参数
typedef struct {
  bool pre_calc;           // 预计算标志
  float sh_c_coeff;        // Steinhart-Hart C系数
  float series_res;        // 串联电阻值
  float res_25, res_25_recip; // 25°C电阻值及倒数
  float beta, beta_recip;  // Beta值及倒数
} user_thermistor_t;

static user_thermistor_t user_thermistor[USER_THERMISTORS];
#endif

温度补偿功能

Marlin支持多种温度补偿功能以提高测量精度:

// 探头温度补偿
#if ENABLED(PROBE_TEMP_COMPENSATION)
class ProbeTempComp {
public:
  static bool enabled;                    // 补偿启用状态
  static celsius_float_t compensations[]; // 补偿值数组
  
  static void reset();                    // 重置补偿数据
  static void update_measurements();      // 更新测量值
  static celsius_float_t get_compensation(); // 获取补偿值
};
#endif

性能优化建议

温度采样优化

// 优化ADC采样参数
#define OVERSAMPLENR 16                    // 过采样次数
#define MIN_ADC_ISR_LOOPS 10               // 最小ISR循环次数
#define ACTUAL_ADC_SAMPLES _MAX(int(MIN_ADC_ISR_LOOPS), int(SensorsReady))

// PID计算频率优化
#define PID_dT ((OVERSAMPLENR * float(ACTUAL_ADC_SAMPLES)) / (TEMP_TIMER_FREQUENCY))

风扇控制优化

// 风扇响应优化
#define FAN_UPDATE_INTERVAL 2500           // 风扇更新间隔(ms)
#define FAN_KICKSTART_POWER 200            // 风扇启动功率

// 自适应风扇减速
#if ENABLED(ADAPTIVE_FAN_SLOWING)
static uint8_t fan_speed_scaler[FAN_COUNT]; // 风扇速度缩放因子
#endif

故障排除指南

常见温度问题排查

问题现象可能原因解决方案
温度读数不稳定接线不良或电磁干扰检查接线,增加滤波电容
温度持续上升热电偶短路或MOSFET故障检查传感器和驱动电路
PID振荡参数不合适或采样问题重新进行PID整定
风扇不启动接线错误或驱动故障检查风扇电源和信号线

风扇故障排查

// 风扇诊断命令
void GcodeSuite::M106() {
  // 设置风扇速度
  // 可用于测试风扇功能
}

void GcodeSuite::M107() {
  // 关闭所有风扇
  // 测试风扇停止功能
}

结语

Marlin的温度传感器和风扇控制系统提供了强大而灵活的硬件监控能力。通过合理的配置和优化,可以显著提高3D打印的可靠性、打印质量和设备安全性。掌握这些高级功能的使用方法,将帮助您充分发挥3D打印机的潜力。

记住,良好的温度控制和散热管理是成功3D打印的基础。定期检查和校准您的温度系统,确保始终在安全可靠的条件下运行。

【免费下载链接】Marlin Marlin 是一款针对 RepRap 3D 打印机的优化固件,基于 Arduino 平台。 【免费下载链接】Marlin 项目地址: https://gitcode.com/GitHub_Trending/ma/Marlin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值