在这篇文章中我们解释了如何使用arduino做PWM(脉宽调制)控制。如果你是新的电子产品,我们有一个详细的文章解释脉冲宽度调制。我们已经解释了PWM在本教程中使用两个例子,这将帮助您了解如何使用PWM控制LED亮度和如何使用PWM控制直流电机的速度。

利用arduino进行PWM控制。

PWM控制是一种非常常用的跨负载功率控制方法。该方法易于实现,效率高。PWM信号本质上是一个高频方波(通常大于1KHz)。这个方波的占空比是变化的,以改变供给给负载的功率。占空比通常用百分比表示,可以用公式表示:%占空比=(t/(T.+ T.离开)) * 100。在哪里T方波很高的时候了T离开方波低的时间。当占空比增加时,负载侧功率下降增加,当占空比减少时,负载侧功率下降。一个典型的PWM功率控制器方案框图如下所示。

PWM控制器框图

控制信号是我们给PWM控制器作为输入。根据PWM控制器的设计,它可以是模拟信号或数字信号。控制信号包含了负载需要多少功率的信息。PWM控制器接受控制信号,并根据要求调整PWM信号的占空比。不同占空比的PWM波形如下图所示。

PWM波占空比

在上面的波形表单中,您可以看到频率相同,但随时和关闭时间是不同的。在此显示使用Arduino的PWM控制的WO应用。使用Arduino使用Arduino和电机速度控制来控制LED亮度。

使用Arduino的LED亮度控制。

这一个可以是使用Arduino使用arduino的最简单的PWM控制示例。这里可以使用电位器控制LED的亮度。电路图如下所示。

Led亮度控制arduino在电路中,50K电位器的滑块连接到Arduino的模拟输入引脚A0。LED在Arduino的数字销12处连接。R1是电流限制电阻。该程序的工作非常简单。Arduino读取模拟输入引脚A0的电压(锅的滑块)。使用此读数完成必要的计算,并且根据其调整占空比。下面的程序中注意到逐步工作。

程序。
Int PWM = 12;//指定引脚12到可变pwm int pot = A0;//将模拟输入A0赋值给变量pot int t1 = 0;//声明变量t1 int t2 = 0;//声明变量t2 void setup() //设置循环{pinMode(pwm, OUTPUT);pinMode(pot, INPUT);//声明pin A0为输入}void loop() {t2= analogRead(pot);t1= 1000-t2;//从1000 ans减去t2将结果保存到t1//设置引脚12 HIGH delayMicroseconds(t1); // waits for t1 uS (high time) digitalWrite(pwm, LOW); // sets pin 12 LOW delayMicroseconds(t2); // waits for t2 uS (low time) }
例子。

下面的例子可以帮助您更好地理解这些内容。

假设调整电位器的滑块,使其滑块处的电压为3V。由于滑块终端连接到A0引脚,因此A0引脚处的电压也是3V。Arduino中的Analogread函数在模拟输入引脚处读取电压(在0到5V之间),将其转换为0到1023之间的数字值,并将其存储在变量中。

由于此处的模拟输入电压为3伏,数字读数为3 /(5/1023),即等于613.该613将保存到可变T2(低时间)。然后从1000中减去T2,结果为387的结果存储在变量T1(高时间)中。然后,数字引脚将接通T1 US,并关闭T2 US,重复循环。结果将是具有高时间= 387美元和低时间= 613美国的方波始终为1000次。该波形的占空比(387 /(387 + 613))* 100等于38.7%。波形看起来像下面所示的东西。

LED的pwm控制采用arduino

电机速度控制采用arduino。

使用arduino控制直流电机速度的电路图如下图所示。该电路的工作原理和程序与LED亮度控制相同。唯一的区别是,和附加的电机驱动电路使用的晶体管是包括在电路中。arduino的每个数字引脚只能汇聚或汇聚40mA。直流电机通常消耗更多的这是不安全的直接连接一个沉重的负载到数字引脚。

使用Arduino的直流电动机速度控制电路图中,电位器的滑块连接arduino的模拟输入引脚A0。电阻R1限制晶体管Q1的基极电流。电动机作为集电极负载连接到晶体管。电容C1旁路电压尖峰和噪声产生的电机。这个滤波电容是非常必要的,如果它不在那里电路可能不能正常工作。

程序。
Int PWM = 12;//指定引脚12到可变pwm int pot = A0;//将模拟输入A0赋值给变量pot int t1 = 0;//声明变量t1 int t2 = 0;//声明变量t2 void setup() //设置循环{pinMode(pwm, OUTPUT);pinMode(pot, INPUT);//声明pin A0为输入}void loop() {t2= analogRead(pot);t1= 1000-t2;//从1000 ans减去t2将结果保存到t1//设置引脚12 HIGH delayMicroseconds(t1); // waits for t1 uS (high time) digitalWrite(pwm, LOW); // sets pin 12 LOW delayMicroseconds(t2); // waits for t2 uS (low time) }

笔记。

  • 在上面显示的两个电路中,arduino都应该通过9V外部电源输入插孔供电。
  • 电位计的5V电源可以从Arduino板上的5V调节器输出中取出。
  • 我在测试时使用的直流电机额定电压为9V/100mA。
  • 在测试时使用的LED是一般目的4mm亮绿色LED。
  • 2N2222所能处理的最大集电极电流为800mA。在选择电机时要记住这一点。
  • 处理Arduino Board时要非常小心。任何错误的连接可能会损坏董事会
作者

6注释

  1. 拉尔

    请解释为什么选择1000作为减法的上限,假设锅是满的,它是5v,即它将成为1023,所以1000 - 1023 = -23将不会成为一个错误

  2. 沙巴兹

    我应该如何连接这个交流电机/风扇

  3. 阿玛

    你好,
    这个基本程序和基本电路设计都很好,也有帮助,
    谢谢

  4. 罗伊

    你好,
    我已经尝试过这个电路,我发现电机由于PWM的〜500Hz频率而发出可听噪声,我已经尝试改变定时器预分频器,但它结束了将肛门再次放出时间。
    任何想法如何去除可听噪音并保持模拟?

  5. 尼古拉斯里德

    因此,如果我要使用Arduino修改电机速度控制,以在一个PWM通道上运行2x电机(并行),电容器额定值和晶体管额定值将是多少?NTE293 NPN晶体管是否会发生?如果是这样,R1必须改变吗?

    我的矛盾应用是运行6个PWM通道,每个通道控制2台电脑风扇,总共57.6W,上述电机额定值。空间有限,所以我将使用Arduino Micro。我想用晶体管有一点给予,所以如果我以后得到一个略高的瓦加的粉丝,它不会燃烧系统;因此,希望从2N2222A的800mA限制切换。

    当涉及到所涉及的数学时,我不是最知识的最多,请原谅我,如果它完全拧紧等等和限制。我希望我的意图明确,如果你可以提供帮助,那将是非常容易的。

    谢谢,尼克

  6. Leyart席尔瓦

    问候SIRS.
    我们有飞机使用PWM原则开发入侵,请帮助我与您急需的想法开发。
    问候
    leyart席尔瓦

ezoic.报告此广告