ADIS16470 および ADIS16500 は、ルーチンが接続された状態で、完全なデータの受信から読み取りまでを行います。

機密保持上の理由により、コードをアップロードできません。私が使用している開発環境は IAR です。別のブロガーの記事を以下に転載します。彼は MDK を使用しています。下のブロガーがあなたに良いアイデアを与えてくれました。私はここにあなたを褒めます。一番下にあるの

、誰もがこのことを理解できるように、私が手動で注釈を付けました。

元のリンク: https://blog.csdn.net/wmdscjhdpy/article/details/111288961

序文

この記事はもともとADIS16470の評価レポートとして書かれたもので、2018年に書かれたもので、最近データを整理していたらこの記事を見つけたのですが、ネット上に関連する情報があまりなかったので整理してみました。そしてそれをこのブログに投稿しました。当時の不十分なレベルを考えると、単純に整理されたデータを読み出すことしか完成度を高めることができませんでした。ルーチンについては、github: プロジェクト リンクを参照してください。
また、センサーは比較的新しいため、基本的に主な情報はデータシートから得られます。以下の多くの画像もデータシートを参照しています。必要に応じて、最初にデータシートをダウンロードして、データ マニュアルのダウンロード アドレスデータ マニュアルのダウンロード アドレス
当時使用した評価ボードの写真を添付し​​ます。
16470
ここに画像の説明を挿入します
ここに画像の説明を挿入します

16500
ここに画像の説明を挿入します

レビューテキスト

基本的なプログラム設定と回路構成

データシートから、ADIS16470 は SPI を介してメインデバイスと通信していることがわかります。SPI 通信には CLK クロック ライン、MOSI 出力ライン、MISO 入力ライン、NSS チップ セレクト ラインが必要です。手元に STM32F439IGT6 コア ボードが 1 枚しかないため、このボードを選択してプロジェクトを構築しました。
STM32CubeMX で STM32F439IGT6 プロジェクトを確立した後、図に示すように、最初にクロック周波数とデバッグ方法を設定し、次に SPI と通常の GPIO を NSS チップ選択ラインとして有効にします。
ここに画像の説明を挿入します

次に、SPI および GPIO メソッドを設定します。SPI 信号線として、GPIO をオープンドレイン出力モードに設定することを推奨します。SPI 設定メソッドはデータシートに従って決定する必要があります。データシートを確認すると
、 CPOL は 1、CPHA は 1 である必要があります。Cube では、Polarity=HIGH および Phase=2Edge を設定します (最初にこの問題に取り組み始めたときに誤って間違いを犯し、それを理解するのに長い時間がかかりました)。同時に、ADIS16470 は 16 ビットでデータを送信するため、Cube で SPI Data Size=16 を設定できます。次に、SPI プリスケーラを調整してボー レートを下げ、ボー レートが 2Mb/s を超えないようにします (BurstRead を使用する場合は 1Mb/s を超えることはできません)。
ここに画像の説明を挿入します

上記の構成が完了したら、プロジェクトを生成し、ジャイロスコープのデータシートのピン定義に従ってコアボードとジャイロスコープを配線します。ここで私が実際に混乱したのは、ここでの J1 のシリアル番号が上から下にソートされているのではなく、列に従って番号が付けられていることです。皆さんもこれに注意し、この貴重なトップを誤って悪用しないようにしてください。楽器は焼けました。」 ! 数千ドル相当のもの
ここに画像の説明を挿入します

BurstRead モードで生データを読み取る

ジャイロスコープからのデータの読み取り方法は数多くありますが、BurstReadもその一つで、単純読み取り、連続読み取り、3軸加速度、3軸角速度値をワンステップで取得できるのが特徴です。BurstRead メソッドは、精度要件がそれほど高くなく、すぐに開始する必要がある場合に適しています。
ここに画像の説明を挿入します

BurstRead メソッドの動作タイミング図については、技術マニュアルを参照してください。起動時に CS ラインを Low にプルし、ワード 0x6800 を送信し、SPI データを連続的に読み取って、特定の順序で配置されたセンサー データを取得します。
データシート内のデータの配置に従って、データを保存するための構造を定義できます。
ここに画像の説明を挿入します

その後、プログラム内でループ読み取りを実行し、読み取り前に BurstRead プリコマンドを発行して、残りの読み取りデータを構造体に入れることができます。データの信頼性を確保するために、データの各フレームには、フレームの完全性と信頼性を確保するために使用できるチェック バイトがあります。完全なフレームを受信するたびにデータ検証を実行でき、検証が成功した場合にのみデータが保持されます。読み取ったセンサー値(生データ値)は以下のとおりです。
ここに画像の説明を挿入します

レジスタを個別に読み取ってセンサーデータを取得

ほとんどの場合、BurstRead は基本的なニーズを満たすことができますが、ADIS16470 にはより正確な 32 ビット精度のデータがあり、より高い要件がある場合は、そのレジスタを読み取ることで非常に高精度のセンサー データを取得できます。
下の図は、角速度の 32 ビット データ精度を示しています。これは 1 度/秒あたり 655360LSB であり、非常に恐ろしいと言えます。
ここに画像の説明を挿入します

したがって、高精度の要件がある場合は、そのレジスタを個別に読み取る必要があります。レジスタを読み出すタイミングは以下のとおりです。
ここに画像の説明を挿入します

読み出しが必要なレジスタが送信されるたびに、次の SPI 送信シーケンスで読み出し結果が返されることがわかります。読み出し効率を向上させるため、読み出し対象のレジスタアドレスを連続送信し、受信時にオフセットを加算することができます。
読み出しが完了すると、2つの16ビットデータが1つの32ビットデータに結合されます(マニュアルによると、リトルエンディアンモードでは、下位ビットのLowアドレスと上位ビットのHighアドレスが結合されます) 、こうして 32 ビットの元のデータが得られます。元データを取得するだけでは不十分で、上表に従って元データと標準単位との関係を取得・変換し、最終的に3軸角速度と3軸加速度の値を取得します。 。

ここに画像の説明を挿入します

3 軸の角速度と 3 軸の加速度が得られたら、もう 1 つの頻繁に使用される値が 3 軸の姿勢角です。通常のジャイロスコープでは、速度の積分値を直接角度値として取得することが多いため、ある程度の誤差が生じます。積分精度の問題を解決するために、ADIS16470 は角度差データも提供します。一定時間内の角度差を表すデータで、デフォルト値は1/2000秒の角度差です。ロボット制御システムを構築する場合、通常はそれほど高いデータ周波数を使用する必要はないため、統合時間を長くする、つまりデータ周波数を下げる必要があります。ADIS16470 には積分時間を制御するレジスタがあり、このレジスタが x の場合、データ周波数は 2000/(x+1)Hz になります。このレジスタのデフォルト値は 0 なので、デフォルトの周波数は 2000Hz です。制御システムを使用する場合、データ周波数を500Hzに制御することでより良い制御効果が得られます。したがって、積分時間を 1/500 秒に増やすには、このレジスタを 0x03 に書き込む必要があります。
ここに画像の説明を挿入します

制御周期が500Hzの場合、その都度角度差を読み取って積分することにより、積分結果はより正確な角度値となり、制御周波数の低下による精度の低下はありません。すべての最終データは次のとおりです。
ここに画像の説明を挿入します

簡単なデータ処理
先ほどすべてのデータを取得しましたが、まだデータが安定していないため、いくつかの処理を行う必要があります。
ここに画像の説明を挿入します

ハードウェアの制限により、ジャイロスコープにはゼロ点ドリフトが発生します。つまり、特定の軸の実際の角速度が 0 の場合、その出力値は 0 ではなく 0 に近い数値になります。オフセットとシフトです。ADIS16470 は内部でゼロ点校正用のレジスタ値を提供しており、その動作原理は次のとおりです。

ここに画像の説明を挿入します

言い換えれば、適切なゼロ オフセットを決定した後、ジャイロスコープ データはそのたびにオフセットによって補正され、より正確なデータが取得されます。ゼロ ドリフトを決定するために一般的に使用される方法は、プログラムの開始時に一定期間ジャイロスコープを動かさないようにし、一定期間データを収集し、得られた角度をセルフテスト時間で割って、ゼロ ドリフトを求めるというものです。角速度をオフセットし、その負の値をゼロ点ドリフト補正値とします。ゼロ点補正後、ジャイロスコープはより安定したデータを読み取ることができます。
もちろん、ジャイロスコープの精度に影響を与える要因はこれよりもはるかに多く、ランダムドリフトや高周波振動など、ジャイロスコープの精度に影響を与える要因も数多くあります。高周波振動によるランダムドリフトやオフセットなどの扱いが難しい誤差は非常に低いレベルに抑えられているため、単純な処理でより良いデータを生成できます。ゼロ点補正に加えて、ADIS16470 にはバターワース フィルタも内蔵されており、必要に応じてより正確なデータを取得するために構成レジスタを通じてオンにすることができます。より正確なデータが必要な場合は、データ融合アルゴリズムを検討することもできますが、ここでは再度説明しません。

詳細については、次のように 16500 を使用して作成したいくつかの注釈を参照してください。

https://download.csdn.net/download/weixin_44057803/88226636

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します
実際、16500よりも16470のマニュアルの方が専門的で、解説もより専門的だと感じます。

以下の 16500 のマニュアルにはすべての間違いが記載されています。

ここに画像の説明を挿入します
ここに画像の説明を挿入します

以下の計算によると、52428800 = 2,097,152,000/40であることがわかります。

ここに画像の説明を挿入します

これも間違いで、デフォルト値は C1 ですが、以下では 0 と表示されています。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_44057803/article/details/132345034