14.JPG

PWM為脈波寬度調變,簡稱脈寬調變,是將類比訊號轉換為脈波的一種技術,一般轉換後脈波的週期固定,但脈波的占空比會依類比訊號的大小而改變。在類比電路中,類比訊號的值可以連續進行變化,在時間和值的幅度上都幾乎沒有限制,基本上可以取任何實數值,輸入與輸出也呈線性變化。所以在類比電路中,電壓和電流可直接用來進行控制對象,例如家用電器設備中的音量開關控制、採用鹵素燈泡燈具的亮度控制等等。

在Arduino只能輸出0 或5V 的的數字電壓值,利用方波的佔空比被調製的方法來對一個具體模擬信號的電平進行編碼。PWM 信號仍然是數字的,因為在給定的任何時刻,滿幅值的直流供電要是5V(ON),或是0V(OFF)。輸出的電壓值是通過通和斷的時間進行計算的。輸出電壓=(接通時間/脈衝時間)*最大電壓值。

image002.gif

下面介紹一下PWM 的三個基本參數:

4.jpg

PWM"寬度"變化幅度(最小值/最大值)
PWM"週期"(1 秒內脈衝頻率個數的倒數)
電壓"高度"(例如:0V-5V)

Arduino 控制器有6 個PWM 接口分別是數字接口3、5、6、9、10、11

1. 實驗材料
Arduino*1

402868.jpg

USB傳輸線*1

402867.jpg

麵包板*1

402898.jpg

麵包板跳線*N

402985.jpg

可變電阻*1

403022.jpg

電阻220 Ω *1

402896.jpg

LED*1

402897.jpg

2. 電路接線圖

5.jpg

3. Arduino參考程式

#define LED_PIN 9//定義LED PIN為9
#define ADC_0 0//ADC接口定義為A0
int adcVal=0;//讀取ADC變數,初始值為0

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_PIN,OUTPUT);//設定PIN 9為輸出模式
}

void loop() {
  // put your main code here, to run repeatedly:
  adcVal=analogRead(ADC_0);//讀取A0存至adcVal變數,其中Arduino ADC讀值範圍為0~1023
  analogWrite(LED_PIN,adcVal/4);//打開LED並設置亮(PWM輸出​​最大值255)
  delay(10);//延時0.01秒
}

6.JPG

4. 實驗結果

403032.jpg

旋轉可變電阻,就可看到LED之亮度變化

 

arrow
arrow

    鄭智遠 發表在 痞客邦 留言(0) 人氣()