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