はじめに
前回まででフレームの組み立てまで説明しました.
今回はArduinoNanoへファームウェアを書き込んで,動かせる状態にしていきます.今回の記事の内容まで完了すればペンプロッタ自体は完成です.
ArduinoNanoにGrblを書き込む
GrblとCNCシールドV4について
GrblはArduinoで動作するGコードパーサ及びCNCのコントローラとして動作するソフトウェアです.
一方CNCシールドはGrblに合わせて設計されていましたが,最新のGrbl v1.1には対応していません.今回利用するCNCシールドV4は,おそらくKeyestudio CNC Shield V4.0 Board For Arduino Nanoがオリジナルなのかなと思いますが, こちらもGrbl v1.1には対応していません.余力があればいずれ自分で基板設計したいと思いつつ,今回はなんとかしてCNCシールドシールドV4を使っていきます.
GrblではArduinoにあわせてピンアサインが決まっており,StepPulseがD2~4,DirectionがD5〜7,として設定されています.これらをモータドライバの左下の2つのピンに接続する必要があります.
が,CNCシールドV4では次のようにStepPluseとDirectionが逆に配線されています.これはGrblのコードを変更することで対応できます.
またモータドライバの下にジャンパがありますが,これはGNDに繋がっており,フルステップ固定です.1/16ステップ等に変更する場合は,なんとかしてハードウェア的にVddへ接続する必要がありますが,そのままでも動くので一旦そのままにしておきます.
サーボモータの制御に関して,Grbl v0.9h以降ではスピンドルのPWM制御がサポートされています.いくつかのペンプロッタ作成記事ではサーボモータをサポートしている robottini/grbl-servo を利用していますが,スピンドル用PWM出力をサーボモータの制御に流用すればいいだけなので最新のGrbl v1.1を使います.
gnea/grbl > wiki > Grbl v1.1 Laser Mode
GrblのPWMは1kHzで出力するよう設定されていますが,SG92Rは50HzのPWMで制御する必要があります.そのままではうまく制御できないのでソースコードの変更が必要です.
ということで,ソースコードを次のように変更します.
この変更で61HzくらいのPWMを出力出来るようになります.マイコンの仕様上ピッタリ50Hzにはできませんが,これでサーボモータを制御出来るようになります.
Grblを書き込む
コードを書き込むためにArduinoIDEをPCにインストールします.インストール方法はそんなに難しくないので割愛します.
Grblのソースコードをダウンロードします.gnea/grblからダウンロードしてきて自分で編集するなり,私が編集しておいたForkからダウンロードするなりして,自身のPCにソースコードを配置します.ZIP形式でダウンロードした場合は解凍しておく必要があります.
ArduinoIDEを起動して,スケッチ>ライブラリをインクルード>ZIP形式のライブラリをインストールを選択.ダウンロードしたソースコード内のgrblディレクトリを選択してOK.ここで選択するのはディレクトリです.ZIPファイルではありません.
ArduinoIDEのファイル>スケッチ例>grbl>grblUploadを開いて,ファイルは変更せずそのままArduinoに書き込みます.うまく書き込めない場合は,ツール>プロセッサATmega328(Old Bootloader)を選択してみるとうまく行くかもしれません.
Universal G-Code Senderを用意する
Universal G-Code Senderについて
Grblを書き込んだArduinoにGコードを送るためのソフトウェアです.Javaをベースに動いているので色々な環境で動作します.ちなみに grbl/Universal-G-Code-Sender は winder/Universal-G-Code-Sender のフォークでバージョンが古いので,winder/Universal-G-Code-Sender を使ったほうが良いです.名前が長いので移行UGSと呼びます.
Using Grblのページに記載してある通り,UGS以外にも,bCNCとか,Candleとか,色々あるので好きなのを使えばいいです.今回はUGSを使っていきます.
Universal G-Code Senderをインストールする
Windowsのインストール手順だけ整備されてないという珍しいパターンな気がしますが,そんなに難しくはないと思うのでインストール手順を見て(?)適当にインストールしてください.説明は割愛します.
Vref調整とステッピングモータの極性確認
簡単なモータドライバ仕組み
仕組みがわかると楽しさN倍なのでモータドライバの仕組みを簡単に理解していきます.仕様書はこちら.こういった仕様書はできれば英語版を読んだほうが良いですが日本語の仕様書はこちら.
モータドライバの中身を簡単に図示するこの様になっています.これはHブリッジとか,フルブリッジと呼ばれる回路で電圧変換やモータ制御に利用されています.モータの周りにある4つのスイッチをうまいことON/OFFすることでモータの正転(S1=ON,S4=ON)や逆転(S2=ON,S3=ON)などを制御します.
仕様書を見てわかる通り,A4988にはこのHブリッジが2つ入っています.上の図のS1-S2間の接点とS3-S4間の接点が,モータドライバの1Aと1B,2Aと2Bの端子に相当します.
Vrefの調整とステッピングモータの極性を確認する
CNCシールドに電源をつないで,ArduinoNanoとPCを接続したら,UGSを起動してMachine > Setup wizard から適当にキャリブレーションします.画面に従って適当に設定していけばいい感じにキャリブレーションできます.この際にサーボモータの移動方向を確認出来るので,好みの問題もありますが,このような方向で動作するように移動方向を確認しながらステッピングモータの配線を入れ替えて極性を確認します.
なんとなく極性がわかったらモータドライバ右下のGNDと可変抵抗の間の電圧Vrefを調整してモータに流れる電流を調整していきます.電流を流しすぎるとモーターが過熱してしまい,少なすぎると動きが悪くなります.
ステッピングモータの仕様はこちら.
電気特性に関してはなんの参考にもなりません.CNCシールドシールドにモータドライバと電源をつないだら手探りVrefを調整していきます.手探りの場合は安全を考慮してVrefを小さい値から徐々に大きくしながら調整するといいです.感覚的にVref=200〜300mVくらいが最適な気がします.300mVはちょっと高めなきもするので間を取って250mVで設定しておきました.
電流値はステッピングモータの定格の70%程度に設定されている例が多いようですが,実装されていたRcs(たぶんR4)は0.1Ωだったので,今回の設定値を仕様書の数式に当てはめると最大で大体300mAの電流が流れることになります.
ItripMAX=Vref/(8*Rcs)
キャリブレーションウィザードだけでは全てのパラメータの調整はできないので,一部のパラメータは自分で動かしながら適当に調整する必要があります.私の環境では以下のようにに設定しました.各パラメータの詳細はこちら.
$0 | 10 | Step pulse time |
$1 | 25 | Step idle delay |
$2 | 0 | Step pulse invert |
$3 | 0 | Step direction invert |
$4 | 0 | Invert step enable pin |
$5 | 0 | Invert limit pins |
$6 | 0 | Invert probe pin |
$10 | 1 | Status report options |
$11 | 0.010 | Junction deviation |
$12 | 0.002 | Arc tolerance |
$13 | 0 | Report in inches |
$20 | 0 | Soft limits enable |
$21 | 0 | Hard limits enable |
$22 | 0 | Homing cycle enable |
$23 | 0 | Homing direction invert |
$24 | 25.000 | Homing locate feed rate |
$25 | 500.000 | Homing search seek rate |
$26 | 250 | Homing switch debounce delay |
$27 | 1.000 | Homing switch pull-off distance |
$30 | 1000 | Maximum spindle speed |
$31 | 0 | Minimum spindle speed |
$32 | 0 | Laser-mode enable |
$100 | 6.400 | X-axis travel resolution |
$101 | 6.400 | Y-axis travel resolution |
$102 | 6.400 | Z-axis travel resolution |
$110 | 9000.000 | X-axis maximum rate |
$111 | 9000.000 | Y-axis maximum rate |
$112 | 9000.000 | Z-axis maximum rate |
$120 | 10 | X-axis acceleration |
$121 | 10 | Y-axis acceleration |
$122 | 10 | Z-axis acceleration |
$130 | 55 | X-axis maximum travel |
$131 | 55 | Y-axis maximum travel |
$132 | 0 | Z-axis maximum travel |
ここで重要なパラメータは travel resolution [steps/mm] で,モータドライバから出力されるパルス何ステップ分で1mm移動するかを定義します.今回利用しているステッピングモータでは6.4くらいが適当かなと思います.また maximum rate [mm/min] は各軸の最大移動速度を決定します.私の場合はどうせ6cm程度しか移動距離が無いので適当に設定していますが,以下の式に当てはめて30kHzを超えないのが望ましいようです.
travel resolution[steps/mm] x maximum rate[mm/min] / 60[sec] < 30[kHz]
サーボモータの回転角度を確認する
CNCシールドV4は古いバージョンのGrblのピン配置になっているため,Z軸のリミッタのピンからPWM信号が出力されます.適切な回転角度を決めるまではペンプロッタからサーボモータを外しておいてください.
サーボモータはM3 Sxxx
のGコードを使って回転角度を制御します.UGSでArduinoNanoに接続したら,コンソール画面からGコード M3 Sxxx
を送ってサーボモータの回転角度を確認します.xxx部分には0〜1000の数字が入りますが,61Hzで動かしているので特定の範囲の値しか反応しないはずです.私の環境ではS値と角度の関係は概ね次のようになりました.
Sxxx | 角度 |
---|---|
S20 | 0 |
S148 | 180 |
ということで,良さげな角度を適当に探して,ペンを上げる場合は M3 S75
,ペンを下げる場合は M3 S148
を使うことにしました.
動きが確認できたので,サーボモータを取り付けます.
おわりに
ここまでの組み立てと調整でペンプロッタ本体は完成です.
次回はGコードで絵を書く方法について説明していきます.
どうせクローンを作るなら改良してくれても良い気がしますが,せっかくKiCadが使える環境ができたのでいずれ気が向いたらGRBLv1.1向けに回路書いてみようと思います.
コメント