静電容量式近接 & タッチセンサーコントローラーMPR121 / アプリケーションノートAN3891ベースラインシステム非公式訳

原文:
https://www.nxp.com/docs/en/application-note/AN3894.pdf

MPR121ベースラインシステム

はじめに

タッチ検知システムにはさまざまな構成要素が必要です。タッチ検知に特に欠かせないのがベースラインフィルターです。ベースラインフィルターの目的は、入ってきた信号の長期的平均値をとること、そしてその中から、「タッチ」に相当する信号を見つけ出すことにあります。ベースラインフィルターは、タッチに対して見せる反応と、ノイズや環境変化に対して見せる反応とが違っていなければなりません。その反応を決めるのが、さまざまな条件下で動作する4つのレジスタ、すなわちMHD (マックスハーフデルタ)、NHD (ノイズハーフデルタ)、NCL (ノイズカウントリミット)、FDL (フィルターディレイリミット)です。
f:id:ti-nspire:20200901155534p:plain:w500

MHD (マックスハーフデルタ)

f:id:ti-nspire:20200901155645p:plain:w500
3次フィルターを通過する最大の変動幅を設定します。
設定範囲は1~63。0に設定してはなりません。

NHD (ノイズハーフデルタ)

f:id:ti-nspire:20200901161506p:plain:w500
ノイズではないドリフトが検出されたときの増分を設定します。
設定範囲は1~63。0に設定してはなりません。

NCL (ノイズカウントリミット)

f:id:ti-nspire:20200901161651p:plain:w500
連続していくつかのサンプルがマックスハーフデルタ値を超過した場合に、その信号はノイズではないと判定されます。その個数を決定するのがNCLで。
設定範囲は0~255。
0にすると、マックスハーフデルタを超えるたびに、その信号はノイズではないと判定されます。
1にすると、2個のサンプルが連続してマックスハーフデルタを超えた場合に、その信号はノイズではないと判定されれます。
255にすると、255個のサンプルが連続してマックスハーフデルタを超えた場合に、その信号はノイズではないと判定されれます。(訳註: 多分256個)

FDL (フィルターディレイリミット)

f:id:ti-nspire:20200901162558p:plain:w500
フィルターの動作速度を設定します。値の大きいほど、遅くなります。
設定範囲は0~255。


rising、falling、touchedという3つの状態に応じて上記レジスタの動作は違ってきます。こうした状態が変化してデータが変化すると、そのときのフィルタープロセスはキャンセルされてフィルターカウンターはすべて0に戻ります。

ベースラインフィルターの動作は、2次フィルターのデータとベースラインフィルターの値との関係によって決まります。タッチが発生すると、そのときの測定系の動作も変化します。タッチの生成プロセスについては、アプリケーションノートAN3892で述べます。2次フィルターのデータがベースラインフィルターのデータよりも小さいときには、fallingデータの測定系が有効化され、2次フィルターのデータがベースラインフィルターのデータよりも大きいときをには、risingデータの測定系が有効化されます。以下の各例では、上記の3つの状態間で変化しないときのベースラインシステムについて説明します。

例1

データのわずかな変化は、長期的なゆっくりとした変化(タッチではなく周囲環境の変化)である見なせます。MHDを2倍した値よりも小さいデータしかベースラインフィルターを通過しないため、それが長期的なゆっくりとした変化なのかそうでないのかが選り分けられます。たとえばベースラインが700であり、データが701であり、MHDが1である場合、次の測定サイクルのときにはベースラインフィルターの値が701になります。

f:id:ti-nspire:20200903073607j:plain

例2

MHDを2倍した値よりも大きく変化するデータはノイズであると見なせます。ノイズであるかどうかの判断は、NHD、NCLの各値によってなされます。MHDの範囲外にあるデータはベースラインフィルターによって除外されますが、ノイズであると見なせるデータは、発生するたびに発生回数がカウントされ、何個か連続して発生した場合にはベースラインが調整されます。

連続して何個発生した場合にベースラインを調整するのかは、NCLで設定します。この個数に達したときに、NHDで設定された変化分だけベースラインが変化します。
f:id:ti-nspire:20200903073634j:plain

例3

データの変動がMHDの2倍値より大きくても、その変動方向にばらつきのある場合は、ベースラインは変化しません。ベースラインを中心にしてプラス方向からマイナス方向へ、あるいはマイナス方向からプラス方向へデータが変化した場合、フィルターカウンターはリセットされるため、結局ノイズは除去されて、ベースラインは変化しません。
f:id:ti-nspire:20200903073656j:plain

例4

ゆっくり変化するデータについては、ベースラインフィルターは判断を見誤ることがあります。FDLを使うと、測定系全体の速度が落とせます。それには、いくつかの値の平均をとってからその値をベースラインフィルターへ供給するという方法が使われます。
f:id:ti-nspire:20200902105922p:plain
ベースラインフィルターは、元の値ではなく平均化されたほうの値に反応します。
f:id:ti-nspire:20200903073731j:plain

複雑な例

基本的なことがわかったところで、今度はもう少し難しい事例について説明します。タッチセンサーシステムでは、いくつか既知の特性を利用することでベースラインフィルターの機能が改善できます。既知の特性とは、変化の方向、タッチの発生、タッチの速度などです。前述した4つの例もまだ利用されてはいますが、さらに機能が追加されています。以下の各例では、例1~4のような設定とは違う設定設定にすることがいかに効果的であるかを述べます。

例5

タッチ時の変化は必ずマイナス方向へ向かいます。そのため、変化の方向に応じてパラメーターを変えれば、この性質が利用できます。一般に、値の減少時に働くフィルターのほうを、値の増加時に働くフィルターよりも遅くするのがベストです。そうすれば、ベースラインの値がおかしくなっても自動的に復帰できるからです。
f:id:ti-nspire:20200902121538p:plain
A. タッチが発生した。軽いタッチであるため、ベースラインの減少もゆっくりである。しかしベースライン値減少時のベースラインフィルターの反応を遅くしてあるため、タッチが検出される。(訳註: 減少時のフィルターの反応が速ければノイズと判断されるところである)
B. ベースライン値の増加時にはフィルターが速く反応するよう設定してあるため、ベースライン値は瞬時に初期値に戻る。
C. ベースラインが瞬時に調整されるため、連続タッチも簡単に処理できる。もし、ベースラインの調整がのろければ、2回目のタッチは検出できないおそれがある。

例6

実際のタッチと、それに酷似した環境的変化とが判別できなければなりません。例5のタッチは本当のタッチでしたが、ベースラインをまったく変化させないほうがよいと最初は思われるほどゆっくりした変化でした。
f:id:ti-nspire:20200902123315p:plain
A. 濡れた布でタッチ面を拭いたため、値が減少している。その結果、比較的ゆっくりと静電容量が変化する。ベースラインは、このゆっくりとした変化に正確について行っている。
B. タッチ面が乾き始めたため、ベースラインが上昇し始める。
C. 新たなベースラインからの変化によってタッチが正確に検出される。

例7

これは、すでにタッチされた状態にあるときの例です。タッチを検出するときの処理ではありませんが、一連のプロセスの中では重要な部分です。タッチの測定速度が遅くなるようベースラインフィルターを設定すれば、タッチキーが押されたままになるのが防げます。この場合は、値がMHDの2倍値より小さくなることはありえませんので、必要なのはNHD、NCL、FDLだけです。
f:id:ti-nspire:20200902145100p:plain
A. 本来であればベースラインの変化が追いつけないようなタッチが発生した。しかしフィルタリングが非常に遅いため、実はまだベースラインは追随している。
B. たといリリースされていなくても、タイムアウトするため、結局はベースラインが追いつく。
C. ベースラインフィルターとして普通の動作をしている。

例8

この方法でも、誤用が原因でタッチキーがタッチされたままになるのを防ぐことが可能です。たとえば、金属製のペンがボタンに触れた場合でも、時間が過ぎればフィルターによってその接触は除外され、通常の動作に戻ります。このことは、水、食品、湿った環境など、静電容量の変化する状況に当てはまります。
f:id:ti-nspire:20200902150751p:plain
A. 正常なタッチ
B. タッチの誤認識はフィルターで除外される。
C. 新たに調整されたベースライン値を基準とするタッチ。