آردوینو - آموزش آردوینو-Arduinoهمه ی مطالب

راهنمای جامع GRBL: از معرفی تا نصب، پیکربندی و راه‌اندازی CNC

این پست برای کسانی نوشته شده که می‌خواهند با GRBL روی آردوینو (Uno/Nano) یک CNC واقعی راه‌اندازی کنند — شامل توضیح معماری داخلی GRBL، پایه‌های G-code، نحوه‌ی نصب و فلش کردن روی برد، پیکربندی پارامترها (Steps/mm، حداکثر سرعت، شتاب و …)، فعال‌سازی حالت dual‑motor (دو موتور روی یک محور) و نکات عیب‌یابی و تنظیم نهایی.


فهرست مطالب

  1. مقدمه — GRBL چیست و چرا انتخاب خوبی است
  2. معماری GRBL به زبان ساده (Parser → Planner → Stepper)
  3. G-code؛ چه چیزهایی باید بلد باشی
  4. نصب و فلش کردن GRBL روی Arduino Uno / Nano (گام‌به‌گام)
  5. فعال‌سازی و پیکربندی Dual‑Axis (محور با 2 موتور)
  6. محاسبه‌ی Steps/mm با مثال‌های واقعی (تسمه و لیداسکرو)
  7. تنظیمات کلیدی GRBL ($‑commands) و مقادیر پیشنهادی برای شروع
  8. راه‌اندازی و اتصال به کنترلر (UGS, Candle و مانیتور سریال) — گام‌به‌گام
  9. همینگ (Homing) و خودِ‑اسکوار کردن گانتری (Self‑Square) برای محور دوبل
  10. عیب‌یابی رایج و چک‌لیست نهایی
  11. منابع و مراجع

1. مقدمه — GRBL چیست و چرا انتخاب خوبی است

GRBL یک فریمور متن‌باز، سبک و بهینه است که روی میکروکنترلرهای AVRِ خانواده ATmega328P (مثل Arduino Uno/Nano) اجرا می‌شود و وظیفه‌اش تبدیل دستورات G‑code به پالس‌های کنترل استپ‑/دایرکشن برای درایورهای استپر است. GRBL برای ماشین‌های CNC کوچک و متوسط، دستگاه‌های لیزر و کاربردهای آموزشی عالی است: کم‌هزینه، ساده و با جامعهٔ بزرگی از کاربران و ابزاری که با آن هماهنگ است.

نکته: نسخه‌ی رسمی که روی GitHub مرجع (gnea/grbl) قرار دارد، ویژگی‌های مهمی دارد از جمله مدیریت شتاب (acceleration management) و الگوریتم look‑ahead برای حرکت‌های نرم و گوشه‌زنی بهتر. این مورد در مستندات پروژه درج شده است.


2. معماری GRBL به زبان ساده

وقتی یک بلوک G‑code به GRBL می‌فرستی، کارها این‌طوری انجام می‌شود:

  1. Serial Input / Buffer: GRBL کاراکترها را از USB/Serial می‌گیرد و بلوک‌های G‑code را می‌سازد.
  2. G‑code Parser: یک بلوک کامل را تجزیه و معنی‌داری آن (حرکت خطی، دایره‌ای، تنظیمات) را استخراج می‌کند.
  3. Planner (Trajectory Planner): حرکت را به بخش‌هایی تقسیم می‌کند و با استفاده از اطلاعات آینده (look‑ahead، تا حدودی ۱۸ بلوک در نسخه‌‌های 8‑بیتی) برنامه شتاب و گوشه‌زنی را محاسبه می‌کند تا حرکت‌ها یکنواخت بشوند.
  4. Stepper Segmenter / Step Generator: خروجی نهایی به صورت پالس‌های Step و تفاضل پالس‌ها (direction) تولید و روی پین‌ها ارسال می‌شود.
  5. Realtime Monitor / Overrides: GRBL امکان دستورات زمان‌واقعی (مثلاً ! برای feed‑hold، ~ برای resume، ? برای وضعیت) و override سرعت/فید را دارد.

این تقسیم کار باعث می‌شود که GRBL با سخت‌افزار کم‌منابع هم بتواند حرکات پیچیده را روان اجرا کند؛ بخش planner است که با «نگاه به جلو» از وقوع توقف‌های ناگهانی جلوگیری می‌کند.


3. G‑code؛ چه چیزهایی باید بلد باشی

G‑code زبان استاندارد CNC است (نسخه‌های مختلف دارد؛ اما اصول پایه‌ی زیر در همه مشترک‌اند):

  • G0 — حرکت سریع (rapid; معمولاً بدون نگرانی برای مسیر دقیق; در GRBL با G0 یا G1 اجرا می‌شود)
  • G1 — حرکت خطی در سرعت برش مشخص (F)
  • G2 / G3 — حرکت دایره‌ای CW/CCW (با پارامترهای I, J)
  • G90 — مختصات مطلق (absolute)
  • G91 — مختصات نسبی (incremental)
  • G20 / G21 — واحد اینچ / میلی‌متر
  • M3 / M4 / M5 — کنترل اسپیندل (روشن CW / CCW / خاموش)
  • F — feed rate (سرعت برش)، معمولاً بر حسب mm/min در GRBL
  • S — مقدار سرعت اسپیندل (RPM)

همچنین باید با ساختار بلوک G‑code آشنا باشی (یک خط = یک بلوک؛ کلمات آدرس مانند G, X, Y, Z, F، و امکان نوشتن کامنت). سیستم‌های CAM معمولاً خروجی را بر حسب ماشین و پست‑پروسِسور تولید می‌کنند.


4. نصب و فلش کردن GRBL روی Arduino Uno / Nano (گام‌به‌گام)

نکتهٔ مهم: GRBL در قالب یک پوشه سورس عرضه می‌شود که باید آن را در مسیر Arduino/libraries/ قرار دهی تا مثال grblUpload در منوی Examples ظاهر شود (روش‌های دیگر مثل PlatformIO هم وجود دارد).

روش با Arduino IDE (سریع‌ترین راه برای اکثر افراد)

  1. نرم‌افزار Arduino IDE (نسخه 1.8.x یا 2.x) را نصب کن. نسخه‌ی 1.8.x معمولاً سازگاری راحت‌تری با آموزش‌های قدیمی دارد ولی IDE 2.x هم کار می‌کند.
  2. مخزن GRBL را از GitHub دانلود کن (یا به‌صورت ZIP دانلود و اکسترکت کن). داخل پوشه‌ی دانلود‌شده یک پوشه‌ی grbl پیدا می‌کنی.
  3. پوشه‌ی grbl را داخل فولدر Documents/Arduino/libraries/ (یا sketchbook libraries) کپی کن.
  4. Arduino IDE را باز کن → منوی FileExamplesgrblgrblUpload (یا grblUpload.ino). این اسکچِ بارگذاری است.
  5. در Tools → Board، بردت را انتخاب کن (Arduino/Genuino Uno برای Uno؛ برای Nano در برخی نسخه‌ها باید ATmega328P (Old Bootloader) را انتخاب کنی اگر با خطا روبرو شدی).
  6. پورت COM درست را انتخاب کن.
  7. Upload را بزن — IDE کد را کامپایل و روی آردوینو فلش می‌کند. اگر ارور پیدا شد، پیام خطا در کنسول IDE را بخوان و معمولاً مشکل از مسیر کتابخانه یا انتخاب برد است.

روش با PlatformIO (برای کسانی که با VSCode کار می‌کنند)

  1. VSCode + PlatformIO را نصب کن.
  2. پروژهٔ GRBL را در PlatformIO باز کن (فایل platformio.ini باید board را تعیین کند؛ برای Uno از board = uno استفاده کن).
  3. Build و Upload را از PlatformIO اجرا کن.

مرجع: مراحل و مثال‌های نصب GRBL و grblUpload در مستندات و جامعه‌ی کاربری منتشر شده است (مراجع در بخش منابع آمده).


5. فعال‌سازی و پیکربندی Dual‑Axis (محور با 2 موتور)

نسخه‌ی v1.1h GRBL قابلیتِ اختیاری «مرور کردن» یا mirror کردن محور و پشتیبانی از یک موتور دوم (A-axis یا معروف به motor A) را اضافه کرد. این امکان معمولاً برای گانتری‌های دو موتوره (مثلاً Y دو موتور) استفاده می‌شود تا homing هر دو سمت و خودِ‑اسکوار شدن گانتری ممکن شود.

گزینه‌های سخت‌افزاری پشتیبانی‌شده در سورس

GRBL دو پیکربندی سخت‌افزاری از پیش تعریف‌شده دارد که انتخاب آن‌ها در config.h امکان‌پذیر است:

  • پیکربندی Protoneer CNC Shield v3.51 → پین‌های A.STP و A.DIR روی آنالوگ A4 و A3 تعریف شده‌اند.
  • پیکربندی CNC Shield Clone v3.0 → پین‌ها روی D12 و D13 تعریف شده‌اند.

اگر از شیلد استفاده نمی‌کنی ، راحت‌ترین کار این است که از همان پین‌هایی که پروژه پیش‌فرض در نظر گرفته استفاده کنی (A3/A4 یا D12/D13) و موتور/درایور دوم را به آن‌ها وصل کنی. نیازی به تغییر دستی پین‌ها در cpu_map.h نیست مگر بخواهی از پین‌های دیگری استفاده کنی.

فعال‌سازی در سورس

  1. در config.h خطِ مربوطه را از کامنت خارج کن: #define ENABLE_DUAL_AXIS.
  2. مشخص کن محور مورد نظر X_AXIS است یا Y_AXIS (برای من چون Y دو موتور داره باید بنویسم: #define DUAL_AXIS_SELECT Y_AXIS).
  3. یکی از دو پیکربندی کانفیگ شیلد را فعال کن (معمولاً DUAL_AXIS_CONFIG_PROTONEER_V3_51 برای A3/A4).
  4. سورس را کامپایل و آپلود کن.

سیم‌بندی محدودیت‌ها و نکات مهم

  • برای self‑squaring معمولاً دو limit switch (یکی برای هر سمت Y) نیاز داری. GRBL از یک پین محدود (Z_LIMIT) به‌عنوان «اشتراک» برای دومین limit استفاده می‌کند — در عمل وقتی wiring را درست انجام دهی، GRBL می‌تواند هر سمت را جداگانه حس کند. (در مستندات و بحث‌های انجمن‌ها مثال‌هایی برای سری/مشترک کردن سنسورها وجود دارد — در قسمت منابع لینک‌ها هست.)
  • بعد از homing، اگر می‌خواهی گانتری همیشه در حالت اسکوار بماند مقدار $1 را روی 255 بگذار تا استپرها همیشه enabled بمانند (درایورها تحت‌ولتاژ نگه داشته شوند) تا با دست محور جابه‌جا نشود.
  • حتماً قبل از گذاشتن بار واقعی، روی سرعت پایین homing را تست کن.

6. محاسبه‌ی Steps/mm با مثال‌هایی واقعی

مهم‌ترین پارامتری که باید دقیق باشد Steps per millimeter است. فرمول کلی:

Steps_per_mm = (Motor_steps_per_rev × Microstepping) / (Travel_per_rev)
  • برای lead‑screw: Travel_per_rev = lead (mm) (مثلاً اگر لیداسکرو در هر دور 8 mm جابه‌جا می‌کند، این عدد 8 است)
  • برای belt/pulley: Travel_per_rev = pulley_teeth × belt_pitch (مثلاً پولی 20 دندانه × pitch 5 mm → 100 mm/rev)

مثال‌های برای تنظیم اولیه :

  • Microstepping = 1/32 → micro = 32
  • Motor full steps = 200 (معمولی: NEMA17 1.8°)
  • محور X/Y: تسمه pitch = 5 mm (تو گفتی) — اگر پولی 20 دندانه داشته باشی → Travel/rev = 20 × 5 = 100 mm
Steps/mm (X,Y) = (200 × 32) / 100 = 6400 / 100 = 64 steps/mm
  • محور Z: لیداسکرو pitch = 8 mm
Steps/mm (Z) = (200 × 32) / 8 = 6400 / 8 = 800 steps/mm

بنابراین مقادیر اولیه‌ای که می‌توانی در GRBL ست کنی:

$100=64   (X steps/mm)
$101=64   (Y steps/mm)
$102=800  (Z steps/mm)

اگر پولی دندانه‌های دیگری داشته باشی، به‌جای 20 عددِ پولی را قرار بده و محاسبه کن.

نکتهٔ عملی: همیشه بعد از محاسبهٔ تئوری، با یک ابزار دقیق (کالیبر، کولیس یا دیال ایندیکاتور) حرکت واقعی را اندازه‌گیری و مقادیر را کالیبره کن.


7. تنظیمات کلیدی GRBL ($‑commands) و مقادیر پیشنهادی برای شروع

در GRBL با فرمت $xxx=value پارامترها ذخیره می‌شوند. چند پارامتر مهم:

  • $0 — Step pulse time (مقدار پیش‌فرض: ~10 میکروثانیه). اگر درایورت توانایی تشخیص پالس کوتاه را ندارد، این مقدار را افزایش بده.
  • $1 — Step idle delay (ms). با $1=255 می‌توانی استپرها را همیشه enabled نگه داری تا گانتری قفل بماند.
  • $2 — Step port invert (mask) — برای معکوس‌سازی پالس استپ اگر درایور نیاز داشت.
  • $3 — Direction port invert (mask) — برای معکوس کردن جهت هر محور.
  • $11 — Junction deviation (mm) — پارامتر جدیدی برای کنترل نحوه‌ی گوشه‌زنی (معمولی 0.01 یا مقدار پیشنهادی کارگاه).
  • $20 — Soft limits enable (0/1).
  • $21 — Hard limits enable (0/1).
  • $22 — Homing cycle enable (0/1).

مجموعهٔ نمونه (مقادیر پیشنهادی برای شروع، بر اساس سخت‌افزار سبک تا متوسط)

$100=64      (X steps/mm)
$101=64      (Y steps/mm)
$102=800     (Z steps/mm)

$110=3000    (X max rate mm/min)  → ≈50 mm/s
$111=3000    (Y max rate mm/min)
$112=500     (Z max rate mm/min)

$120=200     (X accel mm/s^2)
$121=200     (Y accel mm/s^2)
$122=50      (Z accel mm/s^2)

$130=300     (X travel mm)
$131=300     (Y travel mm)
$132=100     (Z travel mm)

$0=10        (step pulse µs)
$1=255       (keep steppers enabled)
$22=1        (enable homing)

این مقادیر نقطه آغاز خوبی‌اند؛ بسته به وزن محور، درایور، جریان موتور و گیربکس باید کاهش یا افزایش یابند.


8. راه‌اندازی و اتصال به کنترلر — Universal Gcode Sender (UGS) به‌عنوان مثال

نصب و اتصال UGS

  1. دانلود UGS: از سایت رسمی یا GitHub آخرین نسخهٔ UGS Platform یا UGS Classic را بگیر. نسخه Platform امکانات بیشتری مثل تب کنسول و نمایشگر مسیر دارد.
  2. نصب Java (در صورت نیاز): برخی نسخه‌ها نیاز به Java Runtime Environment دارند.
  3. اتصال: آردوینو را با USB وصل کن. در UGS پورت COM مناسب را انتخاب و Baud rate را روی 115200 قرار بده. سپس روی Connect کلیک کن.

امکانات کلیدی UGS

  • Console: در این تب می‌توانی دستورات GRBL را مستقیم وارد کنی (مثلاً $$ برای دیدن همه تنظیمات).
  • Machine Status: نمایش موقعیت فعلی، حالت محورها، وضعیت limit switch ها، سرعت feed و غیره.
  • Commands & Overrides: دکمه‌های سریع برای Reset، Unlock ($X)، Homing ($H)، و تغییر لحظه‌ای feed یا spindle override.
  • Jog Controller: ابزار گرافیکی برای حرکت دادن دستی محورها؛ می‌توانی اندازهٔ گام و سرعت را تعیین کنی.
  • Visualize: در UGS Platform، فایل G-code را بارگذاری و مسیر حرکتی را قبل از اجرا روی صفحه مشاهده می‌کنی.

اجرای اولین تست‌ها

  1. بعد از اتصال موفق، دستور $$ را در Console بزن و مطمئن شو مقادیر تنظیمی درست هستند.
  2. با Jog controller محورها را اندکی حرکت بده و تأیید کن موتورها جهت درست حرکت می‌کنند.
  3. اگر Limit switch ها نصب‌اند، دستور $H را ارسال کن تا Homing انجام شود. مراقب باش سرعت پایین انتخاب کرده باشی.
  4. یک فایل ساده G-code مثل یک مربع کوچک (10×10mm) را بارگذاری و اجرا کن تا مطمئن شوی حرکات هماهنگ هستند.

دستورات زمان‌واقعی (Real-time)

  • ~ → ادامه اجرای برنامه (Cycle Start/Resume)
  • ! → توقف موقت امن (Feed Hold)
  • ? → نمایش سریع وضعیت (مختصات، حالت محورها)
  • Ctrl+X → ریست نرم‌افزاری GRBL

نکات ایمنی در زمان اتصال و ارسال

  • همیشه قبل از اجرای G-code واقعی، دستگاه را در هوا (بدون ابزار یا بار) تست کن.
  • از کلید اضطراری (E-Stop) سخت‌افزاری استفاده کن تا در صورت نیاز برق کل سیستم را قطع کند.
  • مسیر فایل G-code را با Preview چک کن تا حرکتی خارج از محدوده تعریف‌شده ($130, $131, $132) انجام نشود.

9. Homing و self‑square برای محور دو موتوره

سیم‌کشی limit switches برای self‑squaring

روش‌های مختلفی وجود دارد؛ رایج‌ترین روش: هر سمت گانتری یک limit switch مستقل داشته باشد و GRBL آن‌ها را به‌گونه‌ای بخواند که بتواند هر سمت را جداگانه homing کند. برخی شیلدها از پین‌های A3/A4 یا D12/D13 برای موتور دوم و از پین Z برای اشتراک limit استفاده می‌کنند.

روند homing (تست امن)

  1. همه کابل‌ها را چک کن و دستگاه را بدون بار روشن کن.
  2. $22=1 را تنظیم کن.
  3. در UGS $H را بزن و رفتار را با سرعت پایین مشاهده کن.‌ اگر یک سمت زودتر به limit می‌خورد، GRBL آن را ثبت می‌کند و بعد از طرف دیگر نیز حرکت تکمیل می‌شود؛ در نهایت گانتری مربع می‌شود.
  4. اگر رفتار معکوس بود، polarity یا تنظیمات $3 (direction invert mask) را تغییر بده.

هشدار: اگر limit switches یا سیم‌بندی اشتباه باشد ممکن است موتور به سخت‌افزار فشار بیاورد — سرعت و حرکت را در لحظهٔ تست بسیار پایین قرار بده.


10. عیب‌یابی رایج و چک‌لیست نهایی

موتورها حرکت نمی‌کنند

  • پورت COM و Baud را بررسی کن (115200).
  • اطمینان از فلش شدن صحیح GRBL (از طریق Serial Monitor پیغام Grbl x.x را ببین).
  • تأیید تغذیه‌ی درایورها و تنظیم جریان (Vref).
  • چک کن که EN/Enable درایورها فعال باشد (برخی پین‌ها invert شده‌اند: $4).

گم شدن استپ / لق زدن در حرکت سرعت بالا

  • کاهش سرعت مکس ($110/$111) یا شتاب ($120/$121).
  • افزایش $0 (step pulse) از مقدار پیش‌فرض 10 µs به مقادیر بالاتر مثل 20‑100 µs در صورت نیاز.
  • بررسی جریان درایورها (Vref) و نصب proper cooling.

بعد از homing محور Y روان نیست / گانتری اسکوار نمی‌شود

  • چک کن که هر دو limit switch سالم و روی پین‌های صحیح وصل شده باشند.
  • بررسی $1=255 تا استپرها همواره فعال بمانند.
  • اگر یکی از موتورها جهت اشتباه دارد، مقادیر $3 را بررسی کن یا سیم‌های DIR را برعکس کن.

حرکات دایره‌ای / G2‑G3 خطا می‌دهد یا کیفیت پایین است

  • مقدار arc tolerance / junction deviation ($12, $11) را تنظیم کن. مقادیر کوچک باعث دقت بالاتر ولی محاسبات بیشتر می‌شوند.

11. منابع و مراجع (برای مطالعهٔ بیشتر)

  • ریپو GitHub رسمی GRBL (مرجع پروژه و releaseها)
  • صفحات راهنما و مقالات community مانند HowToMechatronics و Circuitist برای نحوهٔ نصب روی Arduino
  • مستندات GRBL Settings و لیست دستورات برای $‑commands و real‑time commands
  • مقالات و ابزارهای آنلاین برای محاسبهٔ Steps/mm (lead screw, belt)

جمع‌بندی

این راهنمایِ مفصّل قدم‌به‌قدم تلاش کرد تا همهٔ بخش‌های لازم برای نصب، پیکربندی و راه‌اندازی یک دستگاه CNC با GRBL (شامل محور Y با دو موتور) را پوشش دهد: از معماری و طرز کار داخلی GRBL و G‑code تا جزئیات نصب روی Arduino، محاسبات Steps/mm، تنظیم $‑ها، و راه‌اندازی با UGS.

Köhnə Dərviş

Adım Köhnə Dərviş, əsrlərdir bu dünyanın təlaşını izləyirəm. Əvvəllər mənə "mistik" deyərdilər, indi "geek" deyirlər. Çölə çıxıb transa keçmək əvəzinə, artıq Arduino ilə transistora keçirəm. Mənəvi aləmdəki səfərimi WiFi siqnalı izləyərək tamamlayıram – "İlahi Router"ın mənasını hələ də axtarıram. Mənə görə ən böyük mərciməh "sükut"du, indi bunu noise-cancelling algoritmlə təmin edirəm. Həyat mənə "debug" etməyi öyrətdi: öz kodu ilə yaşayan bir dərvişəm. Və xeyir, dua etməyə çay əvəzinə kofeinsiz espresso tövsiyə edirəm – çünki dərin məşğuliyyət tələb edir. ☕️🔧

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

دکمه بازگشت به بالا