こんにちは!Latticeチーム新人エンジニアのりょすです。


今回は、選定した温度センサーの動作確認をおこなっていきたいと思います。


動作確認は、Digilent社のAnalog Discoveryとオシロスコープを使って温度センサーの動作を確認していきます。

 

前回は、7セグLED基板の動作確認をおこない、

 

アノード、カソードやFPGAでLEDを制御させるにはどうしたらいいのかを勉強しました。

 

初めてこのブログを拝見していただいた方にこのブログの概要を少し紹介します。
このブログでは、温度センサー、7セグをFPGAで制御するものを製作する過程を紹介していきます。
(もし興味があったら、下に他の回のリンクを添付しているので見ていただけると嬉しいです!)

SPI通信の動作確認ってどうやる?

早速、温度センサーの動作確認をしていこうと思います、、、

 

といっても、どのように動作確認すればいいのか分かりません。

 

SPI通信を作るところからやらないといけないのでしょうか?

 

先輩に相談してみました。

 

りょす    「Fさん、温度センサーの動作確認ですがSPI通信から作ろうと思っているのですが、、」

 

先輩Fさん 「いいと思うけど、その作った通信が正しいかどうかはどうやって確認するの?」

 

りょす  「、、、、、、」

 

先輩Fさん 「AnalogDiscoveryっていうデバッガー使うといいよ!」

      

      「わざわざ通信作らなくても、GUIの操作で簡単に評価できる!」

 

りょす   「それ、使います!」

 

ということで、わざわざ評価用にSPI通信を作っていたらとてつもない時間がかかりそうなのと

 

その作ったプログラムは正しいのか、確認するのにも時間がかかりそうなため、

 

AnalogDiscoveryでセンサーの評価をおこなうことにしました。

 

SPI温度センサーADT7310の仕様を確認する

今回使う温度センサーについて

温度センサー動作の確認をおこなう前に、

 

温度センサーから、どんなデータが出力されるのかや

 

FPGA側から何かすることはないのか

 

データーシートを見て使用を確認する必要があります。

 

 

選定した温度センサーは、アナログデバイセズ社の温度センサーモジュールADT7310です。

 


この温度センサーは3.3Vで動作し、SPIバスに測定温度のデータを出力、測定温度の範囲は-55℃~150℃となっています。

 

 

アナログデバイセズ社, ADT7310

SPI温度センサーの通信方法

英語の説明書を読むのにとても苦労しましたが

 

センサーの仕様の確認をおこない、分かったことは以下になります。

 

・SPI通信によってWrite/Readをする必要がある

 

・自分のコンセプト上、Writeは電源投入時のデフォルトの設定でよい

 

・SPI通信によってReadをおこなうと温度データが出力される

 

・温度データは13bitのデータ + フラグ で出力される

 

表でまとめると以下の通り

コマンドを送ってセンサーと会話する!

このセンサーは、SPI通信によって温度データを取得します。


レジスタへのWrite/Read


Writeコマンドによって、レジスタのコンフィグレーションをおこない、


Readコマンドによって、レジスタにアクセスし温度データを取得します。

Writeする?しない?

温度データは、13bitのデータとしてレジスタに保存されます。


この13bitの温度データはデフォルトの分解能になります。


Writeコマンドを送信することで

 

分解能を10bitや16bitなどに変更できますが、


今回の「室温の温度を整数で表示する」ことを考えると


ざっくり今の室温が分かればいいので


デフォルトの分解能を変えることなく使用することにしました。

 

よって今回は、writeコマンドは送らない(電源投入後のデフォルト設定)ことにしました。

 

Readコマンドは何を送ればいいの?

レジスタにアクセスし、13bitの温度データを取得するわけですが


13bitの温度データは、どのような並び方で温度センサーから出力されるのでしょうか?


ADT7310のデータシートを確認してみると


どうやら13bitの温度と共にエラーフラグが計16bitのデータとして出力されるみたいです。 

 

 

また、温度データの出力方法にもいくつか種類があります。


温度を1回出力する ONE-SHOT MODE、


60ms周期で温度を出力する1SPS MODEなどです。


今回は特別なモードを使用せず、デフォルトのCONTINUOUS READ MODEを使用します。


このモードは、一度レジスタにコマンド (0x54) を書き込むと以降は0を16bit分送るだけで


温度データが返ってくるようなモードになります。

 

よって、Readする際は 0x54 を温度センサに送り、ダミーデータ 0を16bit分送ることにします。

Digilent社 Analog Discoveryを使ってみる!しかし、、、

Writeは電源投入後のデフォルトの設定で良い

 

Readコマンドを温度センサーに送ることで、温度データが取得できる

 

と分かったので、次にAnalog Discoveryを使って温度を取得できるか確認したいと思います。


AnalogDiscoveryDigilent社オシロスコープやファンクションジェネレーターなどの機能をもつポケットサイズの万能計測器です。

 

このデバイスと、無料でインストールできるWaveFormsをインストールして使用します。

 

Digilent, Inc. Analog Discovery,WavwForms

今回は、Write/Readコマンドを簡単にデバイスで送信できる機能「Protocol」を使って温度センサーに任意のコマンドを送信し


検証環境の室温と同等の温度値が返ってくるか確認していきたいと思います。


まず、Analog Discoveryと温度センサーを接続し、ダウンロードしたWaveFormsを立ち上げます。

 

Digilent, Inc. WavwForms

 

次に、Protocolを選択し各種設定をおこないます。

 

AnalogDiscoveryから出ている信号線 DIO0/1/2/3 をそれぞれ Select(Chip Select)、Clock(SCLK)、DQ0(MOSI)、DQ1(MISO)に接続します。

 

Digilent, Inc. ,WavwForms

 

次に、モード設定と、センサーのデフォルトモードに設定するためのコマンドなど各種設定をおこないます。

 

Digilent, Inc. ,WavwForms

 

接続と各種設定ができたので、Executeボタンを押して実行します。

 

一発で、温度らしきものが取れるといいのですが、、、ドキドキ

 

Executeボタンを実行すると、左下にWriteとreadの結果が出力されます。

 

 

先ほど、理解した温度センサーからの出力データの読み方に沿って

 

温度データを読むと、、、

 

小数点以下の誤差はありますが、

 

これは、観測時の室温21.5℃に近い値であることが確認できました!! 

 

よって、温度センサーから正常に温度データを出力することが分かったので動作確認は終わりにしたいと思います。

 

感想としては、

 

はじめはAnalogDiscoveryの使い方がよくわからず、試行錯誤した結果温度センサーからの温度データを確認できたので

 

動作確認できた時の感動がすごかったです!!

 

次回は、RTL設計に移りたいと思います。

 

では、また次回!See ya!

Lattice FPGA 入門ブログについて

この記事は、LED制御に焦点を当てた記事となっています。しかし、LED制御だけではなく

 

全記事を通して、温度センサーにて取得した温度を、FPGA内部で変換して7セグLED表示器に表示するモジュールを製作しています!

 

もし、「この新人君は何を作っているんだろう?」と興味を持っていただいた方がいましたら

 

ぜひ以下ページより、モジュールの制作過程や全体像をチェックいただけると嬉しいです!

関連する情報