概要
前回は電源周りとオシレーターでクロック生成について説明しました。今回はコンパレータを使ったアナログ回路について説明したいと思います。
PORとは?
POR(Power On Reset)とは、VDDが1.4V以上になって完全に起動した場合にHIGHになります。

PORにプローブを付けた状態で、シミュレーションをしてみます。

結果です。これを見るとVDDは1ミリ秒程度の時間がかかって、電圧が安定しています。PORは2.4ミリ秒ぐらいのところでHIGHになっていますね。PORはLOWの間はまだ回路が安定していない状態です。

こんな回路を作ってみました。V3で外部からクロックを入力しています。PORとPIN7の出力を確認します。

シミュレーション結果です。電源と外部クロック入力は最初の信号がなまっていますね。PIN7の出力はPORがHIGHになるまででていません。つまり内部的にはPORがHIGHにならないとPINは動かないようになっていました。このようにPORは立ち上がり直後の不安定な状態で回路が動くのを防ぐ意味があります。
アナログコンパレータ(ACMP)とは?

2つの電圧を比べるのがコンパレータです。上記がピン配置で、IN-とIN+の電圧を比べてOUTに出力しています。上下は有効かを決めるための信号になります。

こんな回路を組んでみました。コンパレーターにPIN20経由で電源を接続、1024mVと比べます。PORをPWR UP端子に接続します。PWR UP端子はHIGHになると有効になる端子になります。PORを接続しているので、起動して安定したところで有効になります。PORからの配線はデフォルトでは上記のようなラベル形式になります。VDDからもラベルがデフォルトです。右クリックから線での描画にも変更可能です。

シミュレーション結果です。入力信号は0Vから2Vまでのサイン波です。コンパレーターからの出力は基準電圧である1V以上の場合にHIGHになっていますね。回路が有効になるのはPORがHIGHになってからになります。コンパレーターなどのアナログ系の回路は電力消費が大きいので、省電力設計では必要なときのみ有効にしたほうがよいそうです。回路の勉強であればPORに接続して常に有効でもよいと思います。
コンパレーターの種類
SLG46826は4つのコンパレーターが利用できます。

CMP0H、CMP1H、CMP2L、CMP3Lの4種類です。最後のHはハイスピード動作で、Lが低電力動作をするコンパレーターを表すようです。よく見るとLにはWAKE SLEEP端子がありませんね。

また、コンパレーターによって接続可能なPINが異なります。
電圧ランプ回路

コンパレーターは特定のPINにしか設定できないのですが、他のコンパレーターが利用しているピンも指定できます。共通のピンを指定して、基準電圧を変更することで、電圧に応じて光る場所が変わる回路ができます。

サイン波なのでわかりにくいかもしれませんが、電圧が512mVより高いときにはLEDが1つ光り、1024mVより高いときにはLEDが2つ、1504mV以上で3つ、1888mV以上で4つ光る回路です。

常時光っている回路であればさきほどのでいいのですが、ボタンを押した場合のみ光る回路の場合には上記のようにPORの変わりに外部から入力を持ってきます。

実行結果です、ENがHIGHの場合にしかコンパレーターが動作しなくなりました。
コンパレーターの設定項目
プルアップ

一番上が100uAのプルアップをするかです。すみません、有効にするとどうなるのかはわかりません。

おそらくデータシートのこの表だと思うのですが、どのような機能なのかはわからないです。
ヒステリシス

二番目はヒステリシスの設定です。
- 0mV: disable hysteresis.
- 32mV: V_IH = VREF + 0mV; V_IL = VREF – 32mV
- 64mV: V_IH = VREF + 0mV; V_IL = VREF – 64mV
- 192mV: V_IH = VREF + 0mV; V_IL = VREF – 192mV
設定可能な値は上記の4種類です。

192mVに設定しました。一番下にあるしきい値がHIGHが1024mV以上、LOWが832mV以下になっています。

シミュレーション結果を拡大したものです。LOWからHIGHには1024mVで変化しています。回路ですのでちょっと遅延が発生して遅れてはいます。逆にHIGHからLOWは832mVですので、そこからちょっと遅れて819mVぐらいで変化しています。今回はきれいな波形ですが、しきい値前後でバタつく信号の場合にはヒステリシスを設定すると信号がばたつきにくいと思います。
ゲイン
三番目はゲインです。選択できるのは1倍、0.5倍、0.33倍、0.25倍です。1倍以上はありませんので、アッテネーターと呼ばれる減衰器をつけて、入力信号を分圧して低くしているようです。入力を半分、三分の一、四分の一に減衰できるんですね。

0.25倍を選択してみました。一番下にあるしきい値が変化していますね。基準電圧は1024mVのままですが4096mV以上でHIGH、3328mV以下でLOWになります。3328mVは実際には減衰器で0.25倍されて832mVになります。基準電圧の1024mV-ヒステリシスの192mVの値と一緒ですね。
IN+(比較電圧入力)
ACMP0H | ACMP1H | ACMP2L | ACMP3L |
PIN20 | PIN19 | PIN18 | PIN17 |
Buffered PIN20 | Buffered PIN19 | ACMP0 IN+ | ACMP2 IN+ |
VDD | ACMP0 IN+ | ACMP1 IN+ | VREF0 |
コンパレーターによって指定できる項目が異なります。PINを設定する場合にはコンパレーターに対応したPINが存在しています。特徴的なのは他のコンパレーターの入力を選択することができる項目と、VDDとVREF0ですね。
VREF0は基準電圧出力でコンパレーターの基準電圧か、温度計の電圧を外に出力するためのものです。

上記の回路を組んでみました。VREF0はCMP0Hの基準電圧を設定しました。そのため1024mVが出力されています。それをCMP3Lの比較として利用することができます。固定値なのでまったく意味がない回路ですが、おそらく温度計の値が一定以上になった場合に判定するための回路ですね。

温度計を有効にしたらVREF0と排他利用のため、温度計に結線が自動的に移動しました。これであれば温度が変化すると電圧が変更されますので、特定温度になったら判定をする回路として利用できます。
温度計は0.62から0.99Vと、0.75から1.2Vの2つのレンジがあるようです。電圧から温度への変換方法がF1から開くマニュアルには書いていない不親切さ!
- VTS1 = -2.3 x T + 905.3
- VTS2 = -2.8 x T + 1077.3
データシートには上記の式が書いてありました。-40°Cから85°Cが測定可能みたいです。
温度(℃) | VTS1(mV) | VTS2(mV) |
-40 | 997.3 | 1189.3 |
-20 | 951.3 | 1133.3 |
0 | 905.3 | 1077.3 |
20 | 859.3 | 1021.3 |
40 | 813.3 | 965.3 |
60 | 767.3 | 909.3 |
80 | 721.3 | 853.3 |
85 | 709.8 | 839.3 |
温度別の電圧を計算してみました。電圧の範囲を考えるともう少し温度の幅が計測できそうですね。温度が高くなると電圧が低くなるので、指定温度以上になるとコンパレーターの出力がLOWになる制御ですね。
ちなみにデータシートだと全温度できれいな直線の特性でしたが、たぶんそこまでの精度は無い気がするんですよね。。。
IN-(基準電圧)
内部の基準電圧として、32mVから2016mVまで32mV間隔で指定できます。もしくはPIN3が指定できます。

上記の回路を組んでみました。PIN3から基準電圧を入力して、VDDと電圧を比べています。

上記がシミュレーション結果です。入力電圧は3.3Vを中心に0.3V増減するサイン波です。VDDが3.3Vですので、3.3V未満になった場合に出力がHIGHになっています。実際にはPIN3の基準電圧を半固定抵抗などで変化させて判定をするために利用することが多いと思います。
コンビネーション・ファンクション・マクロセル

さて、おまけの項目ですがコンビネーション・ファンクション・マクロセルを紹介します。実はLUTやCMPなどの部品はマクロセルと呼びます。マクロセルを組み合わせて回路を作るのですがこのブログだと単に部品と呼んだりもしますが、正式にはマクロセルです。
マクロセルの中ではLUTなどは複数の機能が選択できるものがあります。一番上にTypeと書かれているプルダウンがあり、LUTの他にDFFやLATCHとしても使えます。個別の機能は今後説明していきたいと思いますが、このように複数の種類を選択できるものをコンビネーション・ファンクション・マクロセルと呼びます。
そして、たぶん次回以降この名称を使うことはないと思いますが、コンビネーション・ファンクション・マクロセルをぜひ覚えてあげてください。
資料
オフィシャルサイトに日本語情報をリンクしたページがありました。最初からこのページを知っていれば細かい資料探さなくてもよかったのに、、、
まとめ
もうちょっと複数のマクロセルを紹介しようと思ったのですがコンパレータで終わってしまいました。アナログ系のマクロセルは設定が複雑ですね。どんどん解説が難しくなってきました。マクロセルの説明だけだと使い方がわからないので、実際の利用例を調べるのに時間がかかっています。
コメント
素人考えですが、プルアップは接点入力用途じゃないですかね…。スイッチとかオープンコレクタとかの。設備系では機器間・ユニット間の信号渡しを電圧ではなく接点(メイク・ブレイク)で行うことがよくあります。電圧の互換性に煩わされにくいからでしょうか。
全般的な設定で、コンパレーターに必須な設定ではない気がするんですよねー