掲示板トップ > 記事閲覧
【旧BBSから移行】AD8210の挙動について
投稿日 : 2014/10/24(Fri) 00:00
投稿者 nagog
初めて投稿します。
先日モータードライバの構造、原理を調べる際、ここでの内容が大変詳しくわかりやすかったため、質問したします。

現在、モーター制御を行おうとしており、電流監視にAD8210で双方向の電流測定を考えているのですが、内部構造及び、挙動がいまいち分りません。
多分使えば使えるのでしょうが、動きも理解したいため、お教え願います。

具体的にはシャント抵抗 0.05Ω電流 1A及び-1Aが流れた時の回路に流れる動きのを知りたいです。
(Vref 2.5v Vs 5v)
下記URL図29,35相当の回路
http://www.analog.com/static/imported-files/jp/data_sheets/AD8210_JP.pdf
特によくわからないのがA1から2本出力されているのが理解できません。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/10/24(Fri) 04:25
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
こんばんは。
nagogさん、はじめまして。

ここをご覧いただいているみなさまにも大変ご無沙汰しております。
多忙にかまけて長らく更新を怠っておりました事、お詫びいたします。

AD8210…アナデバですね。これは…差動アンプ、ひゃあー!
電源電圧をはるかに超える同相入力電圧を許容してしまうのですね。
しかも±4kVのHBM ESD(人体経由を想定した静電気放電)に耐えるのか…。
すごいデバイスを作られますね。

A1はシャント抵抗で生じた電位差を受ける、初段のアンプですね。
ここは差動入力で、差動出力になっているのですね。
PNPトランジスタQ1,Q2との組み合わせで、R1,R2下端の電位差を
キャンセルしているのだと思います。

図において、A1の差動入力は左側が+、右側が-と書かれていますが、
差動出力は書かれていないものの、左側が-、右側が+と推測します。

+入力の電位=R1下端の電位が、-入力に対して相対的に高くなると、
-出力の電位=Q1のベース電位を下げて、
Q1のエミッタ電流=R1に流れる電流を増加させ、
R1の電圧降下が増加して、R1下端の電位=+入力の電位を下げます。

同時に+出力の電位=Q2のベース電位を上げて、
Q2のエミッタ電流=R2に流れる電流を減少させ、
R2の電圧降下が低下して、R2下端の電位=-入力の電位を上げます。

+入力、-入力の電位関係が逆になると、出力側も逆の作用が働きます。
結果として、R1,R2のそれぞれ下端の電位は常に等しくなるように働きます。

以上のように、私はこの部分を読み取りました。
ただこのA1とQ1,Q2が無い場合…分圧抵抗だけの場合と比べてどう違うのか、
までは考えが及んでいません。R1,R2下端に電位差があると変換誤差とかが
出るのかな?ここは定かでないです。

さてさて、今夜はここまでとさせてください。
また改めて、具体的な数値での動作を追いかけてみましょう。
それでは、おやすみなさい。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/04(Tue) 11:01
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
すみません、1週間以上経過(T_T;
近日更新します。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/06(Thu) 00:40
投稿者 nagog
投稿元IPアドレス
投稿元ホスト
了解です。お待ちしています。

ちなみに、ブツ入手しまして、試してみました。
vs5v,vref2.5vでLPC1768のADコンバータを使用したのですが…。
マイコン側の電圧3.3vでして…。
アナログinの数字は0アンペアで0.76とかいう数字が出て、レンジがすごく少なくなってしまいました。
再度1.7v付近の三端子レギュレータの購入を考えねば…。

それから、モーターはPWM制御をする予定なのですが、低負荷デューティ比100%ですと12Vで0.1A〜0.15Aなのですが、同一負荷でデューティ比を下げていくと0.5〜0.8Aくらいまで上がっていきます。
動きもスムーズでなくギクシャクしています。
DCモーターの突入電流が高いのであろうと思うのですが、これをうまく動かす手にどのようなものがありますでしょうか?
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/19(Wed) 01:49
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
おひさしぶりです。やっと更新できます。
長らくお待たせしてしまい申し訳ありません。

データシートから読み取りました、AD8210の動作を定式化してみます。

式1 … Vdiff=Vp-Vn
Vpは+IN端子の電圧、Vnは-IN端子の電圧

式2 … Voffset=(VREF1-VREF2)/2
式3 … Vout=20Vdiff+Voffset

式1は入力の部分で、シャント抵抗に測定対象電流が流れた結果生じる電位差です。
データシートの図におきまして、左から右向きに電流が流れた場合は正の値、
右から左向きに電流が流れた場合は負の値となります。

式2は出力電圧のオフセットを表します。VREF1とVREF2の中央値となります。

式3がいよいよ最終の出力VOUTの電圧を表します。
式1の結果(Vdiff)を20倍したものに、式2の結果(Voffset)を加えたものとなります。

式1の結果(Vdiff)が0V…シャント抵抗に電流が流れておらず、電位差が生じていない
場合の出力VOUTの電圧は、式2の結果(Voffset)となります。

定式化/モデル化はここまでで充分だと思います。
シンプルなモデルで表せるという事は、優れたデバイス・使い易いデバイスだと
言って差し支えないと思います。ちなみに私はアナデバの回し者ではありませんよ。

さて、話題を現実的なアプリケーションに移しましょう。
AD8210とマイコン(LPC1768)の間で行ったり来たりします事をご了承ください。

シャント抵抗値に0.05Ωを選択されたのですね。
ここに±1Aの電流が流れると±0.05Vの電位差が生じますね。

LPC1768、NXPですか。ADCは12bit、良さそうなマイコンですね。mbedですかね?
電源が3.3Vという事は、VDD=VDDA=VREFP=3.3V、
VSS=VSSA=VREFN=0Vという事でよろしいでしょうか?この仮定で進めます。

この構成だと、ADx=0Vの時の変換結果がread()で0.0F、read_u16()で0、
ADx=3.3Vの時の変換結果がread()で1.0F、read_u16()で65535でしょうかね。
中央値…ADx=3.3/2Vだとread()で0.5F、read_u16()で32768になりますね。
(小数値の後のFは、C/C++言語におけるfloat型定数への接尾子です。)

Voffsetもこの中央値にしましょうか。
VREF1=3.3V、VREF2=0Vに接続するといいですよね。
Voffset=(3.3V-0V)/2=1.65V

シャント抵抗に±1Aの電流が流れると、出力VOUTの電圧は、
Vout=20×(±0.05V)+1.65V=+0.65〜+2.65V

これをAD変換するとread()で0.197F〜0.803F、
read_u16()では12908〜52627になりますね。
(もちろん、元がアナログ電圧なので多少のずれや、ふらつきが伴います。)

read()の場合、得た値から0.5Fを減じて、後に0.303Fで除してあげれば、
±1.0Fになり、電流値(単位はA;アンペア)になります。
0.303Fの代わりに、0.000303Fで除してあげれば、±1000.0Fになり、
電流値(単位はmA;ミリアンペア)になりますね。

read_u16()の場合、得た値から32768を減じて、後に32768.0Fで除してあげれば、
±1.0Fになり、電流値(単位はA;アンペア)になります。
32768.0Fの代わりに、32.768Fで除してあげれば、±1000.0Fになり、
電流値(単位はmA;ミリアンペア)になりますね。

いかがでしょう?追加のレギュレータは不要になりそうです。
ただし電源電圧3.3Vの精度があまり期待できない場合は、3.3Vから
リファレンスIC等を利用して高精度の2.048V等を生成するといいでしょう。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/19(Wed) 03:10
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
すみません、
式2に誤りがありましたので訂正します。

式2 … Voffset=VREF2+(VREF1-VREF2)/2
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/19(Wed) 12:38
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
さらに掘り下げます。
記事番号107で、nagogさんが実動作を確認された状況は
おそらく、VREF1=5V、VREF2=0Vかと思います。

Voffset=VREF2+(VREF1-VREF2)/2=0V+(5V-0V)/2=2.5Vですね。

シャント抵抗に電流が流れておらず、
電位差が生じていない、Vdiff=0Vの状況では、

Vout=20Vdiff+Voffset=20×0V+2.5V=2.5Vです。

これを0〜3.3VフルスケールでAD変換すると結果は
read()の場合、0.76です(余談ですが正規化って便利ですね)。
実動作の確認結果と一致していますね。

ただこの状況では、2系統の電源電圧(5Vと3.3V)の間に
無視できない相対誤差がある場合、ゼロ点までもが動いて
しまいます。

AD8210のVREF1を3.3V、LPC1768のVREFPも3.3Vとすれば、
この3.3Vに無視できない誤差が生じたとしても、ゼロ点は
動きません。レシオメトリック動作と呼ばれます。

信号処理系(アナログフロントエンド)の基準電圧と、
AD変換系の基準電圧は同一にするか、厳密に一定の相対関係に
するのが鉄則です。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/23(Sun) 01:09
投稿者 nagog
投稿元IPアドレス
投稿元ホスト
レスありがとうございます。
使い方(主にvref)が間違っているのがわかりました。
自分はvref1 と vref2をショートさせて2.5vにしてました。
次はvref1 3.3v , vref2 GNDで試して見ようと思います。

また、レスの中でリファレンスicを使用してのadcの運用がありましたが、
lpc1768にどのようにつなぐのでしょうか?
余談ですが、正規化ってなんでしょう?
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/23(Sun) 03:01
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
こちらこそありがとうございます。
この番組は視聴者のみなさまで成り立っております。
いえ、雑談部屋ですのでどんな話題でもどんどんご参加
いただけるとなお嬉しいのです…例えば自慢話とか、
失敗談とか、なんでも結構なのです。

さてさて、ADCのリファレンス電圧の接続法について解説します。
ユニポーラADC(正方向のみのアナログ電圧を扱う)に限定させて
ください。バイポーラ(正負両方向のアナログ電圧を扱う)は私、
経験ないんです。

まずADCの変換結果の値の範囲からお話しします。
最小値は0で、ほぼ例外無いかと思います。
最大値はADCの分解能によります。
ADCの分解能はビット数で表される事が多いです。
分解能8ビットの場合、最大値は255、
分解能10ビットの場合、最大値は1023、
分解能12ビットの場合、最大値は4095、
分解能16ビットの場合、最大値は65535となります。

LPC1768+mbedの場合、read_u16()で0〜65535の値を結果として得ます。

次にADCのリファレンス入力についてです。
変換結果の値が最大値に達する電圧を設定する入力をVREFP
(Voltage REFerence Positive)、変換結果の値が0に達する電圧を
設定する入力をVREFN(Voltage REFerence Negative)と呼びます。

ADCの品種によって、VREFP入力のみを持つもの、
VREFPとVREFNの両方の入力を持つものがあります。
前者では単にVREFと呼ぶ事のほうが多いですね。

VREFPは外部VREFP入力/内部電圧リファレンス/電源電圧から
選べるようになっている品種が多いかなと思います。

VREFNは外部VREFN入力/GNDから選べるようになっている
はずです。VREFNを持たない品種ではGND固定でしょうね。

今回のアプリケーションの場合、リファレンスICからの出力を
AD8210のVREF1と、LPC1768のVREFPに接続すると良いでしょう。
それぞれの入力端子の直近に0.1μFのチップ積層セラコンを
通してGNDに接続しておくと、インピーダンスを下げてノイズに
強い設計となります。リファレンスICがこれらの容量性負荷に
対応するか否かは確認が必要です。

リファレンスICがその接続先の抵抗性負荷に対応する電流供給能力が
あるか否かも確認が必要です。AD8210はその内部で合計24〜40kΩの
分圧抵抗に接続されますのでリファレンス電圧から電流を求めます。
LPC1768はCMOSなので電流はほぼ流れないでしょう、

LPC1768のVREFNはGNDに接続します。GNDは極力広いベタパターンで
インピーダンスを下げておく事は常に心がけましょう。

正規化は色々な状況で微妙に異なる意味を持って使われる言葉ですが、
ほぼ共通する意味は「条件を揃える」でしょうか。
それぞれ異なる範囲で変化する複数の値を扱う際に、
最小値と最大値を揃えておいた方が都合が良い場合に用いられます。
正方向のみに変化する値では0〜1に、
正負両方向に変化する値では±1に揃える事がほとんどかと思います。
mbedではread()が正規化されたAD変換結果を返してくれるのですね。
ADCの分解能を意識する必要が無いので便利ですね。

モーターのPWM制御も経験が無いのですが、
モーターの品種や回転数、負荷の状況によってそれぞれ異なる、
最適なPWM周波数があるそうですよ。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/23(Sun) 09:14
投稿者 nagog
投稿元IPアドレス
投稿元ホスト
とても為になります。
しかし、lpc1768にvrefpは存在するのですが、dip pinoutに設定されておらず、内部の3.3vに繋がっているようなのです。
この場合は基盤に直接実装するものなのでしょうか?

下記に参照としたページを記載しました。
http://developer.mbed.org/users/Lerche/notebook/lpc1768-pin-functions/
http://mbed.org/media/uploads/chris/mbed-005.1.pdf

pwmの方はモータードライバの規定周波数が100MHzだったのでパルスの周期をpwmout period_us(10)とし、周期10usで動かしてみたら改善しました。
が、突発的にモーターが多く回る現象が発生しました。
そのため、とりあえず、周期1msで回してます。

また、prs pwm制御は普通のマイコンでもできることなのでしょうか?
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/23(Sun) 13:50
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
なるほど…求められる精度・安定性と与えられる条件によって、
いくつか方策が考えられます。

1. 最高の精度・安定性が要求され、電源電圧3.3Vの誤差が大きい
→改造(VREFPピンをはね上げてジャンパ)してでも外部リファレンス電圧に接続。

2. そこそこの精度・安定性が要求され、電源電圧3.3Vの誤差は小さい
→電源電圧3.3Vをリファレンス電圧としても良いでしょう。

3. そこそこの精度・安定性が要求され、電源電圧3.3Vの誤差が大きい
→改造まではちょっと…という場合の方策です。以下に続きます。

未使用のAD入力チャンネルがまだあるかと思います。
そこに外部リファレンス電圧を接続しましょう。

AD8210出力電圧と、外部リファレンス電圧を交互に複数回AD変換して、
それぞれの平均値を求めます。前者を後者で除して(割り算して)あげれば
電源電圧3.3Vの誤差はキャンセルできます。
複数回の平均を取る理由は、電源電圧3.3Vの経時変化の影響を排除するためです。
感覚的・経験則的で申し訳ないのですが、最低3〜4回は取りたいかな?
この方法のデメリットは、分解能が犠牲になりうる点です。

こういったシステム的な設計は、常にトレードオフ(メリット・デメリットが
多々ある中でどれを選択するか?)を考慮する必要があり、あらゆる場面で
最適解となる決定打など存在しないものです。
だからこそ、設計屋の実力が試される機会でもあるのですが。

ところで、モーターに100MHzのPWM周波数は高すぎる感覚がありますね。
周期10μSだと周波数100kHz…これもモーター起動時にはどうかなあと思います。
これも実際にやってみた訳ではないので申し訳ないのですが、2桁〜4桁Hzが
モーター起動時に与えるPWM周波数として一般的なのかなと思います。

PRS-PWM…聞いた事が無かったので検索してみました。
Pseudo Random Sequence−Pulse Width Modulation;疑似乱数列PWMですか。
スペクトラム拡散PWMとか、PDM(パルス密度変調)に近いものですかね。

ここ最近はパワエレやメカトロの発展が著しいので、各マイコンメーカーとも
特徴のあるPWMモジュールを内蔵した製品を出されていますね。

PRS-PWMはサイプレスのPSoCという、マイコンと呼ぶには失礼な程、
個性的な特徴を持つ製品も対応しているようです。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/23(Sun) 20:50
投稿者 nagog
投稿元IPアドレス
投稿元ホスト
なるほど。
やはり、改造になるのですね。

>>モータードライバの規定周波数が100MHzだった
すいません。間違いでした。
100kHzです。(TB6612FNG )
ともあれ、1000Hzで現在駆動しているのは、一般的な数字なのですね。
安心しました。

それと、リファレンス電圧について少し調べたところ、 2. の ”そこそこの精度、安定性で誤差も小さい(1%程度)”(LD1117S33)ため、このまま行こうかと思います。

で、電源調べて行って気になったのですが、先ほどのURL(http://developer.mbed.org/media/uploads/chris/mbed-005.1.pdf)で3枚目 Vref周りの電源ですが、+A3.3V(10番)と+3.3V(42番)がコイルで繋がっているようにおもうのですが、これは何のためでどのような効果があるのでしょうか?
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/26(Wed) 02:34
投稿者 中の人1号
投稿元IPアドレス
投稿元ホスト
結論だけ先にお話してしまいますと、
デジタル系電源とアナログ系電源を接続するコイルは、
ノイズ対策のためのものです。

ノイズ対策につきましては、私の知る範囲だけでも、結構長い
お話となってしまいますので、新しく連載を始めようと思います。

もちろんそちらでも追加のご質問や、異論反論・ツッコミ等、いつでも
歓迎いたしますので、引き続きましてよろしくお願いいたします。
記事編集 編集
【旧BBSから移行】RE:AD8210の挙動について
投稿日 : 2014/11/28(Fri) 18:54
投稿者 nagog
投稿元IPアドレス
投稿元ホスト
長々とおつきあいいただきありがとうございました。
ノイズ対策の連載楽しみにしています。
記事編集 編集
タイトル
お名前
画像添付


(削除用)
暗証キー
内容

- WEB PATIO -