本文へ移動

tf-2md3-devel@t-frog.com

Re: 「ブラシレスギアードモータ」駆動方法について

Date:
Fri, 07 Nov 2014 12:47:31 +0900
From:
Atsushi Watanabe <
atsushi dot w at ieee dot org
>
To:
tf-2md3-devel <
tf-2md3-devel at t-frog dot com
>
Subject:
[00066] Re: 「ブラシレスギアードモータ」駆動方法について
油田先生

渡辺です。
コメントありがとうございます。

> ちなみに、SPURでは速度制御の周期は1msですか。
> (渡辺さんのセミナースライドでは、多分DCモータを想定しているので、20ms推
> 奨となっていますが。)

速度制御周期は固定で1msです。
資料中の「20ms推奨」は軌跡追従制御周期で、こちらはパラメータファイルで変更できます。

なお、このドライバの制御系は内部のPWM制御部分で正弦波電圧の振幅制御をすることで、ブラシレスモータを等価なDCモータとして扱っています。
そのため、外側から見ると、DCモータとブラシレスモータの扱いの違いはありません。
(電気角を検出するためのエンコーダ分解能の制約はありますが)


近日中に、マニュアル、ウェブページ上に必要なエンコーダ分解能などの情報を載せておきます。

// Atsushi WATANABE
// E-mail:
atsushi dot w at ieee dot org



2014年11月4日 22:32 Shin'ichi Yuta <
yuta at ieee dot org
>:
> 渡辺さま
>
> 油田です
>
> ご苦労さまです。
> たまたま三矢の人とのやりとりのメールを拝見して気がついたことです。
>
> モータのエンコーダが150パルスは良いとして、定格の回転が100rpmと言うこと
> はないだろうと思います。
> 多分、1500rpmの減速比1/15ではないかと想像します。
>
> エンコーダパルス数の設定に減速比1/15がかかっている値がセットされてし
> まっていることが、動かない原因ではないでしょうか。(この人の勘違いではな
> いかな。)
>
> 実際、1500rpmで150パルスなら、ギリギリ動いて欲しい気がします。
>
> ちなみに、SPURでは速度制御の周期は1msですか。
> (渡辺さんのセミナースライドでは、多分DCモータを想定しているので、20ms推
> 奨となっていますが。)
>
> なお、マニュアルに、
> ●「このモータドライバーをDCブラシレス(ACサーボ)モータに使うときは、
> モータの(電気的)回転角度をエンコーダで決めているので、(電気的)1回転
> で***以上のパルスカウント(4逓倍時)を有することが必要です。」とでも書
> いておく方が良いように思います。
>  また、サイクルタイムが上記で合っていれば、
> ●「DCブラシレス(ACサーボ)でYP-SPURを用いる場合、現在のYP-SPURのバー
> ジョンでは速度制御のサイクルが、モータの回転制御に合わせて1msとなってい
> るので、速度の制御は1msの間のパルス数の精度しか出せませんのでご注意くだ
> さい。」
> とでも書いておく方が良い気がします。(これが合っていればですが。)
>
> とりあえず、気がついたところまで。三矢というのがどういう会社かというのが
> 気になって、少し深入りしてしまいました。
>
>
>
> (2014/11/04 20:04), Atsushi Watanabe wrote:
>> 進藤様
>>
>> 渡辺です。
>>
>> モータのエンコーダパルス数についての情報、ありがとうございます。
>> 大変申し訳ないのですが、ご利用のモータはエンコーダの分解能が低いため
>> 現在のTF-2MD3-R6ファームウェアでは制御が難しいようです。
>>
>> T-frogのモータドライバは、ロボットの位置を高精度かつなめらかに、
>> ミリ秒オーダーの応答速度で制御できるように設計しているため、
>> 1ミリ秒周期で、エンコーダの信号から速度を計算して駆動・制御を行います。
>>
>> そのため、主なターゲットのモータとしては、
>> 例えば、最大3000rpmのモータに500パルス程度のエンコーダ
>> (100rpmであれば、1万パルス以上)が付いていることを想定しています。
>>
>>
>> 100rpmで、150パルスのエンコーダですと、
>> 制御周期(1ミリ秒)中のエンコーダカウント数が
>> 最大でも1パルスしか無いため、速度をほとんど検出できず、制御が困難です。
>> (NJM2626は、ホール素子のみで矩形波駆動するため、駆動できます。)
>>
>> エンコーダ分解能の低いモータ用に、ファームウェアを大幅に変更すれば
>> 制御可能になりますが、私の所属がドライバ設計時とは変わっており、
>> あまり時間がとれないため、すぐに対応することができません。
>> もし、ファームウェアの変更をご自身で行う場合には、
>> ソースコードは既に下記のリポジトリで公開していますので、
>> 改変してご利用頂けます。
>> http://t-frog.com/repos/?p=motor-controller.git
>>
>>
>> 大変申し訳ありませんが、よろしくお願いいたします。
>>
>> // Atsushi WATANABE
>> // E-mail:
atsushi dot w at ieee dot org

>>
>> 2014年11月4日 17:16 "進藤@三矢" <
shindo at mitsuya-lab dot co dot jp
>:
>>> 渡辺 様
>>>
>>> 進藤です。
>>>
>>> 下記について実施してみましたので、報告します。
>>>
>>>> 1. カタログ値から事前に与えるパラメータの設定
>>> →以下の設定としました。
>>> ・エンコーダパルス数は150Countsで減速比(15)のため
>>> 150*(1/15)=10としその4逓倍で40としました
>>> ・OTOR_VCは105*15/22.2=70.94594595
>>> ・MOTOR_TCは60/(2π*70.94594595)=0.134667879
>>>
>>> ** xxxx.param *****************************************************
>>> VERSION 4.00000000
>>> COUNT_REV 40.00000000 #[Counts/rev]
>>> VOLT 22.20000000 #[V]
>>> CYCLE 0.00200000 #[s]
>>> GEAR 15.00000000 #[in/out]
>>> MOTOR_R 14.80000000 #[ohm]
>>> MOTOR_TC 0.134667879 #[Nm/A]
>>> MOTOR_VC 70.94594595 #[rpm/V]
>>> MOTOR_PHASE 3.00000000 #blashi less
>>> RADIUS[0] 0.06250000 #[m]
>>> RADIUS[1] 0.06250000 #[m]
>>> TREAD 0.38 #[m]
>>> CONTROL_CYCLE 0.02000000 #[s]
>>> MAX_VEL 10.1 #[m/s]
>>> MAX_W 0.57 #[rad/s]
>>> MAX_ACC_V 1.20000000 #
>>> MAX_ACC_W 3.14000000 #
>>> MAX_CENTRI_ACC 9.80000000 #[G]
>>> L_C1 0.01000000 #
>>> L_K1 0.00000000 #
>>> L_K2 0.00000000 #
>>> L_K3 0.00000000 #
>>> L_DIST 0.40000000 #
>>>
>>> GAIN_KP 0.0 # *PI control parameter Kp
>>> GAIN_KI 0.0 # *PI control parameter Ki
>>> TORQUE_MAX 0.0 # * [Nm]
>>> TORQUE_LIMIT 6.0 #[Nm]
>>> TORQUE_NEWTON 0.0 # * [Nm]
>>> TORQUE_VISCOS 0.00001 # * [Nm/(count/1ms)]
>>> INTEGRAL_MAX 0.0 # * [rev]
>>>
>>> TORQUE_OFFSET 0.00000000 #[Nm]
>>> MASS 0.0250000 #[kg](robot+PC)
>>> TORQUE_FINENESS 0.000005
>>> MOMENT_INERTIA 0.05476133
>>> MOTOR_M_INERTIA 0
>>> TIRE_M_INERTIA 0.04321800
>>> *******************************************************************
>>>>
>>>> 2. 摩擦補償パラメータの調整
>>>> 2.1 ypspur-coordinator を立ち上げた状態で、ypspur-free コマンドを実行
>>> →プログラムでSpur_free();関数を実行(フリーモード)させました。
>>>
>>>> (摩擦補償のみを行うモードに入ります。)
>>>> 2.2 TORQUE_NEWTON(クーロン摩擦力項)を少しずつ大きくしながらタイヤを手で回転させて、軽く回転するように調整
>>> →値を0.1~900とかにしてみても軽く回転するようにならない
>>>
>>>> 2.3 同様にTORQUE_VISCOS(粘性摩擦項)を少しずつ大きくして調整
>>> →値を0.1~900とかにしてみても軽く回転するようにならない
>>>>
>>>> ※バックドライブが全くできず、手でタイヤを回そうとしたときに、エンコーダのパルスが1つも発生しないモータではこの方法は困難です。
>>>> その場合には新しい方法を考える必要があります。
>>> →重いがバックドライブ(手回し)するとパルスは出ている。
>>>>
>>>> 3. PI制御ゲインの調整
>>>> 3.1 ypspur-coordinator を立ち上げてサーボがかかっている状態にする
>>> →「サーボがかかっている状態」手回しして重く回る状態で良いでしょうか?
>>>> 3.2 作成したプログラム等で、適当な走行指令を出す
>>>> 3.3 GAIN_KIを0にし、GAIN_KPを発振しない範囲で大きくする
>>> →上記、パラメータでは回らなかった。TORQUE_MAXに0.1をいれたら回った
>>> 「発振」といわれる音がまったくしないので0.1から1200ぐらいまで
>>> 数値を大きくしたが目標の回転スピードにはならない(回転速度上がらず)
>>> 50として起動し、Spur_set_vel()で0.01から数値を上げて
>>> ドライブすると加速はできている
>>>> 3.4 GAIN_KIを発振しない範囲で大きくする
>>> →「発振」といわれる音がまったくしないので0.1から1200ぐらいまで
>>> 数値を大きくしたが目標の回転スピードにはならない(回転速度上がらず)
>>>
>>> 以上が状況です。
>>>
>>> ちなみ、「PWM型三相DCブラシレスモータ制御IC(NJM2626)」(新日本無線)ドライバにて
>>> ソフトなしでモータのみ単純駆動をしたところ、目標スピードで
>>> 回る事が確認できました。
>>>
>>> 「yp-spur」と上記IC(制御IC)との単純な動作の違いが有り
>>> ・モータ無通電時は双方とも手で軽く回る(ギア抵抗分の重さ?)が
>>> 通電により制御ICは正転方向(スイッチにより指定)に軽く回り、逆方向に重い
>>> 状態となるが、yp-spurは両方向とも重くなる(フリーモード時も同様)
>>>
>>> この違いは、yp-spurで回転速度が上がらない事と関連するとは思えませんが
>>> 報告しておきます。
>>>
>>> 以上、宜しくお願いします。
>>>
>>>
>>>
>
>

References