
- Arduino 教程
- Arduino - 首頁
- Arduino - 概述
- Arduino - 開發板描述
- Arduino - 安裝
- Arduino - 程式結構
- Arduino - 資料型別
- Arduino - 變數與常量
- Arduino - 運算子
- Arduino - 控制語句
- Arduino - 迴圈
- Arduino - 函式
- Arduino - 字串
- Arduino - 字串物件
- Arduino - 時間
- Arduino - 陣列
- Arduino 函式庫
- Arduino - I/O 函式
- Arduino - 高階 I/O 函式
- Arduino - 字元函式
- Arduino - 數學庫
- Arduino - 三角函式
- Arduino 高階
- Arduino - Due 和 Zero
- Arduino - 脈衝寬度調製
- Arduino - 隨機數
- Arduino - 中斷
- Arduino - 通訊
- Arduino - 互聯積體電路
- Arduino - 序列外設介面
- Arduino 專案
- Arduino - 閃爍 LED
- Arduino - 漸變 LED
- Arduino - 讀取模擬電壓
- Arduino - LED 條形圖
- Arduino - 鍵盤登出
- Arduino - 鍵盤訊息
- Arduino - 滑鼠按鈕控制
- Arduino - 鍵盤序列埠
- Arduino 感測器
- Arduino - 溼度感測器
- Arduino - 溫度感測器
- Arduino - 水位探測器/感測器
- Arduino - PIR 感測器
- Arduino - 超聲波感測器
- Arduino - 連線開關
- 電機控制
- Arduino - 直流電機
- Arduino - 伺服電機
- Arduino - 步進電機
- Arduino 和聲音
- Arduino - 音調庫
- Arduino - 無線通訊
- Arduino - 網路通訊
- Arduino 有用資源
- Arduino - 快速指南
- Arduino - 有用資源
- Arduino - 討論
Arduino - 脈衝寬度調製
脈衝寬度調製或 PWM 是一種常用的技術,用於改變脈衝序列中脈衝的寬度。PWM 有許多應用,例如控制伺服電機和速度控制器、限制電機和 LED 的有效功率。
PWM 的基本原理
脈衝寬度調製基本上是一種具有變化的高低時間的方波。下圖顯示了一個基本的 PWM 訊號。

與 PWM 相關的各種術語 -
導通時間 - 訊號為高電平的持續時間。
關斷時間 - 訊號為低電平的持續時間。
週期 - 它表示 PWM 訊號的導通時間和關斷時間的總和。
佔空比 - 它表示 PWM 訊號週期內訊號保持導通的時間百分比。
週期
如圖所示,Ton 表示訊號的導通時間,Toff 表示訊號的關斷時間。週期是導通時間和關斷時間的總和,計算方法如下 -
$$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 的舊版 Arduino 板僅支援引腳 9、10 和 11 上的 analogWrite()。

Arduino Due 支援引腳 2 到 13 以及引腳 DAC0 和 DAC1 上的 analogWrite()。與 PWM 引腳不同,DAC0 和 DAC1 是數模轉換器,充當真正的模擬輸出。
在呼叫 analogWrite() 之前,不需要呼叫 pinMode() 將引腳設定為輸出。
analogWrite() 函式語法
analogWrite ( pin , value ) ;
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 }