› denko › file › s8120c.docx · Web view...
Transcript of › denko › file › s8120c.docx · Web view...
温度センサーの動作検証
目次1. 温度センサの概要.............................................................................................22. 動作検証に使用するマイコン.............................................................................33. マイコンと温度センサの接続.............................................................................44. ファームウェアの作成......................................................................................55. 動作検証(プログラムの実行)..........................................................................76. 温度センサの応用.............................................................................................97. まとめ..........................................................................................................10
1
1. 温度センサの概要
セイコーインスツル製の温度センサ(S-8120C)について、その動作を検証する。
温度センサの特徴について以下に示す。
(詳細はメーカ資料参照:
http://datasheet.sii-ic.com/jp/temperature_sensor/S8110C_8120C_J.pdf)
表 1-1 温度センサの特徴
# 特徴
1 温度精度が高い :±2.5(-30℃~+100℃)2 温度変化に対して、リニアな出力電圧が得られる。
-8.20 mV/°C typTa =-30°C: 1.951 V typ.Ta =+30°C: 1.474 V typ.Ta =+100°C: 0.882 V typ.
表 1-2 各端子の仕様
ピン番号 名称 用途
1 Vdd 電源 (2.4 V~10.0 V)2 VSS グランド
3 VOUT 出力電圧
図 1-1 外観写真
2
2. 動作検証に使用するマイコン検証に使用するマイコンはルネサステクノロジ製の H8/3694 とする。
図 2-2 H8/3694 基盤
3
3. マイコンと温度センサの接続H8/3694 と温度センサのポートは次の通り接続した。
表 3-3 回路接続
# H8/3694 側 温度センサ
1 PB01 VOUT
図 3-3 ユニバーサル基盤に配置
図 3-4 H8/3694 と接続
4
4. ファームウェアの作成 温度センサの出力電圧を検出するため、マイコン機能の AD コンバータを用いる。
温度センサの制御をする TThermometer クラス(C++)を作成した。
以下に処理内容を示す。
① TThermometer クラスの init メソッドで AD コンバータのレジスタを設定。
void TThermometer::init()
{
AD.ADCSR.BIT.ADST = 0x0; //AD 変換を停止
AD.ADCSR.BIT.CH = 0x0; //AN0 端子を使う
AD.ADCSR.BIT.CKS = 0x0; //変換時間 134 ステート
AD.ADCSR.BIT.SCAN = 0x0; //単一モード
AD.ADCSR.BIT.ADIE = 0x0; //AD 変換割り込みは使用しない
}
5
② getData メソッドで AD 変換した生データを返却する。
(AD コンバータの分解能は 10bit。引数の avg 回平均を取り、その値を返す。)
_UWORD TThermometer::getData( int avg )
{
_UWORD t = 0;;
_UDWORD sum = 0;
for( int i = 0; i < avg; i++ ) {
* AD 変換開始 */
AD.ADCSR.BIT.ADST = 0x1;
/* AD 変換完了待ち */
while( AD.ADCSR.BIT.ADF == 0 );
AD.ADCSR.BIT.ADF = 0x0;
/* 値を読む */
t = (_UWORD)AD.ADDRA;
/* 結果は 15 から 6 ビットなのでシフトする */
t >>= 6;
sum += t;
}
t = sum / avg;
return t;
}
③ AD コンバータで取得した値を温度に変換する toTemperture メソッドを作成。
_UWORD TThermometer::toTemperture( _UWORD data )
{
_SWORD temperture = 0;
_SWORD mv = 0;
/* ミリボルトに変換 */
mv = data * 4.8829;
/* -30℃で 1951mV で、1℃上がる毎に、-8.2mV になる */
temperture = (1951 - mv) / 8.2;
/* 測定下限の-30℃がオフセットなので、引く */
temperture -= 30;
6
return temperture;}
5. 動作検証(プログラムの実行) 室温、28.2℃の環境下でプログラムを実行した。
図 5-5 実行環境
7
AD コンバータから値を取得した値を表示。
図 5-6 AD コンバータから値を取得したところでブレーク
8
上記の図の通り AD コンバータからは、306 という値が取得できた。
マイコンの AD コンバータは 0~5 V を 10 ビットの分解能で測定するため、1=4.88mVであるから、306 は 1494mV である。
これを温度に計算すると、25.7℃になる。
25.7 = (1951(*1) – 1494 )/ 8.2(*2) – 30(*3)
(*1) 測定限界(-30℃)下での電圧
(*2) 1℃温度が上がる度に低下する電圧
(*3) 測定下限(-30℃)のオフセット
室温と若干、かい離しているが、空調を 26℃に設定しているので、時計に表示されて
いる温度が高めに表示されている可能性がある。
今回の実験では許容範囲として、OK とした。
6. 温度センサの応用 LCD ディスプレイに取得した温度を表示した。
(LCD の制御プログラムは過去に作ったものなので省略)
図 6-7 LCD に温度センサから取得した値を表示
9
7. まとめ マイコンとの接続は1つのアナログ入力ポートを使うだけなので、簡単であった。
今回のテストプログラムでは、AD 変換の完了待ち while 文の無限ループで行っている
が、H8/3694 のハードウェアマニュアルによると、AD 変換後に割り込みをかけること
が出来るので、AD 変換中は別の処理に CPU を明け渡す作りにするべきだと感じた。
10