闩锁(Latching)电磁阀是利用电流脉冲或内部永磁材料来保持设定位置,而无需持续施加电流。
虽然工作原理与所有线性电磁阀相似,但闩锁式电磁阀的不同之处在于电极性对于获得正确操作非常重要。当电流沿一个方向流动时,会为螺线管中的线圈场提供能量,这会增加永磁体的拉力。衔铁(armature)被吸引到螺线管体内的固定极(pole)上。

一旦衔铁移动了全部行程并与固定极接触,它将保持在此位置而无需任何进一步的电力输入。这是因为永磁体可以在不施加电源的情况下,在磁路中产生一个小的磁通量,使得衔铁和固定极片之间互相吸引。要将螺线管从此保持位置释放,必须通过将电流沿相反方向送回线圈场来取消“保持”磁铁的吸引力。
当脉冲时间与保持时间相比非常短时,闩锁式电磁阀效率最高。虽然可用于短行程和长行程应用,但应尽量缩短螺线管行程以提高效率。
所以要正确驱动这种电磁阀,就需要施加两个不同方向的电流。如果要改变电流的方向,就必须要用到我们前面提到的H桥电路。
让我们尝试在Proteus中模拟驱动电磁阀。
先采用单片机加H桥电路的驱动方式,建立以下电路图:

从左到右分别为8051单片机,L293D H桥驱动,由于Proteus没有电磁阀,我们这里选用了一个latching类型的继电器,然后加了一个LED灯来模拟电磁阀的打开和关闭。

单片机的代码如下:
#include <reg51.h>
#include <stdio.h>
// Define motor control pins
sbit IN1 = P2^0; // Motor direction pin 1
sbit IN2 = P2^1; // Motor direction pin 2
// Function to introduce delay
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 123; j++);
}
void main(void)
{
IN1 = 0;
IN2 = 0;
// Write your code here
while (1){
IN1 = 1; // Set IN1 high
IN2 = 0; // Ensure IN2 is low
delay_ms(20); // High for 20ms
IN1 = 0; // Set IN1 low
delay_ms(20); // Low for 20ms
delay_ms(2000);
// If you want to alternate between IN1 and IN2:
IN1 = 0; // Set IN1 low
IN2 = 1; // Set IN2 high
delay_ms(20); // High for 20ms
IN2 = 0; // Set IN2 low
delay_ms(20); // Low for 20ms
delay_ms(2000);
}
;
}
运行结果单片机应产生一个20ms的脉冲,命令继电器以2s的间隔打开和关闭。

将示波器接入IN1和IN2可以得到以上波形

运行结果:继电器以每隔两秒的频率打开和关闭
单片机虽然功能强大,但是有时候考虑到能耗,成本和空间,未必是最优解。这里其实我们只需要单片机产生一个脉冲,可以考虑使用555芯片。555芯片的使用在这篇文章中有详细介绍。
下面的电路图是一种思路,采用两个555芯片(或者一个带有双时钟的556芯片)加一个H桥驱动,555芯片模式设为单稳态,按一下按钮就可以产生一个固定脉冲长度的方波。


另一个思路是采用555+D flipflop+H bridge,555设为无稳态作为时钟信号输入。D flip-flop接收控制信号来源。

D类型FlipFlop示意图如下,作用就是可以把一个输入信号D变为两个相反的信号从Q和Q-bar(Q-bar对Q取反)输出:

真值表:
Clock | D | Qnext |
---|---|---|
Rising edge | 0 | 0 |
Rising edge | 1 | 1 |
Non-rising | X | Q |

运行示意:采用0.5Hz的方波作为D输入源