« がじぇるねGR-SAKURAがリリースされました | トップページ | MR-RX47Tを入手! »

2012.08.01

GR-SAKURAで周りの温度を測ってみる

RX63Nの大きな特徴のひとつに、温度センサを内蔵している、というのがあります。
(我ながら、なんてマイナーな機能を紹介するんだ)

そこで、GR-SAKURAで周りの温度を測ってみることにしました。

作ったプログラムはこんなかんじ。

#include <rxduino.h>
#include <iodefine_gcc63n.h>
int main() {
    int i;
    pinMode(PIN_LED0, OUTPUT);
    digitalWrite(PIN_LED0, 1);
    Serial.begin(38400,SCI_AUTO);
    Serial.setDefault(); // printf等の標準出力にする
    digitalWrite(PIN_LED0, 0);
    adc_init(); // 内蔵ADCを初期化する
    S12AD.ADSSTR23.WORD = 0xff14; // ADCのサンプリングタイミングを遅くする
    while(1) {
        int val= adc_sample(100); // 温度を測る
        printf("val=%d ",val); // 表示
        double Vs = val * 3.3 / 4096; // 電圧に換算
        double V1 = 1.26; // 25℃での電圧
        double Slope = 0.0041; // V /℃
        printf("Vs=%f[V] V1=%f[V] Slope=%f ",Vs,V1,Slope);
        double T = (Vs - V1) / Slope + 25;
        printf("T=%f \n",T);
        delay(100);
    }
}

これを実行すると、こんな結果になりました。

val=1651 Vs=1.330151[V] V1=1.260000[V] Slope=0.004100 T=42.110081
val=1651 Vs=1.330151[V] V1=1.260000[V] Slope=0.004100 T=42.110081
val=1651 Vs=1.330151[V] V1=1.260000[V] Slope=0.004100 T=42.110081
val=1653 Vs=1.331763[V] V1=1.260000[V] Slope=0.004100 T=42.503094
val=1650 Vs=1.329346[V] V1=1.260000[V] Slope=0.004100 T=41.913589
val=1652 Vs=1.330957[V] V1=1.260000[V] Slope=0.004100 T=42.306602
val=1653 Vs=1.331763[V] V1=1.260000[V] Slope=0.004100 T=42.503094
val=1653 Vs=1.331763[V] V1=1.260000[V] Slope=0.004100 T=42.503094
val=1657 Vs=1.334985[V] V1=1.260000[V] Slope=0.004100 T=43.289116
val=1653 Vs=1.331763[V] V1=1.260000[V] Slope=0.004100 T=42.503094
val=1653 Vs=1.331763[V] V1=1.260000[V] Slope=0.004100 T=42.503094
val=1651 Vs=1.330151[V] V1=1.260000[V] Slope=0.004100 T=42.110081

このプログラムの動作を簡単に説明します。

まず、RX63N内蔵の温度センサは内部でADCにつながっていて、外付け部品が何もなくても内蔵温度センサの出力値が読めるようになっています。

温度センサの出力値をよむには、adc_init() という関数をコールしたあと、 S12AD.ADSSTR23.WORD = 0xff14; とします。

S12AD.ADSSTR23.WORD = 0xff14; というのが何をしているかというと、サンプリングの速度を遅くするための設定です。内蔵温度センサが結果を出力するには5μ秒かかりますが、内蔵ADCは1usで変換するので、早すぎて出力が確定するまえに読んでしまうからです。

ADSSTR23はサンプリング時間を調整するレジスタで、これを書き換えることで、サンプリング時間を長くすることができ、正確な温度が測れるようになります。

測ったADCの値は、3.3をかけて4096で割ることで電圧に換算できます。

温度と電圧は一次関数なので、

T=(Vs-1.26)/0.0041 + 25;

で求められます。上の定数は、25℃のとき温度センサは1.26[V]を出力し、傾斜は0.0041であるということです。この値はデータシートの紙上の値なので、実測値とは異なる可能性はあります。

±1℃程度の精度だそうですが、こんな簡単に温度が求まってしまうのですから、RX63Nは面白いと思います。

ちなみに、室温は30度くらいだと思いますが、測っているのはICのチップの温度です。IC自体がそれなりに発熱しているようです。電源投入直後は36℃でした。ドライヤーやハンダごてで炙ると80℃くらいまでいきました。

炙ったときの感触から、下の写真の赤丸をつけたあたりに温度センサがあるのではないかと推測できました。

Tempe

まぁ、いろいろ面白いICだと思います。

|

« がじぇるねGR-SAKURAがリリースされました | トップページ | MR-RX47Tを入手! »

コメント

上記の記事ですが、英語版Rulzで紹介してよろしいでしょうか?
http://renesasrulz.com/app_kits_and_demo_boards/gadget_renesas_user_forum/

投稿: GR Admin | 2013.03.29 11:41

コメントを書く



(ウェブ上には掲載しません)




« がじぇるねGR-SAKURAがリリースされました | トップページ | MR-RX47Tを入手! »