PR

XYテーブルをCNC化!ArduinoとA4988を使ったステッピングモーター制御の基本【自作CNC第1回】

CNC自作
スポンサーリンク

はじめに

こんにちは。にんじんです🥕

新シリーズ 自作CNC製作記の第1回 はじめます。

これまで数回にわたり製作してきたXYテーブルシリーズも、今回で一区切りとなります。次のステップとして、いよいよ本格的な「CNC制御」への挑戦を開始します。

今回のテーマはシンプルです。

👉 「CNC制御を自作する」

今回のテーマは、手元にあるXYテーブルを流用してCNC化の基盤を作ることです。まずは仕組みを理解しながら、一歩ずつ進めていきましょう。

スポンサーリンク

今回の検証ゴール(到達目標)

今回の到達目標は

👉 Arduinoからの指示でX軸・Y軸を動作させること

最初から加工機としての完成を目指すのではなく、まずは「問題なく動く状態」を構築し、ハードウェアの結線や電気的な仕様に問題がないかを確認していきます。

自作CNCのハードウェア構成と部品選定

テストを行うにあたり、以下の部品一式を用意しました。

PC(Windows11)
Arduino UNO R3
A4988用ドライバーボード・・・Arduinoと互換
A4988 ×2
USBケーブル(TypeA-TypeB)
Arduino電源(9V 1A推奨
モーター用電源(12V 3A)
ステッピングモーター:SM-42BYG011-25
機構:過去記事のXYテーブルを流用

💡ステッピングモータードライバ「A4988」の特徴と電流調整の注意点

CNCの自作において定番となっているモータードライバが「A4988」です。このチップには以下のような特徴があります。

  • マイクロステップ制御に対応しており、細かな位置決め(1/16分割など)が可能である
  • 基板上の半固定抵抗を回すことで、電流制限値を手動で調整できる
  • 比較的安価で入手性が良い

ただし注意点として、

👉 電流調整(Vref調整)をしないとモーターが不安定になる

実用上の注意点として、この電流調整(Vref調整)を適切に行わないと、モーターの動作が不安定になったり、発熱が激しくなったりします。具体的な電流の調整方法については、過去の記事で詳しく解説していますので、必要に応じてそちらをご参照ください。

CNC制御においてRaspberry PiではなくArduinoを選ぶ理由

CNCの制御において、シングルボードコンピュータである「Raspberry Pi(ラズパイ)」を使用する構成を見かけることもあります。しかし、今回はメインのモーター制御に「Arduino」を選択しました。

その理由は、CNC制御において極めて重要となる「リアルタイム処理」の適正にあります。CNCを正確に動かすためには、ステッピングモーターへ送るパルス信号のタイミングや、複数軸の同期制御を極めて精密に行わなければならないためです。

Raspberry Piの特性

Raspberry Piは汎用的なOS(Linux)が動作しているため、バックグラウンドで様々な処理が同時に実行されています。そのため、厳密な意味でのリアルタイム処理が苦手とされており、モーター制御においては以下のような課題が生じることがあります。
・パルス信号の出力タイミングにわずかなバラつきが生じる
・信号の遅延により、モーターの「脱調(ステップ抜け)」の原因になり得る
実際にオシロスコープで出力波形を確認した際も、単体でシビアなCNC制御を行うのは難しいという印象を受けました。

Arduinoの強み

一方でArduinoは、OSを持たず「単一のプログラムのみを愚直に実行する」という構造のため、リアルタイム制御に対して非常に強いというメリットがあります。

実際に測定したパルス波形も非常に安定していました。これはRaspberry Piが劣っているということではなく、適材適所の役割分担が重要です。

実機を動かすパルス制御はArduinoに任せ、そのArduinoに命令を送る上位の「頭脳(GUI操作盤)」としてRaspberry Piを組み合わせる形が理想的です。現時点の最終構想としても、Raspberry Piの画面から指示を出し、Arduinoで各モーターを制御する構成でCNCマシンを製作していく予定です。

スポンサーリンク

ハードウェアの回路接続と電解コンデンサによるノイズ対策

電源ラインに電解コンデンサ(100μF以上)が必須となる理由

あれ?コンデンサが入っているって思った方いますかね

豆知識:なぜA4988に電解コンデンサを入れるのか
A4988を使う場合、モーター電源(12V)に対して
電解コンデンサ(100μF以上)を並列に入れるのが必須です。
理由は「電圧の安定化」です。

ステッピングモーターは電流の変動が激しい
・ステッピングモーターは動作中、
・コイルに急激な電流変化が発生する
👉 その結果、電源ラインにノイズや電圧の揺れが発生します。

コンデンサなしだと何が起きるか
コンデンサを入れていない場合、
・電圧が瞬間的に落ちる(電圧降下)
・逆起電力によるスパイクが発生
その結果👇
・モーターが不安定になる
・誤動作(ステップ抜け)
・最悪の場合、A4988が破損する

コンデンサの役割
電解コンデンサは、
👉 「電気のバッファ(貯水タンク)」の役割
・電圧が下がったとき → 電気を供給
・電圧が上がりすぎたとき → 吸収
これによって、👉 電源を安定させることができる

実務的なポイント
・容量は100μF〜470μF程度が一般的
・電圧は使用電圧より余裕を持たせる(例:30V~50V)
・できるだけA4988の近くに配置する

開発環境の準備:Arduino IDEのインストール手順

Arduino Uno R3を動作させるために専用アプリケーションをインストールします
下記のArduino更新サイトより、使用するPCに対応するインストーラーをダウンロードしてください。

https://www.arduino.cc/en/software/

対応するインストーラーを選択し
「DOWNLOAD」をクリック

DOWNLOADしたファイルを実行

同意するをクリック

どちらかを選択し「次へ」をクリック

「インストール」をクリック

インストールが開始されます

「完了」をクリック

スポンサーリンク

テストコードによるステッピングモーターの動作確認手順

結線と開発環境の準備が整いましたら、テストプログラムを実行して実際の動作を確認します。検証用のテストコード(test_code_XY.ino)は、以下のリンクよりZIP形式でダウンロード可能です。

折りたたまれたテストコードを表示する
// テストコード test_code_XY.ino

#define X_STEP 2
#define X_DIR 5

#define Y_STEP 3
#define Y_DIR 6

#define ENABLE 8

bool stopFlag = false;

void setup() {
pinMode(X_STEP, OUTPUT);
pinMode(X_DIR, OUTPUT);
pinMode(Y_STEP, OUTPUT);
pinMode(Y_DIR, OUTPUT);
pinMode(ENABLE, OUTPUT);

digitalWrite(ENABLE, LOW); // 有効化

Serial.begin(115200);
Serial.println("Press 's' to STOP");
}

// 停止チェック
void checkStop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 's' || c == 'S') {
stopFlag = true;
}
}
}

// 停止処理
void stopAll() {
Serial.println("STOPPED");
digitalWrite(ENABLE, HIGH); // モーターOFF
while (1); // 完全停止
}

// 指定軸を指定方向に回す
void moveMotor(int stepPin, int dirPin, bool dir, int steps) {
digitalWrite(dirPin, dir);

for (int i = 0; i < steps; i++) {
checkStop();
if (stopFlag) stopAll();

digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
}

void loop() {
stopFlag = false;

// ===== X軸 =====
moveMotor(X_STEP, X_DIR, LOW, 300); // 正転
delay(500);
moveMotor(X_STEP, X_DIR, HIGH, 300); // 逆転

delay(1000);

// ===== Y軸 =====
moveMotor(Y_STEP, Y_DIR, HIGH, 300); // 正転
delay(500);
moveMotor(Y_STEP, Y_DIR, LOW, 300); // 逆転

delay(2000);
}

こちらからダウンロードできます。

test_code_XY.ino をダウンロード(ZIP)
  • Arduino IDEを開く
  • 上部のプルダウンよりArduinoが接続されているポートを選択します。
  • デフォルトで入力されているコードを削除する。
  • テストコードを張り付ける
  • 画面左上の→矢印をクリックし、Arduino Uno R3に書き込まれます。
  • 自動でX軸Y軸の動作が実行されます。
※動作を一時停止させたい場合は、Arduino IDEの画面右上にあるボタンから「シリアルモニタ」を起動し、キーボードの「S」を入力してEnterを押してください。
スポンサーリンク

動作動画

プログラムを実行した際、以下のポイントを重点的に確認します。

  • 意図した方向に軸(あるいはモーター)が回転しているか
  • 回転時に異常な異音や、不自然な激しい振動が発生していないか
  • 引っかかりがなく、スムーズに同期して回転しているか

この段階で動作に違和感がある場合は、モーターの配線順(相の組み合わせ)が間違っているか、ドライバ基板の電流制限値の設定が不適切である可能性が高いため、再度確認を行ってください。

スポンサーリンク

まとめと次回予告:リミットスイッチの実装と機械原点の確定へ

今回の記事では、Arduinoを用いたCNC制御の基本構成と、最初の回転テストまでの手順をご紹介しました。

本来はリミットスイッチの配線までを一つの記事にまとめる予定でしたが、解説が長くなってしまいましたので、回路の安全に関わるスイッチの実装は次回のテーマに回したいと思います。

次回の第2回では、「リミットスイッチの実装による検証用ハードウェア結線の完了」として、工作機械としての正確な位置決め(原点復帰)を行うための設定を進めていきます。

スポンサーリンク

CNC自作シリーズ

【CNC自作①】Arduino+GRBLでXYテーブルをCNC化してみた

【CNC自作②】リミットスイッチ実装|原点出し(ホーミング)で精度を出す

【CNC自作③】GRBL+CNCjsでPC制御に挑戦!動いたけれど見えてきた「精度の壁」

【CNC自作 ④】ついに届いた本命モーター!精度ブレの解決とGコード初テスト

【CNC自作】2軸同期走行テスト成功!…と思いきや、中華製基板の「致命的な罠」にハマる(第5回)

【CNC自作】ホーミング失敗(ALARM:8)の原因はこれ!4ステップ動作とZ軸未連動での突破方法(第6回)

【CNC自作】本番アルミ筐体完成!CNCjs(GRBL)でのテストと「Check Door」エラーの意外すぎる罠(第7回)

自作CNC 1064nm赤外線レーザーで金属刻印!GRBL設定変更とLightBurn素材テスト(第8回)

スポンサーリンク

他のシリーズ




【ラズパイ装備図鑑 第3回】Raspberry Pi 4B 周辺機器完全ガイド
Raspberry Pi 4Bの周辺機器、何を揃える?1GB〜8GBの選び方から冷却方式別のケース、AIカメラ・LIDARまで、Amazon・楽天の実売品で徹底比較しました。
【ラズパイ装備図鑑 第2回】Raspberry Pi 3B+ 周辺機器完全ガイド
ロングセラーのRaspberry Pi 3B+、周辺機器は何を揃える?本体セットからケースの冷却方式、電子工作学習キットまでAmazon・楽天の実売品で徹底比較しました。
【ラズパイ装備図鑑 第1回】Raspberry Pi Pico/Pico W 周辺機器完全ガイド
.rzb01-block { position: relative; overflow: hidden; border-radius: 12px; border: 1px solid #f0cba8; background: linear-…
Claude CodeにGemini画像生成を持たせる ― 「AI Plus会員なのにAPIが動かない」を乗り越えるまで
「Claude Codeは画像生成が苦手。GeminiのAPIと安全に連携させる実装方法と、Google AI Plus会員なのにAPIが使えなかった原因・解決策を実体験ベースで解説します。」
【設計データ配布】自作CNCレーザー刻印機の全部品リストと2D/3D図面一式
ArduinoとGRBLで作る自作CNCレーザー刻印機の設計データを配布。板金図面(DXF/STEP)・3D組立図・結線図・全51点のBOMをセットで販売。ミスミmeviyで個人発注可能。製作記録全10回と合わせて活用できます。

コメント