mTouch CVD方式以外のやり方。

Microchip のサイトでは mTouch の実現方法として、AD変換器を使った CVD 方式以外にも、CSM(Capacitive Sensing Module)を使った方法CTMU (Charge Time Measurement Unit)を使った充電時間での電圧を用いる方法が解説されています。

CSMを使った方法

CSM(容量検知モジュール)は、実際にはコンパレータとSRラッチによって構成されます。
上の図は上記のAN1101-容量検知ソリューションの紹介のPDFから抜粋したものです。
内部基準電圧とC2OUTから出力されたデジタル信号比較する \(\overline{C1}\) と、3kΩと1kΩで分圧した基準電圧(1/4 VDD)と、C2OUTを比較する \(C2\) をSRラッチに入力し、その \(\overline{Q}\) 出力をTMR1のクロックにします。
TMR0 で一定周期を作り出し、その間にカウントされたTMR1値から周波数をカウントします。
ここで、CSの部分に指などが触れると容量が変化し、RC回路の時定数が変化することによってC2OUTの周波数が変わります。Rが120kΩに対してCSは数十pF程度にすることで、指で触ったときの容量変化を相対的に大きくすることができ、検出のしきい値を決めやすくなります。

この例ではIOピンとして3ないし4ピンを消費していますが、もう少し簡略化して2ピンで実現することも可能です。

CTMUを使った方法

CTMU(充電時間計測ユニット)は、電流値を設定可能な定電流源とそれを制御するためのロジック部分からなるユニットです。
上の図はセクション 37. 充電時間計測ユニット (CTMU)から抜粋しています。
CMTUCONを外部トリガで制御して、定電流源から電流を供給します。これはCSMでのRC回路のRと同等とみなすことができます。
その電流によって内部のAD変換器の入力容量CAD、回路とタッチパッドの寄生容量CCIRおよびCSWに充電され、それをAD変換器で読み取って検出します。
定電流源の供給開始からAD変換までの時間を一定にすることで、外部のタッチパッド部分での容量変化を検出することができる、というものです。

これは回路中に寄生容量以外のキャパシタがないため、外部容量の変化には結構敏感です。なので、タッチセンス以外にも近接センサ、壁の中の柱センサ、液位センサなどのアプリケーションの例がCTMU の多彩な機能には触れられています。

他に方法は?

もちろん他にもあります。
CSMを使った方法の簡易的なもので、CSMからコンパレータとラッチを省きます。そのかわりに最近のPICには多くなってきているCLC(Configurable Logic Cell)を使います。また、IOピンの入力をシュミットトリガにして、エッジ割り込みを設定します。
外部にはRC回路を置いて、そこにタッチパッドを接続します。CLCには上記IOピンから入力した信号をインバータ(あるいはNANDゲート)のみを使用してIOピンに出力し、その出力でRC回路をドライブします。こうしてRC回路をインバータで駆動する発振回路を構成し、その周波数をタイマで計測してやる方法です。概略としては以下の図のような感じです。

上記3つの方法はいずれも「容量変化による周波数の変化」を検出して判定する方法ですが、いずれも少しずつ異なります。またPICについてもCMTUやCSM、CVDの機能のあるなしで、ソフトウェア側の負担が変わってきますし検出以外のロジックに利用できるCPUクロックも変わってきます。

PICデバイスの選定はこうした機能の有無、必要なペリフェラル回路、処理速度、ピン数などの複合要件で行いますが、そのためには何をやりたいのか、どうやって実現したいのかをある程度明確にしておかないと、あとになって「これじゃできないじゃん!」ということになるので最初が肝心です。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...