Hope Microelectronics 24ビットI2C圧力センサーHP203BおよびHP206C

物語は、 ホーパーフという中国の会社が新しい圧力センサーをテスト用に送ってくれたときに始まりました。 この記事では、センサーの主要な特性、機能、テスト、そして最も重要なこととして、グラフの形での結果とそれらの言葉による説明について説明します。 記事の最後に、これらのセンサーのドライバーがレイアウトされ、ハードウェアから可能な限り抽象化されています。

画像

左から:比較のためにBoschのHP206C、HP203B、およびBMP085(テストにも関与)。

内容:


  1. 試験回路
  2. 主な機能
  3. 内部レジスタ
  4. I2Cプロトコル
  5. テストと結果
  6. 運転手
  7. 結論


1.テスト回路


テストのために、回路を組み立てました:

画像

以下で構成されます


2.主な機能


以下の表は、比較のために、データシートのセンサーの主な特性を示しています。
特徴HP203BHP206CBMP085
測定圧力の範囲、mbar300〜1200700〜1100300〜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.10.01 / 0.010.01 /-
測定温度の範囲、°-20〜60-20〜600〜65
絶対精度、°(最良/最悪の場合)±0.3 /±1.0±0.3 /±1.5±0.5 /±2.0
最大解像度、°0.010.010.1
平均消費電流(1サンプル/秒)、µA(最小/最大)2.4 / 91.82.2 / 85.23/12

これらのセンサーの主な違いは何ですか? HP206C防水性は、雨/雪/霧の中で、気象観測所の一部として、またはクアドロコプターの高度計として機能することを意味します。 また、その高さの解像度は他のものよりも大きくなっています。 HP203Bは小さく、測定圧力範囲が広くなっています。 彼と一緒に、山でも。 したがって、モバイル機器の高度計として理想的です。 これらの2つのセンサーは、温度と圧力だけでなく、高さも人間の形で結果を提供し、プロセッサーの負荷を軽減します。 高さを計算するアルゴリズムは直接特許を取得しています。 また、カスタマイズ用の内部レジスタもあります。 BMP085に関しては 、彼は彼自身を生き延びたようです。 利点よりも欠点が多い。 データはそのまま出力されますが、高さのように計算する必要があります。 さらに、アルゴリズムは最も簡単ではなく、データシートにエラーがあります。 しかし、テスト結果によると、彼はおそらく2位です。
ソフトウェアに関しては、 HP203BHP206Cは同じですが 、I2Cバス上のデバイスアドレスが異なりますHP203Bは、CSBレッグのレベルに応じて、ハードウェアを変更できます。 コマンドシステムは非常にシンプルです。 10個のみです。


OSR値は、平均化されるサンプル数を示します。 大きいほど、結果はより正確になりますが、変換時間と消費電力は大きくなります。

3.内部レジスタ


内部レジスタを使用すると、温度/圧力/高さの下限/上限を設定し、これらのイベント、および温度/圧力/高さ変換の完了イベントの割り込みを有効/無効にすることができます。 出力形式を設定するビットがあります:raw / not raw(人間)。 生データの処理方法とその処理方法は、データシートに指定されていません。 すべてのレジスタは次のとおりです。

画像


これらのレジスタを見ると、これらのセンサーは単純にクアドロコプター用に設計されていると結論付けることができます。 確かに、それ以上ではデバイスが上昇しない高さのしきい値、それ以下では揚力が十分ではない圧力、氷結が発生する温度を設定できます。 これまでにどれが機能するかを考える必要はありません。

4. I2Cプロトコル


通信プロトコルは標準のI2Cであり、2倍の単純さです。 すべての機会に4種類のチームがあります。 それらを考慮してください:


さて、説明は、私が思うに、はっきりしていると、すでにはっきりしています:

画像


5.テストと結果


テストは非常に簡単に実行されました。 1秒に1回、データがセンサーから読み取られ、UARTを介してPCに転送されました。 MatlabaのPCでは、mファイルが起動します。このファイルは、各センサーの温度/圧力/高さの値をグラフ形式で、時間を基準に表示するだけです。 HP203BおよびHP206CセンサーはBMP085oss = 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ファイルには、関数があります。


これらの機能はハードウェアに依存しています。 別のカーネルまたは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では直感的に明確でしたが、ドキュメントにはこれについての言葉はありませんでした。 生データの処理方法に関する情報もありません。 製品が開発され、それによってドキュメントの品質が向上すると思います。 しかし、それにもかかわらず、私はセンサーが本当に好きでした、多分私の次の気象観測所はそれらを使うでしょう。

Source: https://habr.com/ru/post/J220017/


All Articles