押しボタンをコントローラーピンに接続する


8

この問題は何十年も前のものですが、このサイトには直接的な答えはありません。私は以下が欲しい:

ここに画像の説明を入力してください

この回路は、マイクロコントローラーの内部からボタンの状態をチェックするだけです。派手なものは何もありません。私の質問:

  1. このシンプルなデザインより良いものはありますか?
  2. 100キロオームの抵抗値は、dsPIC30FXXXXなどの今日のCMOSデバイスに適していますが、高電力アプリケーションには適していませんか?

2
1)ハードウェアのデバウンスを探しているのでない限り、そうではありません。2)はい。
NickHalden 2013年

回答:


6

まず、多くのマイクロコントローラとデジタル信号コントローラには内部プルアップ抵抗があります。これがAtmel ATMega164の例です。ATMega164p G​​PIOポート

通常、内部プルアップをオン/オフできるレジスタがあります。製造プロセスのばらつきにより、これらの内部プルアップは非常に広い範囲にあり、超低消費電力アプリケーションで電流引き込みを非常に厳密に制御する必要がある場合は、適切な選択肢ではありません。コンポーネント数を少なく保つことが重要である場合、これはそれを行う簡単な方法です。ハードウェアデバウンスに内部プルアップを使用することは、正確な値を予測することができないため、良い考えではありません。

100かどうかkΩ値は十分に依存します。それがユーザーによって定期的に反転される単なるスイッチである場合、100kΩ消費電力を最小限に抑えるのに適しています。ロータリーエンコーダーなど、より迅速に切り替わるものについては、私が経験するプロセスは

  1. データシートで最大シンク電流を見つける
  2. オームの法則を使用してプルアップ値を計算します
  3. 実際に必要な速度に応じて、数サイズ大きい標準サイズの抵抗を選択します
  4. 選択した抵抗サイズが必要な立ち上がり時間と立ち下がり時間を与えるかどうかをテストして確認します
  5. 適宜調整してください

したがって、GPIOピンあたりの最大シンク電流が10 mAで5Vで動作している場合: R=V=5V10メートル=500Ω。このR値をできるだけ小さくすると、最も鋭いエッジと最高のスイッチング周波数が可能になります。


配線/トレース容量のために、uCへの信号伝搬遅延を引き起こすRC回路があり、Rが大きい場合、これらの伝搬遅延が実際にロータリーエンコーダーの誤読を引き起こす可能性があるということですか?
angelatlarge 2013年

はい、寄生リアクタンスは、周波数が増加するにつれてますます対処する必要がある生活の事実にすぎません。
マットヤング

面白い!私は混乱していますが、寄生容量が1 uF未満であり、100 kオームの抵抗が与えられ、0.1 uFの寄生Cがあるとすると、時定数は約23 ms(入力= 5 V、出力= 4.5 V)になります。言い換えると、5V回路では、uCは25ms未満の進行パルスで入力に4.5Vを認識します。uCが(ポーリングではないという仮定の下で)それを逃す場合、エンコーダーは40Hz程度のパルスを生成します。それは私たちが心配すべきことですか?
angelatlarge 2013年

寄生容量は通常、ナノまたはピコファラッドの範囲です。これは、高速のロータリーエンコーダでは問題になります。1回転あたり24パルスを出力し、1500 RPMで回転する光学式エンコーダーを考えてみます。出力方形波は、約1.2msの周期で600Hzになります。これはまだ十分に遅いので、最小サイズのプルアップは不要ですが、100kΩ許容できない可能性が高い立ち上がり時間と立ち下がり時間を考慮します。これはそれ自体で質問に値します。
マットヤング

真実。手動のロータリーエンコーダーを考えていました。
angelatlarge 2013年

4

それよりも簡単に取得できます。

マイクロコントローラの内部プルアップ/プルダウン抵抗を使用するだけです。

100kで十分ですが、一部のMCUでは内部プルアップが少し低くなる可能性があります。たとえば、AVR atmega8では、リセットプルアップでは30〜80 kOhm、その他すべてのI / Oピンでは20〜50 kOhmです。


100kで十分だとは言えません。普遍的なレシートはありません。MCUと反対側のピンを駆動するデバイスに従って値を計算する必要があります。
Blup1980 2013年

1
質問者は押しボタンを指定しました。この回答に問題はありません。
mjh2007 2013年

1
  1. このシンプルなデザインより良いものはありますか?


    あなたが提供しなかった、測定するための特定の基準がなければ、より良い答えはできません。ほとんどの場合、表示するトポロジは問題ありません。状況によっては、次の2つのバリエーションの方が「良い」場合があります。

    多くのマイクロコントローラは、一部のピンに内部プルアップを備えています。これらは、まさにこの種の状況向けです。抵抗はマイクロの内部にあり、それを有効にするためにどこかにビットを設定します。必要な唯一の外付け部品は、押しボタン自体です。

    覚えておくと便利なもう1つのバリエーションは、ボタンを長時間閉じることができるスイッチである可能性のある低電力設計の場合です。その場合は、プルアップ抵抗を流れる長期平均電流を最小限に抑える必要があります。あなたはそれをできるだけ大きくしますが、それには限界があり、大きすぎると欠点があります。代わりに、一度に数µsだけプルアップをオンにして、ボタンの読み取り値を取得します。ボタンを1 msごとにチェックし、プルアップが10 µsオンの場合、平均プルアップ電流は100倍減少します。外部抵抗を使用すると、別のピンを使用してプルアップの上側を駆動します。内部プルアップでは、必要に応じてファームウェアでプルアップを有効または無効にします。

  2. 100キロオームの抵抗値は、dsPIC30FXXXXなどの今日のCMOSデバイスに適していますが、高電力アプリケーションには適していませんか?


    私はここですでに詳しく答えました


0

そのシンプルなデザインよりも優れていますか?はい。その上にキャップを投げると、簡単なハードウェアデバウンススイッチがあります。

ここに画像の説明を入力してください

コンデンサは一般的な0.1ufセラミックキャップです。抵抗は10kになります。このサイトには、理由の詳細が記載されています。つまり、デバウンス回路は、ボタンを押したときにマイクロコントローラーが誤って複数の押しを登録するのを防ぎます。Resistor / Capacitorセットアップは、ボタンの機械的バウンスをスムーズにし、安定した移行を実現します。


電解キャップはショートするのが嫌いです。私は定期的に100nFを使用していますが、これは自分のアプリケーションで問題なく機能します。
ジッピー2013年

1
@jippieシンボルは画像にあったものですが、100nfまたは0.1ufセラミックが必要です。
通行人2013年

3
これは良いデバウンス回路ではありません。まず、これはブレイクをデバウンスするだけで、メイクではありません。ボタンを押すとすぐにキャップがショートします。次に、1 msの時定数は短すぎてあまり使用できません。第三に、これはシュミットトリガー入力にのみ供給されるべきです。通常の入力は、ゆっくりと上昇する信号を好みません。キャップを外して、ファームウェアでデバウンスを実行するだけです。これは、キャップを使用する場合でもとにかく行う必要があります。
Olin Lathrop 2013年

はい、製造時にキャップはすぐに短絡しますが、バウンスによる再充電はローパスフィルター処理され、バウンスの影響を取り除きます。おそらくより正確には、makeでのデバウンスは、breakでのデバウンスとは非常に異なるメカニズムです。ただし、1 msは速すぎます。私はこの回路をいくつかの理由で使用したくない。ただし、問題のピンで割り込みを駆動している場合、ファームウェアでのデバウンスは、多くの場合、最善の解決策ではありません。DPSTに移動してSRフリップフロップでデバウンスすることは、その場合にはかなり良い方法です。
スコットSeidman 2013年

0

編集-以下で私が行ったコメントは、おそらくデバウンスを追加するためのコンデンサーを備えた回路についてオリンが後で言ったことをフォローアップするためのものでした。間違った場所に表示されて申し訳ありません。私は明らかに盲目すぎて愚かすぎてどうすればよいかわからないので、誰かがこれを修正できます。

私はオリンに同意します-それは良いデバウンスを提供しません。また、コンデンサの短絡は、PCBのレイアウトが本当に良くない場合、マイクロプロセッサリセットする可能性のある大きな電流サージを引き起こす可能性があることも付け加えておきます。一部のスイッチは、正しく確実に動作するために湿潤電流を必要とし、一部のスイッチ(特にメンブレンスイッチ)には100kが高すぎる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.