CypressのCY8CKITを使用した静電容量式タッチセンサ設計の簡素化
DigiKeyの北米担当編集者の提供
2016-12-15
タッチ操作は、家電製品からウェアラブルまで多くの民生用製品に不可欠な基本機能です。一方、機能的設計と物理的レイアウトの間には相互依存性があるため、開発者にとって、タッチセンサ設計は技術設計と同じように難しい問題です。このため、開発チームは、ボタンやスライダその他の要素で可能な限り最高の性能を実現するためのさまざまな作業に多くの時間を取られ進捗が遅れてしまう場合があります。
Cypress SemiconductorのPSoC 4000 CapSense試作キットには、静電容量式タッチセンシングの評価に必要なハードウェアとソフトウェアがすべて用意されており、さまざまな製品へのタッチセンサの実装を短期間で行え、プロジェクトの進行をスピードアップできます。
本記事では、さまざまな静電容量式タッチセンシング方式の動作、および設計者がタッチセンサの設計時に理解しておくことが必要ないくつかの注意事項について説明します。さらに、PSoC CapSenseキットとその動作、およびキットを使用した設計方法を紹介し、ソフトウェアコードの例も示します。
静電容量式タッチセンサを使用する理由
静電容量式タッチセンサは、その性質上、広範囲のアプリケーションに適します。タッチセンサシステムでは、従来の機械式ボタンやスイッチに含まれる可動部分が不要なため、磨耗や消耗に起因する故障をなくし信頼性を大幅に高めることができます。また、タッチセンサシステムは保護材料で完全にカプセル封止できるため苛酷な環境にも使用できます。タッチセンサは、信頼性が高いだけでなくさまざまな形状に容易に合わせることができるため、技術者は、家電製品、自動車、その他の主流製品で、消費者の要求に応えるスタイリッシュでエレガントな設計を容易に行えます。
静電容量式タッチセンサは、特殊構造のタッチ面に指または手を接近させたときの静電容量の変化を利用しています。タッチセンサでこの変化を検出するには、「自己容量式」、「相互容量式」という2つの異なる方式があります。
自己容量式のタッチセンサでは、センサパッドに指を置くとグランドへの導電路が形成されて静電容量が急増し、センサパッドとグランドプレーンとの間のさまざまな寄生容量源に比べきわめて大きくなります(図1)。自己容量式は通常、ボタンやスライダなどのシングルタッチアプリケーションに適します。

図1:自己容量式では、I/Oピンとグランドの間の静電容量の変化を検出します。グランドに接続されたハッチでセンサを囲むことによりセンサのノイズ耐性が改善されます(画像提供:Cypress Semiconductor)
これに対し、相互容量式センシングでは、送信側と受信側の電極の間の静電容量を測定します(図2)。コントローラが送信ピンに電圧を印加したときの受信ピンの電荷量測定値は、2つの電極間の相互容量に正比例します。相互容量式は自己容量式に比べ信号対雑音比(SN比)が高いため、ノイズ耐性が高くなります。SN比が高いと、産業用アプリケーションなどに要求される保護された画面や表示器のようにオーバーレイが厚くても使用できます。
また、センサが配列状に配置されているため、開発者は異なる複数の部位での相互容量変化を同時に確認できます。このため、民生用小型製品に多く見られるトラックパッドを使用したマルチタッチアプリケーション、あるいは家電製品や車載用製品でディスプレイを多用するアプリケーションに使用されるタッチスクリーンには、この方式が適しています。

図2:相互容量式センシングシステムでは、コントローラが送信(TX)電極への電圧をオン/オフします。受信(RX)電極の電荷量は、これらの電極間の相互容量測定値に比例します。指などの導電性物体が触れると相互容量の測定値が変化します(画像提供:Cypress Semiconductor)
センサの設計
図1、2のように、静電容量式センサパッドは多層基板上のトレースから形成されます。基本的な自己容量式ボタンの最も単純な設計では、センサパッドトレースがボード上面のハッチ状のグランドプレーンで囲まれています。センサパッドはコントローラの入力ピンに接続され、通常はボード底面に取り付けられています。底面にもグランドプレーンがあります。また、最上層は、センサのオーバーレイを形成する非導電性の保護コンパウンドで被覆されています。キーパッドの場合は、基本設計を拡張し、配列状に配置されたアドレス指定可能なボタンに個別のセンサパッドが組み込まれます。
通常は、ジグザク状パターンに配置された複数のセンサパッドからリニアスライダを作ることができます。後述のように、このような配置から得られる情報を使用すると、対応するソフトウェアで、より高精度に指の位置を計算できます。トラックパッドとタッチスクリーンの場合は、この方法をさらに拡張して、2つのリニアスライダによりパッドまたは画面上の指のX-Y位置を判断します。
実際の静電容量式タッチセンサの物理的設計では、センサの感度低下の原因となる寄生容量を小さくするための工夫が必要なために、きわめて複雑な作業となる場合もあります。グランドプレーン自身を慎重に設計することに加え、ハッチ状のグランドプレーンが特定の物理的設計ルールに厳密に従っていることが必要です。また、液体が原因でセンサの読み取り特性が歪む可能性がある家電その他の製品の場合は、検出面に液体があることによる読み取りエラーをなくすためさらに複雑な構造が必要になります。相互容量式センサ配列の場合は、プリント基板の複数の層に設けられた送信トレースと受信トレースで形成される複数のセンサ配列を使用するため、さらに設計が複雑になります。
これらのセンサを作る際には設計者が慎重に作業する必要がありますが、静電容量式タッチセンサの開発の多くは標準的な設計フローに従って行われます。 ただし通常は、センサボードのフル生産を開始する前に、部品、センサパッド、ボードに固有な特性、あるいはセンサ性能と全体の電力に関する特定の要件などを考慮して、技術者がハードウェアパラメータとソフトウェア設定値を調整する必要があります。Cypress SemiconductorのPSoC 4000Sなど専用のシステムオンチップ(SoC)デバイスには、微調整要件など静電容量式タッチセンサの実装を容易にできるよう専用に設計された機能が組み込まれています。
Cypress CapSense
ARM® Cortex®-M0+プロセッサコアをベースにしたCypressのPSoC 4デバイスファミリは、メモリとプログラム可能なアナログおよびデジタル周辺機能を組み合わることで、広範囲なアプリケーションに対応できるように設計されています。特に、PSoC 4000Sが提供するCypressの特許技術であるCapSense機能には、静電容量式タッチセンサ処理に必要な信号チェーン全体が含まれています。このため、技術者は、わずかの部品を追加するだけでタッチセンサを設計できます(図3)。

図3:Cypress SemiconductorのPSoC 4000Sデバイスには、ARM Cortex-M0+コア、メモリ、周辺機能、およびCypressのCapSense静電容量式センサ信号チェーンが組み込まれています。開発者は、わずかな部品を追加するだけで自己容量式または相互容量式のセンシングソリューションを実装できます(画像提供:Cypress Semiconductor)
自己容量式センサの設計の場合は、各センサパッドをGPIOピンに接続してCMODコンデンサを1つ追加します(図3)。相互容量式センサの設計の場合は、各センサの受信ラインと送信ラインに個別のGPIOを使用し、1対の外部コンデンサCINTAとCINTBを追加します。また、外部CTANKコンデンサは、センサのオーバーレイ表面にある液体に対する感度を下げるためのシールド電極の実装をサポートします。
PSoC 4000Sは、自己容量式と相互容量式の両方をサポートします。自己容量式センシングの場合は、SoCのCapSenseシグマデルタ(CSD)機能が、電流をデジタル値に変換するコンバータを使用してGPIOの自己容量の変化を測定します。相互容量式センシングの場合は、SoCのCapSenseクロスポイント(CSX)機能がTx電極を駆動し、Rx電極の電荷を検出します。Rx電極の電荷量測定値は、2つの電極間の相互容量に比例します。
どちらの方式の場合も、コンバータは、GPIOの自己容量測定値またはRxピンの相互容量測定値を反映する生カウントを発生します。ファームウェアは、生カウント値を、設定可能なノイズ閾値および信号閾値と比較することで、指がボタンセンサパッド上にあるかどうか、あるいはスライダまたはタッチパッドの特定の位置に対応するセンサ上にあるかどうかを判断できます(図4)。

図4:CypressのPSoC 4000S CapSenseブロックは、カウント値が設定可能なノイズ閾値を超え、かつ設定可能なタッチ閾値に達した場合に、タッチを示すカウントを発生します。また、CapSenseでは、ターゲットのタッチ検出閾値の上下にヒステリシスレベルを設定できます(画像提供:Cypress Semiconductor)
CapSenseブロックがこのスキャンを実行できるため、CPUが介入する必要がありません。このため、センサのスキャン中は別のタスクを実行するようにCortex-M0+コアをプログラムできます。ただ実際には、個々のプロセッサの処理に関連する電流の変化により、CapSenseブロック内の影響を受けやすいアナログ回路にノイズが入る可能性があります。このため通常は、スキャン動作中はプロセッサの処理を限定するようにプログラムされます(高感度と低ノイズ環境が要求されるアプリケーションの場合は特に)。
実際には、製造時の誤差のためセンサによりノイズレベルと感度が異なるため、ハードウェアとソフトウェアのパラメータを慎重に微調整してこれらの違いに対処する必要があります。また、このようなシステム側の違いに加え、より直接的な環境条件の変化が要因となって、感度、性能、精度に動的に影響を与える可能性もあります。
条件の変化があっても性能を維持できるようにするため、PSoC 4000SデバイスのSmartSense機能には、最適な感度と性能を維持できるようパラメータを自動的に設定するオートチューニング機能が用意されています。CapSenseブロックが初期化されると、SmartSenseは、スキャン分解能などのパラメータや、内部クロックその他の重要な内部回路の設定値を再計算します。また、各回のスキャンの開始時に、SmartSenseは、ノイズ閾値やタッチ閾値などの、より動的なパラメータを自動的に更新することもできます。このようにしてSmartSenseは、さまざまなノイズ環境や、設計時には予測不可能なランダムノイズスパイクに応じて動的な補償を行うことができます。
それでも、設計者が手動で微調整を行わなければならない場合もあります。たとえば、SmartSenseで対応できるのは、寄生容量が45pFまでの設計です。したがって、寄生容量がきわめて大きい場合の設計では、手動の微調整が必要になる場合があります。また、SmartSenseでサポートされるのは自己容量式センサの設計だけであるため、相互容量式センサの設計では手動の微調整が必要です。実際にCypressでは、自己容量式設計にも手動微調整を行うことを推奨している場合があります。たとえばセンサスキャン時間のような特定のパラメータについてきわめて高精度な調整が要求されるアプリケーションの場合などです。
開発期間の短縮
すべての機能が内蔵されたPSoC 4000Sのような複雑なデバイスを使用する場合、各内蔵ブロックのプログラミングには、ある程度の努力が要求される場合もあります。プログラミングや設定を容易に行えるよう、Cypressは無償のPSoC Creatorソフトウェア環境を提供しています。PSoC Creatorは、デバイスのハードウェア設定の詳細と関連するソフトウェアレイヤの複雑さを意識せずに作業できるように支援する統合設計環境(IDE)です。
PSoC Creatorは、ブートローダまたはデバッガが含まれたCypress PSoC 4設計キットと連携して使用できるように作られています。このため、開発ボードをシステムのUSBポートに接続して関連パラメータを選択するだけで容易にPSoCデバイスを使用した開発を行えます。たとえばPSoC Creatorの設定画面(図5)では、SmartSenseオートチューニング機能を選択して有効にすることができます。

図5:CypressのPSoC Creator IDEを使用するとプログラミングと開発が容易になります。デバイスの設定やSmartSenseのオートチューニングなどの機能の設定は、デバイスのそれぞれの機能分野ごとに個別画面の一連の選択肢としてまとめられています(画像提供:Cypress Semiconductor)
静電容量式センシングの設計では、PSoC 4000SハードウェアとPSoC Creator IDEの組み合わせは大きな利点です。それでも、前述のように寄生容量やノイズ発生源など考慮が必要な細かい問題点は、静電容量式タッチセンサソリューションの開発チームにとっては高いハードルです。開発期間短縮の要求に応えるためのCypressのSoC 4000S試作キットには、静電容量式タッチセンシングに必要なすべてのハードウェアとサンプルソフトウェアが用意されています。試作キットには、Cypress KitProg2デバッグボード、ボタンセンサボード、リニアスライダボード、および、PSoC 4000SとBluetooth Low Energy(BLE)通信用のCypress EZ-BLE PRoCデバイスを搭載したメインボードが含まれています。
開発者は、USBポートにボードを差し込むだけでセンサアプリケーションのテストを直ちに開始できます(図6)。PSoC Creatorを使用してサンプルプロジェクトを選択してコンパイルし、IDEのファームウェアプログラマを使用してメインボードのPSoC 4000Sデバイスをプログラムし、最後に、内蔵のデバッガを使用して実行時の動作を調べます。このキットでは、ボタンボードとスライダボードのどちらでも自己容量式と相互容量式のセンシングを行え、開発者は、PSoC Creatorを使用してどちらの方式でセンサを動作させるか設定できます。

図6:Cypress PSoC 4000S試作キットはユニークな着脱式の構成になっており、USB接続式のデバッグボード、タッチセンサボード、リニアスライダボード、メインボードが含まれ、ユーザー独自の静電容量式センサ設計を開発する際には分離することができます(画像提供:Cypress Semiconductor)
PSoC CreatorとPSoC 4000S試作キットのどちらのソフトウェアセットも無料ダウンロードで入手できます。PSoC CreatorがキットのオンボードPSoC 4000Sデバイスの設定に使用されるのに対し、ソフトウェアパッケージには総合的な一連のソフトウェアライブラリと静電容量式タッチアプリケーションの鍵を握る重要な設計パターンを示したサンプルソフトウェアが含まれています。
たとえば、ボタンとスライダのサンプルパッケージのmain.cルーチンは、デバイスを初期化した後、連続的なセンササンプリングを実行します。次に示すコードに含まれるswitch文は、オプションで自動微調整を行った後、順番にセンサスキャンを実行し、スキャンの完了を待ち、最後に、有効になっているすべてのセンサを処理します(リスト1)。Cypressライブラリには、シーケンスの各フェーズで必要な下位ソフトウェアの呼び出しを実行するパッケージが含まれています。
DEVICE_STATE currentState = SENSOR_SCAN;
...
/* Start CapSense block */
CapSense_Start();
...
for(;;)
{
/* Switch between SENSOR_SCAN->WAIT_FOR_SCAN_COMPLETE->PROCESS_DATA states */
switch(currentState)
{
case SENSOR_SCAN:
/* Initiate new scan only if the CapSense block is idle */
if(CapSense_NOT_BUSY == CapSense_IsBusy())
{
#if ENABLE_TUNER
/* Update CapSense parameters set via CapSense tuner before the
beginning of CapSense scan
*/
CapSense_RunTuner();
#endif
/* Scan widget configured by CSDSetupWidget API */
CapSense_ScanAllWidgets();
/* Set next state to WAIT_FOR_SCAN_COMPLETE */
currentState = WAIT_FOR_SCAN_COMPLETE;
}
break;
case WAIT_FOR_SCAN_COMPLETE:
/* Put the device to CPU Sleep until CapSense scanning is complete*/
if(CapSense_NOT_BUSY != CapSense_IsBusy())
{
CySysPmSleep();
}
/* If CapSense scanning is complete, process the CapSense data */
else
{
currentState = PROCESS_DATA;
}
break;
case PROCESS_DATA:
/* Process data on all the enabled widgets */
CapSense_ProcessAllWidgets();
/* Controls LEDs Status based on the result of Widget processing.*/
LED_Control();
...
}
}
}
リスト1:Cypressのサンプルソフトウェアは、PSoC 4000Sの静電容量式センシング機能を示したものです。このサンプルアプリケーションは、PSoC 4000S CapSenseブロックを初期化した後、無限ループにより順番にセンサスキャンを実行し(CapSense_ScanAllWidgets)、スキャンの完了を待ち、結果を処理します(CapSense_ProcessAllWidgets)(コード提供:Cypress Semiconductor)
開発者は、自身のセンサ設計をテストする準備ができたら、デバッガボードと両方のセンサボードを外し、メインボードだけを使用して開発を進めることができます。キットには、見える位置にキットのセンサとPSoC 4000SのGPIOピンを接続するためのヘッダが設けられているので、容易に拡張して専用設計のセンサパッドを作ることができます。
キットの設計を利用したいと考えている開発者向けには、対応するリファレンス設計、完全なハードウェア図面、対応するソフトウェアが用意されています。たとえば、ハードウェアのリファレンス設計には、一連のセンサパッドをリニアスライダに使用する方法が示されています(図7)。添付のソフトウェアセットには、指の位置の推定精度を改善する手法を示すサンプルソフトウェアが用意されています。

図7:CypressのPSoC 4000S試作キットのリファレンス設計では、ジグザク状パターンに配置されたセンサパッドの配列からリニアスライダが構成されており、指の位置の認識解像度を高めています。このリファレンス設計には送信電極が含まれており、自己容量モードだけでなく相互容量モードでも使用できます(画像提供:Cypress Semiconductor)
リニアスライダをジグザク状レイアウトにすると、スライダの特定の部位に指を触れたときに、指の一部が確実に隣接部分にも触れます。ソフトウェアキットでは、カウント値が最大のセンサ(Si)とその両側に位置するセンサ(Si-1、Si+1)からカウント値の重心を計算する下位ルーチン(capsense_CalcCentroid)で、この情報を使用しています(リスト2)。このような方法で指位置を補間すると、ソフトウェアは、単純にカウント値が最大のセンサを見つける方法よりも高精度に指の位置を認識できます。この後、サンプルソフトウェアアプリケーションは、LED、そのセンサ、およびその下のセンサ(S0、S1、…、Si-1、Si)をオンにします。
...
/* Si+1 - Si-1 */
numerator = (uint32) capsense_centroid[capsense_POS_NEXT] -
(uint32) capsense_centroid[capsense_POS_PREV];
/* Si+1 + Si + Si-1 */
denominator = (int32) capsense_centroid[capsense_POS_PREV] +
(int32) capsense_centroid[capsense_POS] +
(int32) capsense_centroid[capsense_POS_NEXT];
/* (numerator/denominator) + maximum */
denominator = (((int32)(uint32)((uint32)numerator << 8u)/denominator) + (int32)(uint32)((uint32) maximum << 8u));
...
/* Round result and put it to uint8 */
position = ((uint8) HI16((uint32)denominator + capsense_CENTROID_ROUND_VALUE));
return (position);
リスト2:上記のリストのように、capsense_CalcCentroidルーチンは、リニアな配列の中の前のセンサ、現在のセンサ、次のセンサのカウント値の配列からセンサカウントを取り出し(capsense_centroid)、計算で得られた重心を返します。(コード提供:Cypress Semiconductor)
結論
静電容量式センシングを使用したタッチ反応型インターフェースを使用すると、ユーザーは、ウェアラブルから洗濯機までさまざまな機器を直観的に操作できます。静電容量式センシングは、必要な電力がきわめて小さいだけなく、機械式のボタンやスイッチでは実現が困難な信頼性と長寿命を可能にします。一方、耐久性の高いセンシングシステムを実装したいと考えている開発者は、静電容量式センシングシステムにおいて相互依存性のある回路設計と物理的レイアウトの特性を決定するために設計の繰り返しが必要になり、作業が遅れがちです。Cypress SemiconductorのPSoC 4000Sを使用した総合的な試作キットとリファレンス設計はすぐに使えるソリューションを提供するものであり、開発者がさまざまなアプリケーション向けの耐久性の高い静電容量式タッチセンシング設計を短期間で行うのに役立ちます。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


