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

2018-11-16 11:39 更新

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

PWM的基本原理

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

基本PWM信號

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

  • On-Time(導(dǎo)通時間) - 時間信號的持續(xù)時間較長。

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

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

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

周期

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

周期

占空比

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

占空比

analogWrite()函數(shù)

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

在大多數(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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號