当前位置: 首页 > 文档资料 > Arduino 中文教程 >

Arduino - 脉冲宽度调制( Pulse Width Modulation)

优质
小牛编辑
124浏览
2023-12-01

脉冲宽度调制或PWM是用于改变脉冲序列中脉冲宽度的常用技术。 PWM具有许多应用,例如控制伺服和速度控制器,限制电机和LED的有效功率。

PWM的基本原理

脉冲宽度调制基本上是具有变化的高和低时间的方波。 基本PWM信号如下图所示。

PWM

有各种与PWM相关的术语 -

  • On-Time - 时间信号持续时间很长。

  • Off-Time - 时间信号持续时间很短。

  • Period - 表示为PWM信号的导通时间和关断时间之和。

  • Duty Cycle - 表示为PWM信号周期内保持的时间信号百分比。

Period

如图所示,T on表示导通时间,T off表示信号的关断时间。 期间是开启和关闭时间的总和,计算方法如下式所示 -

$$ T_ {total} = T_ {on} + T_ {off} $$

占空比

占空比计算为该时间段的接通时间。 使用上面计算的时间,工作周期计算如下 -

$$ D =\frac {T_ {on}} {T_ {on} + T_ {off}} =\frac {T_ {on}} {T_ {total}} $$

analogWrite() Function

analogWrite()函数将模拟值(PWM波)写入引脚。 它可用于点亮不同亮度的LED或以各种速度驱动电机。 在调用analogWrite()函数之后,该引脚将产生指定占空比的稳定方波,直到下一次调用analogWrite()或在同一引脚上调用digitalRead()或digitalWrite()。 大多数引脚上的PWM信号频率约为490 Hz。 在Uno和类似的板上,引脚5和6的频率约为980Hz。 莱昂纳多的第3和第11针也以980赫兹的速度运行。

在大多数Arduino板(带有ATmega168或ATmega328的板)上,此功能适用于引脚3,5,6,9,10和11.在Arduino Mega上,它适用于引脚2 - 13和44 - 46.较旧的Arduino具有ATmega8的电路板仅支持引脚9,10和11上的analogWrite()

UNO PWM引脚

Arduino Due支持引脚2至13上的analogWrite() ,以及引脚DAC0和DAC1。 与PWM引脚不同,DAC0和DAC1是数模转换器,可用作真正的模拟输出。

在调用analogWrite()之前,您无需调用pinMode()将引脚设置为输出。

analogWrite() Function Syntax

analogWrite ( pin , value ) ;

value - 占空比:介于0(始终关闭)和255(始终打开)之间。

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val/4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}