60歳からの電子工作ノート

生涯学習として取り組んでいます。

RL78/G16 CPUボートの試作(ROMのチエックサム)

  ROMのチェックサム(CRC)のテストプログラムを作成しました。また定数(const)と変数初期値のメモリ配置について調べました。以下の資料を参考にしています。

資料1*1、資料2*2、資料3*3、資料4*4、資料5*5

CRCの比較

 マイコンのプログラムが壊れていないかを確認するために、ビルド時に作成したCRCと、マイコンで計算したCRCを比較します。

図1. CRCの比較

ここでは セクション .textと.textfの範囲のCRC値を計算します。CRC値の出力アドレスは、0x03DFEとしています。

図2. CRC計算範囲と格納位置
CC-RLの設定

CRCを計算するために、CC-RLのヘキサ出力オプションで設定します。

1) CRC値の出力アドレス

0x03DFEとしました。(ROMが16KBであり、 デバック用のモニタプログラム(.monito2)が0x03E00~0x03FFFを占有しているため)

図3. 出力アドレス

2) 計算範囲

セクション .textと .textf としました。

図4. 計算範囲

3) 演算方式
(汎用CRC}を選択します。

図5. 演算方式

4) 初期値

 初期値は0x0000としました。

図6. 初期値

5) CRC演算結果と出力アドレス表示

「はい」とすることで、ビルド後に表示されます。

図7. 演算結果と出力アドレス表示

図8. ビルド後の表示

6) CRC値をソースファイルに転記します。

図9. ソースファイルへ記入
CRCテストプロラムと動作確認

汎用CRCで計算したCRCと、ビルド時のCRCが一致すれば、 rom_crc_16_err = 0となります。CRCが不一致の場合、rom_crc_16_err = 1 となり、ALM LEDが点灯します。

(注: デバック時にソフトウェアブレークを入れると、コードが変わるためCRCが一致しません。ブレークせずに実行するか、ハードウェアブレークで確認します。)

 

図10. テストプログラムと動作確認

CRCを計算するrom_crc_chk ()はアセンブラ(インラインアセンブラ)です。

CRC演算機能 (資料1 「20.3.1 CRC 演算機能(汎用CRC)」)を使用しています。

図11. CRCの計算
定数(cosnt)と変数初期値の配置アドレス

const宣言された定数は、ROMのアドレス0x00800より入っています。

またミラー領域(0xF0800~0xF3FFF)に反映されています。

図12. const宣言された定数の場所とミラー領域への反映

初期値付きグローバル変数の初期値は、ROMのアドレス0x00080より入っています。

また、RAMのアドレス0xFF700にも格納されています。(スタートアップルーチンでコピー)

図13. 初期値付きグローバル変数の値のある場所

マップファイルでセクションとアドレスを確認できます。

図14. マップファイル

ROM書き込み用のファイル

 フラッシュプログラマ等でROMに書き込む際のファイル形式は、デフォルトでは「モトローラ S形式」となっています。ビルド後にCS+で見ることができます。

図15. 出力形式の指定とモトローラS形式のファイル

作成されたモトローラS形式のファイルの内容です。書き込みアドレスとデータが確認できます。

図16. ROM書き込み用 モトローラS形式
ファイル一覧

図17. ファイル一覧

登録場所: https://github.com/vABCWork/rl78_test_crc

・開発環境

無償評価版 CS+ for CC V8.11.00 [30 Nov 2023]

CC-RL V1.13.00

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10     2023.08

*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13  2023.12

*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」Rev.2.30  2022.04

*4:資料4「RL78ファミリ用Cコンパイラパッケージ(CC-RL) アプリケーションガイド プログラミング・テクニック編」Rev.1.0  2018.11.26

*5:資料5「ダウンロードした.hexファイルのCRC演算期待値が異なる [RL78]」 https://ja.na4.teamsupport.com/knowledgeBase/17796205

RL78/G16 CPUボートの試作(スタートアッププログラム)

試作したRL78/G16のCPUボードのスタートアップ処理です。

以下の資料を参考にしています。

資料1*1、資料2*2、資料3*3、資料4*4、資料5*5

 

スタートアップ処理

  CS+の新規プロジェクト作成でスタートアッププログラムができますが、汎用性が高く難しいので、ここでは新たに作成しました。電源ONから main()起動までの処理です。

1) オプション・バイト(0x0000C~0x000C3)のデータよりリセット解除電圧に達したらリセットを解除する。(資料1の「19.3 セレクタブル・パワーオン・リセット(SPOR)回路の動作」)

2)リセットベクタ(0x00000)に書かれているアドレスから実行

3)スタックポインタのセット

4)RAM領域の初期化

5)初期値付きグローバル変数の初期値をRAM領域へコピー

6) main()の実行

(.sdataセクションを使用しない、saddr配置変数(0xFFE20~0xFFF1Fに配置される初期値付き変数、初期値なし変数)を使用しない前提で作成しています。)

 

図1. スタートアップ処理

 

オプションバイトの設定

動作周波数やリセット解除電圧を設定します。ソースファイルで設定しています。

本実験では電源電圧を5[V]としています。このためSPOR検出電圧を、立ち上がり電圧=4.28[V],立ち下がり電圧=4.20[V]としました。(本設定では電源電圧=3.3[V]とした場合、リセットが解除されずCPUは動作しません。)

図2. オプションバイトの設定
RAM領域の初期化

RAM(アドレス _RAM_ADDR_START~_STACK_ADDR_START)を0で初期化します。

図3. RAM領域の初期化
変数初期値のコピー

ROM上の.data領域にある初期値付き変数の初期値を、RAM上の.dataR領域コピーします。(変数のため、初期値を書き換える場合があるため)

図4. 変数初期値のコピー


開発ツールの設定

CC-RL ビルドツールの設定

オンチップデバックとRAMモニタのため、リンクオプション→デバイスで設定します。

本実験では、ユーザ・オプション・バイトはファイルで設定します。

図5. オンチップデバックとRAMモニタの設定

セクションは自動配置(デフォルト)設定です。

図6. セクション配置指定

 ROMからRAMへマップするセクションを編集します。

(セクション .sdataは使用しないため)

図7. ROMからRAMへマップするセクション

また関数や変数の配置を知るために、マップ情報を出力すると便利です。

図8. mapファイル表示用

E2 Liteデバックツールの設定

リセット解除後から表示:「CPUリセット後に指定シンボルまで実行する」=いいえ

実行中の変数表示:実行中のメモリアクセス「実行を一瞬停止してアクセスする」=はい

図9. E2-Liteの設定


スタートアッププログラム

スタートアップだけのプログラムです。start_up.cは cのファイルですが中身はアセンブラで記述しています。(インラインアセンブラ)

iodefibne.hは、RL78/G16(ROM16KB)のR5F121BAxFP(32pin)の「新規プロジェクト作成」で作成されたファイルです。

図10. スタートアッププログラム

 

ファイル一覧

図11. ファイル一覧

GitHub登録場所: https://github.com/vABCWork/rl78_startup

 

・開発環境

無償評価版 CS+ for CC V8.11.00 [30 Nov 2023]

CC-RL V1.13.00

ダウンロード後の状態

スタートアッププログラムをダウンロードした状態です。CC-RLの設定「リンクオプション→デバイス」で、オンチップデバック、RRM、DMMを設定すると、モニタ用のプログラムがユーザのROM領域に書き込まれます。(資料1「23.4 ユーザ資源の確保」)

リセットベクタはモニタプログラムの先頭を示しています。0x00002,0x00003には、リンクオプションで設定した、RRM/DMM機能用ワーク領域開始アドレスの下位16ビットが書き込まれています。0x000ceからモニタプログラム( セクション名 .monitor1)が10バイト入ります。0x000d8が、実際のプログラムの開始です。

図12. ダウンロード後(「表示」→「逆アセンブル」→「逆アセンブル1」)


その他


メモリマップ(デバックモニタあり)

オンチップデバック、RRM、DMMを設定してデバック用モニタを含めた場合のメモリマップです。(資料1の「23.4 ユーザ資源の確保」)

図13. メモリマップ(ROM 16[KB]版 デバックモニタあり)

ミラー領域 

資料4に説明されています。ここでは図解にしました。

ミラー領域とは、ROMに書かれている定数(const宣言)を、読み出す際にプログラムサイズを少なくするためにデータ領域から読み出しできるようにした領域です。

RL78のアドレス空間は 1Mbyte(0x00000~0xFFFFF)あり、アドレスの指定には20ビット必要です。-----①

データ読み出しには、読み出しアドレスをレジスタで指定しますが、レジスタは16ビットのため、指定できるアドレスは0x0000~0xFFFF(64Kbyte)の範囲です。-----②

図14-1. ミラー領域の説明(1/3)

 ESレジスタで上位4ビットを指定すれば、全アドレス空間を指定できますが、
コードサイズが大きくなります。-----③

図14-2. ミラー領域の説明(2/3)

このためRL78では、0x00000~0x0FFFFにあるプログラムコードと、0xF0000~0xFFFFFにあるデータは、下位16ビットのアドレスだけで読み出しできるよう設計しました。-----④

定数データ(const)はROMに書き込む必要があるため、コード領域に置かれますが、データを16ビットのアドレスでReadするには、0xF0000~0xFFFFFに置く必要があります。
ミラー領域(0xF0800~0xF7FFF)を持つことで、これらのROMデータも16bitのアドレス指定でReadできるので、プログラムサイズも小さくなります。-----⑤

図14-3. ミラー領域の説明(3/3)
起動時にフラッシュROMを消去する (E2 Lite設定)

E2 Liteには、「起動時にフラッシュROMを消去する」設定があります。

図15. 起動時にフラッシュROMを消去する

これは次の状況で「はい」を選択しました。

CPUのフラッシュ上のオプションバイトのSPOR検出電圧設定(0x 000c1) = 0xF3(立ち上がり電圧=4.28[V],立ち下がり電圧=4.20[V])が書き込まれてる状態で、
電源電圧=3.3[V]とした場合、CPUのリセットは解除されず動作しません。
「はい」とすれば、E2接続時にフラッシュを消去してくれます。

図16. CPUがリセット解除できない状況
プロジェクトの作成法

CS+のメニュー「ファイル」→「新規作成」→「新しいプロジェクト作成」→マイコン選択→RL78/G16(ROM16KB)のR5F121BAxFP(32pin)→プロジェクト名入力→作成ボタン によりファイルを作成します。本実験で必要なファイルは、iodefine.hだけです。

図17. プロジェクト作成法

 

 

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10 2023.08

*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13 2023.12

*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」 Rev.2.30 2022.04

*4:資料4 「FAQ 1010743 : RL78/G13のメモリ・マップをみると「Mirror」とあります。これは何のためのものですか?」 https://ja-support.renesas.com/knowledgeBase/17794735

*5:資料5 「絵解き マイコンC プログラミング教科書 第1版」 CQ出版社

RL78/G16 CPUボートの試作(CPUボード)

   ルネサスの16ビットマイコンRL78/G16のCPUボードを試作し、静電容量式タッチセンサとステッピングモータの実験を行いました。以下の資料を参考にしています。

資料1*1、資料2*2、資料3*3

 

構成図

図1. 構成図
CPUボード

図2. CPU端子機能割り付け表

図3. CPUボード回路図 (1/2)

図4. CPUボード回路図(2/2)

図5. 部品のレイアウトとパターン

図6. フットプリント

図7. CPUボード

図8. CPUボード(部品実装後)

図9. 部品表
はんだ付け

チップ抵抗、チップコンデンサは 0402(1005 メートル法)サイズです。
今回は、小手先にPX-60RT-1.2Dを使用しました。

図10. チップ部品のはんだ付け

図11. はんだ付け機材

 

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10 2023.08

*2:資料2「RL78/G16 Fast Prototyping Board  ユーザーズマニュアル」 Rev.1.00 2023.05

*3:資料3「静電容量センサマイコン 静電容量タッチ電極デザインガイド」R30AN0389JJ0200 Rev.2.00

「熱電対付きサーモグラフィの試作(モニタソフト)」

MLX90640をモニタするパソコンソフトです。

 

 

概要

MLX90640の補正データとピクセルデータをマイコンから読み出し、各ピクセルの温度を計算してヒートマップ表示します。温度計算のための処理は、Melxis提供のドライバ( 資料1*1 )をC#で記述しています。

また熱電対で測定した温度を表示します。

図1. モニタソフト (MLX90640+熱電対)

画面と操作

 ボタン「Serial Port」でCOMポートを開きます。「Start」でモニタを開始します。

ピクセルのデータを収集後に、「Scott Plot」、「Temp」ボタンを押すと、ヒートマップが表示されます。タイプはTurbo,Blues,Grayscaleが選択できます。

図2. メイン画面

図3. シリアルポートと送受信データ表示画面

図4. ヒートマップ


処理概要

データ

・データ型(構造体)

RAMData:MLX90640のRAM領域とレジスタ

ToData:補正演算で求めた各ピクセルの温度

CalibData:MLX90640のEEPROM領域(補正データ)

・主なグローバル変数

sendBuf: 送信バッファ

rcvBuf: 受信バッファ

ram_list: MLX90640のRAM領域とレジスタ

calib_list: MLX90640のEEPROMデータ

to_list: 測定対象物の全ピクセルの温度

to_list_0: Subpage0のピクセルの温度

to_list_1: Subpage1のピクセルの温度

eeData: MLX90640のEEPROMデータ

frameData: MLX90640のRAM,レジスタデータ

・データグリッド

Calib_File_DataGrid : EEPROMデータ用(calib_list の内容表示)

図5. データグリッドによる表示(calib_list)

Pixel_File_DataGrid : RAM,レジスタデータ用

図6. データグリッドによる表示(ram_list)

To_DataGrid : 各ピクセルの温度用

図7. データグリッドによる表示(to_list)
フロー図

図8. 初期化とボタン、タイマ処理

図9. データ受信処理

環境

Windows 11 Pro , 22H2      .NET Framework 4.8 
Microsoft Visual Studio Community 2022 (64 ビット) – Current Version 17.6.3

WPF アプリ(.NET Framework)    ( C#,XAML,Windows,デスクトップ)
ScottPlot 4.1.67 

ファイル一覧

図10. ファイル一覧

 MainWindow 以外のファイルは別Windowになっています。メインウインドウに追加して使用します。(参考:https://vabc.hatenadiary.jp/entry/2021/11/21/085446)

 ScottPlotのパッケージのインストールが必要です。

 

ファイルの登録場所: https://github.com/vABCWork/WPF-Monitor_MLX90640

実験の様子

 測定対象物は黒く塗ったアルミ板です。下からペルチェ素子で加熱または冷却を行っています。

図11. 実験の様子(ペルチェ素子)

 ガスコンロで水を温めた写真です。

図12. 実験の様子(水を沸かす)

補足:

 試作機の基板の取り付けに、タミヤの「楽しい工作シリーズNo.98  ユニバーサルプレートセット」を2つ使用しました。立体構造が手軽につくれて便利です。

図13. 試作機

 

*1:資料1「MLX90640 32x24 IR array Driver (REVISION 1 - OCTOBER 31, 2022)」  https://github.com/melexis/mlx90640-library

「熱電対付きサーモグラフィの試作(ファームウェア 2/2)」

マイコンのAD変換、シリアル通信、ファイル一覧とルネサスフラッシュプログラマについて書いています。

AD変換

熱電対による温度測定のためのAD変換です。100msec毎にAD変換を開始します。

図1. A/D 変換のタイミングと割り込み処理 (DSAD0)

図2. A/D変換割り込みとスキャン終了割り込み

シリアル通信(SCI1)

ボーレートとデータフォーマット

 資料1*1の「28.2.11 ビットレートレジスタ(BRR)」「表28.10」より、ボーレート (B)=1Mbpsとした場合のレジスタBRRへの設定値(N)は、

 N=  \dfrac{ 32  \times 10^{6} } { 64 \times 2^{-1} \times 10^{6}  } - 1  = 0

誤差(E)は、

 E =  \{\dfrac{ 32  \times 10^{6} } { 10^{6} \times  64 \times 2^{-1} \times ( 0 + 1)  } - 1 \}  \times 100 = 0    となります。

(PCLK = 32 [MHz],  n = 0 の場合)

図3. レジスタ設定値とボーレート

 調歩同期式シリアル通信のデータフォーマットは、データ長8bit,パリティなし,1Stopビットとします。送信時には b0から送信されます。(資料1. 「28.3 調歩同期式モードの動作」)

図 4. データフォーマット
受信と送信の例

図5. マイコン受信と送信例 (1 [Mbps])
送受信処理

送受信にははDMAを使用します。資料 2*2 と同じです。

コマンドとレスポンス

パソコン側からのコマンドを受信するとレスポンスを送信します。

補正データ読み出し用とモニタ用があります。

図6. 補正データ(EEPROM)読み出しコマンドとレスポンス

図7. モニタコマンドとレスポメモリマップ

使用メモリとマップファイル

ROMは約19[Kbyte]、RAMは約24[Kbyte] 使用しています。

スタック領域に約3.5[Kbyte]確保しています。これはMLXのライブラリィのためです。

図 8. mapファイルとtotalサイズ

CS+のスタック見積もりツール(CS+のメニュー ツール→スタック見積もりツールの起動)により各関数の使用スタックサイズがわかります。

図9. MLXのライブラリィ関数のスタックサイズ

ファイル一覧

図10. ファイル一覧

登録場所: https://github.com/vABCWork/test_MLX90640


ルネサスフラッシュプログラマのテスト

 CS+で作成したプログラムをエミュレータを使用せずに、ルネサスフラッシュプログラマで書き込みます。CPUボードのJ9をCloseして、Bootモード(SCIインターフェイス)にします。USBシリアル通信でパソコンと接続します。

図11. フラッシュプログラマによる書き込み

手順:

1)  ルネサスフラッシュプログラマで新しいプロジェクトを作成します。

マイクロコントローラ: RX200

プロジェクト名: FlashTest1

作成場所:  を入力します。

 通信のツールは 「COM port」を選択します。

図12. プロジェクトの作成

2)CPUボードとUSBケーブルを接続。CPUボードの電源をONし、「ツール詳細」を押します。選択しOKボタンを押します。その後、「接続」ボタンを押します。

図13. COMポートによる接続

3)書き込みするプログラムファイル(mot形式)を選択します。その後、「スタート」ボタンを押します。異常終了となった場合は、再度CPUボードの電源を投入しやり直します。

図14. プログラムの書き込み 異常と正常

4)CPUボードのJ9をOpenし、「シングルチップモード」にしてCPUを起動します。



 

*1:資料1「RX23E-Aグループ ユーザーズマニュアル ハードウェア編 ( R01UH0801JJ0120 Rev.1.20)」

*2:資料2「新ペルチェ制御用ボードの試作 ソフトウェア2」 https://vabc.hatenadiary.jp/entry/2023/05/15/164238

「熱電対付きサーモグラフィの試作(ファームウェア 1/2)」

マイコン 資料1*1の処理です。全体フロー、センサ及び表示器の通信、ヒートマップの補間処理について書いています。

 

全体の処理

図1. 全体フロー

図2. 割り込み一覧

メインループ内の処理に約 540[msec]かかります。表示に約390msec使用しています。MLX90640のデータ更新とマイコン側の処理(読み出しと表示)は同期していません。

熱電対のA/D変換は100msec毎に行います。

図3. 処理時間

MLX90640との通信

I2C通信(RIIC)プロトコル

MLX90640はI2C通信によりマイコン側と通信します。

図4. MLX90640 I2C通信

・マスタ送信

マイコンからMLX90640へのデータ書き込みはマスタ送信で行います。

図5. マスタ送信

・マスタ送受信

マイコンからMLX90640のデータ読み出しはマスタ送受信で行います。

図6. マスタ送受信

マスタ送信(コントロールレジスタ1(0x800D) へ 0x1981の書き込み)とマスタ送受信(読み出し)の例です。

図7. マスタ送信、マスタ送受信の例

I2C通信(RIIC)割り込み処理フロー

 送受信はCPUの割り込み処理プログラムで行います。

図8. RIIC割込みフロー(MLX90640用) 1/3

図9. RIIC割り込みフロー(MLX90640用) 2/3

図10. RIIC割り込みフロー(MLX90640用) 3/3

LCDディスプレイ(ILI9488)

SPI通信(RSPI)プロトコル

SPI通信でLCDへデータを表示します。DBI Type-C Option1(3 line)で、9bitのデータをDMA転送します。

資料 2*2 と同じです。

送信データはRGB666となります。資料3 *3

図11. DBI Type-C Option1(3 line)(9bit )

図12. RGB666のデータ送信
ヒートマップ表示

MLX90640から横32ピクセル、縦24ピクセルの温度情報が得らます。MLXのピクセル毎の情報をそのままLCDへ表示すると小さくなりすぎます。このためMLXの1ピクセルLCDの10x10ピクセルに拡大して表示します。補間処理(双線形補間 bilinear interpolation)をすると画面が滑らかになります。

図13. LCDへの表示比較

・そのまま表示

図14. そのまま表示 1:1(MLX:LCD)

・拡大表示 (補間なし)

図15.  拡大表示(補間なし) 1:10(MLX:LCD)

・拡大表示 (補間あり)

図16. 拡大表示(補間あり) 1:10(MLX:LCD)
双線形補間  (bilinear interpolation)

資料4*4を参考にしました。資料5*5にも説明があります。

図17. 双線形補間

図17でQの値は、xとyの値から定められています。
4点(a,b),(c,b),(a,d),(c,d)とそのQ値がわかっている場合に、P点(x,y)でのQの 値を補間により求めます。

1) x軸方向に線形補間を行い、R1,R2を求めます。

図18.  補間処理 1

2) Y軸方向に線形補間を行い、Pを求めます。

図19. 補間処理 2

Excel VBAのプログラム

図20. 補間処理のプログラム (Excel VBA)

図21. 補間処理のテスト 実行前と実行後
表示レイアウト

LCDの表示用座標は左上を(0,0)とします。(図22の青色)

MLX90640のCol,Rowは、Reference tabを下向きにした場合、右上がCol1,Row1となります。(図22の赤色)

図22. 表示レイアウトとMLX90640のcol,row

表示項目: Em:放射率, Ta:周囲温度(MLX90640測定), Tr: Reflected temperature

                Ch1~Ch4:各熱電対の測定温度, CJT:Cold junction temperature

 

*1:資料1「RX23E-Aグループ ユーザーズマニュアル ハードウェア編 ( R01UH0801JJ0120 Rev.1.20)」

*2:資料2「新ペルチェ制御用ボードの試作 ソフトウェア2」 https://vabc.hatenadiary.jp/entry/2023/05/15/164238

*3:資料3「ILI9488 ドライバデータシート」http://www.lcdwiki.com/res/MSP3520/ILI9488%20Data%20Sheet.pdf

*4:資料4 https://x-engineer.org/bilinear-interpolation/

*5:資料5 https://risalc.info/src/linear-bilinear-interporation.html#bil

「熱電対付きサーモグラフィの試作(MLX90640の温度計算)」

 MLX90640は32x24ピクセルの赤外線(Infra Red)アレイセンサです。
測定対象物の輻射熱から温度分布を得ます。温度の求め方について調べました。

資料を以下に示します。

・MLX90640のデータシート、資料1*1

・ドライバソフト、資料2*2、資料3*3

・Adafruit社、資料4*4

・測定範囲(FOV)の説明、資料5*5

・熱の輻射に関して、資料6*6

・放射温度計、赤外線センサに関して、資料7*7

資料8*8、資料9*9、資料10*10

 

サーモパイルによる温度測定

絶対温度が0[K](ケルビン)でない物体は、物体内部の分子運動によりその温度に応じた熱エネルギーを電磁波(ほぼ赤外線)の形で放出しています。(熱輻(ふく)射)(資料 6)

サーモパイルは熱電対が複数直列に接続されており、赤外線がセンサの受光部に入ると、冷接点側との温度差となり熱起電力が発生します。熱起電力から補正演算を行うことで、測定対象物の温度(T)を得ます。

図1. サーモパイルによる温度測定

温度の計算

MLX90640では最初に補正(キャリブレーション)用のデータを、EEPROMから読出します。その後、測定データをRAMから読出し、各ピクセル毎に演算を行い温度を得ます。

図2. 温度計算の概要
測定データと更新周期

センサーの測定データ(16bit)は、センサー内のRAM領域(0x400~0x6FF) に、768(=32x24)個分格納されます。

図3. MLX90640 測定データの格納領域

この領域はSubpage0とSubpage1の2つに分けられ、サブページ毎に交互にデータが更新されます。  デフォルト(Chess reading pattern設定)のSubpage割り当ては以下の通りです。

図4. サブページの割り当て(デフォルト時)

測定データは更新周期毎に、Subpage0またはSubpate1に格納されます。

更新周期(IR refresh rate)=4 [Hz]の場合、250msec毎にSubpage0またはSubpage1が更新されます。更新完了で、ステータスレジスタ(0x8000)のbit3(New data available in RAM)が1となります。

図5. サブページの更新(refresh rate = 4Hz)
補正データ

I2C通信でEEPROMから読み出します。ドライバソフトでは読み出し後、構造体のメンバ(変数)に格納しています。

図6. 補正データ

図7. 補正データの取り出し(ドライバソフト)

以下はドライバソフト(資料2) の int MLX90640_ExtractParameteres( ) 内の処理です。

括弧()内の項目は、データシート(資料1)での該当箇所です。

1)供給電圧 (Vdd)    Extract_VDD() (11.1.1. Restoring the VDD sensor parameters)

 供給電圧 Vddの計算用パラメータの取り出しと、演算。Kvdd と vdd25を得る。

図8. Vdd

2) PTAT      Extract_PTAT()   (11.1.2. Restoring the Ta sensor parameters )

Ta(センサ周囲温度) 計算用パラメータの取り出し。KvPTAT, KtPTAT, vPTAT25, alphaPTAT を得る。

図9. PTAT

3)Gain    Extract_Gain()  (11.1.7. Restoring the GAIN coefficient (common for all pixels)

ゲインの取り出し。GAINを得る。

図10. GAIN

4)TGC    Extract_Tgc()  (11.1.16. Restoring the TGC coefficient)

TGCの取り出し。  MLX90640ESF-BAx-000-TU の場合は常に 0。

図11. TGC

5) Resolution    Extract_Resolution()   ( 11.1.17. Restoring the resolution control coefficient)

reaolutionEE を得る。

図12. Resolution

6) KsTa    Extract_KsTa()  (11.1.8. Restoring the KsTa coefficient (common for all pixels) ) 

KsTaを得る。

図13. KsTa

7)KsTo    Extract_KsTo()  (11.1.10. Restoring the KsTo coefficient (common for all pixels) )

KsToと ctの取り出し。

図14. KsTo

8) CP    Extract_CP()  

  cpKta,cpKv,cpAlpha[0],cpAlpha[1],cpOffset[0],cpOffset[1] を得る。

図15. CP

9) Alpha    Extract_Alpha()

alpha[768]とalphaScaleを得る。

図16. Alpha

10) Offset    Extract_Offset()  (11.2.2.5.2 Offset calculation)  

offset[768]を得る。

図17. Offset

11) Kta    Extract_Kta()  (11.1.6  Restoring the Kta(i,j) coefficient )  

ktaScaleとkta[768]の取り出し。(データシートとドライバで処理が異なる。)

図18. Kta

12) Kv    Extract_Kv()  (11.1.5   Restoring the Kv(i,j) coefficient )  

kvScaleとkv[768]の取り出し。(データシートとドライバで処理が異なる。)

図19. Kv

13) CILCP    Extract_CILCP()  

calibrationModeEEとilChessC[3]の取り出し。

図20. CILCP

14)  ExtractDeviatingPixels ()

不良ピクセル(broken , outlier)数のチェック。

温度計算フロー

ドライバソフト(資料2)の 3.4.3  MLX90640_CalculateTo  の処理フローです。

括弧()内は、データシート(資料1)に該当する項目です。

(Adafruit(資料4)も同じドライバを使用しています。また、テーブルによる温度計算(資料3)は使用していません。)

図21. 温度計算フロー 1

図22. 温度計算フロー 2

計測範囲

センサの計測範囲は、FOV(Filed of View)と距離により得られます。(資料5 )

測定対象物とセンサが d 離れている場合、Sは次式となります。

図23. 計測範囲

MLX90640-ESF-BAAの場合、FOVはX 方向=110°, Y方向=75°です。

図 24. FOV (データシート 資料1より)

センサと測定対象物の距離を50mmとします。

計測範囲のX方向は、

 S_{x} = 2 \times 50 \times tan( \dfrac{110°}{2}) ,    (tan55° = 1.428)

 S_{x} = 143 [mm]

Y方向は、

 S_{y} = 2 \times 50 \times tan( \dfrac{75°}{2}) ,    (tan37.5° = 0.767)

 S_{y} = 76.7 [mm]

 

計測範囲は143x76 [mm]となります。

図25. 計測範囲 FOV=110°x75° 距離=50[mm]

 

 

*1:資料1「MLX90640 32x24 IR array Datasheet (REVISION 12 – DECEMBER 3, 2019) 」 https://www.melexis.com/en/product/MLX90640/Far-Infrared-Thermal-Sensor-Array

*2:資料2「MLX90640 32x24 IR array Driver (REVISION 1 - OCTOBER 31, 2022)」  https://github.com/melexis/mlx90640-library

*3:資料3「MLX90640 32x24 IR array Look-up table implementation 」  https://github.com/melexis/mlx90640-supporting-functions/tree/master

*4:資料4「Adafruit MLX90640 library functions」 https://github.com/adafruit/Adafruit_MLX90640

*5:資料5「FOVの説明動画 」 https://www.youtube.com/watch?v=YGFmlFPjRLE

*6:資料6 「例題でわかる伝熱工学 第2版 熱の移動が図でみえる」 (森北出版)

*7: 資料7 堀場製作所「放射温度計の基礎知識」https://www.horiba.com/jpn/process-and-environmental/products/infrared-radiation-thermometer/

*8: 資料8 日本セラミック「サーモパイル型赤外線センサについて」https://www.nicera.co.jp/products/infrared-sensor/thermopile-sensor/about-thermopile-sensor

*9: 資料9  「ジャパンセンサー 赤外線」 https://www.japansensor.co.jp/manage/wp-content/uploads/2018/10/infrared_20180930.pdf

*10: 資料10  「ジャパンセンサー サーモメータ」 https://www.japansensor.co.jp/manage/wp-content/uploads/2015/03/thermometer.pdf