PWMジェネレータ(VHDL)

Logic Home

コードのダウンロード

バージョン2.0:pwm.vhd (5.1 KB)
パルス形状の乱れを防ぐため、異なるデューティサイクル間の遷移は常にパルスの中心で開始されます。

バージョン1.0:pwm_v1_0.vhd (4.5 KB)
初期リリース

特長

  • PWMジェネレータコンポーネントのVHDLソースコード
  • デューティサイクル分解能を設定可能
  • 出力数/位相数を設定可能
  • PWM周波数を設定可能
  • パルスの中心付近での変調
  • PWM反転出力

はじめに

この記事はCPLDやFPGAで使用するパルス幅変調(PWM)ジェネレータコンポーネントの詳細で、VHDLで記述しています。ユーザーロジックで設定されたデューティサイクルに基づきPWM信号を出力するコンポーネントです。各パルスの中心がPWM周波数に対応して変化し、そのパルスの中心付近でデューティサイクルに基づいてパルス幅が変化します。多相に設定した場合は、等間隔で各相ごとに1つのPWM信号を生成します。例えば、3相に設定すると、互いに120°位相がずれた3つのPWM出力を生成します。このコンポーネントはQuartus IIバージョン12.1で設計され、ModelSim-Altera 10.1bでテストされました。必要なリソース要件は実装に依存します。図1は、PWMジェネレータをシステムに組み込んだ典型的な例を示します。

block_diagram

図1. 実装例

動作原理

システムクロックをPWM周波数で割った値は、PWM 1周期におけるシステムクロックのパルス数に相当します。このPWM周期を各位相ごとにカウンタで定義します。PWMの各位相に1つずつカウンタがあり、その値は位相によってオフセットされています。各カウンタはシステムクロックごとにインクリメントし、その周期の終わりに達するとクリアされます。

PWM信号の立ち上がりエッジと立ち下がりエッジが発生するポイントをデューティサイクルで決定します。図2は、これらの位置を決定するための基本的な考え方を示したものです。信号の立ち下がりエッジは1/2デューティサイクルで発生し、立ち上がりエッジは周期の終わりから1/2デューティサイクルを差し引いた時点で発生します。カウンタが各位置に到達すると、PWM信号はその位置で反転します。1/2 デューティサイクルが1/2周期を超えることはないため、立ち下がりエッジは常に立ち上がりエッジの前に発生します。

waveform_1

図2. PWM周期に同期したパルス波形

設定可能なパラメータ

PWM ジェネレータは、ENTITYで設定された4つのジェネリック型パラメータを使用して設定されます。表1にパラメータを示します。PWMジェネレータは、sys_clkパラメータを与えられたクロック周波数に設定する限り、特定の入力クロックを必要としません。pwm_freqパラメータは PWM周波数に対応します。またbits_resolution­はパルス幅の分解能を決定します。例えば、8を指定すると、8ビットの分解能が得られます。従って、パルス幅の分解能は2の8乗つまり256となり、この場合、パルス幅の調整値は周期(つまり1/pwm_freq)÷ 256が最も細かい値となります。phasesパラメータは、出力の数とそれらの位相関係を設定します。PWM出力の数はphasesで指定され、これらの出力は互いに360°/phasesのずれがあります。

表1. GENERICパラメータ

PWM周期はシステムクロックでsys_clk / pwm_freqと定義されるので、この比率はデューティサイクルの分解能にも影響します。デューティサイクルの分解能は、PWMの周期のシステムクロック数以上にはなりません。同様に、周期が分解能の整数倍でない場合、生成されたデューティサイクルは1ビットの丸め誤差の影響を受けます。

ポートの説明

表2にPWMジェネレータのポートについて説明します。

表2. ポートの説明

デューティサイクルの制御

ユーザーロジックは、dutyポートに新しいデューティサイクルの値をラッチすることにより、デューティサイクルを制御することができます。PWMジェネレータは、enaポートが「1」に設定されている場合、すべてのシステムクロックでこのポートの値をラッチします。図3は、ModelSimのシミュレーションでデューティサイクルを変更させたときのタイミング図です。デューティサイクルを変更させたとき、元のパルス幅と新しいパルス幅の間に中間的な幅のパルスが1つ存在することに注意してください。これは、パルスの中央で新しいデューティサイクルが有効になるため、パルスの幅が旧パルス幅の半分と新パルス幅の半分がプラスされるためです。

図3. デューティサイクルを変更した場合のシミュレーション

リセット

PWMジェネレータが動作するためには、reset_n入力ポートがロジックハイである必要があります。このポートをローレベルにすると、非同期でコンポーネントをリセットします。リセット中は、周期カウンタがクリアされ、PWM出力とPWM反転出力は共に「0」に設定されます。

おわりに

このPWMジェネレータは、PWMおよびPWM反転出力を生成するプログラマブルロジックコンポーネントです。システムクロック、PWM周波数、デューティサイクル分解能および位相数が設定可能です。

お問い合わせ先

ご意見、ご感想およびご質問は、eewiki@digikey.comまでお寄せください。




オリジナル・ソース(English)