静電容量式近接 & タッチセンサーコントローラーMPR121データシート非公式訳

原文: https://www.nxp.com/docs/en/data-sheet/MPR121.pdf

静電容量式近接 & タッチセンサーコントローラー

(略)

特徴

  • 1.71 V~3.6 Vで動作

(略)

  • 電極/静電容量検知入力端子は12本。うち8本は、LEDの駆動用としてもGPIOとしても利用可能。

(略)

何ができるのか

(略)

主な用途

(略)

ピン配置

f:id:ti-nspire:20200819121155p:plain

注文情報

(略)

1 各端子の説明

表1. 各端子の説明

f:id:ti-nspire:20200819121401p:plain

2 接続図と回路構成

(略)
↑ 図1. 電源の構成1: 1.71 V~2.75 Vの電源電圧で駆動する場合

f:id:ti-nspire:20200819122011p:plain
↑ 図2. 電源の構成2: 2.0 V~3.6 Vの電源電圧で駆動する場合

3 動作説明

電源

(略)
(略)
(略)
電源電圧が2.75 Vよりも高い場合、その電源はVDD端子に接続しなければなりません。つまり図2のような回路構成にするということです。この回路構成にする場合は、内部回路のためのパスコンとして0.1 uFのセラミックキャパシタを1個、VREG端子とVSS端子との間に接続します。この回路構成は、電源電圧を2.0 Vまで下げても機能します。1.5Vの電池を2個使うような一般的な用途の場合、この回路構成であれば電源電圧2.0 V~3.0 Vの範囲で動作します。

静電容量の検知

MPR121は、一定の直流電流を用いて静電容量を検知する方式(constant DC current capacitance sensing scheme)を採用しています。10 pFから2000 pF超まで、最大0.01 pFの分解能で静電容量が測定できます。検知用の各端子に適用する充電電流と充電時間とを変化させることでこれを実現しています。

12本ある電極は1本ずつ制御されるため、電極パターンの設計は自由度が極めて高い。また、自動コンフィギュレーションシステムが内蔵されているため、個々のレジスタの設定もきわめて容易です。詳しくはFreescale社のアプリケーションノートAN3889を見てください。

入力検知ノードで測定される電圧は静電容量に反比例します。この電圧は、充電サークルの終わるたび内蔵10ビットADCによってサンプリングされます。サンプリングされたデータは、複数段のディジタルフィルタで処理されます。そのため、さまざまな環境で良好なノイズ耐性が得られます。フィルタリングシステムについて詳しくは、アプリケーションノートAN3890を見てください。

タッチ検知

電極の静電容量データが取得されると、そのデータと静電容量ベースライン値とが比較され、電極のタッチ/リリース状態が決定されます。静電容量ベースライン値については、バックグラウンド静電容量のばらつきに応じて自動的にトラッキングが実行されます。

静電容量ベースライン値と、その時点での電極データとが比較され、その結果、タッチまたはリリースが発生したのかどうかが判断されます。タッチ/リリースの閾値が設定できるほか、タッチ/リリースのディバウンス時間も設定できます。その目的は、ノイズに起因して発生するジッタとタッチの誤判定とを避けることにあります。ベースライン静電容量システムについて詳しくは、アプリケーションノートAN3891AN3892で取り上げています。

近接検知

MPR121の新機能の1つが近接検知システムです。これは、すべての電極をまとめて1個の大きな電極として扱えるようにするという機能です。電極が大きいことの主な利点は、そのぶんだけ検知エリアが拡がることです。MPR121の近接検知システムは、個々の電極をタッチセンサーに使いながら同時に利用できます。

近接検知データは、独立したチャンネルとして読み出せます。コンフィギュレーションレジスタも他の12チャンネルとほぼ同じです。近接検知機能が有効化されているときは、通常の検知サイクルの始まるタイミングで、13番目の測定チャンネルとして近接検知チャンネルが追加されます。このシステムについてはアプリケーションノートAN3893で説明しています。

LEDドライバー

12本の電極のうち8本は多機能端子として設計してあります。この8本の端子は、電極として使わないときには、LEDの駆動用として、またはGPIOとして使えます。この機能について詳しくはアプリケーションノートAN3894を見てください。

シリアル通信

MPR121はI2Cデバイスです。割り込み用のIRQ端子を備えています。この端子は、タッチまたはリリースの検出されたときにいつでもトリガーされます。I2Cアドレスは、ADDR端子をVSS、VDD、SDA、SCLのどの端子に接続するかによってそれぞれ0x5A、0x5B、0x5C、0x5Dに設定できます。I2Cについて詳しくは、アプリケーションノートAN3895で説明します。参考用としてMPR121のレジスタマップを表2に示します。

表2. レジスタマップ

(略)

4 電気的特性

4.1 絶対最大定格

(略)

4.2 ESD保護およびラッチアップ保護に関する特性

(略)

4.3 DC特性

(略)

4.4 AC特性

(略)

4.5 I2CのAC特性

(略)

5 レジスタの操作説明

5.1 レジスタ読み出し/書き込み操作 & 測定実行/停止モード

パワーオンリセット(POR)のかかったあと、あるいはコマンドでソフトリセットを実行したあとは、すべてのレジスタがリセットデフォルト初期値(表2を参照)に設定されます。0x5C (デフォルトは0x10)と0x5D (デフォルトは0x24)とを除くすべてのレジスタがクリアされます。

レジスタ0x2B~0x7Fは、制御用・コンフィギュレーション用のレジスタであり、静電容量測定およびタッチ検知を実行する前に正しく設定する必要があります。

レジスタ0x00~0x2Aは、実行モードのときに定期的に更新される出力レジスタです。この出力レジスタのうちベースライン値レジスタ0x1D~0x2Aは書き込みも可能であり、ユーザー独自のベースライン値が必要なときには便利なこともあります。

実行モードおよび停止モードは電極コンフィギュレーションレジスタ(ECR、0x5E)で切り換えます。ELEPROX_ENおよびELE_ENのすべてのビットがゼロのときは停止モードです。停止モードのときは、静電容量測定およびタッチ検知は13本のどのチャンネルでも一切行われません。ELEPROX_ENおよびELE_ENの各ビットのうちどれか1つでも1にセットすれば実行モードになります。実行モードに入ったあとは、ユーザーが停止モードにするまで実行され続けます。

レジスタの読み出し操作は、実行モードであろうと停止モードであろうといつでも実行できます。しかしレジスタの書き込み操作は停止モードのときしか実行できません。ECR (0x5E)およびGPIO/LED制御レジスタ(0x73~0x7A)はいつでも書き込めます。

5.2 タッチ状態レジスタ(0x00~0x01)

f:id:ti-nspire:20200819160639p:plain
この2つのレジスタには、13本ある検知入力チャンネルに検知されたタッチ/リリース状態が反映されます。ELEPROXは、13番目の近接検知チャンネルの状態です。更新レートはESI * SFIです。

ELEx, ELEPROX: 各チャンネルのタッチ/リリース状態(読み出しのみ)。
   1: 現在タッチされている判定されたとき
   0: 現在リリースされていると判定されたとき

註: 端子を電極として設定せずにGPIOとして有効化しているときは、それぞれの状態ビットには入力レベルが反映されますが、GPIOの状態が変化してもIRQ割り込みは発生しません。この機能はELE4~ELE11のみです。

OVCF: Over Current Flag (読み出し、書き込み)
   1: REXT端子に過電流が検出された。
   0: 通常の状態。

過電流が検出されると、OVCFが1にセットされ、MPR121は停止モードへ移行します。状態レジスタ0x00~0x03はOVCFビット以外もすべてのビットがクリアされるほか、出力レジスタ0x04~0x2Aも、ECR (00x5E)のビットD5~D0もクリアされます。OVCFビットが1にセットされているときは、実行モードへ移行しようとしてECRレジスタへ書き込みを行っても無視されます。OVCFに1を書き込むとOVCFがクリアされ、MPR121の障害状態が解消されます。そのあとで実行モードへ戻せます。

5.3 電極フィルター処理後データレジスタ(0x04~0x1D)

f:id:ti-nspire:20200819162848p:plain
MPR121では、13本あるどのチャンネルでも電極出力データがフィルター処理されます。この出力データは10ビットデータであり、内蔵された2段フィルターから出力されます。データ範囲は0~1024 (16進表現では0x000~0x400)です(訳註: 多分0~1023、0x000~0x3FF)。この10ビットデータのビット0~7が下位バイトに格納され、ビット9、8が上位バイトに格納されます。このデータは、各チャンネルで測定された電圧値であり、当のチャンネルの静電容量に反比例します。

レジスタは読み出し専用であり、その更新レートはESI * SFIです。データのコヒーレンシー(LSBとMSBとのマッチング)を保つ手段として、LSB、MSBを両方連続して読み出すことを推奨します。0x00~0x2Aを連続して読み出した場合は、新旧のデータが混合されずに、その瞬間の単発データが返ってきます。

5.4 ベースライン値レジスタ(0x1E~0x2A)

f:id:ti-nspire:20200820083022p:plain
各チャンネルからは10ビットの電極フィルター処理後データ出力が得られるだけでなく、チャンネルごとに10ビットのベースライン値も設定されます。このレジスタの更新レートは、ベースライントラッキング機能が有効化してある場合はESI * SFIです。各値は、バックグラウンド静電容量の変化に伴ってゆっくり変動する電圧に追随して動作する内蔵ベースラインフィルターから出力される値です。タッチ/リリース検出は、10ビット電極フィルター処理後データと10ビットベースライン値との比較結果に基づいて判定されます。

註: ベースライン値は、内部的には10ビット値ですが、ベースライン値レジスタを通じてアクセスできるのは、そのうちの上位8ビットだけです。ベースラインレジスタから読み出した値は、10ビット電極データと比較する前に左に2ビットシフトしなければなりません。

ベースライン値レジスタへは、停止モードのときに書き込めます。註: ベースライン値レジスタへ書き込むときは、書き込み操作のときに10ビットベースライン値の下位2ビットが内部で自動的にクリアされます。タッチ/リリース状態をうまく操作したい場合は、ベースライン値レジスタへ具体的な値を書き込むのが便利なことがあります。たとえば、ベースライン値を信号データよりも高い値に設定すれば、タッチされたまま状態からリリース状態へと手動で設定するのも簡単に行えます。

ベースライントラッキングのオン/オフの切り換えかたについて、また実行モードのときに初期ベースラインデータがどのようにロードされるのかの詳細については、電極コンフィギュレーションレジスタ(ECR、0x5E)を見てください。ベースライン値のフィルタリングの制御方法についてはベースラインフィルタリング制御レジスタ(0x2B~0x2A)を見てください。(訳註: 多分0x2B~0x40)

5.5 ベースラインフィルタリング制御レジスタ(0x2B~0x40)

12個ある電極ベースライン値はすべて、共通する一連のフィルタリング制御レジスタ(0x2B~0x35)で制御します。13番目のチャンネルであるELEPROXはレジスタ0x36~0x40で制御します。どちらのレジスタ群も構造は同じであり、rising、falling、touchedという3つの異なる状況に応じた処理を行うためのレジスタです。

risingは「電極データがベースライン値よりも大きいとき」と定義されます。fallingは「電極データがベースライン値よりも小さいとき」と定義されます。touchedは「電極がタッチされた状態にあるとき」と定義されます。どの状況についても、最大ハーフデルタ(MHD)、ノイズハーフデルタ(NHD)、ノイズカウントリミット(NCL)、フィルターディレイカウントリミット(FDL)という4つのパラメーターによってフィルタリング特性が詳細に設定されます。

最大ハーフデルタ(MHD): 変動幅がこの範囲内であればベースラインフィルターを通過します。有効値の範囲は1~63です。
ノイズハーフデルタ(NHD): ノイズドリフトが検出されないときにいくつずつインクリメントするのかを設定します。有効値の範囲は1~63です。
ノイズカウントリミット(NCL): サンプリングしたデータが連続して最大ハーフデルタ値を超えるのを最大何個まで許容するのかを設定します。サンプリングしたデータがノイズではないと判定するのに必要です。有効値の範囲は0~255です。
フィルターディレイカウントリミット(FDL): フィルターの動作速度を設定します。値が大きいほど、フィルターディレイの動作がゆっくりになります。有効値の範囲は0~255です。

フィルターをどう設定するかは実際の用途によって異なります。各レジスタについて詳しくはアプリケーションノートAN3891を見てください。

5.6 タッチ/リリース閾値(0x41~0x5A)

f:id:ti-nspire:20200820095327p:plain
ExTTH: 電極のタッチ閾値。範囲は0~0xFF。
ExRTH: 電極のリリース閾値。範囲は0~0xFF。

13本あるチャンネルはすべて個別に、タッチ閾値、リリース閾値が設定できます。タッチおよびリリースは、電極フィルター処理後データとベースライン値とを比較することによって検出されます。タッチ/リリースと思われる動作が発生すると、静電容量の急激な変化が検出されます。その変化が、ベースライン値からのずれの大きさによって表現されます。

   タッチ条件: (ベースライン値 - 電極フィルター処理後データ) > タッチ閾値
   リリース条件: (ベースライン値 - 電極フィルター処理後データ) < リリース閾値

閾値の設定は、タッチ/リリースの信号強度、システムの感度、ノイズ耐性の各要件によって違ってきます。通常のタッチ検知アプリケーションの場合、閾値は通常0x04~0x10の範囲にし、タッチ閾値のほうをリリース閾値よりすこし大きくします。その目的は、1つはヒステリシス特性を持たせることです。もう1つは、ノイズとジッタとを防ぐことです。詳しくは、アプリケーションノートAN3892とMPR121の設計ガイドラインとを見てください。

5.7 ディバウンスレジスタ(0x5B)

f:id:ti-nspire:20200820105544p:plain
DT: タッチの場合のディバウンス回数。値の範囲は0~7。
DR: リリースの場合のディバウンス回数。値の範囲は0~7。

13本あるどのチャンネルも、タッチディバウンス数およびリリースディバウンス数は共通です。状態レジスタ0x00および0x01の状態ビットが変化するのは、タッチまたはリリースの連続検知回数がディバウンス数の設定に一致したあとだけです。ディバウンスの設定は、発生するおそれのあるノイズグリッチを避けるのに非常に便利なことがあります。ディバウンスの設定を使用しているときは、ESI * SFI * DR (またはDT)の時間だけ、状況ビットの変化が遅れます。

5.8 フィルター/グローバルCDCコンフィギュレーション(0x5C)、フィルター/グローバルCDTコンフィギュレーション(0x5D)

f:id:ti-nspire:20200820110751p:plain

表8. ビットの説明
f:id:ti-nspire:20200820110945p:plain

この2つのレジスタでAFEの全体的な設定します。これには、13番目の近接検知チャンネルも含めて13チャンネルすべて対するグローバル電極充電/放電電流(CDC)、グローバル充電/放電時間(CDT)、共通フィルタリング設定(FFI、SFI、ESI)が含まれます。

レジスタ0x5Cには、13チャンネルすべてを対象とするグローバルCDC値と初段フィルター設定値とが格納されます。0x5F~0x6Bのうち、目的のチャンネルに対応したレジスタの充電/放電電流(CDC)設定値がゼロである場合、そのチャンネルにはグローバルCDC値が適用されます。MPR121の自動コンフィギュレーション機能を有効化すれば、システムの起動中にCDCxが自動的に設定され、その値が実際の測定に使われます。

グローバルCDC、グローバルCDTだけを使って済むのは、13チャンネルすべての静電容量値がほぼ同じ場合だけです。電極のパターンやサイズだけでなく、表張りや下地材料がチャンネルごとに違う場合は、個別のCDCx (およびCDTx)を使ったほうが、電源電圧値に近いところまで各電極が充電されて各チャンネルの検知範囲が最大限まで広くなるため、検知感度としては良好な結果が得られます。

FFI、SFI、ESIの各設定は、システム設計のノイズフィルタリング要件に応じて選択しなければならないだけでなく、消費電力に対するニーズと応答時間とのバランスもとらなければなりません。

有効化されたすべてのチャンネルのスキャンと充電/放電とに要するトータル時間がESIの設定よりも長い場合は、ESIの設定よりも実際の時間のほうが優先されます。たとえばFFI = 3 (34サンプル)、CDT = 7 (32 us)にして、13チャンネルをすべて有効した場合は、ESI = 4 (16 ms)であっても、必要なスキャン時間は34 * (32 us + 32 us) * 13 = 28 msです。したがって実際のサンプリング間隔はESI (16 ms)ではなくこの28 msです。

5.9 電極充電電流レジスタ(0x5F~0x6B)

f:id:ti-nspire:20200820143053p:plain
CDCx: 各チャンネルに適用される充電電流値を設定します。設定範囲は、グローバルCDC値と同じく1 uAきざみで0~63 uA (0x00~0x3F)です。CDCxがゼロの場合、当のチャンネルにはグローバルCDC値が使われます。

個別のCDCx値は手動でも設定できるし、自動コンフィギュレーションが有効化してあれば自動的にも設定できます。自動コンフィギュレーションが有効化してあるときは、停止モードから実行モードへ最初に移行する最中に、しかるべきCDCx (SCTS = 0の場合はCDTxも)の検索が自動的に試行されます。個別のCDCxは、自動コンフィギュレーションの完了したタイミングで、自動的に更新されて個々のレジスタへ格納されます。それ以降の静電容量測定およびタッチ検知にはCDCxが使われます。

5.10 電極充電時間レジスタ(0x6C~0x72)

CDTx: 各チャンネルに適用される充電時間を設定します。設定範囲は、グローバルCDT値と同じく0~32 us (2b000~2b111)です(訳註: 多分0b000~0b111)。CDTxがゼロの場合、当のチャンネルにはグローバルCDT値が使われます。

個別のCDTx値は手動でも設定できるし、自動コンフィギュレーションが有効化してあれば自動的にも設定できます。自動コンフィギュレーションが有効化してあるときは、停止モードから実行モードへ最初に移行する最中に、しかるべきCDCx (SCTS = 0の場合はCDTxも)の検索が自動的に試行されます。つまり自動コンフィギュレーションではCDTxも検索されるということです。個別のCDTxは、自動コンフィギュレーションの完了したタイミングで、自動的に更新されて個々のレジスタへ格納されます。このデータが、以降の静電容量測定およびタッチ検知に使われます。SCTSビットが1の場合、CDTxの検索は省略されます。

5.11 電極コンフィギュレーションレジスタ(ECR、0x5E)

f:id:ti-nspire:20200821093943p:plain

表9. ビットの説明

f:id:ti-nspire:20200821094025p:plain

電極コンフィギュレーションレジスタ(ECR)では、実行/停止モードの切り換え、ベースライントラッキング処理の制御、13チャンネルすべての入力設定を行います。

ECRのリセットデフォルト値は0x00です。このときMPR121は停止状態にあり、13本あるどのチャンネルでも静電容量測定はおこなわれません。ELEPROX_EN、ELE_ENのうち1ビットでも0以外の値に設定すると、実行モードへ移行し、すぐに動作が始まります。ELEPROX_EN、ELE_ENをすべてゼロにクリアすると、停止モード(消費電力が最も小さい状態)へ入ります。停止モード、実行モードは、ECRの設定によっていつでも切り換えられます。

13番目の近接検知チャンネルも含めてすべてチャンネルを有効化した場合は、近接検知チャンネルが最初にスキャンされ、次いでELE0、ELE1、...、ELE11の順番に1つずつスキャンされます。このスキャン処理は、フィルター/CDTコンフィギュレーションレジスター(0x5D)のESIで指定されるサンプリングレートで定期的に実行されます。各チャンネルの設定については上表を見てください。有効化するチャンネルを減らせば、未使用のチャンネルに費やされるスキャン時間と検知電力とが節約できます。

一般的なタッチ検知アプリケーションの場合はベースライントラッキングを有効化します。入力検知チャンネルに検知される静電容量は、環境とバックグラウンドとに影響を受けてゆっくりと変化します。その変化を打ち消す手段がベースライントラッキングです。CLを設定することにより、ベースライントラッキングのオン/オフ、およびベースライン初期値のロード方法の指定ができます。ベースライントラッキングフィルタリングシステムは、安定した状態になるまで非常に時間がかかるうえ、ベースライン値はゼロから始まるため、ベースライン値のランプアップに非常に長い時間が必要です。そのため、MPR121を初めて実行モードにしたあとは、短時間だけ(訳註: 20秒くらい)、タッチしても応答しません。CL = 2b10 (多分0b10)に設定すると、実行モードの最初に初期ベースライン値が読み込まれます。こうれば、初期ベースラインのランプアップ時間が短くなって、タッチ検知の遅延には気づかないでしょう。この場合は、最初に測定された電極データ10ビットのうち上位5ビットが使われます。

自動コンフィギュレーションレジスタ(0x7B~0x7F)

有効化したチャンネルごとに充電時間と充電電流の両方を正しく設定しなければなりません。その目的は、1つは、規定の面積を持つcharge fieldが検知パッド上に形成できるようにすることであり、もう1つは、内蔵ADCでその静電容量が測定できるようにすることです。13チャンネルすべてを使用するときは、設定する必要のあるCDCx値およびCDTx値はそれぞれ全部で13個あります。

MPR121には、充電パラメーターの検索、設定を自動的にしてくれる自動コンフィギュレーション機能があります。自動コンフィギュレーションを実行すると、有効化されたチャンネルに応じてCDCxとCDTxとの具体的な組み合わせが自動的に取得できます。これによって、試作品のときも、最終製品の詳細確認のときも、試行錯誤する手間が減らせます。設計者のすべき大切な作業は、MPR121で生成されたパラメーター設定でよいかどうかを確認することです。この確認によって、MPR121の電源がオンになるたびに毎回設定が最適化されるとともに、多くのさまざまな環境での動作が約束できます。

自動コンフィギュレーションを実行すると、チャンネルごとに最適なCDCxとCDTxとの組み合わせが見つかります。そのため、各チャンネルの充電レベル(I * T = V)は、設計者の指定した目標値に極力近い値となります。システムが正しく動作するよう設定されているかどうかを確認するのに必要な範囲は、設定値の上限、下限によって決まります。しかるべきCDCxとCDTxとが自動コンフィギュレーションで見つからない場合、そのチャンネルには範囲外(OOR)状態がセットされます。

自動コンフィギュレーションは、MPR121が停止モードから実行モードへ移行するたびに実行されます。自動コンフィギュレーションが完了したあと、チャンネルごとにCDCxとCDTxとの組み合わせが計算され、対応するレジスタフィールドへ自動的にロードされます。

自動コンフィギュレーションに失敗した場合でも、自動再コンフィギュレーション機能があります。自動コンフィギュレーションに失敗したことが原因でOOR状態になった場合は、サンプリング間隔ごとに自動再コンフィギュレーションが実行されます。自動再コンフィギュレーションは、OOR状態が解消されるか自動再コンフィギュレーションが無効化されるかするまで実行されます。

自動コンフィギュレーションの制御に使われるレジスタは5つあります。レジスタ0x7B、0x7Cは制御レジスタとして使われ、レジスタ0x7D、~0x7Fはコンフィギュレーションの目標値を格納するのに使われます。詳しくはアプリケーションノートAN3889を見てください。
f:id:ti-nspire:20200825101713p:plain
FFI: 自動コンフィギュレーションおよび自動再コンフィギュレーションが正しく実行されるようにするためのビットです。0x5CのFFIと同じです。
ACE: 自動コンフィギュレーション有効化。1: 有効化、0: 無効化。有効化すると、停止モードから実行モードへ移行し始めるタイミングで1回だけ自動コンフィギュレーションが実行されます。その際、有効化されたチャンネルごとにCDCxおよびCDTxの検索、更新が実行されます(SCTS=0の場合のみ)。
ARE: 自動再コンフィギュレーション有効化。1: 有効化、0: 無効化。有効化しておくと、自動コンフィギュレーション後にいずれかのチャンネルにOORがセットされた場合に、OORが解消されるまで、サンプリング間隔ごとにそのチャンネルに対して自動再コンフィギュレーションが実行されます。
BVA: ECR (0x5E)レジスタのCLビットと同じ値を入れてください。
RETRY: 自動コンフィギュレーションおよび自動再コンフィギュレーションについて、何度コンフィギュレーションに失敗した場合にOORがセットされるようにするのか、その試行回数を指定します。
f:id:ti-nspire:20200825103405p:plain
SCTS: Skip Charge Time Search。
   1: 自動コンフィギュレーション、自動再コンフィギュレーションのいずれかと、現在のグローバルCDT、CDTxのいずれかとが個々のチャンネルに使用されるときに、CDTxの検索と更新を省略します。この場合は、CDTまたはCDTxを設計者が手動で指定しないと動作しません。SCTSを1にセットすると、自動コンフィギュレーションに要する時間が短くなります。正しいCDTx/CDTがすでに得られていて、現在のCDTおよびCDTxであればどの状況でも動作するという確信があるなら、これは便利です。
   0: 自動コンフィギュレーション、自動再コンフィギュレーションのいずれかまたは両方によってCDTx、CDCxの両方とも検索されて値が設定されます。
ACFIE: 自動コンフィギュレーション失敗割り込み有効化。1 : 有効化、0: 無効化。
ARFIE: 自動再コンフィギュレーション失敗割り込み有効化。1 : 有効化、0: 無効化。
OORIE: 範囲外割り込み有効化。1 : 有効化、0: 無効化。

f:id:ti-nspire:20200825111506p:plain
USL: 上限。この値によって、自動コンフィギュレーション時および自動再コンフィギュレーション時の境界チェックに関する電極データの上限が設定されます。
LSL: 下限。この値によって、自動コンフィギュレーション時および自動再コンフィギュレーション時の境界チェックに関する電極データの下限が設定されます。
TL: ターゲットレベル。自動コンフィギュレーション時および自動再コンフィギュレーション時に期待される電極データの目標値です。すなわち、自動コンフィギュレーションおよび自動再コンフィギュレーションに成功したあとは、未タッチ状態で測定された電極データがTL値に近くなるはずです。TLはUSLとLSLとの範囲内になければなりません。

この3つのパラメーターUSL、LSL、TLは、ベースライン値と同じ形式をしていて、ユーザーがアクセスできるのは上位8ビットだけであり、下位2ビットは自動的にゼロに設定されます。USL、LSL、TLの各データは、電極データと、あるいは10ビットベースライン値と比較する前に、左に2ビットシフトする必要があります。

有効な自動コンフィギュレーション結果を得るためには、USL、LSL、TLの各値が255 >USL>TL>LSL>0という関係になければなりません。例: USL=200、TL=USL0.9=180、LSL=USL0.5=100。

エンドユーザーの環境によっては、チャンネルごとに大きな差異の生じることがあります。その理由は、すべてのチャンネルに同じUSL/LSL/TLデータが使われているからです。各パラメーターについては、極端に近い値に設定しないことが重要です。極端に近い値に設定してしまうと、特定のチャンネルにふさわしい充電設定が自動コンフィギュレーションではなかなか見つからなくなります。その場合、電極データがいとも簡単にUSL、LSLの範囲を外れるおそれがあります。データが範囲外になると、そのチャンネルの状態はOORになります。自動コンフィギュレーションを実行したのに、そのチャンネルがまだOORである場合は、そのチャンネルの設定がまだ最適化されていない可能性があります。この問題を解決する方法の1つは、USL/LSL/TLの設定を手動で見直すことです。チャンネル状態がOORになるもう1つの可能性は、チャンネル自体の問題です。たとえば、グラウンドとの短絡、電源との短絡、他のチャンネルのパッドとの短絡などです。

TLの設定について1つの方法としては、USLに近い値に設定してみることです。そうすれば、軽くタッチしても検出されるよう充電フィールドが設定できます。その一方で、TLは極端にUSLに近い値に設定してはなりません。限界値を絶えず超過してしまうからです。たとえばエンド夕ーザーの環境によっては電極データに大きなばらつきの出ることがあります。そうなると、読み取った値の一部がUSLを超えてしまい、結果、自動コンフィギュレーションに失敗します。そのため、エンドユーザー環境における静電容量の変化量が大きい場合は、静電容量に変動があってもある程度の余裕が持てるくらいにはUSLとTLとを低く設定することをお勧めします。

上述の内容を念頭に置き、式1~3を使って設定例の1つ下に示します。ここでは、TLをUSLの90%に、LSLをUSLの65%に設定すれば、ほとんどの使用例がカバーできるということを前提としています。場合によってはさらに調整が必要でしょうが、これを出発点にするのが良いでしょう。

f:id:ti-nspire:20200825144159p:plain

USLはVDD-0.7のレベルに設定する必要は必ずしもありませんが、印加される一定の充電電流は、データシートに示されている値と極力同じにすることにはメリットがあります。ADC変換の式4を使って入力端子の静電容量値を正確に計算できるからです。VDD-0.7をUSLのレベルとして使えば、電源電圧が変動する状況でもある程度の余裕が持てます。電源電圧が変動するようなシステムの場合、自動コンフィギュレーションに関してはVDDの最小値を考慮してください。そうすれば、電源電圧が低下したときでも、比較的低い充電フィールドを使うことで、電極データがVDDにクリッピングするのが避けられるからです。

5.12 範囲外状態レジスタ(0x02, 0x03)

f:id:ti-nspire:20200825151439p:plain
Ex_OOR、EPROX_OOR: 13チャンネルの範囲外状態ビット。対応するチャンネルが自動コンフィギュレーションおよび自動再コンフィギュレーションの範囲チェックに不合格であったことを示します。このビットは、自動コンフィギュレーションおよび自動再コンフィギュレーションの範囲チェックに合格スレがクリアされます。このビットはリードオンリーです。
ACFF: 自動コンフィギュレーション失敗フラグ。自動コンフィギュレーションに失敗したときにこのビットがセットされます。リードオンリーです。
ARFF: 自動再コンフィギュレーション失敗フラグ。自動再コンフィギュレーションに失敗したときにこのビットがセットされます。リードオンリーです。

自動コンフィギュレーション、自動再コンフィギュレーションのいずれかまたは両方が有効化されているときは、USLとLSLとで設定された範囲内にとどまっているかどうかを確認する手段として、自動コンフィギュレーション、自動再コンフィギュレーションの実行されるたびに毎回、電極データのチェックが実施されます。電極データが範囲外になると、それに対応するEx_OORxビットが1になって、そのチャンネルに障害の発生していることを示します。OORエラーの原因は、たとえば測定検知パッドと電源との短絡や、他のチャンネルとの短絡などです。

5.13 ソフトリセットレジスタ(0x80)

0x80番地に0x63を書き込むとソフトリセットがかかります。ソフトリセットがかかると、I2Cモジュールは影響を受けませんが、それ以外はすべて、POR時と同じようにリセットされます。

5.14 GPIOレジスタ(0x70~0x7A)

f:id:ti-nspire:20200826100457p:plain
このレジスタでGPIO機能およびLEDドライバー機能を制御します。D7~D0の各ビットがそれぞれELE11~ELE4の各入力端子のGIPO機能およびLED機能に相当します。こうした各ポートのいずれも、電極検知に使用しないときは、GPIOとしてもLEDドライバーとしても使用できます。GPIO制御レジスタへは、停止モードであろうと実行モードであろうといつでも書き込めます。LED ドライバーおよびGPIOシステムの設定については、アプリケーションノートAN3894で詳しく述べます。

註: タッチ検知電極の本数と、それ以外のGPIOポートとして利用できるポートの本数は、ECR (0x5E)とGPIO有効化レジスタ(0x77)とで設定します。ECRのほうが優先順位が高いため、0x77で有効化されたGPIOよりも優先されます。つまり、どれか端子がGPIOとして有効化してあって、かつECRによって電極としても選択してある場合、その端子は実行モード中にGPIO機能がすぐに無効化されて電極として機能します。

パワーオンリセット直後の停止モード時には、GPIOポートはすべてデフォルトの無効化状態にあり、かつ電極は一切有効化されないため、電極もGPIOモードもすべて高インピーダンス状態にあります。

EN、DIR,CTL0、CTL1: GPIOの設定ビット。各機能については下表で説明します。
f:id:ti-nspire:20200826103925p:plain
(訳註: 表中のGTLはたぶんCTL)

ENビットをセットすると、それに対応するGPIO端子が有効化され、CTL0、CTL1、DIRの各ビットによってGPIO機能が設定されます。入力として使用する場合は、高インピーダンスの通常のロジック入力端子(CTL0CTL1=2b00)、内部プルダウンされた入力端子(CTL0CTL1=2b10)、内部プルアップされた入力端子(CTL0CTL1=2b11)のいずれかに設定できます。註: CTL0CTL1=2b00の場合は、入力レベルを固定せずに入力端子をオープンのままにしておくと、ロジック入力状態が不安定になることがあります。

GPIOを出力にする場合は、プッシュプル(CTL0CTL1=2b00)、オープンドレインのどちらにも設定できます。GPIOをLEDドライバーとして使うときは、GPIOはハイサイドのみオープンドレイン(CTL0CTl1=2b11)に設定されます。この状態だとLEDに最大12 mA流せます。

DAT: GPIOデータレジスタビット。

GPIOが出力として有効化してある場合は、GPIOデータレジスタ(0x75)のDATビットレベルのうち、当のGPIOポートに対応したDATビットレベルが出力されます。電極の充電中は、出力レベルは変化しません。レベルが変化するのはAD変換後です。このレジスタを読み出したときに返ってくるのは、ポートのレベルではなく、GPIOデータレジスタの中身であることに注意してください。GPIOが入力として設定してあるときにこのレジスタを読み出すと、GPIOデータレジスタの中身は返ってこずに、対応するポートのラッチ入力レベルが返ってきます。DATに書き込むと、GPIOデータレジスタの中身は変化しますが、入力機能には作用しません。

SET: 1を書き込むと、データレジスタの対応ビットがセットされます。
CLR: 1を書き込むと、データレジスタの対応ビットがクリアされます。
TOG: 1を書き込むと、データレジスタの対応ビットがトグルします。

GPIOデータセットレジスタ、GPIOデータクリアレジスタ、GPIOデータとぐるレジスタに1を書き込むと、データレジスタ内で対応しているDATビットの中身がセット/クリア/トグルされます。0を書き込んでも意味はありません。これらのレジスタは、他のポートに影響を与えることなくポートごとに個別にセット、クリア、トグルができます。 これらのレジスタを読み出すと、GPIOデータレジスタの中身が返ってくることに注意することが重要です。

6 MPR121のシリアル通信

6.1 I2Cシリアル通信

(略)

6.2 スレーブアドレス

(略)
f:id:ti-nspire:20200826113833p:plain

6.3 マスターが複数ある場合の動作

(略)

6.4 読み出し、書き込み動作のフォーマット

f:id:ti-nspire:20200826114001p:plain

パッケージの寸法

(略)

改訂履歴

(略)

お問い合わせ

(略)

―――――――――――――――――――――――――――――
訳註: データシートに記載はないが、AN3894を見るとGPIOはPWM制御もできるようである。
f:id:ti-nspire:20200826114256p:plain