当我们给马达通电时马达就会转动,断电就会停止。如果我们不停的缩短这个通电和断电的时间间隔,是不是间隔越短马达就会转得越快,间隔越长就会转得越慢呢?PWM
就是利用这个原理来实现马达调速的。
脉冲宽度调制(英语:Pulse Width Modulation,缩写:
PWM
),简称脉宽调制,是将模拟信号变换为脉冲的一种技术,一般变换后脉冲的周期固定,但脉冲的工作周期会依模拟信号的大小而改变。
# 部署
按照下表连接好导线
序号 | 元件端子 | osepp UNO引脚号 |
---|---|---|
1 | (Fan Motor)的INA | 3 |
2 | (Fan Motor)的INB | 5 |
8 | 开关Button1 | A0 |
3 | 开关Button2 | A1 |
4 | 开关Button3 | A2 |
5 | 开关Button4 | A3 |
# 程序搭建
- oseppBlock程序
- Arduino程序
void setup()
{
//button1
pinMode(A0, INPUT); //定义开关1
//button2
pinMode(A1, INPUT); //定义开关2
//button3
pinMode(A2, INPUT); //定义开关3
//button4
pinMode(A3, INPUT); //定义开关4
//fan1
pinMode(3, OUTPUT); //定义3号引脚为输出模式
pinMode(5, OUTPUT); //定义5号引脚为输出模式
}
void loop()
{
if (digitalRead(A0) == LOW) //如果开关1按下
{
analogWrite(3, 50); //3号引脚输出pwm为50
analogWrite(5, 0); //5号引脚输出pwm为0
}
else if (digitalRead(A1) == LOW) //如果开关2按下
{
analogWrite(3, 150); //3号引脚输出pwm为150
analogWrite(5, 0); //5号引脚输出pwm为0
}
else if (digitalRead(A2) == LOW) //如果开关3按下
{
analogWrite(3, 0); //3号引脚输出pwm为0
analogWrite(5, 150); //5号引脚输出pwm为150
}
else if (digitalRead(A3) == LOW) //如果开关4按下
{
analogWrite(3, 0); //3号引脚输出pwm为0
analogWrite(5, 50); //5号引脚输出pwm为50
}
else
{
analogWrite(3, 0); //马达停止转动
analogWrite(5, 0);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 运行结果
当开关Button1
按下,风扇低速正转,开关Button2
按下高速正转,开关Button3
按下,风扇低速反转,开关Button4
按下高速反转。利用PWM
输出模式可以控制速度,但方向是利用不同的引脚输出信号来实现的。
# 解析
在模拟电路中,模拟信号的值可以连续进行变化,在时间和值的幅度上都几乎没有限制,基本上可以取任何实数值,输入与输出也呈线性变化。所以在模拟电路中,电压和电流可直接用来进行控制对象,例如家用电器设备中的音量开关控制、采用卤素LED灯具的亮度控制等等。但模拟电路有诸多的问题:例如控制信号容易随时间漂移,难以调节;功耗大;易受噪声和环境干扰等等。
与模拟电路不同,数字电路是在预先确定的范围内取值,在任何时刻,其输出只可能为ON和OFF两种状态,所以电压或电流会通/断方式的重复脉冲序列加载到模拟负载。
PWM技术是一种对模拟信号电平的数字编码方法,通过使用高分辨率计数器(调制频率)调制方波的占空比,从而实现对一个模拟信号的电平进行编码。其最大的优点是从处理器到被控对象之间的所有信号都是数字形式的,无需再进行数模转换过程;而且对噪声的抗干扰能力也大大增强(噪声只有在强到足以将逻辑值改变时,才可能对数字信号产生实质的影响),这也是PWM在通讯等信号传输行业得到大量应用的主要原因。目前在很多微型控制器(MCU)内部都包含有PWM控制器模块。