如何使用Arduino生成的PWM来控制交流风扇的速度

警告!! 本项目中讨论的电路图仅用于教育目的。请注意,使用 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;
}

32款emc设计标准电路设计方案
PLC是一种通过读取传感器、处理数据来实现制造过程自动化的复杂设备
电池格局将变化 移动电源企业或受影响
差分对管的检测方法
模块化小王子 LG G5 获得 Android 7.0 更新
如何使用Arduino生成的PWM来控制交流风扇的速度
一键智能试装的体感试衣镜,它有哪些作用
红米Note 4X等几款骁龙625旗舰推荐
新型铜合金钎焊箔或应用于高效铜散热器
vivo X Fold+月底发 达折叠屏行业顶级水平
美国专利局公布了苹果的第二项关于该技术的新专利
环境光测距传感器芯片的简单介绍
微雪电子7寸树莓派显示屏 介绍
生意不好做?10大韩企裁员 三星砍6000人最猛!
百度地图2023十一出行预测:近年最热闹十一!人口迁徙总量或超去年200%
是德科技为 PathWave ADS增添新分析工具
realme真我Q5系列新机发布:斩获京东、天猫双平台销量冠军
USB端口简化附件与计算机连接过程
软启动器的主要参数有什么
怎样根据介质选择流量计