MPL115A1 小型のSPIデジタル気圧計 -...
Transcript of MPL115A1 小型のSPIデジタル気圧計 -...
- 1/12 -
個人で使用するために翻訳した物です。翻訳間違いや誤字による、いかなる損害にも責任を負いません。日本語訳は、Freescale Semiconductor社の監修を受けておりません。 Rev.0 2013/ 5/19
Freescale Semiconductor MPL115A1 Rev. 7, 02/2013
データシート:技術データ
MPL115A1 小型のSPIデジタル気圧計MPL115A1は、低価格アプリケーションを対象とした、デジタルSPI出力を持つ絶対圧センサーです。
小型で5×3×1.2mmのLGAパッケージは、携帯用の電子機器やスペースに制約のある要件に、理想的に適しています。
低消費電力のアプリケーションに焦点を当てたとき、動作中(アクティブ・モード)の5μA、および、シャット・ダウン中(スリープ・モード)の1μAの低消費電流は不可欠です。
-40℃から+105℃までの広い動作温度範囲は、きびしい環境条件に適合しています。
MPL115A1は、50kPa(500hPa)から115kPa(1150hPa)までの正確な圧力測定を提供するために、調整ICとMEMS圧力センサーを採用しています。
内蔵されたADCは、SPIポートを介して圧力および温度センサーの読み取り値を、デジタル化された出力に変換します。
工場較正データは、内部に搭載されたROMに格納されています。
ホスト・マイクロ・コントローラは、未加工のセンサー出力と較正データを利用して、±1kPa(10hPa)の精度で補償絶対圧力を与えるために、補正アルゴリズムを実行します。
MPL115A1圧力センサーの、小型フォームファクター、低消費電力性能、精度、およびデジタル出力は、気圧の測定アプリケーションを最適化します。
特 徴・ホスト・マイクロが使用するための、プログラムされた校正係数と、デジタル化された圧力と温度の情報。
・工場出荷時にキャリブレーション(較正)。
・50kPa(500hPa)から115kPa(1150hPa)までの絶対圧力。
・1kPa(10hPa)の精度。
・2.375Vから5.5Vの電源。
・内蔵されたADC。
・SPIインターフェース。
・単調な(連続した)圧力と温度のデータ出力。
・表面実装のRoHS準拠パッケージ。
応 用 例・気圧測定(携帯用や卓上型)
・高度計
・気象観測所
・ハードディスク・ドライブ(HDD)
・産業用機器
・健康管理
・空調設備
オーダー情報
パッケージ ケース #の開口 圧力の種類 デジタルデバイス名
オプション 番号 なし 1つ 2つ ゲージ 差動 絶対 インターフェース
MPL115A1 トレー 2015 ・ ・ SPI
MPL115A1T1 トレーとリール(1000) 2015 ・ ・ SPI
- 2/12 -
1 ブロック図とピンの説明
図1.ブロック図とピン接続
表1.ピンの説明
ピン 名 称 機 能
1 VDD VDD 電源接続。 VDDの範囲は、2.375V~5.5Vです。
外付けコンデンサー。2 CAP 主な内部レギュレーター用の、デカップリング・コンデンサー出力。
1μFのコンデンサーを、グラウンドと接続してください。
3 GND グラウンド。
シャット・ダウン (スリープ)。デバイスを使用不可にするには、GNDと接続してください。
4 SHDN シャット・ダウンすると、部品の電源電流が1μAになり、すべての通信端子(CS、SCLK、DOUT、DIN)がハイ・インピーダンスになります。
通常動作にするには、VDDと接続してください。
5 CS CS チップ・セレクト線。
6 DOUT DOUT シリアル・データ出力。
7 DIN DIN シリアル・データ入力。
8 SCLK SPI シリアル・クロック入力。
- 3/12 -
2 機械的および電気的仕様
2.1 最大定格電 圧 (特に明記しない限り、GNDを基準として)
・VDD ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ -0.3V ~ +5.5V
・SHDN , SCLK , CS , DIN , DOUT ・・・・・・・・ -0.3V ~ VDD+0.3V
・動作温度範囲 ・・・・・・・・・・・・・・・・・・・・・・・・・・ -40℃ ~ +105℃
・保存温度範囲 ・・・・・・・・・・・・・・・・・・・・・・・・・・ -40℃ ~ +125℃
・過大圧力 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1000kPa (10000hPa)
2.2 動作特性
(VDD = 2.375V~5.5V、TA = -40℃~+105℃、特に明記しない限り) (標準値はVDD = 3.3V、TA = +25℃)
番号 項 目 記号 条 件 最小 標準 最大 単位
1 動作電源電圧 VDD 2.375 3.3 5.5 V
シャット・ダウン:(SHDN=GND) - - 1 μA
2 電源電流 IDD スタンバイ - 3.5 10 μA
平均:毎秒1回の測定 - 5 - μA
圧力センサー
50 115 kPa3 範 囲 -
500 1150 hPa
0.15 kPa4 分解能 - -
1.5 hPa
±1 kPa5 精 度 -20℃~85℃ - -
±10 hPa
変換時間 変換開始命令と、圧力と温度レジスター6 tc - 1.6 3 ms
(圧力と温度を変換開始) のデータが利用可能になる間の時間
シャットダウン・モード(SHDNがハイになる)7 起動時間 tw から出て、コマンドを発行するかデータを読 - 3 5 ms
むためにデバイスと通信するまでの時間。
SPI入力: SCLK、CS、DIN
8 SCLKクロック周波数 fSCLK (1) - - 8 MHz
9 低(Low)レベル入力電圧 VIL - - 0.3VDD V
10 高(High)レベル入力電圧 VIH 0.7VDD - - V
SPI出力: DOUT
VOL1 3mAのシンク電流で 0 - 0.411 低(Low)レベル出力電圧 V
VOL2 6mAのシンク電流で 0 - 0.6
12 高(High)レベル出力電圧 VOH1 3mAのソース電流で VDD-0.4 - - V
(1) 名目上の最大SPIクロック周波数。
- 4/12 -
3 機能と操作の概要
MPL115Aは、ユーザのアプリケーションで、ホスト(またはシステム)マイクロ・コントローラに接続します。
すべての通信は、SPIを介します。
一般的な使用順序は、以下の通りです:
最初の電源投入。
全ての回路素子が作動します。
SPIポートピンは、ハイ・インピーダンスです。そして、関連するレジスターはクリアされます。
その後、デバイスは待機モードに入ります。
係数データを読み出す
次にユーザは、決まった箇所にアクセスして、係数データを読み出します。
スレーブ・デバイス内の主回路は、読み取り作業の間、無効になっています。
係数は通常ホスト・マイクロ・コントローラのローカル・メモリーに保存されますが、いつでも再読み取りをすることができます。
係数の読み出しは、一度だけ実行されるかもしれません。
値はホスト・マイクロ・コントローラに保存されます。
デバイス内の係数は一定であり変化しないので、これを複数回 図2.手順のフローチャート読み取る必要はありません。
ただし、係数はデバイスによって異なり、別の部品には使用できないことに注意してください。
データ変換
これは、「CONVERT」コマンドを送るホストによって始められて、新しい圧力の読み込みが要求されるたびに実行される最初のステップです。
メイン・システムの回路は、コマンドに応じて起動(起きる)します。そして変換が完了した後に、結果が圧力と温度のADC出力レジスターに置かれます。
変換は、最大変換時間内tc(2.2 動作特性表の行6を参照)に完了します。
その後、デバイスは待機モードに入ります。
補償された圧力を読み出す
変換が完了するのに十分な時間が経過した後、ホスト・マイクロ・コントローラは、ADC出力レジスターから結果を読み取って、補償圧力(温度と圧力センサーの直線性の変化を補償される大気圧/気圧値)を計算します。
これは、補償方程式(詳細は後述)において、MPL115Aからの係数データと生のサンプリング圧力および温度ADC出力値を用いて行われます。
これが基準と真空との絶対圧測定であることに注意してください。
このステップからホスト・コントローラは、次の圧力測定値を得るためにデータ変換のステップに戻ってもよいし、シャット・ダウンのステップに行くこともできます。
シャット・ダウン
より長い不活動の期間、ユーザはSHDN入力のアサートで、システムの電力消費量を抑えるために、このピンをローに駆動することができます。
これは、すべての内部回路(いかなるレジスターも含む)から、電源を除去します。
シャット・ダウン状態では、圧力および温度レジスターはリセットされて、いかなる以前のADC出力値も失います。
このステップは、SHDNピンをハイにすることによって終了します。
最大起動時間tw(2.2 動作特性表の行7を参照)を待ちます。その後、データ変換ステップに移行することによって、別の圧力を読み取ることができます。
- 5/12 -
表2.デバイスのメモリーマップ
アドレス 名 称 説 明 SPIコマンド
0x00 Padc_MSB 10-bit 圧力 ADC 出力値 上位バイト 0x80
0x01 Padc_LSB 10-bit 圧力 ADC 出力値 下位バイト 0x82
0x02 Tadc_MSB 10-bit 温度 ADC 出力値 上位バイト 0x84
0x03 Tacd_LSB 10-bit 温度 ADC 出力値 下位バイト 0x86
0x04 a0_ MSB a0 係数 上位バイト 0x88
0x05 a0_ LSB a0 係数 下位バイト 0x8A
0x06 b1_ MSB b1 係数 上位バイト 0x8C
0x07 b1_ LSB b1 係数 下位バイト 0x8E
0x08 b2_ MSB b2 係数 上位バイト 0x90
0x09 b2_ LSB b2 係数 下位バイト 0x92
0x0A c12_ MSB c12 係数 上位バイト 0x94
0x0B c12_ LSB c12 係数 下位バイト 0x96
0x0C 予約済み ※
0x0D 予約済み ※
0x0E 予約済み ※
0x0F 予約済み ※
0x10 予約済み
0x11 予約済み
0x12 CONVERT 圧力と温度の変換を開始 0x24
※ これらのレジスターは、0x00にセットされます。これらは予約されており、以前は係数値のc11とc22として利用されました。それらは常に0x00でした。
16ビット未満の値については、下位のLSBはゼロです。
例えば、c12は14ビットで、次のように2バイトに格納されます:
c12 MS byte = c12[13:6] = [c12b13 , c12b12 , c12b11 , c12b10 , c12b9 , c12b8 , c12b7 , c12b6]
c12 LS byte = c12[5:0] & "00" = [c12b5 , c12b4 , c12b3 , c12b2 , c12b1 , c12b0 , 0 , 0]
3.1 圧力・温度と係数のビット幅仕様
以下の表は、補償アルゴリズムの初期係数ビット幅の仕様と、圧力と温度のADC値の仕様を明記します。
圧力・温度および補償係数の仕様
a0 b1 b2 c12 Padc Tadc
総ビット数 16 16 16 14 10 10
符号ビット 1 1 1 1 0 0
整数ビット 12 2 1 0 10 10
小数部分のビット 3 13 14 13 0 0
小数点に0を詰める 0 0 0 9 0 0
- 6/12 -
バイナリー・フォーマット定義の例:
a0 符号付き, 整数ビット = 12, 小数部分のビット = 3 : Coeff a0 = S I11 I10 I9 I8 I7 I6 I5 I4 I3 I2 I1 I0 . F2 F1 F0
b1 符号付き, 整数ビット = 2, 小数部分のビット = 13 : Coeff b1 = S I1 I0 . F12 F11 F10 F9 F8 F7 F6 F5 F4 F3 F2 F1 F0
b2 符号付き, 整数ビット = 1, 小数部分のビット = 14 : Coeff b2 = S I0 . F13 F12 F11 F10 F9 F8 F7 F6 F5 F4 F3 F2 F1 F0
c12 符号付き, 整数ビット = 0, 小数部分のビット = 13, 小数点に0を詰める = 9 : 係数 c12 = S 0 . 000 000 000 F12 F11 F10 F9 F8 F7 F6 F5 F4 F3 F2 F1 F0
Padc 符号なし,整数ビット = 10 : Padc U = I9 I8 I7 I6 I5 I4 I3 I2 I1 I0
Tadc 符号なし,整数ビット =10 : Tadc U = I9 I8 I7 I6 I5 I4 I3 I2 I1 I0
注:負の係数は2の補数表現でコード化されます。
3.2 補 償
10ビットの補償された圧力出力(Pcomp)は、以下のように計算されます:
Pcomp = a0 + (b1 + c12 * Tadc) * Padc + b2 * Tadc 方程式.1
ここで: Padcは、MPL115Aの10ビットの圧力ADC出力です。
Tadcは、MPL115Aの10ビットの温度ADC出力です。
a0は、圧力オフセット係数です。
b1は、圧力感度係数です
b2は、オフセット(TCO)の温度係数です。
c12は、感度(TCS)の温度係数です。
Pcompは、50kPaの入力圧力で0の値を生成し、115kPaの入力圧力で1023のフルスケール値を生成するでしょう。
115 – 50Pressure (kPa) = Pcomp * + 50 方程式.2
1023
3.3 評価手順・算術演算回路
以下はPcompのための計算の例です。補償された圧力が出力されます。
入力値は太字で示しています。
c12x2 = c12 * Tadca1 = b1 + c12x2a1x1 = a1 * Padcy1 = a0 + a1x1a2x2 = b2 * TadcPcomp = y1 + a2x2
これは、書式 y = a + b * x の乗算累積(MAC)操作の連続のように計算することができます:
多項式は、一連の3つのMACとして評価することができます。(方程式1):
Pcomp = a0 + (b1 + c12 * Tadc) * Padc + b2 * Tadc
実装の詳細な注意事項については、フリースケールのアプリケーション・ノートAN3785を参照してください。
- 7/12 -
SPIインタフェースSPIモードでMPL115Aは、8Mb/秒までのバス速度が可能な、半二重4線式SPIスレーブとして動作します。
SPI 4線式モード
4本の線でSPIインターフェースを構成します:SCLK、DIN、DOUTとCS
データはポートから2バイトの順列で読まれます:
アドレスにRead/Writeビットを加えたバイトをDIN上で受信した後に、DOUT上にデータ・バイトが送られます。
書き込みコマンドは、2バイトの順列です:
アドレスにRead/Writeビットを加えたバイトの後のデータ・バイトで、DIN上で両方とも受け取られます。
この例外は、「アクション」のアドレス「変換開始」です。
インターフェースは半二重ですから、送信と受信を同時にすることはできません。
最小限のデータ・セットアップ時間(変換開始を受け取り、DOUT上にデータの準備ができるまでの間隔)は、標準で1.6msです。
デバイスとのSPI転送は、CS線によって制御されます。
CSは、通信の開始時にマスターによってローに駆動されて、2バイト転送の間はローに保持されています。
SPIデータ転送は、SCLKの立ち上がりエッジで発生します。
DINとDOUT線上のデータは、SCLKの立ち下がりエッジで変えられて、SCLKの立ち上がりエッジで取り込まれます:
立ち上がりエッジは、「データが有効」な状態を与えます。
CSをハイにすることは、DOUTをハイ・インピーダンス状態に置きます。
CSがハイの間、DOUTはハイ・インピーダンスのままです。
CSがローで、DOUTに送信活動が無い間、DOUTはローに保たれます。
次のデータ転送は、次にCSがハイからローへの移行で始まります。
図10.SPI読み出し動作
図11.SPI書き込み動作
※ SPI線を他のSPIデバイスと共用する場合は、MPL115A1のCSをローにする前に、SCLKとDINをローにしておきます。
- 8/12 -
3.4 SPIデバイスの読み出し・書き込み操作
デバイスの読み出し/書き込み操作は、すべてメモリーに位置づけられています。
デバイス動作の例で"変換の開始"は、適切なメモリーアドレス位置に書き込むことによって制御されます。
すべてのメモリーアドレス位置は、6ビットです。(表2を参照)
8ビットのコマンドから成ります:
・Read/Writeの識別子である最上位ビットは、読み出し操作のための"1"と書き込み操作のための"0"です。
・6ビットのアドレス(表2から);
・最下位のビットは、使用しないでかまいません。(X)
デバイス書きコマンドは、表3に示されています。
表3.SPI書き込みコマンド
コ マ ン ド バイナリ HEX (1)
変換を開始 0010_010X 0x24
X = 未使用。
(1) コマンド・バイトは、変換開始の受け渡しを完了するために、SPIでのやり取りの一部として0x00とペアにする必要があります。 [コマンド]+[00]の2バイト。
各コマンドに応じてデバイスによって実行される動作は次のとおりです:
表4.SPI書き込みコマンドの説明
コマンド 実行される動作
・主な回路を起動します。・クロックを開始します。・供給安定時間を待ちます。・圧力センサ入力を選択します。
変換を開始 ・絶対的なセンサー励起を適用して、アナログからデジタル変換を実行します。
・温度入力を選択します。・アナログからデジタル変換を実行します。・圧力と温度レジスターに結果をロードします。・主回路とクロックをシャットダウンします。
SPI読み出し操作は、Readビットを"1"にセットした必要とされるアドレスを送信することによって実行されます。
SPI操作は、各バイトが個別に扱われることを必要とします。
すべてのデータは、最上位ビットが最初に送信されます。
表5.SPI読み出しコマンドの例
コ マ ン ド バイナリ HEX (1)
圧力の上位バイトを読み出す 1000_000X 0x80
圧力の下位バイトを読み出す 1000_001X 0x82
温度の上位バイトを読み出す 1000_010X 0x84
温度の下位バイトを読み出す 1000_011X 0x86
係数データバイト1を読み出す 1000_100X 0x88
X = 未使用。
(1) コマンド・バイトは、変換開始の受け渡しを完了するために、SPIでのやり取りの一部として0x00とペアにする必要があります。 [コマンド]+[00]の2バイト。
- 9/12 -
3.5 SPIのタイミング
表6と図3は、SPIシステムのタイミング必要条件を記述します。
表6.SPIタイミング
参照 機 能 記 号 最 小 最 大 単 位
1 動作周波数 Of - 8 MHz
2 SCLKの周期 tSCLK 125 - ns
3 SCLKのHighレベル時間 tCLKH 62.5 - ns
4 SCLKのLowレベル時間 tCLKL 62.5 - ns
5 CS-SCLKのセットアップ時間 tSCS 125 - ns
6 SCLK-CSのホールド時間 tHCS 125 - ns
7 Data-SCLKのセットアップ時間 tSET 30 - ns
8 SCLK-Dataのホールド時間 tHOLD 30 - ns
9 SCLK-Dataの有効期間 (SCLKのLowエッジ後) tDDLY - 32 ns
10 CS非アクティブ時間 tWCS 30 - ns
図3.SPIのタイミング図
3.6 係数のSPI読み出しの例
これらは、係数を読み込んで、圧力と温度変換を実行し、圧力と温度のデータを読み出す、MPL115A1SPIコマンドです。
MPL115A1を操作するための例として、一連のコマンド手順を与えます。
この集められたデータを利用して算出する補償圧力測定値の例は、浮動小数点表記で与えられます。
SPIコマンド (通信のために簡略化)
書き込みコマンド 「圧力と温度を変換」 = 0x24
読み出しコマンド 「圧力ADCの上位バイト」 = 0x80
読み出しコマンド 「圧力ADCの下位バイト」 = 0x82
読み出しコマンド 「温度ADCの上位バイト」 = 0x84
読み出しコマンド 「温度ADCの下位バイト」 = 0x86
読み出しコマンド 「係数データバイト1の上位バイト」 = 0x88
係数を読む:
[CS=0], [0x88], [0x00], [0x8A], [0x00], [0x8C], [0x00], [0x8E], [0x00], [0x90], [0x00], [0x92],[0x00], [0x94], [0x00], [0x96], [0x00], [0x00], [CS=1]
- 10/12 -
圧力と温度の変換を開始して、生の圧力を読み出す:
[CS=0], [0x24], [0x00], [CS=1], [3ms Delay][CS=0], [0x80], [0x00], [0x82], [0x00], [0x84], [0x00,] [0x86], [0x00], [0x00], [CS=1]
注: SPIのスレーブ側の最後のデータ・バイトを出力する各手順の終わりに追加された[0x00]。
図4.SPI係数読み出しのデータグラム
a0 係数 上位バイト = 0x41a0 係数 下位バイト = 0xDF a0 係数 = 0x41DF = 2107.875
b1 係数 上位バイト = 0xB0b1 係数 下位バイト = 0x28 b1 係数 = 0xB028 = -2.49512
b2 係数 上位バイト = 0xBEb2 係数 下位バイト = 0xAD b2 係数 = 0xBEAD = -1.02069
c12 係数 上位バイト = 0x38c12 係数 下位バイト = 0xCC c12 係数 = 0x38CC = 0.00086665
圧力と温度変換開始のコマンド 0x24
図5.SPI変換開始のデータグラム
図6.SPI結果読み出しのデータグラム
圧力 上位バイト = 0x67圧力 下位バイト = 0xC0 圧力 = 0x67C0 = 0110 0111 11 00 0000 = 415 ADCカウント
温度 上位バイト = 0x80温度 下位バイト = 0x40 温度 = 0x8040 = 1000 0000 01 00 0000 = 513 ADCカウント
- 11/12 -
3.7 浮動小数点表記の圧力補償計算の例。
a0 係数 = 2107.875b1 係数 = -2.49512b2 係数 = -1.02069c12 係数 = 0.00086665圧力 = 415 ADCカウント温度 = 513 ADCカウント
圧力補償:
Pcomp = a0 + (b1 + c12 * Tadc) * Padc + b2 * Tadc
セクション3.3に示さる評価順序を使用します:
c12x2 = c12 * Tadc = 0.00086665 * 513 = 0.44459
a1 = b1 + c12x2 = -2.49512 + 0.44459 = -2.05052
a1x1 = a1 * Padc = -2.05052 * 415 = -850.96785
y1 = a0 + a1x1 = 2107.875 + (-850.96785) = 1256.90715
a2x2 = b2 * Tadc = -1.02069 * 513 = -523.61444
PComp = y1 + a2x2 = 1256.90715 + (-523.61444) = 733.29270
115 – 50Pressure (kPa) = Pcomp * + 50
1023
115 – 50= 733.29 * + 50 = 96.59kPa
1023
4 ハンダ推奨事項
1.約217℃融点のSACはんだ合金(すなわち、Sn-Ag-Cu系)を使用してください。それは、SAC305(すなわち、Sn-3.0 wt.% Ag-0.5 wt.% Cu)を使用することをお勧めします。
2. リフロー・立ち上げ速度:2~3C/s・予熱フラット(浸し):110~130秒。・リフローのピーク温度:250℃~260℃(正確なSAC合金の組成に依存)。・217℃を上回る時間:40~90秒(ボードの種類、リフローで基板/量の熱量に依存する)。・立ち下げ速度:5~6C/s・活性リフロー環境(5~15ppm程度O2レベルで)を使用。
注: デバイスのストレス・レベルと信号のオフセットは、ボードタイプ、ボード中心素材、板厚と金属仕上に依存します。
5 推薦する取り扱い
吸引のピック・アンド・プレース・ツールで、MPL115A圧力センサーを扱うことをお勧めします。MPL115A圧力センサーを移動するために利用される鋭利な物は、小さな露出開口に異物/ツールによる損傷の可能性を高めます。センサー・チップは、光露出に敏感です。開口穴を通して直接の光露出は、圧力測定の異なった精度をもたらすかもしれません。通常動作時は、開口にそのような露出を避けてください。
6.ハンダ付け/ランディング・パッド情報
LGAパッケージは、RoHS規格に準拠しています
これは、圧力検出素子を損傷したり寿命を短くすることがある、化学薬品と高い圧力にさらす洗浄を減らすために、無洗浄ソルダーペーストを使用することをお勧めします。
* 以下、英文マニュアルを参照 *
- 12/12 -
サンプル・プログラム
Coding Section
/*********************************************************\* ADCと係数値の最後のセットから、補償された圧力PCompを計算します。\*********************************************************/sint16 mpl115a1_CalculatePComp(void){uint16 Padc, Tadc;sint16 a0, b1, b2, c12;sint16 PComp;// extract adc outputsPadc = (mpl115a1_regs[0x00] << 8) | mpl115a1_regs[0x01];Tadc = (mpl115a1_regs[0x02] << 8) | mpl115a1_regs[0x03];// extract coefficientsa0 = (mpl115a1_regs[0x04] << 8) | mpl115a1_regs[0x05];b1 = (mpl115a1_regs[0x06] << 8) | mpl115a1_regs[0x07];b2 = (mpl115a1_regs[0x08] << 8) | mpl115a1_regs[0x09];c12 = (mpl115a1_regs[0x0A] << 8) | mpl115a1_regs[0x0B];PComp = calculatePCompShort(Padc, Tadc, a0, b1, b2, c12);return (sint16)PComp;}/*********************************************************\* 補償されたPComp値から、1/16kPaの圧力を計算します。\*********************************************************/uint16 mpl115a1_CalculatePressure(sint16 PComp){sint32 Pressure;// 最後のステップでは、内部のPComp値をkPaの単位に変えることです。// Pressure = PComp ∙ ((115.0 ‐ 50.0) / 1023.0) + 50//// 浮動小数点除算の使用は、以下の近似を用いて除くことができます:// Pressure = ( ( PComp ∙ 1041 ) >> 14 ) + 50//// この実装例では、最終的な圧力値を4ビットの小数部で報告されることに注意してください。Pressure = ((((sint32)PComp) * 1041) >> 14) + 800;return (uint16)Pressure;}
/*********************************************************\* 簡潔なバージョンを使用して、補償された圧力PComp値を算出します。\*********************************************************/sint16 calculatePCompShort(uint16 Padc, uint16 Tadc, sint16 a0, sint16 b1, sint16 b2, sint16 c12){sint32 c12x2, a1, a1x1, y1, a2x2, PComp;// Pressure calculation (short)//=============================// 圧力計算機能のこのバージョンは、ロングバージョンと同じ機能を有し、全く同じ結果を得るが、// より簡潔に実現されます。Padc >>= 6; //Note that the Padc is the raw value from Pegasus >>6 since its 10 bit unsignedTadc >>= 6; //Note that the Tadc is the raw value from Pegasus >>6 since its 10 bit unsignedc12x2 = (((sint32)c12) * Tadc) >> 11; // c12x2 = c12 * Tadca1 = (sint32)b1 + c12x2; // a1 = b1 + c12x2a1x1 = a1 * Padc; // a1x1 = a1 * Padcy1 = (((sint32)a0) << 10) + a1x1; // y1 = a0 + a1x1a2x2 = (((sint32)b2) * Tadc) >> 1; // a2x2 = b2 * TadcPComp = (y1 + a2x2) >> 9; // PComp = y1 + a2x2return (sint16)PComp;}