
左から:比較のためにBoschのHP206C、HP203B、およびBMP085(テストにも関与)。
内容:
1.テスト回路
テストのために、回路を組み立てました:

以下で構成されます
- ARM Cortex-M3コアを備えた、LPC1769オンボードマイクロコントローラーターゲットを備えたXpresso LPCデバッグボード。 ただし、8ビットAVRはこのタスクに簡単に対処でき、クレイジーボードだけがビジーでした。
- HP203BとHP206CはI2C0に、BMP085はI2C1に接続されています。 これは、はんだ付けが無駄だったためではなく、アドレスが一致したためです。
- Nokia 3310の画面は、純粋にセンサーの1つの現在の情報を表示するためのものです。
- 情報をPCに出力するためのCP2102へのUART-USBアダプター。
2.主な機能
以下の表は、比較のために、データシートのセンサーの主な特性を示しています。
特徴 | HP203B | HP206C | BMP085 |
測定圧力の範囲、mbar | 300〜1200 | 700〜1100 | 300〜1100 |
絶対精度、mbar(最高/最低の場合) | ±1.5 /±3.0 | ±1.5 /±3.0 | ±2.5 /±4.0 |
相対精度、mbar(最高/最低の場合) | ±0.5 /±1.5 | ±0.6 /±1.5 | ±0.2 /±0.5 |
最大解像度、mbar / m(圧力/高さ) | 0.01 / 0.1 | 0.01 / 0.01 | 0.01 /- |
測定温度の範囲、° | -20〜60 | -20〜60 | 0〜65 |
絶対精度、°(最良/最悪の場合) | ±0.3 /±1.0 | ±0.3 /±1.5 | ±0.5 /±2.0 |
最大解像度、° | 0.01 | 0.01 | 0.1 |
平均消費電流(1サンプル/秒)、µA(最小/最大) | 2.4 / 91.8 | 2.2 / 85.2 | 3/12 |
これらのセンサーの主な違いは何ですか? HP206C防水性は、雨/雪/霧の中で、気象観測所の一部として、またはクアドロコプターの高度計として機能することを意味します。 また、その高さの解像度は他のものよりも大きくなっています。 HP203Bは小さく、測定圧力範囲が広くなっています。 彼と一緒に、山でも。 したがって、モバイル機器の高度計として理想的です。 これらの2つのセンサーは、温度と圧力だけでなく、高さも人間の形で結果を提供し、プロセッサーの負荷を軽減します。 高さを計算するアルゴリズムは直接特許を取得しています。 また、カスタマイズ用の内部レジスタもあります。 BMP085に関しては 、彼は彼自身を生き延びたようです。 利点よりも欠点が多い。 データはそのまま出力されますが、高さのように計算する必要があります。 さらに、アルゴリズムは最も簡単ではなく、データシートにエラーがあります。 しかし、テスト結果によると、彼はおそらく2位です。
ソフトウェアに関しては、 HP203BとHP206Cは同じですが 、I2Cバス上のデバイスアドレスが異なります 。 HP203Bは、CSBレッグのレベルに応じて、ハードウェアを変更できます。 コマンドシステムは非常にシンプルです。 10個のみです。
- SOFT_RST-ソフトウェアリセット(すべての設定を上書き);
- ADC_CVT(010、3ビットOSR、2ビットCHNL) -変換要求、ここで:
- OSR-オーバーサンプリング;
- CHNL-温度または温度と圧力。
- READ_PT-温度と圧力を読み取ります。
- READ_AT-温度と高度を読み取ります。
- READ_P-読み取り専用の圧力。
- READ_A-読み取り専用の高さ。
- READ_T-読み取り専用温度。
- ANA_CAL-デバイスの内部キャリブレーション(電源を入れたときに環境条件の急激な変化が実行される場合に使用);
- READ_REG(10、6ビットレジスタアドレス) - アドレスの内部レジスタにデータを書き込みます。
- WRITE_REG(11、6ビットレジスタアドレス) -アドレスを持つ内部レジスタからデータを読み取ります。
OSR値は、平均化されるサンプル数を示します。 大きいほど、結果はより正確になりますが、変換時間と消費電力は大きくなります。
3.内部レジスタ
内部レジスタを使用すると、温度/圧力/高さの下限/上限を設定し、これらのイベント、および温度/圧力/高さ変換の完了イベントの割り込みを有効/無効にすることができます。 出力形式を設定するビットがあります:raw / not raw(人間)。 生データの処理方法とその処理方法は、データシートに指定されていません。 すべてのレジスタは次のとおりです。

- ALT_OFF-相対高さオフセット(cm)。
- PA_H / M / L_TH-それぞれ、最高、中間、最低圧力制限(1ビット= 0.02 mbar);
- T_H / M / L_TH-それぞれ、最高、中、最低の温度限界;
- INT_EN-対応する割り込みを有効/無効にします。
- INT_CFG -INT0またはINT1ピンでの対応する割り込みの出力。
- PA_MODE -0-圧力に関するイベント、1-高さ。
- INT_SRC-割り込みのステータスを示すフラグ(読み取り専用)。ここで:
- PA_RDY-読み取りの準備ができた圧力または高さ。
- T_RDY-温度は読み取り準備ができています。
- PA_TRAV-圧力または高さが中間境界を通過しました。
- T_TRAV-温度は中央の境界を通過しました。
- PA_WIN-圧力または高さが指定されたウィンドウのしきい値を超えました 。
- T_WIN-温度が指定されたウィンドウのしきい値を超えました。
- INT_DIR-しきい値イベントの詳細:
- T / P_WIN_DIR -0温度(圧力)以下、1-指定されたウィンドウより上;
- T / P_TRAV_DIR -0の温度(圧力)が上から下に中央のしきい値を超えた、1-下から上に。
- PARA -1ビットのCMPS_ENのみがフォーマットを担当するレジスタ:0-生データ、1-補正済み(人間)。
これらのレジスタを見ると、これらのセンサーは単純にクアドロコプター用に設計されていると結論付けることができます。 確かに、それ以上ではデバイスが上昇しない高さのしきい値、それ以下では揚力が十分ではない圧力、氷結が発生する温度を設定できます。 これまでにどれが機能するかを考える必要はありません。
4. I2Cプロトコル
通信プロトコルは標準のI2Cであり、2倍の単純さです。 すべての機会に4種類のチームがあります。 それらを考慮してください:
- タイプ1:
デバイスにコマンドを送信するために使用されます。 たとえば、温度変換の開始。
- タイプ2:
高さオフセットを記録するなど、デバイスの内部レジスタを記録するために使用されます。
- タイプ3:
デバイスからレジスタを読み取るために使用されます。 たとえば、ステータスフラグのレジスタを読み取ります。
- タイプ4:
行の3バイトまたは6バイトを読み取るために使用されます。 温度(3バイト)または気圧と高度(6バイト)の読み取りに使用されます。
さて、説明は、私が思うに、はっきりしていると、すでにはっきりしています:

5.テストと結果
テストは非常に簡単に実行されました。 1秒に1回、データがセンサーから読み取られ、UARTを介してPCに転送されました。 MatlabaのPCでは、mファイルが起動します。このファイルは、各センサーの温度/圧力/高さの値をグラフ形式で、時間を基準に表示するだけです。 HP203BおよびHP206Cセンサーは 、 BMP085 ( oss = 3 )とまったく同じように、圧力を最大精度( OSR = 4096 )で変換しました。
テーブルの上の部屋に横たわっている孤独なHP203B 。 チャート上の説明。

最も興味深いのは、私が寝ている間に、2から7に温度が0.15°Cだけ変化したことです。 あなたがその隣に座るとすぐに、身体からの放射線はすぐに感じられます。 上のグラフの小さなピークは、これらに正確に関連しています(離れる/来る)。

2つのセンサーHP203BおよびHP206Cを起動します。 両方とも同じ条件の下で横になっています。

ノイズレベルはすぐにわかりますが 、 HP206Cは目立って小さくなっています。 そして、ここにピンクの特別な愛好家のための証言の違いがあります:

BMP085を接続します 。

HP206Cを窓から取り出します。他の2つは窓辺にあります。 ウィンドウが閉じます。

HP206Cの温度変動は、午後に窓に届く太陽と木に関係しています。 次に、通常の動作を示すグラフをいくつか示します。











そして今、異常な動作。

孤独なHP203Bの拡大断片。 中央値フィルターまたはカルマンは損傷しません。

午前6時にHP206Cに何が起こったのか 、私には謎のままです。 ここでも、 HP206Cでの何か:

地獄はそれです:

同様の動作を次に示します。

再び奇妙な動作:

そして今、興味深いものについて:

気温と気圧の急激な上昇は、大気前線の通過に関連しています。 素人にとって、これは雷雨を伴う風雨の急激な上昇です。 しかし、環境パラメーターがほとんど変化しなかった拡大断片。 ノイズの比較:

彼はHP206Cで最も 少なく 、 BMP085は実際に追いついていることがわかり 、最悪の事態はHP203Bであることがわかります。 さて、最後のテスト。 その中で、私は単に部屋の中のすべてのものを上げ下げしました。 高さ:ベッド-天井-床-天井-ベッド。 HP206Cの固有ノイズが低いため、画像はより良く見えます。 温度差も面白いです。 上部は本当に暖かいです:

すべてのグラフで、異常な動作を除き、3つのセンサーすべての間に顕著な相関関係があります。 測定値の差は約1.5 hPa、最大2 hPaで、それぞれの記載された絶対誤差に適合します。 誰の証言が最も真実であるかを言うのは困難です。 これを行うには、参照水銀気圧計が必要です。 誰もが各センサーの分散または固有ノイズを評価できます。これは、記載されているパフォーマンスとも相関しています。 奇妙な振る舞いについては、彼らは常にHP206Cだけに関心があり、考えられる理由はそれが外にあったことだけでした。 ただし、これを確認するには、センサーを交換して測定する必要があります。 しませんでした
6.ドライバー
ターゲットデバイスはCortex-M3コアを備えたARMであったため、プロジェクトはCMSISとドライバーを使用して作成されました。 ただし、NXPだけでなくSTM32にも同じI2Cバスドライバーがあり、各プロセッサーファミリのすべてのCortex-M *コアに存在することを確認できます。 以下はGitHubへのリンクです。GitHubには、対象となるセンサーのCライブラリが配置されています。 * .hファイルは誰でも同じです。 違いは* .cファイルのみであり、 HP203Bの I2Cバス上のデバイスアドレスを変更するハードウェア機能に関連しています。 コードは可能な限りコメントされています。 各* .cファイルには、関数があります。
- write1byte -1バイトを送信(タイプ1);
- write2byte -2バイトを送信(タイプ2);
- read1byte -1バイトを読み取ります(タイプ3)。
- read3byte -3バイトを読み取ります(タイプ4)。
- read6byte -6バイトを読み取ります(タイプ4)。
これらの機能はハードウェアに依存しています。 別のカーネルまたはI2Cドライバーを使用する場合、転送のタイプとプロトコルに従ってタスクを実行する(I2C送信を実行する)限り、これらの機能を独自の方法で整理するだけで十分です。 次の関数は、I2Cパッケージを完全に定義する構造を初期化します。
/************************************************************ * Configure I2C transfer structure for HP203B * - this structure define the I2C transfer * - this function exist because we are using certain I2C driver ***********************************************************/ static void HP203B_TrasferCfgInit(void) { if(CSB_GPIO->FIOPIN & (1<<CSB_PIN)) TransferCfg.sl_addr7bit = 0x76; // Slave address of HP203B if CSB high else TransferCfg.sl_addr7bit = 0x77; // Slave address of HP203B if CSB low TransferCfg.tx_data = I2CMasterBuffer; // Pointer to transmit buffer // TransferCfg.tx_length = 0; // Number of bytes for write TransferCfg.tx_count = 0; // Counter for writing bytes TransferCfg.rx_data = I2CSlaveBuffer; // Pointer to receive buffer // TransferCfg.rx_length = 0; // Number of bytes for read TransferCfg.rx_count = 0; // Counter of reading bytes TransferCfg.retransmissions_max = 5; // Number of attempts TransferCfg.retransmissions_count = 0; // Counter of retransmissions TransferCfg.status = 0xF8; // Current status of I2C bus TransferCfg.callback = NULL; // Pointer to function that's executes after I2C transfer (NULL if none) }
その主なものは、バス上のデバイスのアドレスと送信/受信バイト数です。 上記の関数でこの量を決定します。 HP203Bセンサーの場合、2つのアドレス( 0x76または0x77)を選択できます。 ただし、 HP206Cの場合はBMP085の場合と同様に、常に0x76です。 さらに、関数HP203B_Initで 、 CSBレッグのレベルを決定し、選択に応じて、アドレスが自動的に入力されます。
HP203B
HP206C
7.結論
考慮される圧力センサーはそれほど悪くはなく、用途に適したニッチを見つけるでしょう。 そのため、 HP206Cは防水性と防塵性を備えているため、たとえば気象観測所でオープンに使用できます。 HP203Bのダイナミックレンジは広く 、サイズが小さいため、たとえば登山者向けの高度計としてモバイルデバイスに組み込むことができます。 両方のセンサーは、調整可能な高さ、圧力、温度のウィンドウを超えるとハードウェアの割り込みがあるため、クアドロコプターに最適です。 優れた機能は、追加のプロセッサコストを必要としない人間の出力形式です。 十分な数の取得値の移動平均を歩くことを除いて、宣言された10 cmの差を登録することは不可能です。 テクニカルサポートについてもお話しする必要があります。 このサイトには、これらのPIC用センサー、およびアセンブラーインサートを使用するためのコードが含まれているため、それらを理解する意欲を完全に失います。 データシートも非常に未加工です。 圧力のデータがどのような形で出てくるのかさえ知りませんでした。 私たちの意見ではmbarまたはGPAでは直感的に明確でしたが、ドキュメントにはこれについての言葉はありませんでした。 生データの処理方法に関する情報もありません。 製品が開発され、それによってドキュメントの品質が向上すると思います。 しかし、それにもかかわらず、私はセンサーが本当に好きでした、多分私の次の気象観測所はそれらを使うでしょう。