#STM32学习#6D加速度センサーがファンの振動を測定

1.背景:

ファンの起動と停止を監視する必要があり、振動周波数を測定して判断に役立てることが望まれます。

2.センサー:

従来の振動センサーを下図に示しますが、1つは測定精度が低く、小さな振動に敏感でないこと、もう1つは周波数分割信号を測定できないことです。

LSM6DSL加速度/角速度センサーの使用を選択します。センサーが配置されているボードはX-NUCLEO-IKSO1A2です。以下に示すように。

 LSM6DSLは、3軸方向の加速度と角速度を測定できます。振動を監視するには、加速度情報のみが必要です。

3.建設プロジェクト:

最初に使用された開発ボードはST公式のMB1136です。すべての関連情報は以下にリンクされます。

Stm32cubeMXを使用してプロジェクトをすばやく構築することに慣れています。選択した開発ボードのメインチップモデル、センサーリンクのピン、および占有リソースに従って構成します。最後に、プロジェクトはワンクリックで生成されます。(stm32MXの使用方法については、自分で母親を救うか、以下で説明できます)

それは言及する価値があります:

(1)I2Cを構成するときは、「高速モード」を使用し、速度を最大(400000Hz)に設定する必要があります。これにより、加速度センサーとの通信を高速化できます。加速度センサーの出力周波数も可能な限り上げることができます。実際のテストでは、最速のIIC通信速度で、センサーが設定できる最大出力周波数は3.33KHzであることがわかりました。

(2)センサーデータの準備ができたときに送信される割り込みを受信するように割り込み入力ピンを構成します。(特定のステータスビットを自分で読み取ることもできます)

(3)STダウンロードポートに付属するシリアルポートのボーレートは9600に固定されています。これより高い値を使用する場合は、別途配線する必要があります。(別に配線して115200に設定しました)

 

次のステップは、プロジェクトでコードを書くことです。誰もが自分のロジックに属するコードを書くことができると思います。私の論理的な考え方は次のとおりです。

(1)機器とセンサーの初期化

(2)センサーが起動し、加速度データのセット(3データ、X、Y、Z)を準備し、ピン割り込みを生成します。

(3)F401REは割り込みを受け取り、6バイト(3つの加速値)を読み取ります。(直接読み取り値は補数の形式であり、加速値は正または負であり、変数を定義するときにint16を使用する必要があります)

(4)モジュラス長ACCを取得するために、一連のデータ(3方向の加速度)に対してベクトル計算を実行します。ACCがいっぱいになるまでアレイに格納します。(シングルチップマイコンの限られた記憶空間を考慮し、モジュラス長配列、1024倍データを採用)

(5)ストレージがいっぱいになった後、ストレージではなく、フラグビットとして設定し、FFT高速フーリエ変換を実行します。関連する知識については、https//blog.csdn.net/yga_airspace/article/details/86688278を参照してください   。

このリンクにはC言語コードがあり、直接実行できます。以下を使用する場合は、入力パラメーターの関係に注意してください。

FFTは、モジュラス長の配列と同じサイズの複数の配列を定義する必要があるため、より多くのスペースが必要になります。

ダブルpr [NUM]、pi [NUM]、fr [NUM]、fi [NUM];

 

(6)変換の結果はpr [1024]に格納されます。変換の結果を確認する必要がある場合は、この配列のdoubleデータをウィンドウアシスタントに出力し、Excelを使用して変換結果を確認できます。(印刷時には、単一のデータが折り返され(\ n \ r)、シリアルポートアシスタントで印刷されたデータの列がExcelに直接コピーされます)。取得したデータリストの最初のものはDCコンポーネントであり、削除できます。さらに、何らかの理由で、残りのデータによって形成される画像は対称的であるため、表示時に半分しか取得しません。下図に示すように、センサーはホストコンピューターに配置され、ホストファンの振動を測定します。合計1024のサンプリングポイント。出力周波数は833Hzです。(サンプリングポイントの数を増やすと、横軸が右に移動します。出力周波数を高くすると、横軸が左に移動します)(同じ1024のサンプリングポイント、833Hzの出力周波数は145に対応し、1.66KHzの出力周波数は72に対応し、3.33KHzの出力周波数は対応します35)に対応します。

(7)横軸は振動周波数と直接的な関係があります。アナログ入力データで観測したところ、サンプリング点数が1024点の場合、フーリエ変換後のピークツーピーク最大値の座標が実際の周波数と一致している(わずかなずれ、わかりやすい)ことがわかりました。

 10Hz、20Hz、30Hz、40Hz、50Hz、60Hz、70Hz、80Hz、90Hzを含むアナログ入力pr [1024]。(基準周波数と角速度の関係)

for(i = 0; i <1024; i ++){ pr [i] = cos(2 * PI * 0.001 * i * 10)+ cos(2 * PI * 0.001 * i * 20)+ cos(2 * PI * 0.001 * i * 30)+ cos(2 * PI * 0.001 * i * 40)+ cos(2 * PI * 0.001 * i * 50)+ cos(2 * PI * 0.001 * i * 60)+ cos(2 * PI * 0.001 * i * 70)+ cos(2 * PI * 0.001 * i * 80)+ cos(2 * PI * 0.001 * i * 90); }

下の図では、1番目から128番目までのポイントのみを使用して画像を作成しています(サンプリングポイントの数は1024のままです)。

4.ホストコンピュータに書き込みます

上記の表示プロセスは少し面倒なので、リアルタイムデバッグ用のホストコンピューターを作成することを検討してください。

変換後、下位のコンピューターデバイスはシリアルポートを介してコンピューターに直接データを送信します。(各二重数値は最初に文字列に変換され、文字列の形式で送信されます。各データが送信された後、改行文字\ nが追加され、すべてのデータが送信された後、 '#'が送信されます)

 

ホストコンピューターはQtとC ++を使用して記述されています。特定の実装とソースコードに関心のある子供の靴は私にそれを求めることができます。

私の最善の計画は、1024個のサンプリングポイントの配列とセンサーからの3.33KHzの出力周波数です。ホストコンピューターの周波数は35 Hz(2100回転/分)と測定されます。

 

これは純粋に個人的な経験の要約です。エラーがある場合は、ご相談ください。

 

 

おすすめ

転載: blog.csdn.net/Kshine2017/article/details/100916640