質問:
システムで使用するFPGA/マイクロプロセッサにおいて、余ったGPIOは残り1本だけという状況にあります。この状態で、アナログ信号の計測機能を追加する方法はありますか?

回答:
A/Dコンバータ(ADC)は使わず、電圧‐周波数コンバータを使用することによって、計測機能を実現できます。
概要
マシンの状態監視など、IoT(Internet of Things)ソリューションを利用したセンサー・アプリケーションの普及が進んでいます。それに伴い、I/O数が少なく、デバイスの実装面積が小さいシンプルなインターフェースに対するニーズが高まっています。1個のマイクロプロセッサやFPGAに接続されるデバイスの数は増え続けています。しかし、アプリケーションの実装スペースには限界があります。このことは、結果的にI/Oピンの数に対する制約につながります。理想的には、小型で集積度の高いソリューションであるASICを使って、あらゆるアプリケーションを実現できればよいのでしょう。しかし、ASICの開発には、時間とコストがかかります。また、出来上がったASICは、別の用途で再利用できるような柔軟性を備えていません。したがって、タイムリーかつ高い費用対効果で製品を開発するために、マイクロプロセッサや小型FPGAを採用するケースがますます増えていくでしょう。本稿では、1本のGPIOピンを使うだけで、高精度の温度計測を実現できる温度‐周波数コンバータを紹介します。また、電圧‐周波数コンバータを様々なセンサー・アプリケーションに適用する方法についても触れます。
開発の動機
温度や湿度、気圧などの計測は、DCを対象としたセンサー・アプリケーションです。つまり、様々な設計上の配慮が必要なADCを使用するほど速いレートで測定値が変化するわけではありませんし、高い分解能も必要としません。例えば、ADCを監視システムで使用する場合、通常はADCに入力される信号に対する適切なシグナル・コンディショニングを施した上で、高精度のA/D変換を行うことになります。そのためには、高速で高精度のクロックやタイミング信号、安定した電圧リファレンス、非常に出力インピーダンスが低いリファレンス・バッファ、アナログ・フロントエンド回路などが必要になります。周囲温度を検出したい場合、ディスクリート部品をベースとするアプリケーションでは、サーミスタを組み込んだホイートストン・ブリッジを使用することがあるでしょう。おそらく、その出力は、計装アンプによって増幅し、ADCに入力することになるはずです。しかし、この設計は、やや大げさなものだと言えます。例えば、そのアプリケーションでは15秒に1回、計測を行えればよいとすると、必要以上の実装スペース、電力、演算サイクルを浪費していることになります。
部品点数を削減し、ADCに必要なシグナル・チェーンの複雑さを低減しつつ、更にアナログ電圧の計測も行えるようにするには、どうすればよいでしょうか。本稿では、その回答となる計測ソリューションを紹介します。そのソリューションでは「LTC6990」を使用します(図1)。このVCO(電圧制御発振器)ICを電圧‐周波数コンバータとして使用し、ADCを使うことなくアナログ電圧の計測を実現します。高精度の熱電対用アンプ「AD8494」を使用して、周囲温度を検出するセンサーを構成し、その出力電圧をLTC6990の入力として与えます。このような形で温度‐周波数コンバータのシグナル・チェーンを構成します。

温度‐周波数の変換を実現する方法
現在、多くの最新電子機器では、温度監視システムを内蔵することが求められます。アナログ信号をパルス幅変調(PWM) した信号やデジタル信号に変換する方法については、様々な資料が公開されています。但し、そうした計測ソリューションがADCを必要とするものである場合、そのことがコスト、精度、速度の面で欠点となります。一般に、計測の精度が高くなるほど、ソリューションには、より多くのコストがかかります。図1の回路は、低コストで用途が広く、システムのニーズに応じて温度計測の精度を決定することができます。しかも、インターフェースが非常に簡素なソリューションでもあります。
AD8494は、高精度の熱電対用アンプ製品です。ただ、その入力をグラウンドに短絡させると、周囲温度を計測するためのスタンドアロンのセンサーとして使用できます。その場合の出力は次式で定義されます。

この回路は単電源で動作し、-VSはグラウンド(0V)です。周囲温度がマイナス(氷点下)の場合にも対応するためには、出力電圧がグラウンドよりも高くなるようにバイアスをかける必要があります。つまり、AD8494のREFピンには、オフセット電圧を印加しなければなりません。
それを踏まえると、温度センサーの出力電圧VOUTは、次式のようになります。

VCOであるLTC6990の周波数出力は次式のように定義されます。

AD8494の出力電圧は、LTC6990のVCTRLに入力します。そこで、式2を式3 のVCTRLに代入し、RSET = RVCOとおくと、次式が得られます。

この式からTambientが求めることができます。電圧の単位は打ち消され、次式が得られます。

得られた周波数出力をどう利用するのか?
図1 の回路の特徴は、1 本のGPIOピンを使うだけで計測が行えることです。図2 に示した同期式カウンタでは、CLKにおいてクロックの立上りエッジが常に監視されます。LTC6990のFOUTを入力クロックとすれば、このカウンタは、FOUTの立上りエッジを検出するたびにインクリメントされます。つまり、この回路は周期カウンタとして機能します。計測を実施する時間間隔が一定であれば、その時間間隔内に現れるクロック周期の数をカウントできます。浮動小数点演算またはルックアップ・テーブルのいずれかを使うことにより、その結果から周波数を求めることができます。カウントしたクロック周期の数でアクイジション時間TAcquisitionを割ることにより、FOUTの周期が得られます。その逆数をとることで、以下の式が得られます。


図3 のVerilogコードは、FPGAの1本のGPIOピンを使って周期の数をカウントする処理に使用可能な関数の例です。アクイジション時間を長くとるほど、計測の精度は高くなります。このコードでは、分解能を高めるために16ビットのカウンタを使用しています。ここでは、アクイジション時間を制御するロジックが、このアーキテクチャの上位レベルで実行されることを前提としています。


まとめ
本稿では、新たな種類の温度‐周波数コンバータを紹介しました。同コンバータを使用すれば、高精度、低コストで温度を計測することができます。-40°C~125°Cの産業用温度範囲外の温度を対象にする場合には、センサーの入力部に熱電対を追加することで対応できます。図4と図5に、この温度‐周波数コンバータの評価結果を示しました。これらを見ると、周囲温度と出力周波数には、線形の関係があることがわかります。また、同コンバータを使えば、高い精度を実現できることも見てとれます。このソリューションでは、非常に高い分解能で温度を計測できるというわけではありません。しかし、±2°C程度の誤差を許容できるアプリケーションであれば、安価でシンプルな温度計測用システムとして使用できます。電圧‐周波数コンバータの考え方を活用すれば、ADCを使用することなく、他の種類の計測を実現することも可能です。

参考資料
「Fundamentals of the Electronic Counters(電子カウンタの基礎)」Hewlett Packard、1997年
Staffan Johansson「New Frequency Counting PrincipleImproves Resolution(周波数カウントの新たな原理により分解能を高める)」Proceedings of the 2005 IEEEInternational Frequency Control Symposium and Exposition、2005年
Ibrahim Kamal「5 Hz to 500 kHz Frequency Meter(5Hz~500kHzに対応する周波数メータ)」IKALogic、2008年4月
「Synchronous Counter(同期式カウンタ)」ElectronicsTutorials、2019年