この記事でわかること
別投稿”【温度センサーIC+PICマイコンの設計】-3:温度センサーICの出力信号をマイコンに取り入れる(ソフト設計編-2)” の続編です。製作した”温度センサーIC回路+PICマイコンのプログラム”を実機検証しました。
※PICマイコンは、マイクロチップ・テクノロジー(Microchip Technology)社の
マイクロコントローラ製品です。
“MPLAB X IDE”のバージョンは、V6.05です。
PICkit4の説明については、Microchip社の資料:”MPLAB PICkit4 ユーザガイド”を引用しています。
本ブログで使用している測定機器は、個人購入して一般市販レベルの機器で有ります。また機関による校正等を行っていません。
温度センサーIC:LM61、PIC16F1938、その他部品は、1個の検証です。したがって本部品の品質を保証する投稿ではありません。
測定値は、参考レベルです。
実機検証項目(別投稿:シミュレーションの検証項目と同じ)
実機検証項目は、前投稿:”【PICマイコン支援ツール”MPLAB X IDE”】シミュレーション”の検証項目と同じとしました。
1.30℃について”温度センサーIC+PICマイコン”で温度測定
(自作の恒温槽のため正確に30℃設定制御は、難しいので20℃代・30℃代・40℃代・50℃代・60℃代をマイコンで温度測定(T_regの値)、グラフにして近似直線上の30℃時のマイコン温度測定値を算出します。)
2.10秒タイマー値( TMR2_10sec_flg = “0” ⇒ “1” )10秒測定
プログラムの書き込み
前記事で作成したプログラムをPICマイコンのフラッシュメモリーに書き込みます。
PICkit4を接続する回路を、”図1:温度センサーICと書き込み回路”に示します。
”U1 ブロック1”のコネクタは、ICSP インターフェース(I/F)です。
ICSP I/Fは、PICkit4と接続します。
PICkit4は、USB I/Fを経由して PC:パソコンと接続しプログラムをマイコン内のフラッシュメモリーに書き込みます。

図1:温度センサーICと書き込み回路
温度センサーIC:図左側の”LM61の回路部”は、プログラム書き込みには、関係ないです。
書き込み方法の詳細は、ここを参照。
”MPLAB X IDE”画面の書き込み処理実行後の右側の”Output”ウィンドウに、結果表示
”Programming /Verify complete” 表示で、プログラム書き込み正常終了が確認できます。
実機評価:温度測定環境
実機構成
PICマイコンにプログラムを書き込んだ後、下記 実機検証構成で温度測定を行います。
下記に、実機検証の構成図を”図2:実機検証構成図”に示します。

図2:実機検証構成図
説明:
PIC16F1938:
マイコロチップ社のPICマイコン
PITkit4:PICデバッカーキット
MPLAB X統合開発環境(IDE)の強力な GUI を使って Microchip PIC® マイクロコントローラ (MCU)、dsPIC® DSC、CEC(ARM® Cortex®-M4 ベース )MCU を迅速かつ簡単にデバッグおよびプログラミングできます。
構成は、PICkit4を経由して、PICマイコン(PIC16F1938)と PCのインターフェースを制御する
デバッカーキットです。
PC:パソコン
”MPLAB X IDE”支援ソフトが搭載されているパソコン
“MPLAB X IDE”のバージョンは、V6.05
Temperature chamber:恒温槽
自作の恒温槽、温度制御用回路が無いのため、目標温度設定の制御は難しいです。
LM61:
Ti製の温度センサーIC
Thermometer:
市販の温度計、恒温槽内の温度を測定します。
VDD:DC電源
1.5V単一乾電池2個直列接続
温度センサーICの電源
Vdd:PICマイコン電源
PICkit4からPICマイコンに5V供給
c:コンデンサー
ノイズ対策用のコンデンサー 1uF(カタログの仕様に合わせています。)
R:プルアップ抵抗
10kΩ
評価時は、”/MCLR”端子をハイレベルに固定(マイコン内部にもプルアップ抵抗接続有り)
実行するプログラム説明
”MPLAB X IDE”支援ソフトのデバックモードを使い、パソコンからPICマイコンを制御して、約10秒毎の温度測定値を確認します。
温度値は、プログラム中のデータ宣言をした”T_reg”の値です。
“T_reg”と10秒カウントとブレイクポイント設定に関係したプログラムを、
図3:実行プログラムmain.c と 図4:実行プログラムtmr2.cを下記に示します。
main.c プログラム

図3:実行プログラムmain.c
E:80行 ”T_reg”が温度値
”MPLAB X IDE”支援ソフトのデバックモードを使い、”T_reg”の温度値を観測。
自作恒温槽で温度制御機能が無いため、30℃の温度設定制御が難しいので、20℃代、30℃代、40℃代、50℃代、60℃代を測定して、線形近似のグラフを作成して、30℃時の”T_reg”を算出します。
F: 82行 ”TMR2_10sec_flg=0“は、10秒フラグをクリア
tmr2.cプログラム

図4:実行プログラムtmr2.c
二段目の赤枠:143行 ”TMR2_10sec_flg=1“は、10秒達成フラグ
2.10秒のタイマー時間の検証は、
main.cの”TMR2_10sec_flag=0″ ⇒ tmr2.cの“TMR2_10sec_flag=1“の時間を測定します。
実機評価
”MPLAB X IDE”支援ソフトのデバックモード
図2:実機検証構成図と”MPLAB X IDE”支援ソフトで、実機検証の環境構成となります。
具体的なソフト設定、検証方法を下記に示します。
1.PICkit4設定は、前投稿の”PICマイコン 4Hzパルス ソフト設計”の”プログラム書き込み”と同じです。
本記事の場合:Projectsは、”TMPRTR_get”となります。(上記、参考の”前投稿のProjects名”とは違います。)

2.検証を開始は、”Debug Project”上記アイコンを、選択(左側ボタンクリック)します。
”警告ウィンドウ”を”OK”選択すると⇒ Runします。
PICkit4のLEDが青色⇒オレンジ色に変わります。
一旦、”Pause”して、プログラム実行を停止させます。
1.20℃代・30℃代・40℃代・50℃代・60℃代の恒温槽内に温度センサーICを入れて、温度測定
恒温槽内に温度センサーICを設置して温度測定(”T_Reg”)、同時に恒温槽内の温度計と比較検証します。
恒温槽30℃の温度設定制御が難しいので、20℃代、30℃代、40℃代、50℃代、60℃代を温度測定してクラフを作成、このグラフを元に近似直線を作成して、30℃時の”T_reg”を算出します。
1.温度測定(T_reg値) のために、”Watches”機能を起動
[Window]⇒[Debugging]⇒[Watches]を選択、Watchesウインドウが画面の右側に表示します。下記図を参照

図5:”Watches”起動

右側に”Watches”ウインドウ表示
<Enter new watch>青枠に
“D_reg”, “A_reg”, “T_reg” を入力、観たいデータを指定

図6:”Watches”ウインドウ
2.”Break point”の設定

図7:main.c 82行にブレイクポイント設定
Break pointをmain.cの ”T_reg = (A_reg/10.0)-60.0″ 実行の次の82行に設定
(上記、図7:main.c 82行にブレイクポイント設定を参照)。
82行で、マウス左側ボタンクリック。本行が、”赤色四角”となります。
3.恒温槽の温度を変更後、停止していたプログラムを”Continue”のアイコンを選択して
再実行します。

図8:”Continue”のアイコン
4.82行のブレイクポイントで停止、”Watches”ウインドウにマイコンの温度測定値表示
5.恒温槽の温度を変更
3から5を繰り返して、PICマイコンで恒温槽内の温度測定をします。
6.温度測定結果
測定結果を下記、表にしました。
表1:温度センサーICの温度測定
| ①:恒温槽内温度 [℃] 市販の温度計 | ②:PICマイコン温度 (T_reg) [℃]*1 | 温度差(①ー②) |
| 25.5 | 24.3 | 1.2 |
| 29.7 | 29.1 | 0.6 |
| 32.9 | 32.1 | 0.8 |
| 35.1 | 34.5 | 0.6 |
| 40.2 | 39.5 | 0.7 |
| 48.7 | 47.9 | 0.8 |
| 50.2 | 49.5 | 0.7 |
| 54.8 | 54.1 | 0.7 |
| 58.3 | 58.5 | -0.2 |
| 60.1 | 59.9 | 0.2 |
*1:T_regの値は、小数点第2位を四捨五入しています。
上記、表からグラフ作成。
近似直線を作成して恒温槽温度30℃のマイコン温度測定を算出します。

図9:恒温槽温度対マイコン温度測定グラフ
上記、グラフの近似直線 y=1.0211x-1.5239 となりました。
x(恒温槽温度)= 30℃を代入⇒ y(マイコン温度測定)= 29.1℃ となります。
参考資料:温度センサーIC:LM61の仕様から温度誤差は、±3℃ですのでその範囲内となり、マイコン温度測定として問題ない結果だと判断します。
温度センサーIC30℃(AN0端子に900mV印加)のシミュレーションの実行については、ここを参照。
2.10秒タイマー値( TMR2_10sec_flg = “0” ⇒ “1” )10秒測定
プログラムが実行している場合は、”Pause”を選択して、プログラム実行を停止させます。
シミュレーションによる時間測定方法の詳細は、投稿名:”PICマイコンのソフト支援ツール”MPLAB X IDE”のシミュレーションの紹介とプログラム検証”の”10秒タイマー検証”項を参照のこと。
1.時間測定のために、”Stopwatch”機能を起動
[Window]⇒[Debugging]⇒[Stopwatch]を選択、Stopwatchウインドウが画面の右側に表示します。下記図を参照。

図10:”Stopwatch”起動


図11:”Stopwatch”ウインドウ
2.2つの”Break point”の設定
2-1:1番目のbreak pointをmain.cの”TMR_10sec_flag=0”実行後の次の83行に設定(下記、図12:main.c 83行にブレイクポイント設定を参照)。83行で、マウス左側ボタンクリック。本行が、”赤色四角”となります。

図12:main.c 83行にブレイクポイント設定
2-2:2番目のbreak pointをtmr2.cの”TMR_10sec_flag=1”実行後の次の146行に設定。(上記、図13:tmr2.c 146行にブレイクポイント設定参照)146行で、マウス左側ボタンクリック。本行が、”赤色四角”となります。

図13:tmr2.c 146行にブレイクポイント設定
3.Stopwatchのプロパティを設定
3-1:下記図の赤枠[properties]を選択して、”Start Condition”と”Stop Condition”を選択します。
3-2:Start Condition:main.cの”TMR_10sec_flag=0”実行の次の83行を指定
3-3:Stop Condition:tmr2.cの”TMR_10sec_flag=1”実行の次の146行を指定
3-4:”OK”を選択

図14:StopwatchのProperties選択

図15:StopwatchのProperties設定
3-5:下記表示が有る場合は、”OK”を選択

図16:Stopwatchのワーニング
4.継続して実行

図17:Continueのアイコン
4-1:上図、[Continue]を選択
main.c

図18:1回目のブレイク
4-2:”TMR2_10sec_flg=0″後、サイクルカウント クリア”Target halted. Stopwatch cycle count=0″を表示
4-3:上図、[Continue]を選択して、続いて実行
tmr2.c

図19:”Target halted.Stopwatch cycle count”表示
4-4:”TMR2_10sec_flg=1″後、サイクルカウント
”Target halted. Stopwatch cycle count=39957060″を表示
5.TMR2_10sec_flg=”0”⇒”1”の時間を計算
マイコンへのクロック入力:16MHz、命令クロック:4MHz(1サイクル:0.25us)となります。
実機検証の時間
39,957,060 サイクル × 0.25us=9.989265秒
TMR2_10sec_flg=”0”⇒”1”の時間は、9.989265秒でした。
”MPLAB X IDE”のシミュレーションと比較
本実機検証の10秒カントと同じプログラムを”MPLAB X IDE”のシミュレーションで検証した時の、TMR2_10sec_flg=”0”⇒”1”のサイクル数と時間を表示します。
本プログラムのシミュレーションについては、ここを参照。
表2:10秒タイマーの比較
| 検証方法 | TMR2_10sec_flg=”0”⇒”1”の時間 [秒] |
| PICkit4を接続した実機検証 (”MPLAB X IDE”環境使用) | 9.989265秒(39,957,060 サイクル) |
| ”MPLAB X IDE”のシミュレーション (実機無し) | 10.000015秒(40,000,061サイクル) |
上記、タイマー時間の総括
実機検証とシミュレーションで、同じフラグの切り替わりを測定したにもかかわらず、カウントされてサイクル数に43,001サイクル( 40,000,061サイクル-39,957,060 サイクル 。時間にして約0.1%強 )の差が出たのは、プログラムのバグで無く、「実機検証という物理的な制限がある環境」と「シミュレーションという理想環境」の間に生じる、極めて正常な仕様の差と判断します。(10秒は、マイコンの計算としては大きな値です。カウント数が大きなればこの差は、一層顕著となる傾向があります。)

コメント