本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

使用 LM35 和 ATtiny13 的 PWM 冷却风扇控制和过温保护

发布时间:2022-06-05
分享到:

使用 LM35 和 ATtiny13 的 PWM 冷却风扇控制和过温保护

发布时间:2022-06-05
分享到:

适当的散热是当今电子产品的基本规则。电子元件的最佳工作温度为 25 度(标准室温)。一些商业设备中的散热没有正确完成,这会影响设备的寿命和性能。因此,嵌入一个紧凑的自动冷却风扇控制器板会很有用。此外,它还可用于保护您自己设计的电路及其功率元件,例如稳压器、MOSFET、功率晶体管等。

之前,我已经介绍了一个控制冷却风扇的电路,但是,我的目的是不使用任何微控制器并使其尽可能简单。因此,该设备是风扇的简单开/关开关,具体取决于定义的温度阈值。这一次,我决定设计一个完整且更专业的电路,使用 LM35 温度传感器和 ATTiny13 微控制器来控制大多数标准风扇(25KHz PWM)。

我使用了 SMD 元件,PCB 板很紧凑。它可以控制一个或多个并联的标准3线或4线风扇,例如CPU风扇。此外,可以使用继电器保护目标设备/组件免受过热影响。还通过视觉/声音警告(闪烁的 LED 和蜂鸣器)通知用户。

为了设计原理图和 PCB,我使用了 Altium Designer 22 和 SamacSys 组件库(Altium 插件)。要获得高质量的制造 PCB 板,您可以将 Gerbers 发送到 PCBWay 并使用 componentsearchengine.com 购买原始组件。我最初在面包板上测试了电路。我使用 Siglent SDM3045X 万用表准确检查电压,并使用 Siglent SDS1104X-E 示波器检查 PWM 脉冲的形状、占空比和频率。

规格

  • 电源电压:12VDC(见正文)
  • 负载过温保护:有(60度以上)
  • PWM频率:25KHz
  • 风扇电压:12VDC
  • 最大负载电压/电流:250V-10A (AC/DC)
  • 有效温度阈值:25C 至 60C
  • 过温警告:是(闪烁的 LED 和蜂鸣器)

电路分析

图1-PWM散热风扇控制器装置示意图

图 1 显示了 PWM 冷却风扇控制装置的示意图。该电路的核心是一个 ATtiny13 微控制器 [1]。它读取温度值并决定如何处理风扇、继电器和蜂鸣器。

根据 ATtiny13 数据表:“ATtiny13 是一款基于 AVR 增强型 RISC 架构的低功耗 CMOS 8 位微控制器。通过在单个时钟周期内执行强大的指令,ATtiny13 实现了接近 1 MIPS/MHz 的吞吐量,使系统设计人员能够优化功耗与处理速度。”

我已将 IC1 的时钟源配置为 9.6MHz,内部。对于我们的应用程序而言,无需使用外部时钟源(例如晶体)就足够了。R1 是复位引脚的上拉电阻,以防止 MCU 意外复位。C2 和 C3 是去耦电容,用于降低 +5V 电源的噪声。

电源

电源的主要元件是REG1,它是一个78L05稳压器[2]。我为此调节器选择了 SO-8 封装。P5 是一个两针公 XH 连接器,为控制板和风扇供电。电源电压 (12V) 的电流取决于连接的风扇数量,否则 +5V 电源轨的电流消耗非常低。R7和C7在输入端构建了一个低通RC滤波器,以尽可能降低输入噪声,但RC滤波器上的压降对稳压器的工作影响不大。D3 是一个 0805 绿色 LED,用于显示正确的电源供应,R8 将电流限制到 D3。C5 和 C7 用于降低输出电压噪声。

警报

此部分的组件是 R5、R6、P4 和 D2。D2 是一个 0805 红色 LED,当发生过热时会闪烁。R5 限制 D2 电流。P4 为 2 针 XH 公头连接器,用于连接 5V 蜂鸣器。R6 限制蜂鸣器的电流。

中继

该部分的组件是 Q1、D1、R4、C4、K1 和 P3。K1 是一个 12V-10A 继电器,用于在发生过热时关闭负载。它是常闭(NC),这意味着负载是打开的。D1 保护 Q1 免受继电器电感器的反向电流的影响,C4 抑制电流尖峰。Q1 是一个 2N7002 [3] Mosfet,用于切换继电器。R4 用于下拉 Q1 的栅极引脚以避免不必要的触发。

LM35 温度传感器

P1 是一个 3 针公 XH 连接器,用于将 LM35 传感器连接到电路板。您应该使用导热胶将 LM35 安装在散热器上,并使用短线将传感器连接到电路板。C1 是一个去耦电容,用于降低噪声。

AVR ISP 

ISP 是一个 5 针公头,用于对板载微控制器进行编程。您可以使用任何您喜欢的编程器,例如便宜的 USBasp 编程器或类似的编程器。

12V风扇

P2 是一个 3 针 XH 公头连接器,用于将风扇连接到电路板。Q2 用于将 PWM 脉冲传输到风扇的控制引脚。R2 是一个 10K 的上拉电阻,可将 5V PWM 信号电平转换为 12V。R3 是一个下拉电阻器,以避免不必要地触发 Q3 的栅极引脚。图 2 显示了一个典型的 Intel CPU 风扇,它可能是您使用此控制器板冷却组件的选项之一。

图 2-一个英特尔 CPU 风扇,它足够便宜,可用于冷却

PCB布局

图 3 显示了设计的 PCB 布局。它是一个两层 PCB 板,除了继电器和连接器外,其他组件都是 SMD。最小的封装尺寸是 0805,焊接组件应该没有任何问题,尽管您可以订购它完全组装。

图 3-PWM冷却风扇控制电路的PCB布局 

当我决定为这个项目设计原理图和 PCB 时,我意识到我的元件库存储中没有 Q1、Q2、REG1 和 IC1的元件库。因此,像往常一样,我选择了 IPC 级 SamacSys 组件库,并使用免费的 SamacSys 工具和服务安装了缺少的库(原理图符号、PCB 封装、3D 模型)。导入库有两种方法:您可以访问componentsearchengine.com并手动下载和导入库,或者您可以使用SamacSys CAD插件并自动将库导入/安装到设计环境中。

上图显示了所有支持的电子设计 CAD 软件。很明显,所有著名的球员都得到支持。我使用 Altium Designer,所以我使用 SamacSys Altium 插件安装了缺少的库,如下图。

PCB板的3D视图和两个组装图

微控制器的代码

我使用 Arduino IDE 编写和编译微控制器的代码。我在库管理器中安装了 MicroCore [9],以便能够为 ATtiny13 编译代码。你可以考虑下面的代码:


// Clock at 9.6MHz
#define F_CPU 9600000


const int PWMPin = 1;  
analog_pin_t PotPin = A3;
const unsigned char relayPin = 0, buzzerPin = 4;
unsigned int rawTemp = 0, out = 0;
unsigned char counter = 0;


void setup()
{
  analogReference(INTERNAL1V1);
  pinMode(PWMPin, OUTPUT);
  pinMode(relayPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(relayPin, 0);
  digitalWrite(buzzerPin, 0);
  // Phase Correct PWM Mode, no Prescaler
  // PWM on Pin 1(PB1), Pin 0(PB0) disabled
  // 9.6MHz / 192 / 2 = 25Khz
  TCCR0A = _BV(COM0B1) | _BV(WGM00);
  TCCR0B = _BV(WGM02) | _BV(CS00);
  // Set TOP and initialize duty cycle to zero(0)
  OCR0A = 192;  // TOP - DO NOT CHANGE, SETS PWM PULSE RATE
  OCR0B = 192;    // duty cycle for Pin 1(PB1)
}


void loop()
{
  rawTemp = analogRead(PotPin) + rawTemp;
  counter ++;
  if (counter == 15) {
    rawTemp = rawTemp / 15;
    if (rawTemp < 232) {
      OCR0B = 192;
    } else {
      out = map(rawTemp, 232, 558, 192, 0);
      OCR0B = out;
    }
    if (rawTemp > 560)
    {
      emergency_OFF();
    }
    counter = 0;
    rawTemp = 0;
  }
  _delay_ms(25);
}


void emergency_OFF() {
  while (1) {
    digitalWrite(relayPin, 1);
    digitalWrite(buzzerPin, 1);
    _delay_ms(250);
    digitalWrite(buzzerPin, 0);
    _delay_ms(250);
  }
}

我已将 ADC 参考电压定义为 1.1V 内部。这意味着对于 1100mV 的输入电压,ADC 的最大值为 1023。LM35温度传感器25度输出电压为250mV,60度输出电压为600mV。因此,它非常适合 ADC 输入范围,最高 110 度,无需任何硬件修改。

要更改阈值,您应该修改 out = map(rawTemp, 232, 558, 192, 0),例如,将温度上限阈值从 60 度增加到 70 度。

要安装 MicroCore,您应该在 Arduino IDE 的首选项部分的 Additional Boards Manager URLs 中插入此 URL:

https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

图 7 显示了 Arduino IDE 的这一部分。

图 7-附加板管理器 URL,Arduino IDE 首选项部分

然后你应该去工具菜单和 Boards Manager 并安装 MicroCore。然后您将看到已安装的板,如图 8 所示。

图 8-安装了 MicroCore 库以支持 ATtiny13 MCU

要生成 HEX 文件并对 MCU 进行编程,您应该转到 Sketch 菜单并按 Export Compiled Binary。图 9 显示了该过程的图片。

图 9-在 Arduino IDE 中生成 HEX 文件

然后只需将您的编程器连接到 PCB 板的 ISP 接头并编程 MCU。熔丝位应在 9.6MHz 内部时钟上设置,没有时钟分频。

测试

在设计原理图和 PCB 之前,我在面包板上测试了电路。因此,您可以确保一切正常。图 10 显示了 FAN 控制引脚的 PWM 信号。我使用 Siglent SDS1104X-E 示波器来捕获信号。

图 10-25KHz PWM 信号至风扇 (Silent SDS1104X-E)

材料清单

图 11 显示了该项目的材料清单和零件编号。

图 11-PWM Cooling-FAN 控制电路的物料清单

以上就是本项目的全部内容了,欢迎留言评论交流。

* 以上内容翻译自网络,原作者:Hesam Moshiri, Anson Bao,如涉及侵权可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论