デジタルポテンショメータAD5160のPmodコントローラ(VHDL)

Logic Home

ダウンロード

DPOT AD5160 Pmodコントローラ(トップレベルファイル):pmod_dpot_ad5160.vhd (7.4 KB)

SPIマスター(プロジェクトにインクルードする必要があります):spi_master.vhd (8.8 KB)

特長

  • DigilentのPmod DPOT(Analog Devices AD5160デジタルポテンショメータ用Pmod)の簡素化されたインターフェースのVHDLソースコード
  • シンプルなパラレルインターフェースで、デジタルポットを設定するためのデータを受信
  • DPOT Pmodとのすべてのシリアル通信を処理
  • システムクロックレートを設定可能

はじめに

本稿は図1に示すDigilentのデジタルポテンショメータ(DPOT)AD5160 Pmodとのインターフェースを処理するVHDLコンポーネントの詳細を説明するものです。図2は、このデジタルポテンショメータPmodコントローラをシステムに組み込んだ典型的な例を示しています。このように、このDPOT PmodコントローラはPmodポートに接続してトランザクションを実行し、デジタルポテンショメータの抵抗値を設定します。データは、ユーザーロジックあるいはFPGAの入力ポートと接続可能なシンプルなパラレルインターフェースでラッチされます。

pmod_dpot
図1. DigilentのDPOT Pmod

図2. 実装例

背景

DPOT Pmodは、AD5160ファミリの8ビット分解能の10kΩデジタルポテンショメータを提供します。抵抗RWBRWAはSPIインターフェースで設定します。最小抵抗はワイパの接触抵抗RWで決まり、通常は60Ωです。(しかし、私のサンプルでは89Ωを計測しています。)このポテンショメータはA端とB端の間にワイパがアクセスできる256個の接点があるので、抵抗値は1ビットあたり約39Ωの単位で設定されます。式1および式2は、それぞれ抵抗値RWAおよびRWBを定義しています。

equations_1_2

動作理論

DPOT Pmodコントローラは、シンプルなステートマシンとeewikiで入手できるSPIマスターコンポーネントを使用して、デジタルポテンショメータのワイパ位置を設定します。

ステートマシン

このデザインでは、図3に示すようなステートマシンを用いて、その動作を実現しています。起動すると、コンポーネントは直ちにstart状態になります。この状態を100us維持し、Pmodの電源が立ち上がる時間を十分に確保します。その後、pause状態に進みます。ここで DPOT とのトランザクション間に少なくとも100nsが経過するようにします(AD5160 のデータシートは最小40nsを指定しています)。その後、DPOT PmodコントローラがDPOT Pmodとの新しいトランザクションの準備ができたことを示すためにbusy信号をデアサートし、ready状態に進みます。dpot_tx_enaイネーブル信号がアサートされるまでready状態で待機し、新しいトランザクションのデータをラッチして send_data状態に移行します。この状態で、Pmodとのトランザクションを実行し、その後、pause状態に戻ります。また、図には示していませんが、コンポーネントをリセットすると、いつでもコンポーネントはstart状態に戻ります。

図3. 状態遷移図

SPIマスター

send_data状態の間、ステートマシンはSPIマスターコンポーネントを制御して、Pmodのデジタルポテンショメータと通信します。SPIマスターのドキュメントは こちらから入手できます。

SPIマスターは、 デジタルポテンショメータAD5160の要件を満たすために、CPOL = 0 と CPHA = 0 に設定されています。

クロックの設定

このDPOT Pmodコントローラのクロックは、ENTITYで定義されたGENERICパラメータclk_freqspi_clk_divに値を割り当てることで設定されます。clk_freqパラメータには、clk入力ポートに供給されるシステムクロックの周波数をMHzで割り当てる必要があります。式3は、spi_clk_div値の計算方法を定義しています。

equation_3

ここで、fclkは供給されるシステムクロックの周波数(MHz)です。

例えば、コードで指定されているデフォルト値は、spi_clk_div = 1です。これは、このコンポーネントが50MHzのシステムクロックを使用して開発され、テストされたため、この値になっています。50/50 = 1です。clk_freq≦50MHzの場合、デフォルト値は spi_clk_div = 1となります。

式4は、その結果得られるシリアルクロック周波数fsclkを定義しています。

equation_4

この計算により、シリアルクロックはデジタルポテンショメータの最大シリアル通信クロック周波数である25MHz以下に抑えられます。

トランザクション

DPOT Pmodコントローラは、そのbusy出力で利用可能であることを示します。busy信号が「0」のとき、コントローラはDPOT Pmodに送信するトランザクションを受け入れる準備ができています。dpot_tx_ena入力をアサートすると、dpot_dataの現在値をラッチします。ラッチされると、コントローラはトランザクションが進行中であることを示すためにbusy信号をアサートするので、この時点では利用できません。トランザクションが完了すると、再びbusy信号をデアサートして、次のリクエストを受け付ける準備ができたことを示します。

トランザクション例

図4はトランザクション例を示しています。busy信号は「0」です。その後、ユーザーロジックはdpot_tx_ena信号をアサートして、dpot_dataバスに表示されるデータをDACに送信します。コントローラはbusy信号をアサートし、リクエストがラッチされたことを示し、その時点でユーザーロジックはdpot_tx_ena信号をデアサートすることができます。コントローラはDPOT Pmodにシリアル通信を実行し、トランザクションと100nsの経過が完了するとbusyをデアサートします。

dpot_tx_ena信号がデアサートされない場合、新しいトランザクション要求はラッチされ、コントローラが利用可能になると直ちに開始されます。

図4. トランザクション例

ポートの説明

表1にDPOT Pmod Controllerのポートを示します。

表1. ポートの説明

接続

このPmodには、6ピンのコネクタJ1があります。表2にこのコネクタのピン配置を示します。DPOT Pmodコントローラのポートは、このコネクタに配線されているFPGAのピンにリスト通りに割り当てる必要があります。

表2. DPOT Pmodのピン配置とDPOT Pmodコントローラへの接続

リセット

DPOT Pmodコントローラのコンポーネントが動作するためには、reset_n入力ポートがロジックハイである必要があります。このポートをローレベルにすると、コンポーネントが非同期でリセットされます。リセット中、コンポーネントはDPOT Pmodとの現在のトランザクションを中止し、利用できないことを示すためにbusy出力をハイに設定します。リセットが解除されると、DPOT Pmodコントローラは動作を再開します。

まとめ

このDPOT Pmodコントローラは、DigilentのDPOT AD5160 Pmodにインターフェースするプログラマブルロジックコンポーネントで、その抵抗値を設定するためのデジタルポテンショメータとのデータトランザクションを簡略化します。

関連トピック

SPIマスター(VHDL)

コンタクト先

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




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