我们可以通过脉宽调制(PWM)驱动来控制直流继电器和接触器,从而实现节能。采用这种简单技术,继电器能耗可轻松减半。本文简要介绍继电器工作原理,并演示如何利用Arduino Nano Every等微控制器实现PWM驱动信号(如图1所示)。
图 1 :Arduino Nano Every微控制器、MOSFET驱动器和继电器的实物照片,背景为Digilent Analog Discovery设备。
继电器原理回顾
继电器本质上是机电一体化装置。其核心是能产生磁场的大型电磁铁,通过驱动衔铁运动来带动触点切换。线圈绕组作为电感元件,具有包括断电时感应反冲在内的所有电感特性。其工作状态遵循RL时间常数规律:
\tau = \dfrac{L}{R}
该时间常数是继电器的基本属性,也是我们节能PWM技术的核心依据。必须理解这个时间常数,它决定了驱动衔铁初始动作与保持位置所需的波形特征。
在继续之前,建议先阅读这些文章,了解继电器磁场特性及时常数与吸合时间的关系。
继电器参数解析
标准继电器规格书包含大量对PWM技术有价值的信息。本例以图1所示的CIT继电器J104D2C12VDC.20S为例。关键静态参数包括:
- 12VDC线圈、200mW功耗、720 \Omega 阻抗
- 9.00VDC吸合电压(额定电压75%)
- 1.2VDC释放电压(额定电压10%)
- “任何低于额定值的线圈电压都可能影响继电器正常工作。”
遗憾的是,规格书未明确动态触点闭合速度参数。但通过图2所示的实验测量可轻松获得该数据。本例中,我们观测微控制器指令信号(橙色)及通过分流电阻测量的继电器驱动电流(蓝色)。可见电流在约8毫秒后达到稳态(完全导通)。5.5毫秒处的电流下降与衔铁运动相关,这是由气隙减小导致的磁特性变化引起的。请参阅前文关于继电器磁场行为的文章。
技术提示 :静态与动态术语的区分对继电器应用PWM技术至关重要。静态描述静止状态,而动态描述运动状态。例如,静态12V直流线圈规格及功率、电流和线圈电阻,可通过电路理论课学习的基本欧姆定律轻松计算。诸如初始电流变化等动态关系则需要额外关注。如图2所示,我们看到电流是动态的(持续变化),仅在8至10毫秒间有短暂稳定。继电器机械闭合时间也属于这种动态关系。此处闭合时间主要由LR时间常数决定。
继电器吸合电压与释放电压规格的意义
从数据表规格中,我们观察到初始吸合电压与释放电压存在显著差异。考虑到继电器磁结构中的气隙,这并不令人意外。初始状态下,未通电继电器的气隙较大。需要较强的磁场(更高电流)来克服衔铁弹簧阻力。然而一旦衔铁闭合,气隙几乎消失。维持衔铁在此位置所需的磁场强度较低。
这种保持功率的降低正是继电器 PWM 技术的关键。
图 2 :Digilent Analog Discovery采集的微控制器PWM信号(橙色)与继电器驱动电流波形(蓝色:除以10)。注意10毫秒的开启时间后跟随PWM信号。
技术提示 :仔细观察图2可知,我们并未直接测量继电器电流。实际测量的是继电器及其续流二极管的总电流。根据电路理论,电感电流不会瞬时改变。我们处理的是电流随时间积分的过程,如同电容对电压的积分。实际继电器电流会在PWM充电周期间以向下倾斜(放电)的曲线填补间隙。
PWM 继电器驱动的两步过程说明
基于PWM的节能技术是一个两步走的过程。该方法与继电器的吸合和释放规格之间的差异直接相关。步骤:
-
吸合 :第一步是使用额定电压激活继电器。在满功率下,继电器会迅速闭合,如图2前6毫秒所示。一旦电流达到稳态,我们就可以转入下一步。在图2中,这个稳态电流约为16毫安,计算为12伏直流电除以720 \Omega 。
-
保持 :在此阶段,我们对继电器进行PWM控制。如图2所示,PWM占空比为50%。正如上一期技术提示所解释的,我们注意到这不是继电器电流的直接读数。相反,图2显示的是电源供给继电器的电流。因此,我们可以看到电源电流较稳态显著降低。我将由您来确定这个脉冲信号提供的真实有效值电流。
PWM 技术带来的优势与问题
PWM技术的主要优势是降低能耗。在本例中,我们看到50%的占空比通过降低电流,显著减少了线圈消耗的能量。通过更多实验,我们或许能进一步降低占空比以实现更大的节能。
这种降低的能耗确实存在一些缺点:
-
继电器性能折损 :仔细分析数据手册会发现其中标注的是"释放电压"而非最小保持电压。这两者并不相同。虽然我们可以降低占空比,但可能会达到继电器无法保持闭合的临界点。在振动环境中尤其如此。
-
电磁干扰 (EMI) :电气干扰表现为两种形式:
-
局部干扰 :PWM信号可能渗入被切换的信号中。例如,带有高次谐波的PWM线圈驱动会对微小模拟信号造成干扰。
-
辐射干扰 :PWM驱动信号及其谐波可能从PCB板辐射出去,对附近设备造成干扰。
-
技术提示 :通过修改时间常数可以缩短继电器闭合时间。回忆一下 \tau = L/R 这个公式。我们无法改变电感量,但可以通过增大电阻R来缩短继电器闭合时间。前文提到的继电器闭合时间文章中,将其表示为L/2R或L/4R,其中数字表示电阻的倍增系数。这里电阻值增加4倍,将使电感导致的闭合时间相应缩短4倍。代价是需要将电压提升4倍。
Arduino 微控制器实现继电器 PWM 驱动信号的代码
用于PWM继电器控制的Arduino代码如下所示。这段代码控制图1所示的两个继电器,每500毫秒执行一次开关动作。代码相对简单。首先执行10毫秒的digitalWrite(),随后在继电器激活期间剩余时间执行analogWrite()。这10毫秒时间让继电器电流完全闭合并达到稳态电流。随后激活PWM以保持继电器处于闭合状态。
#define RELAY_1_PIN 3
#define RELAY_2_PIN 5
void setup() {
pinMode(RELAY_1_PIN, OUTPUT);
pinMode(RELAY_2_PIN, OUTPUT);
}
void loop() {
digitalWrite(RELAY_1_PIN, HIGH);
delay(10);
analogWrite(RELAY_1_PIN, 128);
delay(450);
digitalWrite(RELAY_2_PIN, HIGH);
delay(10);
analogWrite(RELAY_2_PIN, 128);
delay(450);
digitalWrite(RELAY_1_PIN, LOW);
delay(500);
digitalWrite(RELAY_2_PIN, LOW);
delay(500);
}
结论
这种两步式继电器驱动技术只需几行微控制器代码即可轻松实现。它很可能直接兼容您现有的继电器驱动硬件。我建议您尝试这个技术。

