Arduino 脈沖寬度調(diào)制

2018-11-16 11:39 更新

脈沖寬度調(diào)制或PWM是用于改變脈沖串中的脈沖寬度的常用技術(shù)。PWM有許多應(yīng)用,如控制伺服和速度控制器,限制電機(jī)和LED的有效功率。

PWM的基本原理

脈沖寬度調(diào)制基本上是一個(gè)隨時(shí)間變化而變化的方波。基本的PWM信號(hào)如下圖所示。

基本PWM信號(hào)

有很多術(shù)語與PWM相關(guān):

  • On-Time(導(dǎo)通時(shí)間) - 時(shí)間信號(hào)的持續(xù)時(shí)間較長(zhǎng)。

  • Off-Time(關(guān)斷時(shí)間) - 時(shí)間信號(hào)的持續(xù)時(shí)間較短。

  • Period(周期) - 表示為PWM信號(hào)的導(dǎo)通時(shí)間和關(guān)斷時(shí)間的總和。

  • Duty Cycle(占空比) - 它表示為在PWM信號(hào)周期內(nèi)保持導(dǎo)通的時(shí)間信號(hào)的百分比。

周期

如圖所示,Ton表示導(dǎo)通時(shí)間,Toff表示信號(hào)的關(guān)斷時(shí)間。周期是導(dǎo)通和關(guān)斷時(shí)間的總和,并按照以下公式計(jì)算:

周期

占空比

占空比用于計(jì)算為一段時(shí)間的導(dǎo)通時(shí)間。使用上面計(jì)算的周期,占空比計(jì)算為:

占空比

analogWrite()函數(shù)

analogWrite()函數(shù)將模擬值(PWM波)寫入引腳。它可用于以不同的亮度點(diǎn)亮LED或以各種速度驅(qū)動(dòng)電機(jī)。在調(diào)用analogWrite()函數(shù)之后,引腳將產(chǎn)生指定占空比的穩(wěn)定方波,直到下一次調(diào)用analogWrite()或在相同引腳上調(diào)用digitalRead()或digitalWrite()。大多數(shù)引腳上的PWM信號(hào)頻率約為490 Hz。在Uno和類似的板上,引腳5和6的頻率約為980Hz。Leonardo上的引腳3和11也以980Hz運(yùn)行。

在大多數(shù)Arduino板上(ATmega168或ATmega328),此功能在引腳3,5,6,9,10和11上工作。在Arduino Mega上,它在引腳2-13和44-46上工作。舊的Arduino ATmega8板僅支持引腳9,10和11上的 analogWrite()。


analogWrite()函數(shù)


Arduino Due支持引腳2至13以及引腳DAC0和DAC1上的 analogWrite()與PWM引腳不同,DAC0和DAC1是數(shù)模轉(zhuǎn)換器,用作真正的模擬輸出。

在調(diào)用analogWrite()之前,不需要調(diào)用pinMode()將引腳設(shè)置為輸出。

analogWrite()函數(shù)語法

analogWrite ( pin , value ) ;
value ? the duty cycle: between 0 (always off) and 255 (always on).

value - 占空比:0(始終導(dǎo)通)到255(始終關(guān)斷)之間。

示例

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
}

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)