うめた講座 ~PWM制御~

制御

そもそも制御とは?と,ここからの話ですが,あるロボットが何らかの動作をしたいとします. このとき,モータを使ったり,あるいはLEDを光らせたりすると思います. これに関して,どの程度の強さでモータを回転させるのか,どの程度の明るさでLEDを光らせるのか, そして,どうやって回転数や光の量を調整するのか,が問題になってきます. 今回の講座では,この太字部分の問題を,PWM制御で解決します.

可変抵抗による古典的な制御

モータの回転数や,LEDの明るさを調整したいとき,真っ先に思いつくのは,電圧を変えることです. この回路図を見てください.
回路図1
モータが2個と,それぞれに電池がつながっています. このとき,左側のモータに対して,右側のモータには3倍の電圧がかかっています. これは単に,左側のモータに対して,右側のモータが3倍の速さで回転します. モータの回転数は,電圧に比例します. LEDも同様に電圧に比例します(厳密には違いますが,説明の便宜上).

電圧を変動させることによる,回転数や明るさの調整ですが,現実的ではありませんよね. なぜなら,ロボットが動作している最中に,電池の継ぎ足しを行わなければならないからです.

これがだめなら次に思いつくのは,電池はそのままで,つまり,一定の電源電圧の状態で,モータにかかる電圧を調整する方法です. 次の回路図を見てください.
回路図2
先ほどの回路図と比較して,上側の経路に何かつきましたよね.この部品は,可変抵抗と言います. その可変抵抗ですが,これには"つまみ"がついており,そのつまみを回すことで抵抗値が連続的に変わる,という機能を持っています. また,抵抗値は,0~その可変抵抗の上限値まで,変わります.

このときの,モータにかかる電圧を求めてみます.
電源電圧を\(V_{CC}\),可変抵抗の抵抗値を\(R_1\),モータの抵抗値を\(R_2\)とすると, モータにかかる電圧\(V_2\)は, \(V_2 = \frac{R_2}{R_1 + R_2}V_{CC}\) となりました. \(R_1\)がつまみによって変動するのですから,\(V_2\)が変化することが分かります.

これで,モータにかかる電圧を制御できます. しかし,当然ながら,可変抵抗にも電圧がかかる場合がありえますよね. 電圧がかかれば,\(P = IV\)から,エネルギーを消費することが分かります. つまり,可変抵抗部分で熱による損失がおこるのです. 微々たる損失ならよいのですが,この損失が大きくなると,それに伴って,発熱量も増加し,可変抵抗の許容発熱量を超えてしまいます.

ロボットや小型車両などに使う一般的なモータの場合,可変抵抗の許容発熱量がオーバーしてしまい,使えません. ただし,回路の簡易性を考えると,手のひらに収まるサイズのモータならば,便利な手段かも知れません.

可変抵抗でモータにかかる電圧を変化させることができる.
この制御法だと,可変抵抗で熱による損失(発熱)がおこる.
小型モータなら便利な制御法かも知れない.

スイッチングによる制御

では,可変抵抗による制御法の欠点を解決する方法を考えてみます. 可変抵抗でモータにかかる電圧を制御した場合,可変抵抗で熱による損失が発生するのでした. この発熱ですが,実際につまみを回して,抵抗値を変えた場合,どの条件でどれだけ発熱するのか計算してみます.

可変抵抗にかかる電圧を\(V_1\)とすると,\(V_{CC} = V_1 + V_2\)なので,\(V_1 = V_{CC} - V_2\),つまり,\(V_1 = V_{CC} - \frac{R_2}{R_1 + R_2}V_{CC}\)となります. このとき,電流\(I\)は,\(I = \frac{V_{CC}}{R_1 + R_2}\)となります. ここで,可変抵抗の熱による損失を\(P_1\)とすると,\(P_1 = I \times V_1\),代入して計算すると,\(P_1 = \frac{R_1}{(R_1 + R_2)^2}V_{CC}\)となります.

さて,この\(R_1\)に対する\(P_1\)の式をグラフで書くと(手間なので掲載省略),大きく発熱するポイントと,全く発熱しないポイントがあることに気がつきます. \(R_1 = 0\)のとき,\(P_1 = 0\)で\(R_1\)が大きくなるにつれて\(P_1\)も大きくなり,あるところを境に,今度は小さくなっていきます. さらに\(R_1\)をどんどん大きくすると,\(P_1\)は限りなく\(0\)に近い値となっています. つまり,\(R_1 = 0\) or \(R_1 = \infty\)のとき,可変抵抗は,発熱しません

この発熱しない状態ですが,これはつまり,モータが完全にONのときと,モータが完全にOFFのときの2パターンです. この二つの状態だけを使用するならば,可変抵抗は発熱しません. この2パターンのみの状態でモータを回す制御をスイッチング制御と呼びます. ONとOFFをスイッチのように切り替えることから,スイッチングと呼ばれています.

スイッチのONとOFFのみで,実際に回転数を制御できるのでしょうか. スイッチがONのとき,モータは最大限のトルクで加速し,スイッチがOFFのとき,モータは減速し,やがて停止してしまいます. しかし,このONとOFFの切り替えが目にも留まらぬ速さで,高速に繰り返されたらどうなるでしょうか. 微小時間でONとOFFが繰り返し切り替わる状態を考えてみます. すると,ONのとき,モータは加速し,速度増加が極微小なうちにOFFになります. 同様に,OFFのとき,モータは減速し,速度減少が極微小なうちにONになります. つまり,ONとOFFを高速で繰り返すと,ある速度でモータが回転し続けることが分かります. これにより,モータの回転速度を決めることが出来るのです.

スイッチング制御ですが,実際には可変抵抗を高速で動かしたりはしません. 高速で抵抗値が変わる,つまりスイッチのようにONとOFFがカチッと切り替わる,トランジスタやMOS-FET,IGBTなどの半導体を用います.

モータにかかる電圧を変える素子(可変抵抗や半導体)はON or OFFだと発熱しない.
ONとOFFの状態たけで回転数を制御する方法をスイッチング制御と呼ぶ.
スイッチング制御は,目にも留まらぬ速さでONとOFFを繰り返す
スイッチング制御では,可変抵抗ではなく,半導体を用いる.

PWM制御(パルス幅変調制御)

スイッチング制御では,高速でONOFFさせることが分かりました. ここで,ONしている時間とOFFしている時間の割合を考えて見ます. 単に,ONOFFを繰り返すなら,ONの時間もOFFの時間も半々,つまり,\(50\mathrm{\%}\),\(50\mathrm{\%}\)となるのが普通でしょう. しかし,ONとOFFそれぞれの時間を変えてスイッチングさせると,モータが加速する時間とモータが減速する時間の割合が変わり,モータの速度が変更できます. これが,PWM制御(パルス幅変調制御)と呼ばれるものです.

PWM制御を行う際の,ONの時間とOFFの時間ですが,ONOFFを繰り返す周期に対するONの時間の割合を,デューティー比と呼びます. 例えば,\(1\mathrm{ms}\)ON,\(1\mathrm{ms}\)OFFを繰り返すスイッチングなら,デューティー比は\(0.5\)です. \(1\mathrm{ms}\)ON,\(4\mathrm{ms}\)OFFならデューティー比は\(0.2\)となります. パーセントで表現する場合はそれぞれ\(50\mathrm{\%}\),\(20\mathrm{\%}\)となります.

実際には,ONOFFさせる周期とデューティー比は,モータとの相性で決定します. MCFでは,もっぱら,\(1\mathrm{kHz}\)~\(5\mathrm{kHz}\)(つまり周期は\(1\mathrm{ms}\)~\(0.2\mathrm{ms}\))で,周期を固定した状態で,デューティー比を変え,モータの回転数がおおむねデューティー比に比例すればOKとしています. 決定の仕方がかなり雑ですが,そもそもPWM制御で回転数やトルクをきちんとコントロールする場合は,フィードバック制御を前提とするので,大体でよいのです.

具体的な波形を,掲載します.全て周波数は\(1\mathrm{kHz}\)としており,電圧は\(0\mathrm{V}\)~\(5\mathrm{V}\)としています..

↑これは,\(1\mathrm{kHz}\)でデューティー比\(50\mathrm{\%}\)の波形です.

↑これは,\(1\mathrm{kHz}\)でデューティー比\(15\mathrm{\%}\)の波形です.

↑これは,\(1\mathrm{kHz}\)でデューティー比\(80\mathrm{\%}\)の波形です.

ただし,これらは理想的な波形であって,実際にモータに接続して波形をとると,モータのインピーダンス(簡単に言うならば"諸々の特性")により,崩れた波形になります. LEDなどのインダクタンス(コイルとしての性質)の少ない素子なら問題ありません.

ONとOFFの時間の割合を変えるスイッチング制御をPWM制御(パルス幅変調制御)と呼ぶ.
周期に対するONの時間をデューティー比と呼ぶ.
スイッチングの周波数は\(1\mathrm{kHz}\)~\(5\mathrm{kHz}\)(周期は\(1\mathrm{ms}\)~\(0.2\mathrm{ms}\))が多い.
モータをPWM制御したとき,実際の波形はきれいな矩形波にならない.ただし,LEDなら問題ない.

PWM制御を行う際の注意点

最後に,PWM制御を行う際の注意点を考察します.

まず,最高優先で考えるのは,PWM制御したい対象が,PWM制御できるのか,という点です. 一般的なDCモータや,普通のLEDならPWM制御可能ですが,連続的な電圧供給が必須なアクチュエータや素子はPWM制御できません. 例えばPCのファンは,一見するとDC入力のモータのようですが,PWM制御できません.

次に考慮する点は,インダクタンスの大きさです.簡単に言うならば,コイルなのかどうか,です. インダクタンスが大きい,すなわち,コイルとしての性質が大きいときには注意が必要です. モータは内部で銅線がぐるぐる巻きになっており,インダクタンスが大きく,この場合は,スパイク電圧が発生します. LEDには,当然ですが,ぐるぐる巻きのコイルなどありませんので,インダクタンスはほとんどありません. スパイク電圧が発生する場合は,スナバ回路を使用してスパイク電圧を抑えます.

PWM制御できないアクチュエータや素子もある.
インダクタンスが大きいと,スパイク電圧が発生する.
スパイク電圧はスナバ回路を使用して抑える.

余談

見出しは"余談"ですが,知っておいてもらいたいことを書いておきます. とりあえずPWM制御の概論を知りたいだけであるならば,この項目は読み飛ばしてください.

波形生成方法

古典的な可変抵抗を使用した制御の場合,可変抵抗を回路に追加するだけでモータの制御ができました. しかし,PWM制御の場合,モータまでの回路に何を追加してどうすればよいのでしょうか.

スイッチングを行う,一番簡単な方法としては,スイッチを1個追加することです. 指でぽちぽち…と. 事実上,まともな制御になりませんし,自律ロボットの場合は人が押すことはできません.

PWM制御を行う場合,回路そのもので矩形派を生成するか,マイコンで矩形派を生成するかの2通りとなるのが普通です. 一般的には,回路そのもので矩形派を生成し,その回路へコントローラから指令値を送ります. しかし,この方法ですと,アナログ回路の勉強を一から始めなければなりません. とても難しいです. なので,マイコンで矩形派を作る方がよいでしょう.

実効電圧

突然ですが,電源\(10\mathrm{V}\)として,デューティー比\(50\mathrm{\%}\)でモータをPWM制御した場合,モータにかかる実効電圧はいくつでしょうか. \(50\mathrm{\%}\)は半分だから…\(10\mathrm{V} \div 2 = 5\mathrm{V}\)の実効電圧である! これは大きな間違いです. PWM制御のデューティー比をそのまま電圧に置き換えることはできません. このことを知らずにいると,モータの回転数特性がデューティー比とマッチしませんので,欲しい回転数が得られません.

実効電圧を求める場合は,ワットを求めてそこから電圧へ変換します.

まず,デューティー比\(50\mathrm{\%}\)の時間に対する電圧の波形はこれです.

このとき,モータの抵抗を\(R\)とすると,流れる電流は,このようになります.

さらに,このときのワットはこのようになります.

この波形を,\(0\)~ある時間\(t\)まで積分します.ただし\(t\gg\)周期とします. すると,\(Q=\frac{10^2}{2R}t\)となりました. これは,\(t\)時間までにするモータの仕事量ですね. 今度はこれを\(t\)で割ります. すると,\(P=\frac{10^2}{2R}\)となりました. これは,モータの単位時間当たりの仕事量,つまりワットです. ここから,電圧を求めると,\(P=\frac{V^2}{R}\)なので,\(V^2=\frac{10^2}{2}\),\(V=7.07\). 答えは,実効電圧\(7.07\mathrm{V}\)となりました.

この計算はつまり,電圧を平均化するのではなく,ワットを平均化しているのです. モータは電圧で仕事をするのではなく,電圧×電流で仕事をします. したがって,電圧をそのまま平均化できないのです.

ON抵抗による損失(発熱)

スイッチングでは,ONとOFFの状態を使うのですが,ONの状態,つまり,スイッチがポチっと押されて通電している状態を考えてみます.

例えば,金属などの電気を通しやすい物質にも,抵抗値があります. 同様に,半導体が電気を流すときにも抵抗値が存在します. この抵抗値は,極小なのですが,大きいモータを駆動させるときに,かなり問題となってきます.

大きいモータは,電流をたくさん欲しがります. 電流を欲しがるとはつまり,モータの抵抗値が小さいため,電流が流れる経路全体の抵抗値に対する,スイッチング素子の抵抗値の割合が増えます. すると,素子にかかる電圧が大きくなり,同時に電流量が多いので,相乗して,かなりの量の熱損失が起こるのです. したがって,素子が発熱します.

具体的な数値を与えて,計算してみます. 電源電圧10V,スイッチング素子のON時の抵抗値を100mΩ,モータの抵抗値を2Ωとして,スイッチング素子の最高発熱量を求めます.
回路図3

まず,ONの時間が一番長くなる状態は,デューティー比が100%となるときですよね. このとき,回路に流れる電流は,I=10/(2+0.1)=4.76. また,スイッチング素子にかかる電圧は,V=0.1/(2+0.1)=0.048. P=IVなので,P=4.76×0.048=0.23[W]となりました. この発熱量が,素子の許容発熱量を下回っていればOKです. 大体のイメージですが,1Wを超えてくると,暖かくなってくるかな,という程度です. 数Wの発熱がある場合は,フィンなどのヒートシンクをつけて放熱させましょう.

フィンをつけるときは,必ずグリスを塗りましょう. また,素子のヒートシンクの取り付け部が金属の場合は,その金属部が素子内部と通電していないことをデータシートで確認しましょう.

スイッチングによる損失(発熱)

PWM制御でスイッチングを行うと,スイッチングをする行為そのもので発熱します. このスイッチング時にどのような現象が起きるのかを考察し,損失を計算してみます.

"スイッチングでは,ONとOFFの状態のみを使うからスイッチング素子は発熱しない"という話でした. 本当にそうでしょうか. 実はこの疑問が,スイッチング損失を考慮するためのカギとなります.

スイッチングを行う際,モータにかかる電圧の一般的な波形はこれです. tは周期です.

一見するときれいにONとOFFが切り替わっているように見えますが,これを拡大してみます.
これを見ると,滑らかに立ち上がっているのが分かります. ONからOFF,または,OFFからONに切り替わる際は,実際には連続的に移り変わるのです. このとき,スイッチング素子にかかる電圧は,次のようになります.

当たり前のことですが,スイッチング素子とモータは直列なので,それぞれにかかる電圧の合計は常に電源電圧と等しくなります. したがって,モータにかかる電圧波形の真逆がスイッチング素子にかかるのです. また,この回路に流れる電流は,次のようになります.

さて,スイッチング素子にかかる電圧と電流が分かりました. この二つのグラフを乗算すると,スイッチング素子での損失が分かります. そのグラフは次のようになります.

ONからOFFへと切り替わる部分で,山ができました. この山の部分がスイッチング損失になります. OFFからONへ切り替わる際も同様の山が存在します.

実際に,スイッチング損失を数値として評価する場合は,半導体のターンオン時間とターンオフ時間の項目とスイッチング周波数から求めることができます. 一般的に,ターンオン・オフ時間は極小で,1kHz前後でスイッチングする場合はほとんど気になりません. しかし,周波数が数十kHzを超えるときは,数十倍もの損失となるので,検討する必要があります.

スイッチング周波数と高周波音

モータをPWM制御すると,音に気づくと思います. LEDをPWM制御しても,音はでません. インダクタンスの大きいアクチュエータや素子をPWM制御すると,音が鳴ります. この音を高周波音と言います.

モータから音が出ると,なんか不安ですよね. それにうるさいですよね. この高周波音ですが,スイッチングの周波数と同じ周波数の音が出ます. なぜなら,モータのコイルの部分がその周波数で振動しているからです.

人間の可聴域は,20Hz~20kHzと言われています. なので,この範囲外でスイッチングを行えば,高周波音は消えます. スイッチング周波数を20Hzより下げると,モータの回り方はガクガクになってしまい,制御できません. したがって,20kHzより高い周波数でスイッチングする必要があります.

周波数が20kHzを超えるPWM制御は,アクチュエータの電気的特性やスイッチング素子の動作スピードとの兼ね合いがあり,少し難しくなってきます. 市販の自動車などは20kHz以上のスイッチング制御が多いですが,高周波音をどうしても消す必要がある場合以外は,妥協しましょう.


© 静岡理工科大学MCF