风筝
发表于: 2020-2-8 08:46:00 | 显示全部楼层

在许多基于Arduino的自动化项目中,使用开关或使用某种控制很容易打开或关断家用电器。但是在很多应用中,我们需要控制交流电源,例如,控制风扇的速度或灯的亮度。在这种情况下,将使用到PWM技术,因此在本文我们将学习如何使用Arduino生成的PWM控制交流风扇的速度。


在本篇文章中,我们将演示使用晶闸管实现Arduino交流风扇速度控制。这里,交流信号的相位控制方法用于通过Arduino产生的PWM信号来控制交流风扇的速度。请注意,在使用220V交流电源电压时需要采取预防措施,并应遵循安全程序。电路工作时,请勿触摸任何组件或电线。


所需的组件

●    Arduino UNO开发板

●    4N25(过零检测)

●    10k电位器

●    MOC3021光电耦合器

●    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作为阴极。因此,按照下面的电路,当交流电波接近零交叉点时,内置的4N25 LED将熄灭,结果4N25的输出晶体管也将变为OFF,并且输出脉冲引脚将上拉至5V。同样,当信号逐渐增加到峰值时,LED点亮,晶体管也将导通,并且接地引脚连接到输出引脚,从而使该引脚为0V。使用此脉冲,可以使用Arduino检测过零点。

Zero-Crossing-Detector.jpg


2.  相角控制电路

在检测到过零点之后,现在我们必须控制电源打开和关闭的时间量。该PWM信号将决定输出到交流电动机的电压量,从而控制交流电动机的速度。这里使用的是BT136 TRIAC,它可以控制AC电压。


TRIAC是三端交流开关,可由其栅极端的低能量信号触发。在可控硅中,它仅在一个方向上传导,但是对于晶闸管,可以在两个方向上控制功率。

TRIAC-Phase-Angle-Graph.png


如上图所示,通过向其施加较小的栅极脉冲信号,以90度的触发角触发TRIAC。时间“ t1”是根据调光要求给出的延迟时间。例如,示例中,打开角度为90%,因此功率输出也将减半,因此灯也将以一半的强度发光。


我们知道交流信号的频率为50 Hz。因此时间段将是1 / f,即20ms。对于半个周期,这将是10毫秒或10,000微秒。因此,为了控制交流灯的功率,“ t1”的范围可以在0-10000微秒之间变化。


光电耦合器:

光电耦合器(Optocoupler)也称为光隔离器。它用于保持两个电路(如DC和AC信号)之间的隔离。基本上,它由发出红外光的LED和检测它的光电传感器组成。在本文中,MOC3021光耦合器用于根据微控制器信号(即直流信号)控制交流风扇。

TRIAC-and-optocoupler-connection-circuit-diagram.jpg


3.  电位器控制风扇速度

Potentiometer.jpg


此处使用电位器来改变交流风扇的速度。我们知道,电位器是一个三端设备,可充当分压器并提供可变电压输出。这个可变的模拟输出电压在Arduino模拟输入端子上给出,用于设置交流风扇的速度值。


4.  PWM信号产生电路

最后,根据速度要求将PWM脉冲提供给TRIAC,这反过来会改变AC信号的ON / OFF时序,并提供可变输出以控制风扇速度。在这里,Arduino用于生成PWM脉冲,该脉冲从电位器获取输入,并将PWM信号输出提供给TRIAC和光耦合器电路,从而进一步以所需速度驱动交流风扇。


电路连接图

基于Arduino的230v风扇速度控制电路的电路图如下所示:

Arduino-Fan-Control-using-TRIAC-Circuit-Diagram.jpg


我直接在面包板上使用220V交流电源进行了连接,如下图所示:

AC-Fan-Speed-Control-using-TRIAC-and-Arduino.jpg


对Arduino进行交流风扇速度控制编程

硬件连接后,我们需要编写Arduino的代码,该代码将生成一个PWM信号,以使用电位器输入来控制AC信号的ON / OFF时序。


首先,声明所有必需的变量,这些变量将在整个代码中使用。此处,BT136 TRIAC连接到Arduino的引脚6。然后声明变量speed_val以存储速度步数值。

  1. int TRIAC = 6;
  2. int speed_val =0;
复制代码

接下来,在setup函数中,将TRIAC引脚声明为输出,因为将通过该引脚生成PWM输出。然后,配置一个中断以检测过零。在这里,我们使用了一个名为attachInterrupt的函数,它将Arduino的数字引脚3配置为外部中断,并在其引脚上检测到任何中断时调用名为zero_crossing的函数。

  1. void setup()
  2. {
  3.   pinMode(LAMP, OUTPUT);
  4.   attachInterrupt(digitalPinToInterrupt(3), zero_crossing, CHANGE);
  5. }
复制代码

在loop函数内,从连接到A0的电位器读取模拟值,并将其映射到(10-49)的值范围。


为了找出这个范围,我们必须做一个小的计算。每个半周期等于10,000微秒。因此,此处的调光将以50步进行控制,这是一个任意值,可以更改。此处,最小步长取为10,而不是零,因为0-9步给出的功率输出大致相同,而最大步长取为49,因为实际上不建议采用上限。


然后,每个步长时间可以计算为10000/50 = 200微秒。这将在代码的下一部分中使用。

  1. void loop()
  2. {
  3.     int pot=analogRead(A0);
  4.     int data1 = map(pot, 0, 1023,10,49);
  5.     speed_val=data1;
  6. }
复制代码

在最后一步中,配置中断驱动的函数zero_crossing。在这里,调光时间可以通过将单个步进时间乘以步进数来计算。然后,在此延迟时间之后,可使用一个10微秒的小高脉冲来触发TRIAC,这足以打开TRIAC。

  1. void zero_crossing()
  2. {
  3.   int chop_time = (200*speed_val);
  4.   delayMicroseconds(chop_time);  
  5.   digitalWrite(TRIAC, HIGH);
  6.   delayMicroseconds(10);
  7.   digitalWrite(TRIAC, LOW);
  8. }
复制代码

代码

下面给出了使用Arduino和PWM进行此交流风扇控制的完整代码: main.rar (349 Bytes, 下载次数: 43)


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-19 14:47 , Processed in 0.141914 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表