Sign-Magnitude Drive (Modular Circuits和訳記事)

www.modularcircuits.com

 

はじめに

この記事では、Hブリッジの一般的な駆動モードの一つである、sigh-magnitude driveについて詳しく説明します。Hブリッジ全般に詳しくない方は、Hブリッジの基本的な動作と、さまざまな駆動モードについて説明した、このシリーズの前の記事を最初に読むことをおすすめします。

 

 

まずは基本的なことを軽く復習しましょう。Hブリッジはこんな感じです。

f:id:chikuwa3777:20190504025359p:plain

 

以前紹介したモーターの等価回路も利用します。

f:id:chikuwa3777:20190504025350p:plain

基本動作

 sign-magnitude driveでは、次の4つの駆動状態があります。

(マッピングが1,2,5,6となっている理由は前回の記事にあります)

Mapping 1 Q1 Q2 Q3 Q4
on-time state close open open close
off-time state close open close open

 

Mapping 2 Q1 Q2 Q3 Q4
on-time state close open open close
off-time state open close open close

 

Mapping 5 Q1 Q2 Q3 Q4
on-time state open close close open
off-time state close open close open

 

Mapping 6 Q1 Q2 Q3 Q4
on-time state open close close open
off-time state open close open close

これらは、4つのスイッチング素子がPWM制御信号のオン時間とオフ時間に取る状態を表しています。

この表をよく観察すると、4つの状態が、AサイドかBサイドのどちらを一定に保つか、ハイサイドとローサイドどちらをオンにし続けるかの2つの二択であることがわかります。

 

通常、この二択の一方は予め選択されており、もう一方の二択を制御信号によって決定します。

 

マッピング1では、オン時間中は、Q1とQ4がオンになっています。つまり、モーターの左側はVbatに接続され、右側はグランドに繋がっています。電流は電源からモーターを通って流れます。

f:id:chikuwa3777:20190504025345p:plain

オフ時間になると、Q1はオンのまま、Q4がオフになりQ3がオンになります。この状況では、ブリッジを通る電源からグランドへの経路がありません。しかし、モーターの両端子はVbatに接続されており、モーターを短絡しています。スイッチング時にモーターに電流が流れていると、その電流はループ内を循環します。

f:id:chikuwa3777:20190507205757p:plain

ブリッジを流れる電圧と電流は次のような波形になります。

 

f:id:chikuwa3777:20190507205858p:plain

モーターに印加される平均電圧は、次のように計算できます。

 

Vmot_avg = Vbat * ton/tcycle

tcycleは周期で、ton + toff = tcycleです。

 

式から、このマッピングではモーターを逆回転させられないことがわかります。

逆回転させるには、モーター端子に負の(平均)電圧を印加する必要がありますが、これでは不可能です。モーター電圧は0~Vbatの間でしか調節できません。

これは問題ですが、マッピング5も計算してみると逆の事が起きます。つまり、モーターを逆回転させることしかできず、モーター平均電圧は-Vbat~0の間にしかなりません。

 

機能的なフルブリッジを作るには、これら両方のマッピングを使用し、

制御信号でどちらかを選択できるようにする必要があります。駆動モードの名前はこれに由来します。

一方の制御信号は、2つのマッピングのどちらかを選択し、モーターに印加する電圧の符号を決定するのに使われ、もう一方のPWM信号は、その(平均)電圧の大きさを決定するために使用されます。

 

残り2つのマッピングは、先述の2つのマッピングと僅かに違います。その違いは、オフ時間の間、2つのハイサイドスイッチの代わりに、2つのローサイドスイッチがオンになることです。

これは、モーターの端子が両方共バッテリーの代わりにグランドに接続されていますが、やはりショート状態にあり、モーター電流はブリッジ内を流れることを意味します。

f:id:chikuwa3777:20190512232238p:plain

 (メモ:電気的にはどちらでも変わりはありませんが、現実の、特にブートストラップ回路を使用したフルNchモータードライバでは、ハイサイド側のゲート駆動電源の都合で、こちらの、ローサイドスイッチが両方ターンオンするマッピングを使用する事が多いです。)

電流の流れ

システム内の電流の流れを詳しく見てみましょう。オン時間の間、モーターのインダクタには、Vbat-Vgの電位差がかかります。

モーターの内部抵抗を無視(もしくは、スイッチング周波数がモーターの電気的時定数よりもはるかに高いと仮定)すると、この電圧はインダクタに直線的な電流ランプ(dI/dt = V/Lm)を発生させます。Vbatが一定であると仮定したため、電流増加の勾配はVg、つまりモーター速度によって決定されます。

 

無負荷でモーターが回転している時は、VgがVbatに非常に近いので、電流変化がとてもゆっくりになります。

ストールしている場合、Vgは0なので、電流ははるかに速く増加します。

逆回転から正回転まで急激に回転方向を変えると、最も電流増加が速くなります。

この場合、Vgは絶対値ではVbatに近くなりますが、極性は逆になります。

 

オフ時間の間、モーターは短絡された状態です。スイッチング素子と内部抵抗を無視すると、電流は連続的に流れ続け、インダクタの両端ではVgが観測できます。発電電圧とモーターのインダクタンスによって電流は直線的に減少します。

 

定常状態 -リプル電流の計算1-

 さまざまなパラメーター(電圧、電流)が一定だと、サイクル間の平均を取れば、ブリッジは定常状態で動作していると言えます。

この時、モーターは一定のトルクを出力しながら、回転数も一定になります。

 

ブリッジの状態がサイクルごとに変わらない場合、それはサイクルの最初と最後のモーター電流が同じでなければなりません。

もちろん、これはサイクル中の電流が一定であることを意味せず、サイクル中の電流変化はリップル電流と呼ばれます。

オン時間とオフ時間の間に直線的な電流変化があると仮定すると、リップル電流は以下のようになります。

 

Iripple = (Vbat-Vg)/Lm*ton = Vg/Lm*toff

 

ここからVgについてまとめると、次のようになります。

 

Vg = Vbat* ton/(ton+toff) = Vbat * ton/tcycle = Vmot_avg

 

定常状態では、モーター起電力はモーターから見える平均電圧に等しくなければならない(等しくなる)ということがわかります。

平均電流は、その状態になるために任意の値を取ります。

さて、このVgを先程の方程式に戻すと、次のようになります。

 

Iripple = Vbat / Lm / tcycle * ton*toff

 

そして、toff = tcycle - tonより、

 

Iripple = Vbat / Lm / tcycle * ton*(tcycle-ton)

 

これは、ton = tcycle / 2で最大値を取る二次関数(放物線)です。そのため、リップル電流はデューティーが50%の時に最大になり、次のような値になります。

 
Iripple_max = Vbat / Lm * tcycle/4

 

 現実には -リプル電流の計算2-

モーターの発電電圧は速度に比例し、電流はトルクに比例します。前の章に基づくと、完全な速度制御ができるように思えます。

発電電圧はモーターから見た平均電圧に等しく、速度に比例します。

この平均電圧は、制御信号のPWMのデューティーサイクルにのみ依存し、トルク(電流)は発電電圧とモーターから見た平均電圧が等しくなるように、任意の値(極めて大きい値になりうる)を取ります。

 

なにかおかしくはないでしょうか?

DCモーターは、負荷が変化した時に制御回路無しで一定の速度を維持できないことは明らかです。

理由は簡単で、モーター(とスイッチング素子)の内部抵抗を無視したからです。

 

内部抵抗を考慮すると、モーター電流は内部抵抗による電圧降下を起こし、インダクタからは残りの電圧が見えることがわかります。

(次の式では、モーター電流はそれほど変化しないと仮定して単純化したため、オン時間とオフ時間の間、抵抗の電圧降下は一定であるものとして扱います)

 

オン時間中

VL_on = Vbat – Vg – Imot_avg*Rm

 

オフ時間中

VL_off =  -Vg – Imot_avg*Rm

 

これを以前のリップル電流の式に代入すると、電流(トルク)は意図した速度と実際のモーターの速度の差に依存する事がわかります。

 

Vg = Vbat * ton/tcycle – Imot_avg*Rm = Vmot_avg – Imot_avg*R

 

入力コンデンサの容量

前の章ではリップル電流を計算しましたが、モーター電流はVgをVmot_avgに等しくするために、どのような値にも収束するということを述べてきました。

これはおもしろい結果を導きます。つまり、オン時間とオフ時間の間に電流が流れる方向を予測することはできません。実際、Imot_avgがIrippleの半分より小さい場合、モーター電流はサイクル中に2回流れる方向を変えます。

 

この電流変化の一方(上図の電流下降時)は、モーターの両端子を短絡しているオフ時間中に起こりますが、もう一方はモーターが電源に接続されている時に起こります。

そのさい、オン時間中のはじめの短時間、ブリッジから電流が流れ出すことになります。

ほとんどの電源はこのような急激な電流方向の反転に対応できず、逆電流が電源へ吸収されない場合、電源電圧は非常に危険なレベルに上昇します。

 

この逆電流を適切に処理するために、ブリッジの電源と並列にコンデンサを配置して、ブリッジからの電流を一時的に吸収する必要があります。

電流が順方向に(ブリッジの上から下へ)流れると、コンデンサは余分な電荷をサイクルの一部でモーターへ戻します。

 

けれども、このコンデンサはどれぐらいの大きさにすれば良いのでしょうか?

これは多くの要素に依存するので、それらを記します。

 

・電源はどのぐらいの逆電流を扱うことができますか?

・回路はどのくらいの電圧上昇に耐えられますか?

・モーターの特性(主にインダクタンス)はどのくらいですか?

・ブリッジのスイッチング周波数とデューティーサイクルは何ですか?

・モーターが出力する必要のあるトルク(モーターの平均電流)はどのくらいですか?

 

これらのパラメーターのいくつかは、動作条件と正確なアプリケーションに依存しているので、いくつかの単純化をして最悪条件を想定しましょう。

 

・電源に逆電流が流れない

・Imot_avgが0であると仮定します。電流は正確にオン時間の半分で方向を変えます(Imot_avgでもVmot_avgとは逆の場合、キャパシタは条件に合わせた大きさにすることはできません。その場合、キャパシタはサイクル中にその余分な電荷を完全に開放することができないためです。)

リップル電流が最大で、デューティーサイクルが50%であると仮定します。

 

これらの条件下では、電流は時間の50%の間上昇し、全サイクル時間の25%で0と交わります。

 

オン時間の前半にシステムに開放される総電荷は次のとおりです。

 

release = 1/2 *((I ripple_max / 2)* t on / 2)

 

ご存知の通り、

 

ton = tcycle/2

 

最終的に最大リプル電流は次のとおりです。

 

ripple_max = V bat / L m * t cycle / 4

 

これらを組み合わせて単純化すると、次のようになります。

 

Qrelease = 1/64 * Vbat / Lm * tcycle2

 

先述したように、電源が電荷を全く扱えないと仮定すると(つまり、コンデンサがすべてを吸収する必要があるとすると)、コンデンサの電圧は上昇します。

 

Vbat_ripple = Qrelease/C

 

そのため、電源電圧の変化をどれだけ許容するかがわかっていれば、コンデンサの容量を求められます。

 

C = Qrelease/Vmax_bat_ripple

Qrelease を置き換えると、次のようになります。

 

C = 1/64 * Vbat/Vmax_bat_ripple / Lm * tcycle2

 

Vbat/Vmax_bat_rippleという用語は、電源電圧と、許容リップル電圧の比です。例えば、5%のリップルを許容する場合、この値は電圧に関係なく20です。また、必要な容量値はサイクルタイムの二乗に比例します。

 

いくつかのモーターを計測したところ、最も低いインダクタンス値は30uH程度でしたが、もちろんこれはモーターごとに大きく異なります。

実数値を得るために、インダクタンス30uH、許容リップル5%、スイッチング周波数20kHzを代入すると、電源に必要な最小容量は26uFとなります。

例えば、1kHzでのスイッチングを行う場合、必要な静電容量は10000uF以上です!

 

過渡状態

VgがVmot_avgと等しくないかぎり、ブリッジは定常状態ではありません。

 Vgが低い時、モーターは加速し、Vgが高い時はブレーキがかかります。

上記のように、オン時間の電流変化は、次の通りです。

 

Idelta_on = (Vbat-Vg)/Lm*ton

 

オフ時間の電流変化は

 

Idelta_off = Vg/Lm*toff

 

です。

VbatをVmot_avgで表し、最初の式に代入すると、次のようになります。

 

Idelta_on = (Vmot_avg-Vg)/Lm*ton + Vmot_avg/Lm*toff

↑この式わからん

 

次に、オン時間開始時とオフ時間終了時の電流の違いを確認しましょう。

 

Idelta_cycle = Idelta_on – Idelta_off = (Vmot_avg-Vg)/Lm*ton + Vmot_avg/Lm*toff – Vg/Lm*toff

 

変形すると、

 

Idelta_cycle = (Vmot_avg-Vg)/Lm*tcycle

 

つまり、モーター電流は、出力電圧(Vmot_avg)と実際の発電電圧(Vg)との間の差に比例してサイクル毎に変化します。

 

電流はトルクに比例するため、出力電圧と発電電圧に差があると、トルクは直線的に変化します。

この単純化されたモデルでは永遠に電流が変化し続けますが、もちろん実際はそうはなりません。

1つめに、内部損失が最大電流を抑制しています。

最終的には、変化したトルクによってモーター速度も変化し、VgがVmot_avgに接近することで電流変化が収まると思われます。

VgとVmot_avgが等しく、トルクがそのバランスを維持するだけの

 

(モーターのモデル化に関する記事を読むと、多くの場合、モーターとそれに接続された機械システムは、大きなコンデンサと一種の損失としてモデリングできることがわかります。

このコンデンサ{システムをコンデンサとしてみなした場合}は、新たな定常状態に達する時定数はモーターの内部抵抗によって決定され、実際の応答は指数曲線に近似できます。)

 

制動

加速時には問題になりませんが、ブレーキ時には奇妙なことが起きます。

VgがVmot_avgより高い時はトルク(電流)が減少しだしますが、通常、電気的時定数は機械的時定数より数桁小さい(詳細はモーターモデリングに関する記事を参照)ため、電流(とトルク)はシャフトの回転方向と逆方向に変化します。

 

この逆電流がどれほど大きくなる可能性があるのか、検討してみましょう。

まず、モーターモデルに抵抗を再度導入する必要があります。なぜならば、抵抗がないと、発電機電圧Vgが変化してVmot_avgに等しくなるまで変化し続け、非常に大きな値に達してしまうからです。

抵抗を配置すると、電圧降下によってインダクタの電流増加は抑制され、ブリッジに流れる電流は一定値へ収束します。

 

定常状態方程式を使うことで、平均電流を計算できます。

Vg = Vmot_avg – Imot_avg*Rm

これを電流について解くと、以下のようになります。

Imot_avg = (Vmot_avg-Vg)/Rm

 

VgとVmot_avgが等しくない時、モーターの内部抵抗によってシステムが定常状態に保たれます。

 

予想通り、平均モーター電流が負になることがわかります。これは、トルクがシャフトの回転方向と逆になっていることを意味し、モーターは制動状態にあるということです。

 

オフ時間中、モーターと2つのローサイドFET(マッピング2,6の時)、もしくは2つのハイサイドFET(マッピング1,5の時)を流れます。オン時間の間は電源へ電流が流れます。モーターを流れる電流は常に負ですが、オン時間中のマッピングによって電源に流れる電流の方向は異なります。

 

f:id:chikuwa3777:20191013035736p:plain

または

f:id:chikuwa3777:20191013035725p:plain

 

最初のケースは回生ブレーキと呼ばれ、この電流はバッテリーを充電します。

2つめのケースはダイナミックブレーキと呼ばれ、バッテリーを放電します。

 

回生ブレーキ

バッテリーの充電はメリットだと思うかもしれませんが、回生ブレーキの使用には2つの大きな制約があります。

1.これまで示してきたように、ブレーキ時の平均電流はVmot_avgとVgの差に依存し、Vmot_avg=-Vbatの時に最大になりますが、バッテリー電圧と逆に電流が流れている時にしか充電はできないので、回生ブレーキ時のトルクは制限されます。

より多くの制動トルクを必要とする場合はダイナミックブレーキを使わなければなりません。また、回生ブレーキだけを用いて、速度0まで一定の制動力を発生させ続けることはできません。

2.Vmot_avgとVgの差が広がるにつれ、モーターのブレーキ電流は増加しますが、その電流が全てバッテリーの充電に使われるわけではありません。充電電流はオン時間中のみに流れるからです。Vmot_avgを小さくしてブレーキ電流を増やそうとすると、tonも減少し、充電効率も低下します。具体的に、各サイクルごとのエネルギー移動量は以下のとおりです。

Ere-charge = Vbat * Imot_avg * ton

Imot_avgを置き換え、さらにVmot_avgを置き換えると、

Ere-charge = Vbat/Rm*(Vbat*ton/tcycle-Vg)*ton

このようにtonの2時間数になり、Ere_chargeが最大になるのはton = 1/2 * Vg/Vbat * tcycleで、言い換えれば、Vmot_avgVgの半分の時です。

制動時のエネルギー回生能力や、最高の回生効率を維持する時の制動力が制限されていることを示しています。

 

これらの制約が問題にならない場合でも、回生されたエネルギーの処理方法をどうするのか考えなければなりません。

 システムの電源がバッテリーの場合、バッテリーの種類によってエネルギーを吸収する場合と吸収しない場合があります。さらに深刻な問題として、バッテリーの充電量が充電レベルに依存することです。完全に充電されたバッテリーにそれ以上充電することはできません。ある条件下では、バッテリーを過充電するか、ブレーキ能力を制限することになりますが、どちらも良い選択肢とは言えません。

 

電源装置からシステムに給電している場合、さらに制限されます。特殊な電源でなければ、エネルギーをコンセントに逆流させることはできません。

 

どちらの場合でも、最も安全なのは、回生エネルギーを電源に戻さず、ローカルで消費または蓄積することです。他の負荷が電力を消費している場合、その負荷の要求に応じた電流を供給できます。エネルギーを必要とするライト、コンピューター、他のモーター、ヒーター、センサー、同時に稼働していないものでも、エネルギーを必要とするものがあるかもしれません。

これでも良いのですが、あなたの車にどれだけシートヒーターがついているかどうかで、制動距離が変わるのは嫌ですよね?

 

これらの選択肢は、回生したエネルギーを投入することはできますが、万能ではありません。バッテリーのように繊細ではない、信頼性が高いコンデンサのようなエネルギー貯蔵装置が必要です。問題は、必要なサイズ(数F)の容量のキャパシタを積むことは非現実的です。(と書かれていますが、電気二重層コンデンサを用いれば条件によっては可能かもしれません)

フライホイールと呼ばれる別の方法もあります。エネルギーが余っている時はホイールを回し、必要な時に回生ブレーキをかけてエネルギーを取り出します。この仕組はいくつかの用途(鉄道やF1)で実用化されています

 

列車、地下鉄、その他大型で制御されたシステムは通常、回生ブレーキの恩恵にあずかっています。また、回生エネルギーの供給対象が非常に多い場合もあります。

 

以上からわかるように、回生エネルギーを安全かつ確実に処理するかという問題は複雑です。電気機械システムの全体像を理解する必要があり、あらゆるシステムに適合する最適解はありません。

 

ダイナミックブレーキ

複雑な問題を回避するために、回生ブレーキを使いたくない場合、ダイナミックブレーキのみを用いることになります。どうするのか?まずは、システムが回生ブレーキモードになっているかどうかを把握しなければなりません。2つの手段があります。

1.VgがVmot_avgよりも大きいが同じ極性の場合、ブリッジは回生モードにあることがわかります。この手段を用いるには、Vgまたはそれに関連するパラメーターを測定する必要があります。通常は、ロータリーエンコーダを使ってモーターの回転数を測定します。

2.ブリッジ電流がバッテリー電圧と比較して逆方向に流れている場合は、ブリッジは回生モードにある、ということを利用します。これは、正負電流を計測できるセンサーが必要です。

 

適切なフィードバックがあれば、駆動方向を変更して、制動中は常にmot_avggが逆になるように制御できます。しかし、別の問題があります。ブレーキをかける必要があることをどうやって知るのでしょうか?意図した速度と実際の速度がわかっている場合のみ、シャフト速度(またはg)を測定する必要があり、何らかの制御回路を実装する必要があることがわかっているだけです。(が、そもそもこの記事を読んでいる人はロボット屋である確率が高いのであまり気にならないかも知れません)

 

すべてが揃うと、回生ブレーキを正しく回避できますが、さらなる問題が発生します。ダイナミックブレーキのみで制動した場合、どれだけの制動トルクになるでしょうか?トルクはモーター電流に依存しています。また、制動時の平均モーター電流は次のように表せます。

mot_avg =(V mot_avg -V g)/ R m

モーターがダイナミックブレーキになるようにするには、Vmot_avgがモーター電流と同じ極性(Vgと反対)である必要があります。したがって、これまですべての例のように、Vgが正の場合、Vmot_avgは負ある必要があります。これは、Imot_avgを一定よりも小さくできないという不都合な結果をもたらします。

abs(Imot_avg) >= Vg/Rm

これは、モーターを緩やかに制動できないことを示しています。緩やかに制動したいのであれば回生ブレーキ使うほかありません。実際、モーターに加えることのできる最小の制動トルクは速度に比例することがわかります。したがって、高速域では低速域よりも強力なブレーキがかかります。

 

概要

これで、Sign-Magnitude Driveでブリッジを駆動するのが容易ではないことがおわかりでしょう。一見すると、2つの制御信号(方向とPWMピン)が必要になるだけに思えますが、詳細な分析によって、ブリッジの操作方法に関係なく、ブレーキが問題であることが示されました。さまざまな不都合を伴う回生ブレーキを使用するか、面倒な回生ブレーキ回避のどちらかを選ぶしかありません。バッテリーの過充電を防ぐために、ブリッジ電流と電源電圧を監視しなければならないでしょう、回生ブレーキを回避したい場合は、何かしらの方法でモーター速度を測定する必要があります。

 

幸いなことに、PWMを0%にして効果的にモーターを短絡させれば、モーターを効果的かつ安全に短絡できます。バッテリーを過充電することもなく、ブレーキを掛けて安全に停止できます(外力がない場合)。ただし、その場合モーターが停止するまでの時間を制御することはできません。電気的には安全ですが、機械的には安全でないかもしれません。

 

モーターに外部トルクが与えられている場合、制動トルクは速度に比例するので、モーターを短絡しても完全に停止させることはできません。モーターを短絡しても、電気自動車が坂道で停止することはありません。バッテリーは過充電されないので安全ではありますが、結局は溝に落ちてしまうでしょう。

 

安全面について言えば、Sign-Magnitude Driveは1つの利点があります。それは、入力信号を静的状態(PWM=0%に固定)に設定できることです。この状態では、モーターはバッテリーの電圧の影響を全く受けません。これは、マイクロコントローラーのように、通常の動作を開始する前に何らかのセットアップが必要なシステムでは特に重要です。制御ピンがデフォルトの状態で、モーターが安全に停止し、システムの初期設定が完了した後のみ駆動状態に遷移できるようハードウェアを設計できます。(Lock Anti-phase DriveでもゲートドライバのEnableピンなどを使って同様のことができるのでSign-Magnitude Drive特有のメリットということではありません)

 

全体的に、大規模なSign-Magnitude Driveはシンプルに見えますが、細かいいくつかの問題を伴います。要求が厳しくない単純なアプリケーションではそのままでも利用できますが、多くの場合、危険な状態や不要な状況を察知し、回避するための監視回路が必要になるでしょう。

 

どこへ向かうのか

駆動回路と部品の選択について説明する時に、Sign-Magnitude Driveに立ち返りますが、その前にLock Anti-phase Driveについて説明し、2つを比較します。

 

 

************************************************************

この記事はModular Circuits "H-Bridges – Sign-Magnitude Drive"を、著者のAndras Tantos氏の許可と協力を得て和訳したものです。技術的には正確に訳するように努めていますが、全体的に意訳の割合が多いです。記事中のリンクはWikipediaのみ日本語版へ飛ぶようにしています。

 

わかりやすさと訳しやすさを優先した結果、意訳の割合と後付コメントが増えました。

式が見辛い・番号が振られていないので参照し辛いので後々修正するかも知れません。