ポテンショメータからの安定した出力

アナログポテンショメータで繰り返し発生する問題は、ポットが実際に動かされたときにのみ変化するという安定した出力を得ることです(つまり、ノイズやジッタのために非常に似たような値は出力されません)。これを説明するための最善のアプローチは何ですか?

いくつかのアプローチが考えられます。

  1. タイムアウト:ノブを一定量動かさないと、1〜2秒後にデッドゾーンが有効になります。
  2. デッドゾーンの移動:読み取り値がデッドゾーンを離れるたびに、新しい値に移動します。

純粋なフィルタリングは問題を解決しないことに注意してください - あなたがフィルタリングされた値を量子化するとき、それは常に2つの量子化レベルの間の中間であり、それらの間でばたつきます。

他に解決策がありますか。

Edit: To be clear, this is why averaging, filtering, a better potentiometer, ignoring the LSB etc won't work:

以下のものが何でもフィルタリング/平均化された後にこの電圧があるとします

noisy

次に、0.1に最も近い値に量子化するとします。私たちはあちこちに出力が出ます。

jittery

フィルタリングがいかに優れていても、量子化がどれほど粗くても、ジッターが発生する可能性が常にあることを確認してください。だからこそ、本当に良いフィルタリングや本当に粗い量子化以外の何かが必要なのです。

Edit 2: To be doubly clear, because it seems some people aren't getting this. I would like some method to completely eliminate this kind of jitter (which is caused by unavoidable noise in the system), while still responding 'nicely' to a user physically turning the pot (it's for a brightness knob).

Edit 3: To be triply clear (come on guys), I only want the value to change when the pot has been physically moved because acting on these changes is costly (the display flickers when the brightness is changed; I don't want it flickering continuously).

1
自分が何をしているのかわからず、ADCにポットが供給していると仮定して、LSBを無視できないのはなぜですか。
追加された 著者 EM Fields,
最後の私へのコメントは、私が聞いたことがある質問の制約の近くのどこかにある最初です。それでもまだありません。あなたはポットを試すためにどんなハードウェアを使っていますか?私たちはすべて自分自身の時間を無駄にしたいので、詳細を尋ねてあなたのアプローチに何か問題があるかもしれないと言っているわけではありません。非常に意味のある答えです。
追加された 著者 wannabecapablanca,
あなたのアプローチはあなたが達成しようとしていることに完全に依存しているので、質問は意味をなさない
追加された 著者 wannabecapablanca,
意味がありません。あなたはいつもアナログ読み取りをしています。それはあなたが行ってきた他の何よりも長くかかるはずです。 PWMを使用して明るさを調整している場合は、パルス幅を変更してもちらつきはありません。このサイクルごとにサービスする時間がない場合は、おそらくそれをサービスするのに十分な時間がないでしょう。私はGeorgeに同意します - あなたは単純な抵抗器についても同じ問題を抱えているでしょう。
追加された 著者 wannabecapablanca,
そして、この提案された技術はあなたの昔ながらのラジオの音量調節にどのように機能しますか?
追加された 著者 user20218,
@Timmmmあなたの質問ははっきりしておらず、締め切り票を集めています。私は以前のコメントであなたを助けようとしました、それであなたの質問を正しく入れて、あなたが達成しようとしていることを完全に説明してください(スコットも言ったように)。
追加された 著者 user20218,
あるいは、明るさの出力を現在のレベルから新しいレベルへと「歩かせ」ます。現在の測定値を平均してください。測定値が平均値のXパーセントの範囲内である限り、モニターに変更を送信しません。 Xより上に変化した場合は、現在の値から新しい値へ、ちらつきが発生しないように十分に遅いレートで線形補間値を送信します。
追加された 著者 JRE,
かなりうるさいね。私が考えることができる最もよいことは信号が大きな変化の後に落ち着いた後にだけ更新を送ることです。モニターは変化するたびに点滅するので、とにかく連続的で滑らかな調整は不可能です。だから、大きな変化のためにポットを見てください。ジャンプしたら、あるしきい値を下回る値に落ち着くのを待ってから、設定したサンプル数の平均を送信します。
追加された 著者 JRE,
あなたはなぜ少しのジッタが悪いのか説明していません。あなたはOlin Lathropへのあなたのコメントでそれをほのめかしたが、それを説明しなかった。あなたはポットを読むことによって明るさを制御しています、そしてあなたは「少し壊れている」他のシステムにこれを送っています。何が壊れているのか、何が影響しているのか、そしてなぜ小さなバリエーションが問題になっているのかを説明してください。
追加された 著者 JRE,
ソフトウェア(あなたがWin32 APIを言った)を通してモニターを制御したいなら、あなたは完全にそれ故にどんなアナログ信号の考察も排除することで回転式エンコーダを使用することができます。
追加された 著者 Brodwyn,
直交デジタル方形波出力を備えたエンコーダの@Timmmm $ 2は、アナログデバイスで発生している問題を解決するには少額の費用です。
追加された 著者 Brodwyn,
私はここでヒステリシスベースの解決策を考えています。上下のトランジションレベルが異なるように。例:遷移レベル0、1、2、3ボルトが上昇し、0、0.9、1.9、2.9が下降する2ビットADC。違いはもちろんあなたの予想される騒音レベルより大きくなければならないでしょう。
追加された 著者 Ian Bland,
@AndrewMorton:問題ないよ。私はこの問題に2つのコードベースの解決策を挙げました。他の誰かが他のより良い解決策を持っているかどうか私は思っていました。
追加された 著者 user27096,
@ScottSeidman:私がWin32 APIを介して制御しているのはDellモニターです。質問の制約を無視して回答を投稿することはあまり役に立ちません。
追加された 著者 user27096,
@AndrewMorton:やり過ぎですね。そしてあまりにも高価です!
追加された 著者 user27096,
いいえ、それは現実的ではありません - それはフィルタリングが問題を完全に解決できない理由を説明するためだけです。
追加された 著者 user27096,
明るさを変えると表示が点滅します。なぜ解決策が望まれるのかを想像するために私の特定の要件を知る必要はないと思います。たとえば、ワイヤレスノブについて考えます。無関係な更新を継続的に送信したくない場合があります。想像力を使って!
追加された 著者 user27096,
@Andyaka:何が欲しいのか、なぜフィルタリングなどが完全な解決策ではないのかを明確にしました。
追加された 著者 user27096,
@ EM Fields:より良い品質のポテンショメータでも、フィルタリングでは解決できないのと同じ理由でそれを修正できません。それは確かに問題を減らすでしょうが、私はそれを取り除きたいです。
追加された 著者 user27096,
@EM Fields:LSBを無視しても量子化されるだけで、2つの量子化値の真ん中の値が中間値である場合、ノイズが2つの値の間を移動するのに十分であるため、うまくいきません。
追加された 著者 user27096,
@アンディ別名:それはアナログですので問題はありません。
追加された 著者 user27096,
あなたの写真は鍋からの本当の電圧出力ですか?ポットから安定した電圧を得るのにそれほど問題はありませんでした。入力電圧がノイズが多いのでしょうか。 (ワイパーには多くの電流が流れていますか?)
追加された 著者 Dominique Devriese,
より高品質のポテンショメータを使用してください。サーメットと導電性プラスチックの種類を検討しましたか。また、回路にポテンショメータのリード線を介して電流が流れすぎないようにします。大電流を制御する必要がある場合は、巻線タイプが必要です。
追加された 著者 Horo,

5 答え

あなたはそれを電子的にスティッキーにすることができます。

多くのフィルター処理された(アナログおよびデジタルドメインフィルター処理された)読み取り値を取り、それから機械的粘着性をシミュレートします。スティックスリップのように、一旦落ち着いた後にそれを所定の位置から動かすためには(比較的言えば)多くの動きが必要です。

3
追加された
はい、これは私が探していた種類の答えです。
追加された 著者 user27096,

ノイズが目的の解像度よりも大きい場合は、一連の固定R値で感度の問題を解決するか、ノイズの問題を解決してください。

それ以外の場合は、推奨されているように無視するか、平均化してジッタを処理します。

  • ジッタ範囲は平方根減少します。無作為のみで平均されたN個のサンプルのうち

You can simply add hysteresis in the comparing the absolute value of the difference between the new reading from the previously "stored" reading in order to ignore readings that do not exceed some defined range of noise.'. You can set this threshold as big as you want in software so it can be greater than the LSB.

1
追加された

ジッタを無視し、ノブを回したときの効果を適切に調整します。 LSBがフルスケールの1/2 ^ 10の場合、これが明るさ制御に実際に影響を与えることは想像できません。もしそうなら、あなたのエラーはあなたのスケーリング方法にあります。たぶん、あなたはあなたが乗る前に分裂していて、あなたの丸め誤差を増幅しています。あなたはおそらくXY問題を抱えているので、あなたの問題を説明するのではなく、あなたのコードを見せてください。

コードを表示する場合は、問題を説明する最小限のチャンクにしてください。

あなたの問題をもう少し説明したので、まだある程度のサービスレベルでポットをサンプルする必要があります。調整を引き起こした最後の値を追跡します。その値から10%程度逸脱した場合にのみAPIを呼び出し、APIを呼び出すたびに新しい値を保存します。それが許容できない場合は、ポットをエンコーダに変更することをお勧めします。そうすれば問題は解決するかもしれません。

1
追加された

これが明るさ制御のためであるならば、あなたは大いに問題を考えすぎています。ポットのワイパーの間にコンデンサを入れて、あなたの人生に取り掛かりましょう。

1
追加された
@GeorgeHeroldまたは汚れた鍋、または悪いワイパー...
追加された 著者 Ian Bland,
デスクトップモニタの明るさを制御するためのもので、明るさを変更するたびに点滅します。
追加された 著者 user27096,
@GeorgeHeroldいいえ、Dellのモニターです。明るさの変化を「スムーズに」処理するためのファンキーなコードがあるように見えますが、あまりにも早く多くの人に送信すると、madのように点滅します。
追加された 著者 user27096,
もう一度読むと、ポット直接がモニターの明るさを制御していると思います。私はあなたがどのようにそれをするだろうか見当がつかないがそれはしない。それはマイクロコントローラを介して読み取られ、その後USBを介してコンピュータに送信され、DDC/CIを使用してモニタに明るさを変更するよう指示します。
追加された 著者 user27096,
@Timmmm、ポット接続のコールドはんだ接合?
追加された 著者 Dominique Devriese,

全体的な解決策は、適切な場所でフィルタリングを行い、適切なA/D解像度を使用することです。

あなたはアナログでフィルタリングして、それから量子化しています。アナログで少しフィルタリングするのは良いことですが、ほとんどのフィルタリングはデジタルサンプルに対して行うべきです。それは量子化ノイズもフィルタリングします。それはあなたがそれを完全に言っていないけれども、それはあなたの問題です。

システムの他の部分に負担をかけずにできるだけ早くA/Dを実行してから、次の2つを適用します。

  FILT <-- FILT + FF(NEW - FILT)

特にFFが1 / 2Nであるとき、これはマイクロコントローラで計算するのが簡単である。 FFによる乗算は、Nビットだけの右シフトです。情報が失われないようにするには、FILTを入力サンプルと比較してN個の追加の小数ビット(このアルゴリズムのNEW値)で維持する必要があります。

たとえば、FF = 1/16で、1バイトの小数ビットを保持するこれらのフィルタのうち2つは、60回の反復で90%の整定時間をもたらします。これは、値がシステムの他の部分で必要とされるよりもバックグラウンドでA/Dを速く実行することの利点です。

これが人間によって調整されることを意図している鍋であるならば、あなたは多くの時間があります。 A/Dを2 kHzで実行したとしましょう。これは、控えめなマイクロコントローラでも非常に遅いです。 50ミリ秒は人間が瞬時に考えるものの限界についてです。その間に100個のサンプルを処理して98.9%のセトリングを達成します。人間の入力のために50ミリ秒でそのレベルにセトリングする必要はありません。

これの他の部分は、A/Dが最初に十分な解像度を持っていることを確認することです。ローパスフィルタを使用すると、見かけ上余分な解像度が1〜2倍得られますが、これを信頼する必要はありません。これがボリュームコントロールだとしましょう、そしてあなたはそれに60dBの範囲があることを望みます。たった8ビットのA/Dでも、1カウントあたり0.24 dBです。ゼロクロッシングなどでゲインを変更するだけのように、着信信号を引き裂かないように注意していると仮定すると、音量がその量だけ上下に変動しているかどうかは誰にもわかりません。上記のようにフィルタリングを施した8ビットサンプルでさえも、音量ノブを調整することは人間にとっては滑らかであるように見えるであろう。

少なくとも10ビットのA/Dを持っていない最新のマイクロを見つけるには、それに取り組まなければならないでしょう。つまり、回転範囲の1/1000を感知できるということです。それについて考えてください。回転範囲の1/1000が実際に問題になる場合は、システムレベルの設計に戻り、問題全体をより高いレベルで再考する必要があります。たとえば、2つのポットがあるとします。一つはコース調整、もう一つは微調整です。またはデジタルエンコーダーを使用して複数回回転させます。さまざまなシステムレベルの解決策がありますが、通常のノブを1/1000回転させることで、隣接する読み値の間にジッタがあるかどうかにかかわらず、実際には十分に有効です。

0
追加された
「通常のノブを1/1000回転させることは、隣接する測定値の間にジッタがあるかどうかにかかわらず、本当に十分なはずです」いいえ、これは私が解決しようとしている問題全体です。 単なるジッタによるものである多数の値を受け取らないようにしたい。その理由は、値の変化に対処することは不快であるため、できるだけそれをしないようにすることだ。 (基本的に私がコントロールできないシステムの一部は少し壊れています。)
追加された 著者 user27096,