CuriosityでmTouchを試してみる。その8 AFA編

mTouchでCVDのアルゴリズムにTIMER2を使ってタイミングを正確に管理するAFA(Automatic Frequency Adaptation)というのがありましたが、これのありなしで動きはどう違うのでしょう。あるいはタッチセンシングはどうかわるのでしょう

というのも、現在 mTouch の CVD では TIMER2 を使うように設定していますが、AFAを切れば TIMER2 は開放されるので問題は解決するためです。
ということで、AFAのありなしでセンシング波形を見てみました。

まず AFA ありです。
大きなギャップは約170usec。ギャップ間のスキャン回数は16回です。トリガ条件はローパルス幅でとっています。
上の一部を拡大したものです。

次に AFA なし。
AFA ありのときと違って、規則正しくサンプリングしているようには見えません。一応ギャップ間のスキャン回数は16回ですが、時間的なばらつきがあるようです。もちろんこれでもちゃんとボタン動作はしています。
上の拡大波形です。

AFA なしの場合には、どうもプリチャージ→アクイジション→ADサンプリングのタイミングが長くなったり短くなったりしているようです。それが積み重なって、タイミングがずれていくということのようです。
もう少し見てみると、以下のようになっています。
LOWのプリチャージからサンプリングまでは一定時間になっていますが、次のHIGHのプリジャージからのサンプリング開始が一定していないようです。AFA では、このサンプリング間隔を管理しているのかもしれません。ちなみにタッチのあるなしでタイミングには変化はないようです。
一方、AFA なしではソースファイルに mtouch_random.c というのが追加されていました。どうも、AFAで最適な周波数を取得するのではなく、ランダムにタイミングを制御してノイズを排除するというアルゴリズムのような感じです。

実際に AFA のありなしでノイズ耐性などはどう違うのか、アプリケーション(電池駆動かアダプタ駆動か、それともしっかりした電源装置なのか、あるいは家電か自動車か、など)によってどちらを使ったほうがいいのかとか、その場合に AFA のアドバンテージはどれくらいかなどは説明している文書などが見つかりませんでした。
一方で、AFA を無効にすると mtouch_random.c というファイルが生成され、mTouch の センシング周期をランダムに設定するような動作をしますが、AFA の説明のところで
The AFA requires extra Flash and RAM memory so this feature may not work with RAM limited controllers.
とあり、RAM/Flash ROM リソースの少ない MCU でも使えるように考えられているところを見ると、AFAなしでも問題ないのかもしれません。

本音を言えば、判断する手がかりとなるデータがないときには安全側に振るというのがスジなのですが、やっぱり TIMER2 を使いたいので少し試してみようかと思います。

0 件のコメント:

コメントを投稿

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

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