2017年5月15日月曜日

ブラシレスモータのコギングやトルクリプル抑制について考察(2)


 意外とブラシレスモータの話にアクセスが多かったので前回の続きをもう少し掘り下げて書きたいと思います。


まず、ブラシレスモータを3相UVWで回せるようになって位置制御や速度制御をしようとしたとき、ハンチングや速度のムラが生じてきます。


制御の難しさ



 論理的にはあっているはずなのに、、

と思っても

 CPUからの回転指令は電圧
 モータの実動作は電流
 ブラシレスモータはコイルで磁界を作る
 コイル特性
 磁界ムラ
 回路誤差
 外乱の影響
 ギアボックス特性
 、、、

考え出すとものすごくたくさんの要因があって、それをPID制御で動かそうとなると
Pはすぐ解決するけど、I=全外乱の影響の累積値となり、D=側近の反発力
それが回転するたびに波打つように値が変化していて
フィードバック制御で行っているのでどうしても制御遅延が生じてしまう。

これが意外と致命的な結果となり、ハンチングや速度のムラとなります。

じゃあフィードフォア―ド制御で解決すればいいじゃん!ってことで
世の中には色んな論文が出ています。
主な例としては、過去のデータをフーリエ変換(FFT)して周波数特性でピークとなっている周波数成分を足すことで解決するという技があります。
実際、電流のムラが2倍近く改善しているので有効手段です。
が、しかし低スペックマイコンで制御するには若干パワー不足な面もあります。
そこでより原始的な方法で解決する手段を書いていきたいと思います。

SIN・COSの性質


 意外とこれが簡単で一番難しい部分です。
ちなみにSINやCOSを微分するとどうなるでしょうか。
高校生の数学で習うようですが完全に忘れてました。

 積分すると位相が90度遅れる。
 微分すると位相が90度進む。

らしいです。

 電気回路では
 90度遅れる=コイル
 90度進む =コンデンサ

です。

ここで電気回路と数式が一致しました。
ここからが本題です。

①モータ部

ブラシレスモータはコイルでできているので、
CPUからの指示に対して90度遅れる。

②制御部

 位置(0度)を微分すると、速度(+90度)になる。
 速度(+90度)を微分すると、加速度(+180度)になる。
 加速度(+180度)を微分すると、加加速度(+270度)になる。

 速度(+90度)を微分すると、位置(0度)になる。
 加速度(+180度)を積分すると、速度(+90度)になる。
 加加速度(+270度)を積分すると、加速度(+180度)になる。


微分と積分

基本は速度制御で速度指令を行うと、結果が90度遅れの位置となる。
この性質を利用することで位置制御が行える。

③CPU部

・位置制御  ・・・ 位置を基準に速度を調節する。
 ・速度制御  ・・・ 速度を基準に加速度を調節する。
 ・加速度制御 ・・・ 加速度を基準に加加速度を調節する。


実際は加速度制御まではやらなくて良いので、今回は位置制御と速度制御に焦点をあてていきます。

モータはコイルなので必ず指令に対して90度ずれます。

例えば

速度制御の場合、
速度指令にCos波を入力します。
すると加速度は90度遅れるのでSin波となって出力します。

実動作を見るとどうなっているでしょうか。
進んだり、戻ったりを繰り返すと思います。

位置制御の場合、
指定位置を気にしなければ速度制御と同じになります。

指定位置を気にすると若干ややこしくなります。
どういうことかというと速度制御でも示したように
加速度は90度遅れているのです。


という事は
速度指令に0を入力しても、加速度≠0ならば急には止まれず
必ず90度位相分遅れて止まります。

位置制御の難しさはここにあります。


具体的な解決方法としては、この90度位相遅れを加味したSin波を入力してあげればよいのです。(言うのは簡単)

どういうことかというと、
ベースのSin波に狙った位置で止まるSin波を合成させてやります。
するとベースのSin波を0にしたとき、90度遅れで止まるのは変わりないのですが、狙った位置で止まるようになります。

位置制御はこうやって行います。
もう少しヒントを書くと速度制御+加速度制御が位置制御になるような感じです。


今日はここまで。




























0 件のコメント:

Androider