コード生成を使ったAD変換について(RX64M)

お世話になっています。

コード生成で、S12AD変換を使用した場合の話です。

リファレンス電源に外部REF-IC電源を使用し、動作させた場合です。

ソフトを初期化して、動作させるたびに変換後のデータにズレが発生します。

AN000端子での電圧は、全く同じですが、出てくる値が0x0010位ズレます。

4回平均化設定をさらに32回平均化して殆ど揺れを抑えた後の値にて、

0x0800 場合は、 0x0810 や 0x07F0になり、

その後、電圧を変化させると同じように変化します。

オシロスコープで、REF電源の端子をチェックしても安定しています。

E1にて、リセットを実行すると同じ値になる確率は、50%位です。

どこかにREFのレジスタがありラッチさせているのでしょうか?

同じRX64MをFITのAD変換で初期化した場合は、このようなズレは

無かった思います。

ご存じの方がいらしたらアドバイス願います。

 

 

 

 

  • わわいです
    A/D変換というものはそういうもん、と思っていてください
    アナログを扱う場合にはノイスがつきものです。
    CPU内臓のA/D変換器ならなおさら、最悪のノイズ源であるデジタル回路が隣りにいるんですから、これまた条件が厳しくなります

    ということで、まずは同じ数値を得るという考え方を改めましょう
  • SSさん、こんにちは。NoMaYです。#前回はRX71Mの時でしたね。

    > 同じRX64MをFITのAD変換で初期化した場合は、このようなズレは無かった思います。

    気になったのですが、ここ↑の話は同じボードで(AD変換部分以外は殆ど同じソフトウェアで)の話しなのかな?というところです。もし、RX64Mであっても別のボード(というか別の製品)の話であれば、この後、それだ、というアドバイスが来なければ、今回のボード(というか今回の製品)でAD変換部分だけFITにして、同様の症状になるか確認してみるのも、現象理解に向けた一手になるかと思います。

    そして、もし、それでもFITでは値が安定している、ということになったら、FITのソースを読んで、コード生成のソースと比較して、本件に関係しそうな違いがないか調べる、ことになるのかなと思います。(この後、それだ、というアドバイスが来なければ、という場合には、ですけど。)

  • NoMay様 ありがとうございます。

    結果から言いますとFITでも改善されませんでした。
    コード生成は問題ありません。
    コード生成作成者の方、大変申し訳ありませんでした。

    電源電圧の表示を行うソフトウェア部で今回の問題が発生しました。
    電源入れなおす毎に表示電圧が±0.3V位ズレて表示するという現象です。
    発生件数は50台中40台で発生しランダムに発生します。
    5回に1度くらいの確立で発生します。
    現象が個体差による現象と思えない為、原因を色々探っていました。


    電池動作の装置で、電源電圧を常時表示しています。
    17Vを最大値で表示できるように、抵抗分圧し測定しています。
    マイコンは3Vですので、約1/6の電圧になうようにADに入力しています。
    以前の装置では、そのような現象は出ませんでしたので
    今回のボードの問題であることは、はっきりしています。

    しかしAVCC,AVSSやVREFH0,VREFL0などを波形観測しても
    問題があるようなノイズはありません。


    更にソフトを変更して、4ms毎にADのサンプリング実施し、
    1024回の移動平均値に電圧係数を掛け算して
    電圧を0.01V単位で測定し、 0.1V単位で表示を行っています。

    以前の装置はFITのAD変換モジュールを使用していますが
    今回はコード生成を使用した為、発生したものと思ってしまいました。


    電源の入力は4系統ある為、AN000~AN003まで使用しています。
    この現象は、すべての入力電圧の表示で発生するためADのREF制御に
    関係あると思います。リセット時にADの初期化でも発生する現象です。

    起動時に内部のリファレンスがラッチしているような現象として現れる為、
    メーカーに問い合わせをしてみようかなと思います。

    いろいろありがとうございました。。
    SSより
  • SSさん、こんにちは。NoMaYです。

    以下の部分を読み返していて、ふと気になったのですが、今回の製品ではRX64Mの電源が落ちている時(AVCC0=AVCC1=VCC=0)に VREFH0 or AN000~AN003 に電圧が掛かっていたりしないでしょうか?(つまり、絶対最大定格をオーバーしてしまっている、とか?)

    最初の投稿
    > リファレンス電源に外部REF-IC電源を使用 ...

    本日の投稿
    > 電源入れなおす毎に表示電圧が±0.3V位ズレて表示 ...
    > 電池動作の装置で、電源電圧を常時表示 ...
    > 電源の入力は4系統ある為、AN000~AN003まで使用 ...

    ただ、以下でも発生するとのことなので、ちょっとハズしているかも、とも思ってはいますが、、、

    本日の投稿
    > リセット時にADの初期化でも発生する

    RX64M ユーザーズマニュアル ハードウェア編 絶対最大定格の頁の画面コピー
    www.renesas.com/jp/ja/search/keyword-search.html#genre=document&q=r01uh0377
    r01uh0377jj0110-rx64m.pdf

     

  • NoMaY様 いろいろありがとうございました。

    時間が掛かりましたが、正常動作するようになりました。

    今後役立つ人がいるか判りませんが、参考までに、要因を簡略に書いておきます。

    ソフトの問題は無く。
    基板のVREL0とAVSS0とVSSのGNDパターンの問題でした。

    VSSは、デジタル電源のGND。
    VREF0は、純粋にアナログ電源のGNDで、
    AVSS0は、デジタル電源から起点から分岐したアナログ用GNDです。
    どれも最終的にはつながっています。(1点アースは、死語かな?)
    今回は、パターンの処理が悪く、AVSS0にVSS(デジタルGND)のリップルが少し乗っていました。

    ルネサス様に聞いても教えて貰えませんでしたが、リセット時にVREF0の値をAVSS0で
    ラッチしていると想定すると今回の問題は説明できます。

    リセット解除後のタイミングで、AVSS0とVFEFL0の電圧差を内部ラッチするとすると、
    デジタル電源(GND)は、いろいろ所でいろいろな電圧の電源ICなどが動作しているので
    リップルが多めに出ています。

    そのリップルがAVSS0に影響を与えてしまい。リセット及び電源起動時に、
    REFの設定誤差としてその後のADに影響を与えていたと思われます。(推測です)
    あくまでリセットのタイミングのみで決まる。


    VREFに別電源を使っている為、現象が顕著に表れたと思います。
    VREFL0=VCSS0=VSS、VREFH0=AVCC0=VCCの様な簡単な回路なら現れないかもしれません。
    (元々12BITの性能が出ないので判らないかもしれない)


    それと、VREFH0が2.5Vですが、動作しています。
    ルネサス様では、動作保証外とされているようです。
    VREFH0のmin値は2.7Vです。と回答がありました。


    結論は、一部のGNDパターン切断改修にて、リップルを影響を減らす処理を実施した。

    以上、12BITのADのVREFに別電源を使った失敗例でした。

    題目は、ソフトウェアですが、内容はハードウェアでした。

    SSより
  • 追加情報

    ルネサスのサポートより、VREFのラッチはしていないとの情報が来ましたので、
    基板設計の間違いか、ソフト運用の間違いと言うことで結論とします。

    ラッチ説(推測)は、否定された為、余り参考にならないですね。
    たまたま、GNDが弱かった位の話ですね。

    SSより
  • SSさんVREFのラッチというのは初めて聞きました、たいていラッチ回路とは74HC574のような1ビットのデータを記憶させる回路素子と理解しています、VREFというのは基準電圧ですから一定の変動のない、ノイズのない基準電圧でないといけないと思います、これに対してAD入力のサンプルホールドというのがあります、これはラッチと表現するのではなくて、サンプリングした値を留め置くホールドの意味だと思います、正しい呼び方を覚えると助けになると思います。

  • IKUZO様
    コメントありがとうございます。(感謝)
    おっしゃる通りですね。

    AN000~AN002では、変換中(逐次比較中に入力値が変化しないように)ホールドできる機能が
    確かに有りますね。これはサンプルホールドの理解で正しいでしょうか?(>_<)


    今回は変換精度が悪すぎて使い物ならないのは何なのかから来ています。
    12ビットADを使用して変換結果が1000回平均しても7LSB位もズレてしまう?
    それもリセットをする度に変わってしまう。

    何だこれは絶対定格でも4.5LSBなのに、平均して更に4bit捨てて8bit精度に変換しても
    ±5以上もズレた値になるって!!(≧◇≦) 壊れてよねこのマイコン!!

    そして一度決まった値になるとAN00x入力の電圧を同じだけ変えると
    それ以降は、12ビット精度の威力が効いてくるよ。なんでなの???(>_<)


    今回、ラッチと言っているのは、12ビットD/Aユニット(S12ADCユニット0)にVREF用のレジスタが
    存在するのかなって仮説から話ですね。
    ラッチの言葉が間違いなら、”VREFH0値がレジスタに読み込まれて保持される” ですかね。
    まあ、無いって事ですから無いんでしょ。


    VREFH0とVREFL0の値がAVCC0とAVSS0と異なった為に発生したのか?

    S12ADCのユニット0は、AVCC0,AVSS0とVREFH0,VREFL0で作る12ビットD/Aレジスターと
    AN入力をAVCC0,AVSS0で動作させるアナログマルチプレクサを通してA/Dデータレジスターと
    逐次比較レジスターの一致でデータ値を取得するなら電圧のズレがあるのか?


    自己診断機能を使うとVREFH0、VREFH0の1/2、VREFL0(0v)の値を変換する事も
    出来たりしますので、AVCC0とVREFH0値、AVSS0とVREFL0の値のズレもチェック出来ると
    なっています。実際に変換してみると変換できます。

    そこで、AVCC0とVREFH0の値が違う場合は、AN00XがVREFH0の値(電圧)と同じ値が0x0FFFで
    VREFL0と同じ値(電圧)を0x0000となる様にコンパレータに送ると思います。
    ラダー抵抗型のじゃないよね? だったらズレるはずない。


    なんだか判らない。でも別の基板では問題ない。パターンのどこかに悪いところが有る。
    それもGNDアースに有るはずって事なんでしょうね。

    げー、6層板の内層なのね。どこか切れる所は無いか?マイコンの下だぁ
    じゃあ、一度剥がして、修正するかBGAじゃ無かったから良かった。


    まあ、お騒がせしました。SSより
  • SSさんも結構な専門家ですね、恐れ入りました、頑張ってください。
  • IKUZO様

    どうもありがとうございました。

    年寄なので、引退したいのですが...
    目も見えないし...

    最近はコード生成やFITを使わないと
    若い人に読めるソースを残せないない為、苦労しています。

    SHとかH8で辞められたら良かったと最近は思います。

    また、質問とかしたら相手をしてください。

    SS