簡単な要約:
表示が更新されるたびに最小桁数 (10 進数) が変更されるように、4 桁の速度信号を表示するアルゴリズムを探しています。
例えば:
Filtered
Signal Display
--------------------
0000 0000
2345 2000
2345 2300
2345 2340
0190 0340
0190 0190
0190 0190
詳細:
4 桁の LCD ディスプレイに速度信号 (0 ~ 3000 RPM) を表示する必要があるプロジェクトに取り組んでいます。理想的なディスプレイ ソリューションはアナログ ゲージですが、私はデジタル ディスプレイにこだわっています。表示は機械のオペレーターが読み取りますが、できるだけ読みやすくしたいと考えています。
オペレーターは、シグナルの正確な値をあまり気にしません。彼は値が何であるか (最も近い 10 RPM まで) を知りたがり、マシンの動作の変化に応じて値が上下するのを見たいと思うでしょう。彼はそれがいたるところに飛び跳ねるのを見たくないでしょう。
これが私がこれまでに行ったことです:
- 数値を最も近い 10 RPM に丸めて、最後の桁が常に 0 になるようにします
- 電気ノイズと通常のセンサーの変動によって読み取り値が一度に 10 RPM を超えてジャンプしないように、信号をフィルター処理します。
- 同じ値 (例: 990 - 1000) を超える場合を回避するために、信号に +/-10 RPM ヒステリシスを追加しました。
これにより、信号が安定している場合 (約 75% の時間) はきれいに処理されますが、信号が定常状態から別の定常状態に移行するときに、信号に多くの不要な変動が見られます。信号が 100 RPM から 1000 RPM に変化すると (たとえば)、信号は途中で多くの数値を通過します。数値を実際に読んで理解するには少し時間がかかるため、これらすべての中間状態に到達してもほとんど意味がないように思われます。単純にディスプレイの更新レートを下げてみましたが、満足のいく結果にはなりませんでした。同時に、ディスプレイの動きが鈍く、びくびくしたように感じました。数字が変化する前に顕著な遅延があり、その後大きな飛躍 (100、340、620、980、1000) で移動します。
提案:
例に示すようにディスプレイを動作させたい:
- 表示は 1 秒に 2 回更新されます
- ある定常状態から別の定常状態への移行に 2 秒以上かかることはありません。
- 入力信号が現在表示されている値よりも高い場合、表示される信号は増加しますが、入力信号値よりも高くなることはありません。
- 入力信号が現在表示されている値より低い場合、表示される信号は減少しますが、入力信号値より低くなることはありません。
- 更新ごとに最小桁数を変更する必要があります (できれば 1 桁のみ)
- できるだけ早く表示信号と入力信号の差を縮めるために、上位桁から変更する必要があります。
上記のルールに従って「適切な」4桁の10進数を出力するアルゴリズムを思い付くことができますか、または知っていますか?
関数プロトタイプは、疑似コードで次のようになります。
int GetDisplayValue(int currentDisplayValue, int inputSignal)
{
//..
}
テキストの壁で申し訳ありません。質問に答える人が、私がすでに経験したことをカバーしないように、これまでの進捗状況を記録したかったのです。