FC2ブログ

名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

PICでタッチSWを製作(第2弾)

【前振り】
以前に 「PICでタッチSWを製作」 の記事を書いた。mTouchソリューションを利用した真面なものと、センシングモジュールを内蔵していないPICに発振器を外付けした強引なものを紹介した。しかし、これらは実際に応用しようとするとコストパフォーマンスが悪い。センシングモジュールを内蔵したPICは秋月でも安くはない。発振器を外付けすると全体コストが上がってしまう。

そこで今回のテーマは、センシングモジュールを内蔵していない廉価なPICで、発振回路も外付けしないでタッチSWを実現することだ。


【アイデア】
基本となるのはポートピンの浮遊容量の充電時間を測るという極めて在り来たりな発想だ。mTouchソリューションはこれを相当回数繰返して、一回毎の誤差を薄めているだけだ、と安易に考えた。今回は1回の充電時間で判定するので、当然ノイズによる影響が大きい。おもちゃ修理への応用に限定して、稀に誤動作も起こり得ることを許容して低コストに作ることを目標とする。


【回路】
PICでタッチSW(第2弾)回路図
外付け部品は、プルアップ抵抗だけだ。抵抗値の1MΩは、ポートのバラつきやVddの変化の影響を受けても回路が制御可能な範囲に入ることを実測して、最適値を求めた結果だ。

評価データはRC2からシリアルでPCへ送って取得する。

タッチSW
・PICのピンからリード線を引き出すだけ。今回の実験では、特にタッチパッドは設けず、リード線の被覆にタッチする。
PICでタッチSW(第2弾)実装1

PICでタッチSW(第2弾)実装5

・単一タッチは、単一のリードにタッチする。
PICでタッチSW(第2弾)実装4

・複数タッチは、複数のリード線の交点にタッチする。
PICでタッチSW(第2弾)実装6

複数タッチは、キーマトリクスに対応するためだ。


【処理方式】

処理の流れは以下の通り。

①LAT=0 TRIS=0 にして放電する。

②TRIS=1 にして充電を開始する。

③PORT=1 になるまでポーリングを繰り返す。

④PORT=1 になったら、③のポーリングを繰り返した回数を取得する。

⑤取得した回数の過去256サンプルで時間加重平均値を計算する。

⑥回数のカレント値が平均値に比べて一定値以上大きいとき、タッチ有りと判定する。

処理の詳細はダウンロードファイルのソースコードを参照。


取得されるポーリング回数はポートによるバラツキやVddの変動の影響が非常に大きい。カレントな回数を評価したのではまともに判定できない。そのため平均値との乖離で評価することにした。これが本方式のミソであり、これにより、個々のチューニングをしなくても(ほぼ)確実な判定ができるようになった。

全体的な調整値として、次の2つがある。

・ポーリング回数上限値
いつまで経っても充電が完了しない場合にプログラムが永久ループしないように、ポーリング回数の上限を設ける。上限に達した場合は「タッチ有り」の判定とする。

設定例 INIT_VALUE equ 32 ;計時初期値

・タッチ有無の判定基準値
(カレント値-基準値)>平均値 のとき「タッチ有り」と判定する。この判定で使う基準値。

設定例 DEF_VALUE equ 1 ;計時有意差基準

【評価】
センス信号(ポートの電位)
・「タッチ無し」のとき
PICでタッチSW(第2弾)センス信号波形タッチ無し

・「タッチ有り」のとき
PICでタッチSW(第2弾)センス信号波形タッチ有り

「タッチ有り」のときの方が信号の立上り時間が僅かに長い。この僅かな差を検知してタッチの有無を判定する。正に神業だ(僕ではなく、PICがと言うこと)。

この信号観測では、オシロのプローブを接続することによる浮遊容量の増加により、本来の充電時間よりもかなり長時間を要していることに留意されたい。


評価データの様式

表示例
様式PICでタッチSW(第2弾)評価データの様式

回数は (unsigned)(-INIT_VALUE) からポーリング毎にインクリを始めて、上限値は255となる。
今回の実験では INIT_VALUE=32 に設定しているので、初期値は 0xe0、上限値は 0xff となる。

回数(カレント値)は 1回の充電時間測定での値。

回数(平均値)は 過去256サンプルでの時間加重平均値で、単位は「1/256]。

今回の実験では DEF_VALUE=1 に設定しているので、 (カレント値-1)>平均値 のときに「タッチ有り」と判定し、’*’を表示する。

単一タッチ
・ch0をタッチ
F0F10F F1F1FB EAEC90 EAEC59 F5F6A9
F2F110 F0F1FA EBEC8F EAEC57 F5F6A8
F1F110 F1F1FA EAEC8D EAEC55 F5F6A7
F3F112* F0F1F9 EAEC8B EAEC53 F6F6A7
F1F112 F1F1F9 EAEC89 EAEC51 F5F6A6
F3F114* F0F1F8 EAEC87 EAEC4F F6F6A6
F1F114 F1F1F8 EAEC85 EAEC4D F5F6A5
F3F116* F0F1F7 EBEC84 EAEC4B F5F6A4

・ch1をタッチ
EFF12F F1F1DF EAEC2C EBEBF6 F5F67A
F0F12E F0F1DE EBEC2B EAEBF5 F5F679
EFF12C F1F1DE EBEC2A EBEBF5 F5F678
F0F12B F3F1E0* EBEC29 EAEBF4 F5F677
EFF129 F5F1E4* EAEC27 EAEBF3 F5F676
F0F128 F4F1E7* EBEC26 EAEBF2 F5F675
EFF126 F5F1EB* EAEC24 EAEBF1 F5F674
F0F125 F4F1EE* EAEC22 EAEBF0 F5F673
EFF123 F6F1F3* EAEC20 EAEBEF F5F672
F0F122 F4F1F6* EAEC1E EAEBEE F5F671
EFF120 F6F1FB* EAEC1C EAEBED F5F670
F0F11F F4F1FE* EAEC1A EAEBEC F5F66F

・ch2をタッチ
EFF0FB F1F21F EAEBF9 EAEBDD F5F657
EFF0FA F1F21E EBEBF9 EAEBDC F5F656
EFF0F9 F0F21C EBEBF9 EAEBDB F5F655
EFF0F8 F1F21B EDEBFB* EAEBDA F5F654
F0F0F8 F0F219 EEEBFE* EAEBD9 F5F653
EFF0F7 F1F218 EEEC01* EAEBD8 F6F653
F0F0F7 F0F216 EEEC03* EBEBD8 F5F652
EFF0F6 F1F215 EFEC06* EAEBD7 F5F651
EFF0F5 F0F213 EFEC09* EAEBD6 F5F650
EFF0F4 F1F212 EFEC0C* EBEBD6 F5F64F

・ch3をタッチ
EFF0C2 F0F1D7 EBEC2C ECEBAA F6F61A
EFF0C1 F0F1D6 EAEC2A EBEBAA F5F619
EFF0C0 F0F1D5 EBEC29 ECEBAB F6F619
EFF0BF F0F1D4 EAEC27 EFEBAF* F6F619
EFF0BE F0F1D3 EBEC26 EDEBB1* F6F619
EFF0BD F0F1D2 EAEC24 EFEBB5* F6F619
EFF0BC F0F1D1 EBEC23 EEEBB8* F6F619
EFF0BB F0F1D0 EAEC21 F0EBBD* F6F619
EFF0BA F0F1CF EBEC20 EEEBC0* F6F619
EFF0B9 F0F1CE EAEC1E EEEBC3* F6F619
EFF0B8 F0F1CD EAEC1C EEEBC6* F6F619
EFF0B7 F1F1CD EAEC1A F0EBCB* F6F619
EFF0B6 F0F1CC EAEC18 EEEBCE* F6F619
EFF0B5 F0F1CB EAEC16 F1EBD4* F6F619

・ch4をタッチ
EFF09D F0F1B8 EAEBF5 EAEC1C F5F610
EFF09C F0F1B7 EAEBF4 EBEC1B F5F60F
EFF09B F1F1B7 EAEBF3 EBEC1A F5F60E
EFF09A F0F1B6 EAEBF2 EAEC18 F6F60E
EFF099 F0F1B5 EAEBF1 EBEC17 F5F60D
EFF098 F0F1B4 EAEBF0 EBEC16 F8F60F*
EFF097 F1F1B4 EAEBEF EBEC15 F7F610
EFF096 F0F1B3 EAEBEE EAEC13 F9F613*
EFF095 F1F1B3 EAEBED EBEC12 F8F615*
EFF094 F0F1B2 EAEBEC EAEC10 FAF619*
EFF093 F1F1B2 EAEBEB EBEC0F F8F61B*
F0F093 F0F1B1 EBEBEB EAEC0D FEF623*
EFF092 F0F1B0 EBEBEB EAEC0B F8F625*
F0F092 F0F1AF EBEBEB EAEC09 FDF62C*

ch(ポート)のバラつきが大きいことが判る。タッチ時の平均値との差分は2~3程度で極少ない。

ポーリングのループは6命令サイクルであり、取得された回数から充電時間は7~22us程度と推定される。

タッチ有無の判定結果は不安定で、チャタリングしているように見える。これはハムノイズが原因と思われる。
1MΩのプルアップなのでノイズに弱いことは想定範囲だが、応用する場合は留意が必要だ。


複数タッチ
・ch1とch3を同時にタッチ
EFF071 F1F18D EAEBCA EBEBF1 F5F68F
EFF070 F0F18C EAEBC9 EAEBF0 F6F68F
EFF06F F1F18C EAEBC8 EBEBF0 F5F68E
F0F06F F0F18B EAEBC7 EAEBEF F6F68E
EFF06E F1F18B EAEBC6 EBEBEF F5F68D
F0F06E F0F18A EBEBC6 EDEBF1* F6F68D
EFF06D F3F18C* EAEBC5 EEEBF4* F5F68C
F0F06D F1F18C EAEBC4 EDEBF6* F6F68C
EFF06C F4F18F* EAEBC3 EFEBFA* F5F68B
F0F06C F1F18F EBEBC3 EEEBFD* F6F68B
EFF06B F4F192* EAEBC2 F0EC02* F5F68A
F0F06B F1F192 EBEBC2 EEEC04* F6F68A
EFF06A F4F195* EAEBC1 EFEC07* F5F689
F0F06A F1F195 EBEBC1 EDEC08 F6F689
EFF069 F4F198* EAEBC0 F0EC0C* F5F688

・ch2とch3を同時にタッチ

EFF04B F1F1D3 EAEB96 EBEC53 F5F65F
F0F04B F0F1D2 EBEB96 EAEC51 F6F65F
EFF04A F1F1D2 EAEB95 EBEC50 F5F65E
F0F04A F0F1D1 EBEB95 EBEC4F F6F65E
EFF049 F1F1D1 EBEB95 EDEC50 F5F65D
F0F049 F0F1D0 EDEB97* ECEC50 F6F65D
EFF048 F1F1D0 ECEB98 EFEC53* F5F65C
F0F048 F0F1CF EEEB9B* EDEC54 F6F65C
EFF047 F1F1CF ECEB9C EFEC57* F5F65B
F0F047 F0F1CE EEEB9F* EDEC58 F6F65B
EFF046 F1F1CE EDEBA1* EFEC5B* F5F65A
F0F046 F0F1CD EFEBA5* EDEC5C F6F65A
EFF045 F1F1CD ECEBA6 F0EC60* F5F659
F0F045 F0F1CC EEEBA9* EDEC61 F6F659
EFF044 F1F1CC EDEBAB* EFEC64* F5F658
F0F044 F0F1CB EFEBAF* EDEC65 F6F658
EFF043 F1F1CB EDEBB1* F0EC69* F5F657
F0F043 F0F1CA EEEBB4* EDEC6A F6F657
EFF042 F1F1CA EDEBB6* EFEC6D* F5F656

タッチ時の平均値との差分は2~3程度で単一タッチ時と変わらない。
非タッチのchへの影響は認められない。キーマトリクスへの応用も可能であることが確認できた。


【ダウンロード】
このファームウェアの設計資料と開発プロジェクトは ここから ダウンロードできる。

【今後の課題】
・充電完了のポーリング中に割り込み処理が走ると、ポーリング回数カウントに誤差が生じる。この誤差は「タッチ無し」の方向に働くので、アプリケーションによっては無視できる場合もある。

・上記の誤差を生じさせないためにはポーリング中は割込みをマスクすることだが、それが許容できるかどうかはアプリケーションによる。

・充電完了をポーリングでセンスするのではなく、ポートチェンジ割込みで検知する方法も考えられる。この場合は充電時間計時用のタイマーを占有する必要がある。

上記の方策を含めて、PIC電子オルゴールでの利用方法を検討する。
関連記事
スポンサーサイト
  1. 2018/08/07(火) 17:46:33|
  2. タッチセンス
  3. | コメント:0
<<PICでタッチSWを製作(第3弾) | ホーム | エアコンのリモコンの修理(基板腐食)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

当ブログで公開している技術情報や成果物の複製、改変および再配布はフリーです。読者様のおもちゃ病院活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。なお、公開ファイルは最新版を載せているので、古い記事の内容から変わっている場合があります。

カテゴリ

おもちゃ修理技術 (90)
¦ ・電子オルゴール+音声 (32)
¦ ・音声再生・録音再生 (6)
¦ ・2.4GHzラジコン (29)
¦ ・レガシーラジコン (12)
¦ ・赤外線リモコン (4)
¦ ・RFID (3)
¦ ・タッチセンス (4)
ツール製作 (26)
¦ ・プログラマー (19)
¦ ・USB-シリアル変換 (3)
¦ ・その他のツール (4)
修理事例 (154)
¦ ・マイコン換装 (72)
¦ ・電子・電気修理 (59)
¦ ・メカ修理 (23)
製作記事 (4)
PIC開発 (4)
おもちゃ病院 (9)
ドクター研修会 (2)
未分類 (0)

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR