加速度計を使用して傾きを計算しますか?


16

ブレッドアウトボードにアナログデバイスADXL203加速度計があり、これを使用して、かなり高い周波数(20〜30 Hz)でいくつかの機器の傾きを測定したいと考えていました。センシングを行うために、キャンベルcr3000ロガーに接続しています。センサー出力の解釈方法についての指示はありますか?ありがとう


コメントをありがとう。
トロイ

私は最高を持っていることを知っていますが、あなたが私のものが好きでないなら、少なくとも誰かのものを受け入れます。
Kortuk

回答:


12

私はここで多くのことを言いますが、そのうちのいくつかはpingsweptに同意することを含み、いくつかはペンジュインに同意することを含みます。

cr3000

16ビット、100 Hzでのcr3000サンプリングは、データからノイズを簡単に除去するために少し遅くなりますが、それよりもはるかに高い精度で使用できます。優れたフィルタリングアルゴリズムを使用しなくても、13ビットまたは14ビットの精度が得られるとは思いません。加速度計は、振動が悪魔である爆破されたフォノンであることを教えてくれました。

出力コンデンサ

データシートに示されているように、理論的に示されているように、確認する必要があります。データシートを引用するには:

ADXL103 / ADXL203の出力の標準帯域幅は2.5 kHzです。ユーザーはこの時点で信号をフィルタリングして、エイリアシングエラーを制限する必要があります。エイリアシングを最小限に抑えるために、アナログ帯域幅はアナログからデジタルへのサンプリング周波数の半分以下でなければなりません。アナログ帯域幅をさらに小さくして、ノイズを減らし、解像度を向上させることができます。

これは、レートを50Hz未満に保つためにコンデンサを選択する必要があることを意味します。これより上に配置すると、エイリアシングを得ることができ、エイリアシングにより、振動ノイズが契約に署名した悪魔になります。デバイスからのノイズレベルの計算方法が記載されており、50Hzの帯域幅で.006 *のピークツーピークノイズがある場合、振動があるデバイスでこれを検出しても重力は気づかれません。

データの解釈

これはおそらくあなたが最も興味を持っていることであり、比較的簡単に実行できます。デバイスがニュートラルである時間をタグ付けする必要があります。これは、デバイスがフラットで比較的静止している場合です。この時点で1〜2秒待ってから、このデータの中央値を取得して、非G電圧を決定できます。次に、これをデバイスを比較するポイントとして使用できます。さて、この時点から、データシートを直接引用できます。

加速度計が重力に垂直である場合、その出力は傾斜の度ごとにほぼ17.5 mg変化します

したがって、あまり傾けない場合はこの近似値を使用できますが、極端に小さくない方向と角度の両方に傾ける場合はジオメトリを使用する必要があります。

あなたが大きくなるつもりなら、彼らは方程式を次のように綴っています:

ピッチ= ASIN(AX / 1 g)
ロール= ASIN(AY / 1 g)

私が電話できる限り、あなたのデバイスはそれに置かれた加速度の1Gごとに1Vの変化を与えます。キャリブレーションフェーズを完了したら、測定を行い、オフセットを差し引くことができ、経験したGの数が得られます。

問題が発生した場合、またはアプローチを改善するための詳細情報が必要な場合を除き、ここで読むのをやめてください。

急速に変化するシステムや、サンプルを実行するデバイスをプログラムするシステムのアプローチを改善するために、他のアプローチや方法についてもう少し話を加えました。

サンプリング周波数

1秒間に20〜30回方向を測定する必要があるため、デバイスが加速する方向を変更する速度よりもかなり速くサンプリングする必要があります。他の影響による振動ノイズと加速度を除去するのに十分な速さで測定できるようにする必要があります。これは、加速度計を使用するときに非常に大きいことがわかっています。

3軸加速度計

第二に、3軸の加速度計がある場合、1つの軸が重力のために加速度の一部を失っていることを非常に簡単に認識することができます(つまり、z軸の振幅が2m / s ^ 2になると、あなたが他の軸で見たゲインは重力です)。これは依然として厄介ですが、一般に、方向を変更するために必要な速度を与える加速度が追加され、その後、方向の変更による加速度の変化があり、多くの場合、方向を認識できます。

2軸の問題

これは、ペンジュインが言ったように、2軸の加速度計ではほとんど不可能であり、1秒間に20〜30の異なる方向を持つことができるシステムがある場合、または正確な方向の測定が必要な場合常時。修士課程の学生はこれについてかなり良い論文を書くことができ、博士号はこのアルゴリズムの改善に関する論文を書くことができると確信しています。

振動騒音

さらに追加すると、デバイスをデバイスの動きに静的にロックし、振動を減衰させるものの上にデバイスを置くことができれば、はるかに優れた数値が得られ、ソフトウェアフィルタリングはそれほど必要ありません。加速度計とデバイスの間にいくつかの単純なフォームタイプのパッドを配置できます。デジタルの場合、電気ノイズが増加せず、振動ノイズの吸収に役立ちます。これは、振動ノイズに問題がある場合にのみ行う必要があります。

デジタル加速度計

SPIを使用して接続できるデジタル加速度計をお勧めします。データは非常に高いレートでクロックアウトでき、SPIが次の値のセットをロードする一定の作業を行うため、バックグラウンドで作業できます。デジタルで行うには、素敵なマイクロコントローラーが必要です。あなたが何をしたいのかについてより良い詳細を私に与えることができれば、私はより良いフィードバックを与えることができます。傾斜検出に基づく警告が必要な場合は、すべてのアナログで非常に簡単に行うことができますが、操作中に機器の位置と角度を測定したい場合は、いくつかの作業の準備をします。

この回答をより明確にするため、または探しているものに適用できるようにするために追加できるものがあるかどうかをお知らせください。


1
記録のためだけに、この答えは壮大です。
pingswept

1
Kortuk博士、加速度計の博士号!:-)
ジェイアトキンソン

私はこの答えを書きました。何かを忘れていたと思っていたので、それが少し長いと気づき、答え方を実際にすばやく追加しましたが、人々は長い答えを好むようです。
Kortuk

振動ノイズについては、ブラシレスDC(BLDC)モーターが存在するため、動作時間中により多くの量があった可能性がありますが、電源を入れる前にかなりの振動値が残っていました。
Kortuk

3

私はこの答えを何度もクレイジーな数学的アイデアで書き、書き直しましたが、正直に言ってこれが正確にできるとは思いません。ベクトル演算を実行できますが、次の場合はどうなりますか?

  • オブジェクトが移動を停止します
  • オブジェクトの速度は一定です
  • オブジェクトがぶつかった/ぶつかった
  • 傾斜を上に移動して生成された力は、Z軸の解像度を下回っています

この種のことを行うためのクレイジーな回避策があると確信していますが、それが価値があるかどうかはわかりません。加速度計はこのタスク用に設計されていません(少なくとも私の知る限り)。あなたが達成しようとしているものについては、これらのいずれか 使用したジャイロスコープのアプローチをお勧めしますこれらはすべて、上記の問題のすべてに対してかなり耐性があります。


加速度計は実際にこのために設計されており、その方法についてのセクション全体があります。加速度計は多くの場合非常に低コストであり、完全な機能よりもコストが大きな問題になる場合があります。
コルトゥク

3
私はいつもこれを生徒に説明しようとしていますが、これは重要な概念だと思うのでここに追加します。エンジニアリングとは、常に最善の方法で行うことではなく、ユーザーが値札以外の違いを認識できないような方法で行うことです。
コルトゥク

2
最初にそれを行うために言わなければならないことがあり、最後の男よりもそれを上手に行うために言われることがたくさんあります。
コルトゥク

私は同意しますが、それはあなたの動機に依存します(トロイは述べていません)。それをうまく機能させたいですか、それとも学びたいですか?それらは必ずしも相互に排他的ではありませんが、コンパイラの設計について特に学びたい場合を除き、LEDを点滅させるためだけに独自のコンパイラを記述することはありません。
ペンジュイン

ええ、私はあなたの答えを議論するためにそれを追加します、一般的に彼が1秒間に30回異なる方向を伝えることができる必要がある場合、それはそれに巨大な加速を持っていることになります秒。
コルトゥク

3

データシートを正しく理解している場合、各軸の出力は、軸を中心に傾けると1.5 V〜3.5 Vの間で変化します。デバイスがフラットの場合(±1度のパッケージアライメントエラーを無視)、両方の出力は2.5 Vを読み取る必要があります。

一方向の傾斜のみを測定する必要がある場合は、2.5 Vからの偏差のアークサインを取得してラジアン単位の角度を取得し、度に変換できます。デバイスが任意の方向に傾斜できる場合、2つの角度を計算し、それらから複合角度を計算できます。

明確にする:1つの軸の周りの角度=(180 /π)* arcsin(Vout-2.5)

良好な周波数応答を得るには、小さな出力コンデンサCxとCyが必要です。脚注6から データシートの3では、0.02 uFが250 Hzの帯域幅を提供するように見えますが、これはおそらくサンプルレートにほぼ適しています。おそらく帯域幅を50 Hzに制限して、0.1 uFまで上げることができますが、信号は減衰し始めます。


上限のポイントであるより高い周波数を参照している場合を除き、信号を減衰させるとは思いません。彼は、データサンプリングデバイスに合わせて50Hz以下にする必要があります。
Kortuk

1
ああ、エイリアシングの観点からは考えていませんでした。私はまだ大きなキャップは高周波信号を減衰させると思いますが、それはこの場合実際には良いことです。そのため、帯域幅を50 Hz前後に設定するのが適切です。
pingswept

3

私の2番目の答えは大きいため、2番目の答えを追加します。

エイリアシングレート(50Hz)を下回るようにするには、フィルターキャップを0.10 uF以上にする必要があります。Z方向のすべての重力加速度で、デバイスの座位レベルで数秒のキャリブレーションフェーズを与える必要があります。これは、ゼロGポイントを決定するためです。

ゼロGポイントで測定する電圧は、おそらくX方向とY方向で異なり、何も表しません。あなたが得るどんな電圧でもそれからそれを差し引くだけです。オフセットを差し引いたこの電圧は、その方向に到達しているGの数です。

弧を描いて、その方向に角度を付けます。

これは、ノイズやその他の加速を無視します。NaNが完全に傾いていてノイズがある場合、NaNが結果になるように準備してください。


0

角度を取得するには、X方向とY方向の両方の重力加速度を測定する必要があります。中間電圧(2.5V)を差し引くと、ゼロは「加速なし」になります。

これで、arcsin(y / x)で角度を見つけることができます。しかし、それは除算のため、また符号があいまいであるため、C関数atan2(y、x)が本当に必要なものを使用するのは面倒です。atan2()は、360度すべてに対して正しい符号を取得します。


マイクロを使用していないため、トピック外:マイクロコントローラーで使用するatan2()を探している場合、私のWebサイトにatan2()ジェネレーターがあります:http : //vivara.net/cgi-bin/ cordic.cgi


0Gに対して2.5 Vの保証はありません。彼はおそらくコンピューターを使用して数学を行うので、数学を行うために彼が使用する方法が重要になるとは思わない。
Kortuk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.