ADC変換精度向上方法

2013/12/16発行のルネサスエレクトロニクス アプリケーションノートに「A/Dコンバータの精度を向上させる方法」:R01AN1843JJ0100がありましたので解説します。
このアプリノートは、Smart Analog内臓のRL78/G1Aを対象デバイスとしていますが、「RL78/G13やG14などの普通デバイス」にも適用できる内容が記載されています。そこで、この普通デバイス:RL78/G1xのADC変換精度向上方法のみを抽出します。

RL78/G1xのADC変換精度向上方法

精度向上方法 内容
ハードウエアのノイズ対策 アナログ基準電圧端子:AVrefp/AVrefmの使用
アナログ入力端子に10pF~0.1uFのコンデンサ実装
アナログ信号とデジタル信号の分離、近接回避
基板アナログ領域とデジタル領域の分離、両者の1点グランド接地
ソフトウエアのノイズ対策 ADC実行中のアナログ端子近傍デジタル入出力の停止
ADC変換直後のHALT実施
ADCデータ平均化

全てA/D入力信号に対するノイズ対策です。アナログ端子に高精度チャネルと標準チャネルがあるRL78/G1Aに対し、(おそらく)全てが標準チャネルのRL78/G1xでも、できうる範囲でこの対策に沿ってADCを使うと精神的には安心できそうです。アプリノートには、定量的な対策実施済みのADCデータ平均化なしと5回平均の精度差、他社マイコンとの誤差比較も記載されています。

RL78/G1xテンプレートのADC評価

販売中RL78/G1xテンプレートでも評価したいところですが、評価設備が無いのと、(おそらく)ハードの依存性が高いでしょうから、定性的にADCを診てみます。AVrefp/AVrefm端子の使用、これらに一番近いANI2端子の使用、100ms周期の2回取得値一致によるアナログ値確定、ADC変換直後ではないがHALT利用など、完璧と言えませんが可~良の判定でしょうか。

RL78/G1xテンプレートの移植(その3)

仮想お客様開発ボード:BlueBoard-RL78/G13_30pin-Hへのテンプレート移植の3回目は、その2で示した移植手順3以降を解説します。

レジスタ・バンク設定

マイコンで複数処理をシステムとして上手く動作させるポイントの1つが、割込み処理です。この割込み処理を効率的に使うために、レジスタ・バンクの設定をします。詳しくは、コチラをご覧ください。移植ボードで使うレジスタ・バンク設定は、テンプレートの設定をそのまま使います。

userdefine.h修正

移植ボード回路図からテンプレートのuserdefine.hポート番号の論理名定義を変更します。

userdefine.h変更
userdefine.h変更

移植ボード動作

移植ボードの動作は、1. 電源ON後、uart1へ起動メッセージ出力、2. uart1経由で1文字コマンドを受信し、コマンドに応じてA:ADC値をuart1へ出力、B:ブザートグル出力、L:LEDトグル点滅、3. User SW押し下げでLEDとブザーのトグル動作とします。

移植ボードの動作
移植ボードの動作

テンプレート移植例なので、簡単な動作にしました。関数間の入出力データは、マイコンRAMを使っていますので、関数間の独立性や単体試験は容易です。

テンプレートの移植機能

Version2テンプレート提供中の全機能と、開発ボードへ移植する機能を示します。User SWは、INTP1に接続しているのでコード生成のINTP1割込み処理、Buzzerは自励式なので、LEDドライバで対応します。

ファイル名 機能概要 備考 ボード移植
main.c 起動処理 アプリとドライバ起動 あり
userdefine.h ユーザ追加マクロ ハードウエア割付修正 あり
uart.c uart1ドライバ 受信コマンド解析修正 あり
sw.c swドライバ チャタリング対応済み なし
led.c ledドライバ ブザー出力へ修正 あり
adc.c adcドライバ ノイズ対応済み あり
lcd.c lcdドライバ HD44780互換品対応 なし
pfdl_user.c データフラッシュドライバ RL78_FDL_LIB_VERSION_T04_REN: V1.05使用 なし
pfdl.h ライブラリヘッダ なし
pfdl_types.h ライブラリ追加マクロ なし
pfdl.lib ライブラリ本体 なし
LcdTest.c Lcdテスト用アプリ 1s周期起動 なし

 

動作テスト

移植ボードをパソコンに接続し、コマンドを送受信して動作中のボードを示します。

テンプレート移植動作
テンプレート移植動作

RL78/G1xテンプレートのメリット

BlueBoard-RL78/G13_30pin-Hを仮想お客様開発ボードとし、テンプレートの移植手順と、その方法を説明しました。テンプレート移植が簡単であることがお判り頂けたと思います。殆どがCubeSuite+の再設定と、ハード割付の変更です。ボード動作に関しては、動作に応じた追加や修正は必要になります。しかし、テンプレートで枠組みが決まっているので簡単です。処理の入出力データは、RAM経由なので、他のアプリやドライバの動作タイミングを考えずに、単独の動作タイミングで開発できるからです。

新規ボード開発時には、ボード周辺ハード/ソフトの単体テストソフトを作り、徐々に結合し、最後にシステム全体として動作させます。本テンプレートを開発当初から活用頂けると、関数間データ送受にRAMを使っていること、アプリやドライバ起動が時分割で複数あること、割込み処理効果を上げるバンク・レジスタ設定があること、などの本テンプレートの特徴を活かして、単体テストや結合テストも容易で、かつ、テストソフトそのものも活用できるので、実用プログラムの早期開発に役立ちます

メリットは、早期開発だけではありません。開発から時間がたってプログラムを見直す時に、プログラム解読が容易です。時間経過するとフローチャートなどに も目を通しますが、結局、動作理解には、ソースの解読が必要です。この時、テンプレートで枠組みが決まっているのと、そうでないのとでは、解読の困難さが 大幅に異なります。枠組がシンプルで、関数間がRAMで分離される本テンプレート方式は、単純なソースで記述できるので解読も簡単です

RL78/G1xテンプレートの移植(その2)

RL78/G1xテンプレートの移植手順一覧を示します。今回は、1~2まで解説します。

移植手順一覧

  1. CubeSuite+で、マイクロコントローラ変更(M)… 実行
  2. コード生成(設計ツール)再設定
  3. コード生成出力に使用レジスタ・バンク追記(デフォルトは、全てRB0のため)
  4. フラッシュライブラリ使用時は、リンク・ディレクティブ変更(コンパイラ領域を連続して広く取るため)
  5. userdfine.h修正
  6. 移植ボードの動作処理追加

G13Stick(サブプロジェクト)のテンプレートが移植ボードに最も近いので、これを使い移植します。

マイクロコントローラ変更:R5F100LE からR5F100ADへ

移植ボードのマイコンは、R5F100AD(30pin):RL78/G13 (ROM:48KB)_30pinで、テンプレートのR5F100LE:RL78/G13(ROM:64KB)_64pinと異なるので、マイクロコントローラ変更を行います。R5F100LE上で右クリックすると、マイクロコントローラ変更(M)…メニューが現れますので、R5F100AD(30pin)へ変えます。変更後は、サブプロジェクトのコード生成(設計ツール)が初期化され、「先に端子割り当てを設定してください。」のメッセージが出力ウインドに表示されます。

マイコン変更
マイコン変更

コード生成(設計ツール)の再設定

クロック発生回路の「箱アイコンが開いている」のは使用中を、「閉じている」のは未使用を示します。マイコン変更直後は、箱アイコン横の!マークで端子割当てが必要であることが判ります。また、ウオッチドック・タイマの箱アイコンも開いているので、WDTがデフォルトで使用されることも判ります。

コード生成の再設定
コード生成の再設定

コード生成のパラメタは、全てGUIで設定するのが本来の使い方です。設定箇所が多く、間違いなく設定するのは大変ですが、GUIで変更や修正が簡単にできるのがメリットです。しかし、多くのパラメタをプロジェクト作成毎に設定するのは面倒なので、既成ファイル(xyz.mtudあたり)から必要部分のコピー&ペーストで作成すべくいろいろ試行しましたが、失敗でした。別の方法として、(サブ)プロジェクト毎コピーしてプロジェクト名を変更する方法を以前に示しました。今回は、仮想開発ボード付属プロジェクトのコード生成GUIを横目で見ながら、真面目(?)にこのパラメタを設定します。

※A/Dコンバータは、移植基板付属のコード生成では未使用です。しかし、初期設定などメインプログラムで設定しており実際は使用しています。私は、コード生成を使って設定しました。

コード生成レポート

設定した多くのパラメタがオリジナルプロジェクトと同じかを確認する方法に「コード生成レポート」が使えます。このレポートは、コード生成タブの表示中にのみファイル(F)メニューに表示されるコマンドで、全パラメタがHTML形式で出力されます。オリジナルと両方出力して、エディタで比較すれば、パラメタの一致確認が容易です。

コード生成レポート
コード生成レポート

移植ボードの付属回路とコード生成

移植ボードの付属回路を示します。UART0はD-Subコネクタが未実装なのでUART1を使います。コード生成(G)をクリックして、移植ボードのAPIを生成します。

BlueBoard Peripheral Schematic label CPU pin CubeSuite+ port
User LED LED 20 P16
Buzzer BUZZER 15 P31
User Switch INTP1 17 P50
Reset Switch NRST 6 RESET
ADC ANI2 29 P22
UART0(コネクタ無し) RXD0 25 P11
TXD0 24 P12
UART1(コネクタ有り) RXD1 2 P01
TXD1 3 P00

RL78/G1xテンプレートの移植(その1)

Version2のRL78/G1xテンプレートは、4種の市販ボードに対応しますので、テンプレートとボード動作の確認がすぐにできます。今回は、この4種対応ボード以外のボードに、テンプレートを移植する例を示します。本テンプレートを、お客様開発のボードへportingする際に参考になることを狙っています。内容が複雑で分量も多いので、3回に分けて解説します。

移植ボード選定

第1回目は、ボード選定です。RL78/G1xの発売以降、典型的な市販ボードは、テンプレートでサポート済みです。そこで、お客様開発ボードの代わりに選んだボードは、インドNGX Technologies社のBlueBoard-RL78/G13_30pin-Hです。格安で、E1インタフェース、UART、LED、ブザーなどの周辺ハードが実装済みです。日本でも秋月電子通販から2400円で購入できます。このボードを「仮想お客様開発ボード」とし、テンプレートを移植します。

BlueBlardRL78G13_30pin-H
BlueBoard-RL78/G13_30pin-H(秋月電子通商HPより抜粋)

RL78/G14ボードへの移植

今回porting対象に選んだボードのマイコンは、RL78/G13:ROM:48KB_30pinです。因みに、RL78/G14:ROM48KB_30pin実装ボードも同じボード回路で、違いはマイコンのみ、ピン割付も同じです(詳しくは、NGX Technologies社のHPを参照)。従って、テンプレートをBlueBoard-RL78/G14_30pin-Hへ移植する場合も、ここで示す方法がそのまま使えます。

ボード付属ソフトやアプリケーションノートソフトの問題点

市販ボードには、ボードをテストするプログラムが付属しますが、あくまでハードテストが主眼です。また、RL78のサンプルプログラムやアプリケーションノートのプログラムは、動作ボードを特定せず、単一機能の実装例が主眼です。これらに対して、実用プログラムは、複数機能で各機能がシステムとして上手く動作する必要があるので、ボード付属ソフトやアプリケーションノートのソフトを、そのまま実用版へ流用したくても、中途半端で役立ちません。RL78/G1xテンプレートは、この両者の隙間を埋めるのが役目です。実用プログラムとしてそのまま使えるひな型を目指しています(テンプレートに対する皆様のご意見、ご要望などが御座いましたらお気軽にinfo@happytech.jpへお寄せ下さい)。

では次回から、RL78/G1xテンプレートの移植方法を示します。