mini-CNCの主軸もACサーボ化が完了いたしましたので何とか、これをMach2から速度コントロールできるようにセッティングしてみましょう。

Mach2から回転数の指令をモーター制御側に与えて回転数を制御する訳ですが、みなさんご存知のように方法は大きく分け2種類あります。

一つはクローズド・ループ制御でのMach2でPID制御(実回転数をフィードバックさせ目標値を狙わせる為に指令値を自動で増減させる制御)とオープン・ループで一方的にMach2から回転数指令を出す制御です。

前述の制御方法は直流ブラシレス・モーターや3相モーターのインバータードライブに多用されており、また後述の制御はACサーボに適しております。

なぜACサーボはMach2で後述の制御を行うかと言うとACサーボ自体がモーター本体に取り付けられたエンコーダーを使用してドライバーでPID制御を行っている為にMach2での制御は不要なのです。

それとACサーボを駆動させるにはパルスの周期(周波数)を変えなければいけないわけですがMach2のPID制御は固定周波数でパルスの幅を変化させて出力制御するようですのでACサーボには不適なようです。

・・・・・・と・言う事でACサーボーをMach2で駆動する為のいたって簡単?な・セッティングをご紹介申し上げます。
                  うまくいったら・イ・イ・なぁ〜  (^_^.)

【 A C サ ー ボ 】

【 使用モーター 】


これが【主軸変速機】の特集でもご紹介いたしました今回駆動するACサーボで


  OMURON社製  R88D-UP12L   です。


  AC 100V 200W   最大トルク 0.637N・m

   最高回転数   3,000rpm (4,500rpm)



ACサーボ・モーターの動作原理については割愛しますが基本的には多極のAC誘導電動機の後部にロータリーエンコーダーが取り付けられており指令されたパルス分だけパルスの速度に合わせて回転し停止し、その位置から外力によって移動されそうになった場合エンコーダーが検出し指令位置に戻そうと頑張るモーターですね。

         (^^ゞ  ・・・こんな説明で良いかナっ?


基本的には位置制御も回転数制御も同じモーターで使え今回は回転数制御で使います。

まず電源の他に必要な物は設定を変更する為のオペレーターユニットとACサーボに指令を与える為にパルスを発生させる機器があれば手動で可変速ができます。

私の場合は実験で定周波発信器を使用しましたが下記にアップいたしましたように秋月電子通商のキット(\600)でも運転が可能なようです。


一般的なACサーボ・ドライバーの入力信号(パルス)は、0-5V(ディューティ比50%)程度で周波数は 数10KHz程度のようです。

また、今回使用するモーターを含め最近の物は入力周波数を内部の設定で逓倍もしくは分周しパルスレートを自由に変更する事が出来る(電子ギャなど)物が多いようで、あまり周波数に拘らなくても良い様です。
左画像が秋月電子通商の超小型のオシレーター(発信器)で入力にDC5Vを入れてやり適当なボリュームを取り付ければ使えるようです。


取り付けるボリュームとショートピンの設定で出力周波数範囲がかなり広帯域のようです。
【CPU(パソコン)との信号の受け渡し】

下記がQUATTRO接続時のプリンター・パラレルポートの入出力ピンです。

はたして、どのピンをどの様にすればMach2の駆動でパソコンからACサーボ・ドライバーに必要な回転数指令のパルスを出す事ができるのだろうか・・・・?

ただX.Y.Z.A軸のステッピング・モーターの駆動信号(パルス)の入出力の為に多くのピンが既に使われているので・・・・・・  (ーー;)

   結局 #1・・#17あたりが、やはり無難で使えるピンなんでしょうね・・・  (^^ゞ

【 QUATTROの入出力 】

ところでパソコンから回転数指令用のパルスが、もし上手く出てきたとしても、QUATTROの、どこからパルス出力が出てくるのだぁ〜?

                       (-_-;) ?  わ・か・ら・ん

  取り合えず私のQUATTROは下記のような接続をしてある。

パラレルポートの#1か#17のピンからパルスをだしてQUATTROに入れてやればQUATTROの、どれかの端子から比例したパルスが出てくるのかな・・・・

                やっぱり  (-_-;) ?  わ・か・ら・ん


でも主軸(スピンドル)に関係の有りそうな端子は[J7(スピンドル)]なんだけどなぁ〜


 QUATTROの回路がわからない(わかっても、?かも)、ロジックだけでもわかれば何とかなるかもしれないのだが・・・・・。

    [ロジック・アナライザー]って、こんな時に使うの・・・?・・持っていませんが  (^^ゞ

【 出 力 ア ダ プ タ ー 】

 【信号出力アダプター】


・・・よし !   いい!  
解らなきゃ自分で調べよっ〜っと。

左上は以前に昇天したQUATTROの基板であるが信号を取り出せそうな部分が見つからない。

        (ーー;)

QUATTQOのパターンを改造するの確定的な根拠と手法を見つけていない現状ではリスクが大きすぎるぞ・・・

パソコン側も、しかりである・・・・・。

       よし !

ここは私の野性的かつ直感的な方法で基板コネクターとケーブルコネクターの間に入れるアダプターを作って、そこから必要な信号を引き出してくる事にしよう。

  本当に、だいじょ〜ぶ・・かな ?

      (^^ゞ

取り合えずD-Sub25ピンのコネクターをオス&メスで1組買って来ました。

      消費税込み 400円の出費・・
一旦、QUATTRO側要求信号の#1(スピンドル)と#17(M-ENB)を除き全ストレート接続し"#1"と"#17"は長めのリード線で結線しQUATTROとケーブルの間に割り込ませて接続したみた。

当然だが普通どおりに動く・・・・あたりまえ (^^ゞ

"#1"と"#17"の接続ケーブルを個別に切断して動作を見たところ、両ケーブルからQUATTROは信号をもらわなければ動作しない事がわかった。

つまりQUATTROへ行く信号を横取りしてサーボに持って行ってはいけないのだ。

QUATTROへ行く信号をパラレルに分けてもらわなければならない。

ただし、ここで心配な事は"#1"にぶら下る機器がQUATTROとACサーボのドライバーとの2つになる為、インピーダンスが変わってしまい信号強度が下がったりパソコンのパラレル・ポート側に悪影響が出ないかが心配である。

まぁ〜よい ! 野蛮では有るが直感的に"当って砕けろ"である。

そんなんで・・左下画像が"#1"と"GND"を引き出す為のアダプターの完成品である。
【 割 り 込 み 接 続(信号の引き出し) 】
【 信号の接続 】

製作したパラレルポート割り込みようアダプターをQUATTROのコネクターとプリンター・ケーブルの間に接続してプリンター・ポートの"#1"と"GND"の信号1対を引き出しシンクロ・スコープに接続しよう。
【 Mach2 の 設 定 】
【 Mach2の設定 】

ハード的な接続が完了したら次は制御ソフトの設定である。

まずはMach2の設定からはじめよう。

左は、お馴染みのMach2のメイン画面である。
メイン画面、左上の[Config]タブから[Ports and Pins]を選択する。
[Ports and Pins]の設定画面が表示されたら、まずはじめに一番左側の[Port Setup and Axis Selection]の設定だ

左下の"Spindle Axis Enabled(Step /Direction)"のチェックボックスで設定するのだが、これはMachからスピンドル(主軸)の回転数制御を行うか、行わないかの選択である。

PWM制御をする場合は、隣の"PWM Control"のチェックボックスにもチェックを入れるのだが、今回はPWM制御をMach2側では行わないので"Spindle Axis Enabled(Step /Direction)"側のチェックボックスのみにチェックを入れよう。
同じく[Ports and Pins]から[Output Pins]のタブを選択しパソコンのプリンターポート(パラレル・ポート)のどのピンから回転数指令信号を出すかを設定する事になる。

[Output Pins]タブの左下の"Spindle Step"を設定するわけだが"Port#"については使用するパソコンにプリンターポートが1つしか付いていない場合は"1"でOKである。

次に"Spindle Step"(出力させるピン)の設定であるが上述の様に出力で使えるピントと入力で使えるピンは規格で限定されているので、取り合えず無難なところで"1"に設定しておこう・・・・と・言うよりアダプターからの信号の引き出しを"#1"から出すように作った事とQUATTROを接続する場合は、どうやら"1"に限定されてしまうようである。
【ここでの注意ポイント】
Mach2のSpindle Axis Enabled(Step /Direction)の設定をして[適用(A)]を押したがパルスが出ず何度もやり直すがダメであった。 
                                (T_T)

結果、どうやらMach2での、この種の設定は[適用(A)]ボタンだけではなくMach2自体の再起動が必要のようである。
設定後Mach2を再起動したら、素直に設定通りパルスが出力されました。  ヽ(^o^)丿
【 信 号 出 力 試 験 】
アダプターの接続とMach2の設定が終わったら、いよいよ信号を出力してみよう。

但し、まだこの段階では念の為にACサーボのドライバーは接続しないで行う。

    (^^ゞ   昇天したら、困っちゃうので・・・

Mach2を起動させて、恐る恐る主軸回転数[S]にキーボードからダイレクトに回転数を入力してみよう。


うぉ〜 ! ちゃんと出力が出ているではないかぁ〜 !

          ヽ(^o^)丿

 パルスの信号強度は 0-5Vである・・・イイぞ〜

ところで、Mach2の[S]値を変えたら出力信号も変わってくれるかなぁ〜
  おっしゃ〜 !    ヽ(^o^)丿

[S]値を約2倍の速度にしたら出力信号の周波数も倍になったぞぉ〜!

Mach2のメイン画面のSpindle設定の[S+][S-]のボタンで[S]値を色々と変化させて見るも、ちゃんと比例して出力パルス数は変わってくれるぞ。

ただ、思ったより綺麗な方形波は出ているのだが0V部分の時間が短いなぁ〜

俗に言う"ディューティー比"って奴だが、何かMach2の設定で調整できるのかな?

       (^_^.)

取り合えず、まぁ〜これでヨシとしよう。
後は、この信号でサーボが動いてくれるかだな・・・
【QUATTROからの出力】
ここで、もう一度思案

ACサーボのドライバーの接続は、大まかに左のようになっており回転数指令信号は《制御信号入出力》の[+CW][-CW]の2本に適当なパルスを運転指令時に入力するだけです。


ただ、できる事ならやはりQUATTROから信号(パルス)が出て欲しいなぁ〜

Mach2(パソコン)側では出力のピンや形態を制約の中で変更は可能であるがQUATTRO側では、もらう信号もピンも固定されているし・・・・・。

  うむぅ〜   (-_-;)
"Spindle Axis Enabled(Step /Direction)"のチェックボックスのチェックを外し従来の設定をまず確認してみる。

Mach2の操作でスピンドルのON/OFFを行ってみると
"#1"ピンの出力はDC 0-5VでON/OFFしQUATTROの[J7]のスピンドル制御コネクターの出力もMach2の操作に合わせて、ただON/OFFするだけである。

  
"Spindle Axis Enabled(Step /Direction)"のチェックボックスにチェックを入れて"#1"ピンからパルスが出力される設定でQUATTROを動かしてみる。

当然先程の様に"#1"ピンにはパルスが出てくるわけだが
QUATTROの[J7]のスピンドル制御コネクターの出力はMach2の操作に合わせて、上記同様にON/OFFするだけである。

本当はパルスが入ったら、この[J7]のコネクターの出力が入力周波数に合わせてカチ・カチとスイッチングをしてくれたら、非常に嬉しいのだが・・・・・想像通り無理か・・・

      残念・・・・(ーー;)

  
どうも・・・QUATTROにはスピンドルの回転数指令のパルスを出せる端子は無い様である。

・・・・あきらめて、アダプターからの信号(パルス)を直接ACサーボのドライバーに入力してやろう。

            (^^ゞ
【サーボ・ドライバーの実装】
【ACサーボのドライバーの実装】

それでは、ついにACサーボのドライバーを実装しよう。

QUATTROからパルスを出せないとなるとQUATTRO側のコネクターから信号を取り出す必要性もACサーボのドライバーをQUATTRO側に実装する必要性も無くなった。

ノイズ耐量の問題から極力、信号線が短くてすむようにパソコンを収納しているキャビネットにACサーボのドライバーを実装する事にした。
パソコン本体のパラレルポートにアダプターを取り付け信号(速度指令パルス)を引き出す事にしよう。

と・言ってもプリンターのコネクターとケーブルコネクターの間にハメ込み引き出したリード線をACサーボのドライバーの[+CW][-CW]の入力に接続するだけである。
後々の事を考えドライバー本体はパソコン固定用のバンドに共締めして固定する事にした。

この中は大型の冷却用ファンがついているので発熱対策はきっと大丈夫であろう。
【 最 終 試 験 】
【実機運転試験】

それでは、いよいよ200WのACサーボを操作してみる事にしよう。

    お・ね・が・い !

  ちゃんとMach2の言う事を聞いてね  m(__)m
Mach2を起動させて、主軸回転数[S]にキーボードからダイレクトに2,000rpmの回転数を入力してみる。

  シュイ〜ン  おっ! 順調に加速していくではないか!

Mach2の2,000rpm指令に対し、1,998〜2,006rpm程度を若干上下するが安定している。

これはACサーボドライバーのチューニング設定で、どうとでもなるが位置制御ではないので特に問題は無いだろう。


一気にキーボードから7,000rpmの回転指示をあたえる。

  ギュィ〜ン っと急加速して、良いところで落ち着いた。

Spindle設定の[S+][S-]のボタンで[S]値を変化させると、ちゃんと比例して回転数は変わってくれるぞ。

  イイ!   ベリー・ベストである。

これで、あとは予めプログラムにGコードで書いた[S]値通りに自動で動いてくれれば完成である。
【 NCコードによる運転 】
  %
  N0010 (2008/05/21 09:52)
  N0030 G90G54G92X0Y0Z10.
  N0040 S1000 (初速を1,000rpmに設定)
  N0050 M03   (主軸正回転指令)
  N0060 G00Y-50.
  N0070 Z5.
  N0080 G01Z-10.F100
  N0090 G02J50.F1000
  N0100 G00Z10.
  N0140 S3000 (回転数を3,000rpmに変更)
  N0160 G00Y-50.
  N0170 Z5.
  N0180 G01Z-10.F100
  N0190 G02J50.F1000
  N0200 G00Z10.
  N0240 S7000 (回転数を7,000rpmに変更)
  N0260 G00Y-50.
  N0270 Z5.
  N0280 G01Z-10.F100
  N0290 G02J50.F1000
  N0300 G00Z10.
  N0440 S500 (回転数を500rpmに変更)
  N0460 G00Y-50.
  N0470 Z5.
  N0480 G01Z-10.F100
  N0490 G02J50.F1000
  N0500 G00Z10.
  N1000 M9
  N1100 M5
  N1200 Y0
  N1300 M30  (システム全停止指令)
  %
 【 NCコード運転 】

それでは実際にNCコード運転してみよう。

運転は左のデモ用に作ったコードで動かしてみよう。

動作はいたって簡単に設定回転数でΦ50の円を描き次に設定された回転数に主軸の速度を変えてから再度同じ円をかき直すような動作である。

主軸速度は初速で1,000rpm 次に3,000rpm 、7,000rpmと増速させ最後に500rpmまで減速させて動作させた後、主軸は勿論の事全てを停止させるという内容です。

ちゃんとコード通りにスタートしてくれて指定行で変速してくれるかな・・・・?

まず40行目でスタート時の初速[S]を1,000rpmに設定し、それから50行目でスピンドルを正(時計回り)回転させるようにM03の指令を与えよう。

この時、下の3枚の画像でもわかるようにM03のスピンドル回転指令が回転数指令[S]の前、に書かれていると《スピンドルの回転数が設定されていません》とエラー表示され次の行に進んでくれず手入力でスピンドル回転数[S]をまず入力する事になるようです。

また回転数指令[S]と同じ行にM03が記述されている場合も、その行で一旦停止し再度のスタート入力の要求があるようです。

ただし、その場合はM03の前に記述された回転数指令[S]も無視されるようである。
  [S]の指令値とM03を並べて記述        [S]の指令値を読まない        NO Spindle Speed Set !エラー
【プログラム・スタート】

勿論、今回のデモ用コードは上記に記載しましたように、M03の記述位置などを充分に考慮して生成した物です。



まずはMach2とQUATTROを立ち上げて上記のNCコードをMach2に読み込ませよう。



当然この時のMach2の主軸回転数指令[S]は"0rpm"を表示している。

Mach2のメイン画面からリセットをかけ

    ・・・・さぁ〜いくぞぉ〜!

おなじみのコントローラーの[Start]ボタンを押してプログラムのスタートをかける。



    (ーー;)

ちゃんとMach2は期待の動作をしてくれるかなぁ〜

  もし、今日ダメなら・・・・

  本日は晩酌して爆睡だぁ〜

     (^^ゞ


読み込みコード上段に書いた通りに初速回転数1,000rpmで主軸が起動するか・・・・・?


  よっ〜し!   まわったぁ〜

     ヽ(^o^)丿

 指示がうまく出たぞ!



実回転数も回転数指令とおり約1,000rpmで回り始めた。

  OK だ !

  サーボのチューニングも良好だ !

     ヽ(^o^)丿

  なにかしら・楽しい・予感・・・・・。
  %
  N0010 (2008/05/21 09:52)
  N0030 G90G54G92X0Y0Z10.
  N0040 S1000
  N0050 M03
  N0060 G00Y-50.
  N0070 Z5.
  N0080 G01Z-10.F100
  N0090 G02J50.F1000
  N0100 G00Z10.
【 3,000rpmに増速 】
  N0140 S3000

  N0160 G00Y-50.
  N0170 Z5.
  N0180 G01Z-10.F100
  N0190 G02J50.F1000
  N0200 G00Z10.
次は140行目の指令で3,000rpmまで増速してくれるか ?

  90・・・100行目・・  ・・140行目・・・!

  いっ〜た〜 !

シュイ〜んって一気に増速してくれたぞ !

  プログラムの指令通りだ !


(スピンドル運転の黄色い表示はフラッシュしているのでデジカメで写らなかった)
【 7,000rpmに増速 】
  N0240 S7000
  N0260 G00Y-50.
  N0270 Z5.
  N0280 G01Z-10.F100
  N0290 G02J50.F1000
  N0300 G00Z10.
・・つ・つぎは・・・  240行目・・・

  7,000rpm・・・・!

   ギュイ〜ンっ

3,500rpm〜7,000rpmの加速・・・多分ポルシェもGT-Rも後塵として散るだろう。

サーボの加速と追従性は流石である。
【 500rpmに減速してプログラム終了 】
  N0440 S500
  N0460 G00Y-50.
  N0470 Z5.
  N0480 G01Z-10.F100
  N0490 G02J50.F1000
  N0500 G00Z10.
  N1000 M9
  N1100 M5
  N1200 Y0
  N1300 M30
  %
 次は440行目・・・

まぁ〜ここまで自動で動いたら後は何ら問題は無いでしょ〜う

   (^。^)

  500rpmまでの急減速・・

ピタッと回転が落ちる・・・・そぅ〜だよなぁ〜ACサーボはダイナミックブレーキ付と同じなのだから、感心するほどの事でも無いかぁ〜

しかしインバーター制御の回生制動より急減速が可能なようだ

      (^^ゞ

やはり、何か減速時は落ち着くなぁ〜

イヤイヤ、落ち着いている場合ではない!

Mach2の画面と主軸を確認・・しなけ・・・しているうちに自動停止。

    (^^ゞ



全プログラム(コード)通りの動作だ。


   これは・イイ !

  得意の自画自賛 !

      ヽ(^o^)丿


これで今度からはツールパス作成時に全ての切削条件とNCコード生成による主軸の回転数が設定できるぞぉ〜

切削するレイヤー毎に切削速度[F]と同様に色々な主軸速度を設定できる・・・・・いやいや後からコードを編集すれば切削部分、部分で主軸の回転数を変えれると・言う事かぁ〜

各、部分、部分で荒削り、仕上げ切削とを区別して切削できるようになるぞ、これで完璧な《全自動》だ !

オマケにACサーボだから使用回転数範囲の全域で定トルク切削ができるぞ。

当然、切削中の微調節は[S+]と[S-]のボタンで調整可能だ !


・・・・しかし、こうなると、やはり

自作のCNCコントローラーにも[S+]と[S-]のボタンが欲しくなってきた。


【追記】

今回の特集の記事作成にあたりMach2を色々検証してみて気が付いた事があります。

それはMach2においてプログラム(NCコード)運転中にスピンドル回転のON/OFFをMach2の操作により行った場合、スピンドルOFF(停止)の操作については何ら問題は無くスピンドルが停止したままX、Y、Zのプログラム実行は続くのですが次にスピンドルをON(回転)の指令を与えた場合、一旦他の軸のプログラム運転は停止してスピンドルが回転した後に他の軸が再度プログラムの継続実行に入る時に、他の軸(X,Y,Z等)のステッピングモーターが脱調してしまう事があります。

この条件としては他の軸のF値がアクセル時間ゼロで起動できないような値に設定されている場合(私の場合はF=800mm/min以上)のようです。

この現象についてはパソコンのスペック(クロック)及びMach2の"Kernel-Speed"の設定(当然、私のように低スペックのパソコンの場合の選択肢は25,000Hzに限定されます)、及びQUATTROの内部処理の問題等の影響が有ると思いますが基本的に下記のようなMach2の動作が考えられます。

Mach2のプログラム運転中の各軸の起動停止は指定されたプログラムの動作に従いながらMach2の設定で決められたアクセル時間等で加減速が行われますが外部からの操作により突然スピンドルの発停又は、その他の割り込みがかかった時、一時プログラムが中断され割り込み処理を行った後、プログラムの継続をしようとしますが、その時の各軸のスタートにはアクセル時間等で設定した加減速の処理が行われず一気に指定F値での回転指令が出てしまうようです。
 
             
この事はスピンドルの操作だけではなくプログラム運転中のF値のアップ・ダウン等の操作でもみられまたMach2の自動バックラッシ調整の機能をONにした時も高F値(私の場合F=1,400〜)の場合、見受けられる事が有ります。

     ただし本事象、動作については私のマシーン特有かもしれませんので、あくまでも私見として捉えおき下さい。 
稚拙ながらも取り合えずMach2によるACサーボへの回転数指令は上手くいきましたので本特集は完結と致します。
ここまで来るに当り[
電力屋さん][ロック・ヒルさん]に後教授戴きました事を心より感謝いたします。

             
みなさん  ありがとうございました。  m(__)m