📜  Arduino-脉宽调制

📅  最后修改于: 2020-11-05 03:35:47             🧑  作者: Mango


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

PWM的基本原理

脉宽调制基本上是一个随时间变化的方波。下图显示了基本的PWM信号。

脉宽调制

有与PWM相关的各种术语-

  • 开启时间-信号持续时间长。

  • 关闭时间-信号持续时间很短。

  • 周期-表示为PWM信号的导通时间和截止时间之和。

  • 占空比-表示为在PWM信号周期内保持打开状态的时间信号的百分比。

如图所示,T on表示接通时间,T off表示信号的断开时间。周期是开启和关闭时间的总和,计算公式如下式所示:

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

占空比

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

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

AnalogWrite()函数

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

在大多数Arduino板上(带有ATmega168或ATmega328的那些),此函数可在引脚3、5、6、9、10和11上工作。在Arduino Mega上,它可在引脚2-13和44-46上工作。带有ATmega8的电路板仅在引脚9、10和11上支持AnalogWrite()

UNO PWM引脚

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

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

AnalogWrite()函数语法

analogWrite ( pin , value ) ;

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

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
}