2011年7月25日 星期一

6.1) PWM modes part2

這篇將用 Proteus 觀察 PWM 的波形,計算 Pulse 的寬度,看程式產生的 Pulse 寬度是否正確。

image
▲ Barebone Arduino

我們以 Barebone Arduino 為基礎,在設計畫面上放一個虛擬示波器 (OSSCILLOSCOPE),然後把 pin 11 接到 channel A,而 pin 3 接到 channel B:

image

接著即可載入 Arduino 的 HEX 檔並使用示波器觀察 PWM 波形。

計算 Fast PWM 範例的 Pulse 寬度

首先,載入 FastPWM 範例程式:

Fast PWM 的 frequency 計算公式為:

PWM_fequency = clock_speed / [Prescaller_value * (1 + TOP_Value) ]

所以:

  • Output A 的 Pulse 寬度應為: (1000000 / 976.5625) * 70.7% = 723.968 us
  • Output B 的 Pulse 寬度應為: (1000000 / 976.5625) * 19.9% = 203.776 us

然後用示波器觀察 PWM 波形,並使用 Cursor (游標) 計算 Pulse 寬度:

image

得 Output A 的 Pulse 寬度大約是 724 us,而 Output B 大約是 204 us,跟理論值幾乎相等。

計算 Phase-Correct PWM 範例的 Pulse 寬度

接著載入 PhaseCorrectPWM 範例程式:

Phase-Correct PWM 的 frequency 計算公式為:

PWM_frequency = clock_speed / (2 * Prescaller_value * TOP_value )

所以:

  • Output A 的 Pulse 寬度應為: (1000000 / 347.2) * 50% = 1440 us
  • Output B 的 Pulse 寬度應為: (1000000 / 694.4) * 27.8% = 400.34 us

然後用示波器觀察 PWM 波形,並使用 Cursor (游標) 計算 Pulse 寬度:

2011-05-04 17h53_29

得 Output A 的 Pulse 寬度大約是 1.44 mS,也就是 1440 us,而 Output B 大約是 400 us (920 – 520 = 400),跟理論值幾乎一樣,由此可見 Proteus 示波器非常準確。

延伸閱讀

0 意見: