警告!! 本项目中讨论的电路图仅用于教育目的。请注意,使用 220V 交流电源电压需要采取极端的预防措施,并应遵循安全程序。电路运行时,请勿触摸任何元件或电线。
就像我们在许多基于 Arduino 的家庭自动化项目中所做的那样,使用开关或使用某种控制机制很容易打开或关闭任何家用电器。但是有很多应用需要我们部分控制交流电源,例如控制风扇的速度或灯的强度。在这种情况下,使用了PWM 技术,所以在这里我们将学习如何使用 Arduino 生成的 PWM 来控制 Arduino 的交流风扇速度。
在这个项目中,我们将演示使用 TRIAC 的 Arduino 交流风扇速度控制。这里使用交流信号的相位控制方法来控制交流风扇的速度,使用 Arduino 生成的 PWM 信号。在之前的教程中,我们使用 PWM 控制直流风扇的速度。
所需组件
Arduino UNO
4N25(过零检测器)
10k 电位器
MOC3021 0pto耦合器
(0-9)V、500 mA 降压变压器
BT136 可控硅
230 VAC 轴流交流风扇
连接线
电阻器
使用 Arduino 进行交流风扇控制
工作可以分为四个不同的部分。它们如下
1. 过零检测器
2. 相位角控制电路
3. 控制风扇转速量的电位器
4. PWM 信号发生电路
1. 过零检测器
我们家中的交流电源是 220v AC RMS,50 HZ。该交流信号本质上是交替的,并且会周期性地改变其极性。在每个周期的前半部分,它沿一个方向流动,达到峰值电压,然后下降到零。然后在下一个半周期,它以交替方向(负)流动到峰值电压,然后再次变为零。为了控制 AC Fan 的速度,需要对两个半周期的峰值电压进行斩波或控制。为此,我们必须检测要控制/斩波信号的零点。电压曲线上电压改变方向的这一点称为过零电压。
下图所示的电路是用于获取过零点的过零检测器电路。首先,使用降压变压器将 220V AC 电压降为 9V AC ,然后在其引脚 1 和 2 处馈入 4N25 光耦合器。4N25 光耦合器具有内置 LED,引脚 1 为阳极,引脚 2 为阴极。因此,根据下面的电路,当交流波接近零交叉点时,4N25 的内置 LED 将关闭,因此,4N25 的输出晶体管也将关闭,输出脉冲引脚将被拉到5V。同样,当信号逐渐增加到峰值时点,然后 LED 打开,晶体管也将打开,接地引脚连接到输出引脚,这使得该引脚为 0V。使用此脉冲,可以使用 Arduino 检测过零点。
2. 相位角控制电路
检测到过零点后,现在我们必须控制电源开启和关闭的时间量。该PWM 信号将决定输出到交流电机的电压量,进而控制电机的速度。这里使用了BT136 TRIAC,它控制交流电压,因为它是用于控制交流电压信号的电力电子开关。
TRIAC是一种三端交流开关,可由其栅极端的低能量信号触发。在 SCR 中,它仅在一个方向上导通,但在 TRIAC 的情况下,可以在两个方向上控制功率。要了解有关TRIAC和SCR的更多信息,请阅读我们之前的文章。
如上图所示,通过向 TRIAC 施加一个小的栅极脉冲信号以 90 度的触发角触发 TRIAC。时间“t1”是根据调光要求给出的延迟时间。例如,在这种情况下,触发角为 90%,因此功率输出也将减半,因此灯也会以一半的强度发光。
我们知道这里交流信号的频率是 50 Hz。所以时间段将是 1/f,即 20ms。对于半个周期,这将是 10 毫秒或 10,000 微秒。因此,为了控制交流灯的功率,“t1”的范围可以在 0-10000 微秒之间变化。
光耦:
光耦也称为光隔离器。它用于保持两个电路(如直流和交流信号)之间的隔离。基本上,它由发射红外光的 LED 和检测红外光的光电传感器组成。这里使用 MOC3021 光耦合器从微控制器信号(直流信号)控制交流风扇。
TRIAC和光耦连接图:
3. 控制风扇转速的电位器
这里使用电位器来改变交流风扇的速度。我们知道电位器是一个三端器件,它充当分压器并提供可变电压输出。这个可变的模拟输出电压在 Arduino 模拟输入端给出,用于设置交流风扇的速度值。
4. PWM信号发生单元
在最后一步中,根据速度要求向 TRIAC 提供PWM 脉冲,从而改变 AC 信号的 ON/OFF 时序并提供可变输出来控制风扇速度。在这里,Arduino 用于生成 PWM 脉冲,该脉冲从电位器获取输入,并将 PWM 信号输出到 TRIAC 和光耦合器电路,进一步以所需的速度驱动交流风扇。
电路原理图
这个基于 Arduino 的 230v 风扇速度控制电路的电路图如下所示:
注意:我在面包板上展示了完整的电路,只是为了便于理解。您不应该直接在面包板上使用 220V 交流电源,我使用虚线板进行连接,如下图所示
为 Arduino 编程以控制交流风扇速度
硬件连接后,我们需要为 Arduino 编写代码,它会产生一个PWM 信号,使用电位器输入来控制 AC 信号的 ON/OFF 时序。我们以前在许多项目中使用过 PWM 技术。
这个Arduino AC风扇速度控制项目的完整代码在这个项目的底部给出。下面给出代码的逐步解释。
第一步,声明所有需要的变量,这些变量将在整个代码中使用。这里 BT136 TRIAC 连接到 Arduino 的引脚 6。并且声明了变量speed_val来存储速度步长的值。
int TRIAC = 6;
int speed_val =0;
接下来,在setup函数中,将TRIAC引脚声明为输出,因为 PWM 输出将通过该引脚生成。然后,配置一个中断来检测过零。这里我们使用了一个名为attachInterrupt的函数,它将 Arduino 的数字引脚 3 配置为外部中断,并在其引脚检测到任何中断时调用名为zero_crossing的函数。
无效设置()
{
pinMode(灯,输出);
attachInterrupt(digitalPinToInterrupt(3), zero_crossing, CHANGE);
}
在无限循环中,从连接在 A0 的电位器读取模拟值,并将其映射到 (10-49) 的值范围。
要找出这个范围,我们必须做一个小计算。早些时候有人说,每半个周期相当于 10,000 微秒。所以这里的调光将被控制在 50 步,这是一个任意值,可以改变。这里的最小步数取为 10,而不是零,因为 0-9 步给出的功率输出大致相同,最大步数取为 49,因为实际上不建议采用上限(在这种情况下为 50)。
那么每一步的时间可以计算为 10000/50= 200 微秒。这将在代码的下一部分中使用。
无效循环()
{
int pot=analogRead(A0);
int data1 = map(pot, 0, 1023,10,49);
speed_val=data1;
}
最后一步,配置中断驱动函数zero_crossing。在这里,可以通过将单个步进时间乘以 no 来计算调光时间。的步骤。然后在此延迟时间之后,可以使用 10 微秒的小高脉冲触发 TRIAC,这足以打开 TRIAC。
无效过零()
{
int 斩波时间 = (200*speed_val);
延迟微秒(chop_time);
数字写入(TRIAC,高);
延迟微秒(10);
数字写入(TRIAC,低);
}
下面给出了使用 Arduino 和 PWM进行交流风扇控制的完整代码
int TRIAC = 6;
int speed_val=0;
无效设置()
{
pinMode(TRIAC,输出);
attachInterrupt(digitalPinToInterrupt(3), zero_crossing, CHANGE);
}
void zero_crossing()
{
int Chop_time = (200*speed_val);
延迟微秒(chop_time);
数字写入(TRIAC,高);
延迟微秒(10);
数字写入(TRIAC,低);
}
无效循环()
{
int pot=analogRead(A0);
int data1 = map(pot, 0, 1023,10,40);
speed_val=data1;
}