电子说
脉冲宽度调制(PWM)是一种使用开关数字信号来控制传递到电子负载的功率量的技术。该技术背后的关键思想是,可以通过改变信号的占空比来改变数字信号的平均DC值,从而改变传递给负载的功率。该方法通常用于控制直流电动机的速度和灯的亮度。开关电源也基于PWM技术。在本教程中,我们将讨论chipKIT Uno32板的PWM引脚,并通过控制两个外部LED的亮度来说明该概念。
PWM
理论
脉宽调制(PWM)是一种通过能量传递能量的方式脉冲而不是连续变化的信号。通过增加或减少脉冲宽度(频率保持不变),可以控制输出功率。信号打开的时间周期的一部分称为占空比。信号的平均DC值可以通过改变占空比来改变。占空比可以在0(信号始终关闭)到1(信号一直打开)之间的任何位置。假设,如果信号在开启时为+5 V,在关闭状态时为0 V,则通过更改信号的占空比,可以模拟0-5 V之间的任何电压。该方法通常用于控制直流电动机的速度和灯的亮度。 PWM的原理如下图所示。
PWM
电路设置
在chipKIT Uno32板上,可以将I/O引脚3、5、6、9和10配置为提供PWM输出。我们将两个LED(红色和绿色)连接到PWM引脚3和5,并通过改变驱动这些LED的PWM信号的占空比来控制它们的亮度。两个100电阻用于限制通过LED的电流。
电路设置
在面包板上的实际设置
写草图
可以使用 analogWrite生成Arduino平台中的PWM信号()命令。在括号内,您可以指定引脚号和所需的占空比(0-255)。占空比“ 0”表示始终关闭,“ 255”表示始终打开。调用 analogWrite()时,将在指定的PWM引脚上生成具有指定占空比的稳定方波。下图使用变化的占空比PWM信号来控制传递到两个LED的输出功率。两个LED交替淡入和淡出,这意味着当一个LED处于峰值强度时,另一个LED变暗,反之亦然。
int redLED = 3; // Red LED is connected to pin 3
int greenLED = 5; // Green LED is connected to pin 5
int redCount = 255; // Initial PWM values, RED is full
int greenCount = 1; // Green is dim
int i = 0;
void setup()
{
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop()
{
if (i 《 255) // First phase
{
redCount = redCount-1; // Red down
greenCount = greenCount+1; // Green up
}
else if (i 《 509) // Second phase
{
redCount = redCount+1; // Red up
greenCount = greenCount-1; // Green down
}
else // Re-set
{
i = 0;
}
i += 1;
analogWrite(redLED, redCount); // Write current values to LED pins
analogWrite(greenLED, greenCount);
delay(10); // Pause for 10 millisecond
}
输出
在程序中的职责周期以1为步长从1更改为255。首先,红色LED由占空比为255的PWM信号驱动,这意味着它将完全打开。驱动绿色LED的PWM信号的占空比为1,这意味着其强度最小。在每10 ms中,驱动红色LED的PWM信号的占空比减小1,而绿色LED的占空比则增大1。大约2550 ms之后,亮度条件反转,并且绿色LED完全点亮。重复此操作以交替产生淡入和淡出效果。
淡入和淡出
红色LED处于最大强度,而绿色则变暗了
绿色处于最大强度而红色却变淡
LED的工作电流非常低,因此,可以直接通过UNO32板的PWM输出驱动它们。对于直流电动机控制,需要一个外部电动机驱动器电路(例如H桥),该电路基本上将从微控制器引脚发出的低电流PWM信号放大为能够提供足够电流来驱动电动机的高电流PWM信号。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !