XYテーブル動作状況(動画)
先ず、製作したXYテーブル動画です。
ガイドとボールねじが一体化されているスライドガイドを入手することが出来たので、これまで何回か投稿している一軸スライドガイド(X軸)と一体化し、XYテーブルに改造しました。
ARDUINO 相当品+CNC-SHIELD から、X軸はA4988ドライバー、Y軸はオリエンタルモーター製のDFC1507 ドライバーを使用し、制御しています。
前の投稿でも紹介していますが、Gコード送信は、下のエクセルシートからシリアル通信で行っています。動画は“原点復帰”と“連続運転” の様子です。
Y軸パラメータ
ARDUINOパラメータは次の様に設定しています。
$22は原点復帰後に移動し、動作原点とする長さですが、Y軸ストロークを100mm 確保する為に短くしています。
$1はY軸が1mm移動するに必要となるステップ数です。
Y軸はモーター1回転当り6mm 移動するので、1mm 当りのステップ数は次の様になります。
360 (度) ÷ 0.036 (度/STEP) ÷ 6 (mm) = 1667 (STEP/mm)
接続状況
前の投稿とも重複しますので、接続配線は書略しますが、とりあえず接続状況写真を残しておきます。
円弧補間動作(G02,G03)
下記は円弧補間のテスト動画です。中心座標(100,50)とし、半径10,30,50 mm の円軌道を順番に移動しています。
円弧補間のGコードは、G02(CW回転), G03(CCW回転)となっています。
指定形式は次の様になっています。現在位置( X0 , Y0 )を始点として、G02の次にある X,Y では、終点 位置( X1 , Y1 ) を指定します。I,J では、現在位置に対する円弧の中心位置( X0+I , Y0+J )を指定しています。
整理すると、 現在位置( X0 , Y0 ) から 終点 位置( X1 , Y1 )まで 、( X0+I , Y0+J )を中心とする円弧軌道を指定します。
円弧補間テスト運転プログラム
エクセルシート上で半径を指定すると、 中心座標(100,50)を固定とする Gコードを生成し、連続的に動作するテストプログラムを作成しました。
プログラムコードは、以下の通りです。
'円弧補間
Private Sub CommandButton4_Click()
Dim sht
Dim res
Dim cir_R, pos_X, pos_Y
Dim G_CD As String
Dim ln_CNT
sht = ActiveSheet.Name
Worksheets(sht).Range("E21:F30").ClearContents
ln_CNT = 0
Do
cir_R = Trim(Worksheets(sht).Cells(21 + ln_CNT, 3).Value)
pos_X = Trim(Worksheets(sht).Cells(21 + ln_CNT, 4).Value)
pos_Y = 50
If cir_R = "" Or pos_X = "" Then Exit Do
G_CD = "G90G0X" & pos_X & "Y" & pos_Y
Worksheets(sht).Cells(21 + ln_CNT, 5).Value = G_CD
res = StartSerialComm(G_CD, "COM4")
Do
Sleep (500)
DoEvents
res = StartSerialComm("?", "COM4")
If InStr(res, "Idle") Then
Exit Do
End If
Loop
G_CD = "G90G03X" & pos_X & "Y" & pos_Y & "I" & cir_R & "J0F1500"
Worksheets(sht).Cells(21 + ln_CNT, 5).Value = G_CD
res = StartSerialComm(G_CD, "COM4")
Do
Sleep (500)
DoEvents
res = StartSerialComm("?", "COM4")
If InStr(res, "Idle") Then
Exit Do
End If
Loop
Worksheets(sht).Cells(21 + ln_CNT, 6).Value = res
DoEvents
ln_CNT = ln_CNT + 1
If ln_CNT >= 10 Then Exit Do
Loop
G_CD = "G90G0X0Y0"
res = StartSerialComm(G_CD, "COM4")
Do
Sleep (500)
DoEvents
res = StartSerialComm("?", "COM4")
If InStr(res, "Idle") Then
Exit Do
End If
Loop
MsgBox "連続運転完了(" & Trim(Str(ln_CNT)) & ")", vbOKOnly
End Sub
まとめ
ちょっと感動しました。
寄せ集めで作ったので、良い方でしょう。