Arduino与Proteus仿真实例使用计时器实现PWM仿真
Arduino与Proteus仿真实例-使用计时器实现PWM仿真
使用计时器实现PWM仿真
1、什么是PWM
PWM(Pulse Width Modulation)称为脉冲宽度调制。PWM 是一种根据给定频率和占空比振荡的数字(即方波)信号。
- 频率(以赫兹表示)描述了输出脉冲重复的频率。
- 周期是每个周期所花费的时间,是频率的倒数。
- 占空比(以百分比表示)描述了该频率窗口内的脉冲宽度。

PWM使用矩形脉冲波,其脉宽被调制导致波形平均值的变化。 如果我们考虑一个脉冲波形
f
(
t
)
{f(t)}
f(t),周期为
T
T
T,低值
y
m
i
n
{y_{min}}
ymin,高值
y
m
a
x
{y_{max}}
ymax和占空比
D
D
D,如下图所示,波形的平均值为:

生成的波形如下图所示:

由于
f
(
t
)
f(t)
f(t)是一个脉冲波,因此
y
m
a
x
y_{max}
ymax的取值范围为
0
<
t
<
D
×
T
0 < t < D \times T
0<t<D×T,
y
m
i
n
y_{min}
ymin的取值范围为
D
×
T
<
t
<
T
D \times T < t < T
D×T<t<T,上面的表达式可以推导为:

因此,信号的的平均值
y
\over{y}
y直接取决于占空比
D
D
D。那么占空比D如何计算呢?
假设一个脉冲周期由一个 ON 周期 (5V) 和一个 OFF 周期 (0V) 组成。 信号在一段时间内开启的部分称为占空比,即该频率窗口内的脉冲宽度。

例如,一个周期为 10ms 的脉冲将保持 ON(高)2ms。因此,占空比将为:
D
2
m
s
/
10
m
s
20
D = 2ms / 10ms = 20%
D=2ms/10ms=20
通过 PWM 技术,我们可以使用 ON-OFF 信号来控制输送到负载的功率。 PWM 信号可用于控制直流电机的速度和改变 LED 的亮度。不同占空比的脉宽调制信号如下图所示:

Arduino可以提供05v范围的信号,通过255,对应的电压范围为0-5V 。analogWrite(pin, value)函数实现,其中 参数value为占空比,其取值范围为0

Arduino UNO提供了6个PWM端口,如下图所示:

| Timer output | Arduino output | Chip pin | Pin name |
|---|---|---|---|
| OC0A | 6 | 12 | PD6 |
| OC0B | 5 | 11 | PD5 |
| OC1A | 9 | 15 | PB1 |
| OC1B | 10 | 16 | PB2 |
| OC2A | 11 | 17 | PB3 |
| OC2B | 3 | 5 | PD3 |
2、仿真电路原理图

3、仿真代码实现
1 | int x, y; |
4、仿真结果

文章来源: https://iotsmart.blog.csdn.net/article/details/120842114