Open28

Duplex Matrixのゴーストの実験

MURAOKA TaroMURAOKA Taro

SparkFan Pro Micro RP2040をKeyball61のボール有、左手側に接続して、LEDを光らせながらGPIO状態を変えつつその電圧を測定。

アナログテスターなので精度はお察し。

  • VCCは3.2Vだった
  • Input + Pull upは3.0Vだった
  • Output + falseは0.0Vだった
MURAOKA TaroMURAOKA Taro

RP2040のデータシート(p.638)によると3.3V近辺駆動の場合...
(IOVDD=3.3V)

  • Input Voltage High: 2.0~3.6V
  • Input Voltage Low: -0.3~0.8V
  • Input Hysteresis Voltage: 0.2V
  • Output Voltage High: 2.62~3.3V
  • Output Voltage Low: 0~0.5V
  • Pull-Up/Down抵抗: 50k~80kΩ
MURAOKA TaroMURAOKA Taro

Input Hysteresis Voltageがどこに適用されるかわからない。Input Voltage High&Lowの間の中間、1.4Vを中心に±0.1Vと解釈して1.3~1.5Vということだろうか?

MURAOKA TaroMURAOKA Taro

RP2040でゴーストが出るケースでは、特定のキーが入力され続けるのではなくチャタリングが継続的に発生している。なおチャタリング自体はdebounceできている。

やはり順電圧による降下電圧でInput Voltage境界ぎりぎりになったうえで、LEDのデータ信号由来のノイズを拾ってHysteresisラインを越えてるのではなかろうか?

つまりときどき1.3Vラインを割り込んでると。

MURAOKA TaroMURAOKA Taro

これまでの実験で、順電圧Vfはおおよそ0.4~0.5Vくらいだと推定される。

細かいデータがある1N4148で考えると
これは10μ~100μAくらいの電流が流れたときの順電圧と言える。

またRP2040やATmega32U4の入力時プルアップ抵抗の大きさが50kΩ程度なので流れる電流は100μA程度だと考えられる。

\frac {5V} {50k\Omega} = 0.1mA = 100μA

1N4148Wはそこまで詳しいデータはないがそう大きく違わないと考えるべきだろう。

MURAOKA TaroMURAOKA Taro

3個あると1.2~1.5V程度まで電圧が上がるはず。
(これをオシロスコープで観察することは可能か? - やったがちょっとわかりにくい)

これを安定してHiと判定できればDuplex Matrixは成立する。

MURAOKA TaroMURAOKA Taro

Pro Micro (ATmega32U4)のプロパティはデータシートp.383より

  • Voltage Input Low: -0.5 ~ (0.2 Vcc - 0.1)
  • Voltage Input High: (0.2 Vcc + 0.9) ~ (Vcc + 0.5)

ああ隙間は1Vくらいか。

Vcc = 5 なら 0.9~1.9V くらい。

MURAOKA TaroMURAOKA Taro

RP2040のDuplex Matrixのチャタリングゴーストのソフト的な緩和策を思いついた。

ピンをセレクトする前にステートをスキャンして pre とする。
その後ピンセレクトしてウェイト後にステートをスキャンして curr とする。
もともとはcurrがHiならOFFでLoならONとしてたのをcurr | ~preに代える。

狙いは、別ラインのスキャンのLoが残っててそれがゴーストの要因になってるなら、
それはセレクト前のLoとして出てて、このフィルタではそれをつぶせるのではという話し。

実際にやってみた結果は、少し緩和されるが押しっぱなしにしてるとそれなりにでてくる。

RP2040におけるチャタリングゴーストは、
電圧がもともと境界付近のところにLEDデータとのクロストークで変動して起こってる
と考えられるので根本的な対策にはならなかったようだ。

MURAOKA TaroMURAOKA Taro

そもそもRP2040についてはunselect delayを十分長く(65μsec以上)取る
という探索的に見つけた対策がある。
なのでそれを実験・観測して理論の裏付けが取れれば十分という話しではある。

なのでこの対策は5V Pro Microで機能するかを見るべきなのだろう。

MURAOKA TaroMURAOKA Taro

5V Pro Microでも同様の対策を試みたが、効果なし。

この手法は破棄。

MURAOKA TaroMURAOKA Taro

オシロスコープを用いた計測をしてみた。

MURAOKA TaroMURAOKA Taro

Pro Micro 4.3V駆動 (5Vレギュレーター、LED点灯、セルフパワーハブ)
チャタリングゴースト発生


MURAOKA TaroMURAOKA Taro

Pro Micro 3.9V駆動 (5Vレギュレーター、LED消灯、バスパワーハブ)
チャタリングゴースト未発生


MURAOKA TaroMURAOKA Taro

Pro Micro使用時、ダイオードの順電圧は 1.32V/3 = 0.44

RP2040使用時 1.24~1.28V/3 = 0.41~0.42

まぁそんなもんか。

MURAOKA TaroMURAOKA Taro

Pro MicroのほうはHi側グラフを見ると、
1.3VがHiとして認識されるのはだいたい最大4.0Vあたりまで。
それ以上ではLoになると考えられる。

実測に合ってる。

MURAOKA TaroMURAOKA Taro

ここまでのまとめ。

RP2040はあまりにも境界ギリギリであるため、外乱やunselect delayで調整が効いてしまう。
また5Vをレギュレーターで3.3Vに落としているために
消費電力による電圧変動が少ないので降下電圧が変わらない。

対してPro Microはギリギリではないので、unselect delayでの調整は不可。
加えて5Vを5Vレギュレーターに通しているために
入力電流量や消費電力による電圧変動がそれなりにあり
Input Threshold/Hysteresisが降下電圧近辺で変動し、
それで事象の発生有無を制御できている。

MURAOKA TaroMURAOKA Taro

ATmega32U4とRP2040のthresholdの実測データ 参照

MURAOKA TaroMURAOKA Taro
  • Pro Micro 4.3V駆動、1.32V、ゴースト発生 effective LOWに該当

  • Pro Micro 3.9V駆動、1.32V、ゴースト無し 上の図ではeffective LOWに該当するが実際は無し

    Vccの低下に連動して閾値が下がってeffective HIGHに入ってるものと推定。

    Vccに応じたのVILとVIHの変化を見ると、おおよそ0.2V下がることが想定される。すると必然グレー領域は1.20~1.25Vになり1.32Vはeffective HIGHになっていると考えられる。

    またVcc=4.5Vだとすれば0.1V下がるのでグレー領域は1.30~1.35Vになり1.32Vはグレーとなりそう。

  • RP2040、1.24V、ゴースト発生 effective LOWに該当

    HIGHを維持するdelayを大きくすると発生しなくなることから、境界条件がもう少し複雑であると考えられる。

    またRP2040のhysteresis thresholdは0.2Vなので上図の約0.1Vは狭すぎるため、測定方法で狭くなってるとかんがえられる。
    またこの範囲をデータシート通りに考えるなら、どちら側に広げるかで変わるが下側に最低0.4V広がれば1.24Vはちょうどグレー領域になるので、測定結果を説明するのに都合が良い。

MURAOKA TaroMURAOKA Taro

それぞれに実装されたシュミットトリガー、静的な特性と動的な特性が違いそう。
ATmega32U4がRP2040に比べて十分に(8倍以上)遅いというのもあるが。

MURAOKA TaroMURAOKA Taro

ここまでのまとめ

  • ゴーストはダイオードの順電圧≒電圧降下が低すぎると発生する:
    • データシート上は0.7Vだが100mAという大きな電流が条件
    • 実際は0.4~0.5V程度。電流は0.1mA程度で、3桁小さい
  • ダイオードの順電圧は以下の条件で低くなる:
    • 気温が高い
    • 電流が小さい
      • matrix scanの方式上、input pull up & out lowで荷電され、プルアップ抵抗が50kΩ程度なので0.1mA程度になる
      • ハンダ付けに不良に伴う抵抗増大[1]でさらに電流が小さくなりうる
  • 現状
    • ATmega32U4(Pro Micro)は動作電圧で発生基準電圧が変わる
      • 一般的な4.6~5.0Vでは高確率で発生する
      • 3.3V~3.9Vの低電圧では発生しにくくなる
    • RP2040はちょうど境界線上のため条件次第で動いてしまう
脚注
  1. 抵抗が増えれば降下電圧は大きくなる(may)ので発生しにくくなるとも言えそうだが、よくわからない。 ↩︎