クイックバージョン:
持っている情報が各立ち上がりエッジが発生する時間だけである場合、異なる周波数を持つ 2 つの方形波信号間の「位相差」を決定するためにどのアルゴリズムを使用できますか?
詳細版:
私は組み込みソフトウェア プロジェクトに取り組んでおり、興味深い問題に遭遇しました。次の図に示すように、2 つのホール効果速度センサーからデータを収集しています。
注:ハイメが指摘したように、この図の信号は実際には同一の周波数を持っています
。実際のハードウェアには、2 つのターゲット ギア間にさらにいくつかのギアリング ステージがあり、その一部は噛み合った歯ではなくシャフトで接続されているため、異なる周波数を持つ 2 つの方形波になり、それらの間の比率は依然として一定です。要点をつかむために図を単純化したかったのですが、単純化しすぎたようです。/ノート
速度センサーは、周波数が各ギアの回転速度に正比例する方形波信号を出力します。方形波の立ち上がり (および立ち下がり) エッジは、単一の歯車の歯のリーディング (およびトレーリング) エッジがセンサーを通過するときに発生します。
各歯車の歯の数を知っており、この情報に基づいて、方形波信号の周波数に基づいて各歯車の回転速度を正確に測定できます。
周波数を測定するために、組み込みコントローラーの高速キャプチャ タイマー ピンに各速度センサー信号を接続しました。キャプチャ タイマーは、方形波信号の立ち上がりエッジを自動的に検出し、遷移が発生した時間を表す値をレジスタにロードし、割り込みをトリガーします。各信号のキャプチャ ポイントは、図に黄色で示されています。割り込みサービス ルーチンは次のようになります。
struct
{
long previousTime;
int frequency;
}
sensors[2];
void CaptureTimer_Interrupt(int channel, long transitionTime)
{
long timeDifference = transitionTime - sensors[channel].previousTime;
sensors[channel].frequency = CONVERSION_FACTOR / timeDifference;
sensors[channel].previousTime = transitionTime;
}
私がしたいこと:
これら 2 つの方形波信号の相対的なタイミングの小さな違いを検出できるようにしたいと考えています。より適切な用語がないため、これを「位相差」と呼んでいます。2 つの信号の周波数がまったく同じである場合、これは簡単で、位相差という用語を使用するのが適切です。
ここに私が得ているものがあります: 2 つの信号を長期間にわたって記録し、高速 (青) 信号を 16/9 の係数で人為的に遅くする (または「伸ばす」) 場合、それは低速 (赤) 信号とまったく同じ周波数を持ち、2 つの信号には測定可能な位相差、つまり赤信号割り込みと青信号割り込みの間の時間差があります。長期間にわたって信号を記録することなく、この同じ時間差 (または同等のもの) を計算したいと思います。組み込みコントローラーのリソースは限られているため、過去の遷移時間の大規模な配列を格納することはできません。
誰もこれに遭遇したことがありますか?実際のプロジェクトには、そのようなギアとセンサーの配置がいくつかあるため、再利用できる洗練されたアルゴリズムを探しています。前もって感謝します!