適切なPWM周波数を考える
はじめまして、前のブログが使いづらかったので引っ越しました。
ブログの名前もなんとなくかっこよくなりました。
ということで、ラボっぽいこと書こうと思います。
ーーーーーーーーーー
DCモータを駆動するとき、PWMを知ると思いますが
たいていの人が、
「PWM周期っていくつにすればいいの?」
と思ったことがあると思います。
一般的には電気的時定数よりも早く、とか言われますね。
5倍、とか、10倍、とか言われると思います。
電気的時定数はインダクタンス成分と抵抗成分で決まるわけですが、
マイクロマウスで使うような小型コアレスモータでは電気的時定数が大変小さく
モータドライバやマイコンの問題から、PWM周波数を上げることができない
という問題に直面します。
みかけの電気的時定数をあげるため、コイルを直列に挟む、というのが
常套手段として知られています。
さて、では、低いPWM周波数でモータを駆動すると何が問題なのでしょう?
まず、本当に周波数が低い場合。
具体的には機械的時定数より大きな周期で
駆動すると、コアレスモータが全力で回転、停止を繰り返しますのでまともに制御できないことは自明です。これは除外します。
いくつかのケースでシミュレーションかけてみます。
シミュレーションはLTSpiceを使います。お手軽な回路シミュレータです。
想定するモータはQueさんで使っている千石のモータ(CL-0614-10250-7)とします。
各種定数は神様に頼ります。
3.6Ω、23.5uHだそうです。
電気的時定数 = インダクタンス / 抵抗値
ですので、電気的時定数は約6.53usです。(参照記事ではなぜか微妙に値が違いますが大した差ではないので気にしないこととします。)
ということで、シミュレーション条件は以下のようにしたいと思います。
シミュレーションは以下の等価回路で行いました。
R2,L2がモータの等価回路、 R3はモータドライバのON抵抗です。
R1,L1はパターンの等価回路…と言いたいところですが、後でコイルを挟むときのためのものです。
なぜか0にするとシミュレーションできないので無視できそうな値を入れています。
それではまわしてみます。
ケース①
ケース②
ケース③
軸はそろってないので気を付けてください。
青がモータへの印加電圧、緑が流れている電流です。
ケース①ではPWM周期内で1.8Aから0Aまで電流値が変動しています。
ケース②では0.6A~1.2A、ケース③では0.7A~1.1Aくらいです。
まず、PWM周期が短いとモータドライバに要求される最大の電流値が大きくなってしまうということがわかります。
モータドライバには大抵、過電流を防止するための保護回路がありますので、ここに引っかかってしまうと動作が怪しくなることが考えられます。
また、ここで、注意しておきたいのは、モータが発生する平均トルクは電流値の積分で決まるということです。積分値は表示していませんが、どのケースも約895mAです。
つまり、周波数によらず発生トルクは同一ということです。
では、モータドライバさえ余裕があれば低いPWM周波数で問題がないのか?というと、そんなことはありません。
思いつくデメリットは以下の通り。
- 基板のパターン幅が太くなる
- 電流変動が大きくノイズになりやすくなる
- 電池の内部抵抗(放電可能容量)が問題になりやすくなる
- 電力効率が落ちる
一方、メリットはというと
- 低スペック(低動作周波数)マイコンでも駆動できる
- PWM分解能を高くできる
でしょうか。結論、デメリットが大きすぎます。
次は、デメリットの最後に上げた電力効率が落ちる、という点に着目してみようと思います。
結論から言うと、電力消費は
ケース①>ケース③
になります。
先ほども述べたように、今回検証したケースでは電流の積分値が一緒なので発生トルクは同一です。発生トルクが同一で電力消費が違う、つまり電力効率が異なるということです。
このあたりからあまり自信がなくなってきますので間違いがあったら教えてください。
電力はご存知の通り電流×電圧で決まりますが、オームの法則から、
R × I^2であることがわかります。
つまり電流の二乗に比例します。
従って、ピーク電流が大きい方が不利である可能性があります。
実際にどのくらい不利か見てみます。
ケース①でのモータでの消費電力
ケース②
ケース③
結果からは明らかです。
電力平均値がケース①は4.4W、ケース②は3.0W、ケース③は2.9Wです。
発生トルクが一定なのに、PWM周波数が20kHzか200kHzかで1.5Wも違います。
つまり、電池の減りがそれだけ早いということです。
ただ、100kHzか200kHzかではあまり大きな差はありません。
最後に、直列にインダクタを挟むことを考えます。
回路は下記のようになります。インダクタも小型のものだと0.5Ωくらいの抵抗成分がありますので直列に抵抗を書いています。これで見かけ上のインダクタンスが倍近くになりました。
これで200kHzでのシミュレーションをかけてみます。
はい、随分平滑されるようになりました。
やはりインダクタは偉大か、と思いますが、先ほどの電力効率という面で考えてみます。
今回は先ほどのシミュレーションと簡単に比べるわけにはいきません。インダクタが挟まっていることによって、モータで消費される電力のほかにインダクタで消費される電力が加算されるためです。
また、直列に抵抗が加算されたために流れる電流が変わっています。つまり、発生トルクが異なります。
ということで、無理やりトルクを同じくらいにするため、電源電圧を7V→7.9Vとしました。このときの平均電流は896mAです。1mA違いますが誤差としましょう。
モータでの消費電力は
2.9W。ケース③とほとんど変わりませんね。
コイルでの消費電力は
0.4W。
つまり、合計すると3.3Wですので、電力効率という観点では改善分よりもコイルによる増加分のほうが大きいという結論になります。
個人的な結論
- PWM周波数は100kHzもあれば十分で、モータドライバの上限で使えばよい
- コイルを挟むのはあまりメリットはない
という感じでした。
もちろん、PWMのDutyによって結論は随分変わります。
今回の検証は最短走行寄りの検討で、探索走行になるとDutyが下がるために電流の脈動が大きくなりがちです。
従って、消費電力は差が付きやすくなります。
が、探索時はそもそもの消費電力が低いため、全体で見るとあまり効かないという結論でした。
おまけというか疑問
一方、調べていくと、
「PWM周波数を高くすると低速域でトルクが出ない」
とかいう記述を結構見かけます。
理論的にはそんなことはないと思っています。
が、 おそらく経験的にそのように感じている人が多いのでしょう。
予想ですが、そう感じている方はモータドライバの応答が間に合っていないのではないでしょうか?
FETゲートの入力容量であったり色々要因はあると思いますが、立ち上がりが遅いモータドライバで高い周波数のPWMを入れるとモータへの電圧が立ち上がり切る前に低下するので低速(低Duty)でトルクが出ないように感じるのではないかと思いました。
Dutyが上がるとON時間が伸びて立ち上がり切るため、高速域では問題ないように思えるのでは。
このPWM周波数の問題、DCモータいじり始めて数年たちますが未だに疑問が絶えません。
コメントや議論のネタがあればいただけたら大変嬉しいです。