Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Как построить 3-осевой станок с ЧПУ в домашних условиях? Об этом нам расскажет мастер-самодельщик с ником Tuenhidiy. Многие детали в этой сборки используются повторно. Например, 2 старых серводвигателя постоянного тока и 2 деревянных ящика для вина.
Давайте посмотрим небольшое видео.


Инструменты и материалы:
-Деревянный ящик 350 x 400 x 80 x 8 мм. (Ш x Д x В x Т);
-Деревянный ящик 220 x 340 x 100 x 10 мм. (Ш x Д x В x Т);
-Arduino Uno R3;
-Arduino Mega 2560;
-Arduino CNC Shield V3 GRBL;
-Драйвер шагового двигателя A4988;
-Arduino L293D Motor Shield;
-Сервомотор постоянного тока NF5475E 2 -шт;
-Привод CD / DVD-ROM;
-Опора шагового двигателя 50 мм — 2 шт;
-GT2 6 мм ремень 200 мм — 2 шт;
-GT2 Шкив 60 зубьев — 2шт;
-Стержень 8 мм, длина 400 мм — 4 шт;
-2 ходовых винта T8, шаг 2 мм, шаг 8 мм, длина 400 мм;
-Алюминиевая муфта с гибким валом, размер внутреннего отверстия: 10 мм x 10 мм;
-Горизонтальный кронштейн для шарикоподшипника — 12 шт;
-Вертикальный кронштейн для шарикоподшипника — 4 шт;
-Подшипники F608ZZ 8 x 22 x 7 мм — 2 шт;
-Макетная плата;
-Блок питания 12 В 10 А;
-Блок питания 5В 5A;
-Разъем постоянного тока;
-Ленточный кабель;
-Акрил 5 мм;
-Доска для рисования;
-Резьбовые вставки;
-Неодимовые магниты 16 шт;
-Кабельные стяжки;
-Крепеж;
-Сверлильный станок;
-Паяльные принадлежности;

Шаг первый: схема проекта
Схему проекта можно скачать здесь. Для ЧПУ мастер использует 2 сервомотора постоянного тока для осей X, Y и 1 шагового двигателя для оси Z.
На схеме есть 3 группы:
Группа 1 — красная: включает Arduino Uno с предустановленной прошивкой GRBL и CNC Shield. Arduino Uno отвечает за отправку управляющих сигналов: Шаг / Направление на драйвер серводвигателя постоянного тока X, Y и драйвер шагового двигателя Z.
Группа 2 — синяя: включает Arduino Mega 2560 и L293D Motor Shield, которые работают как драйвер серводвигателя постоянного тока. Они получают команды STEP / DIR от Arduino Uno и выполняет ПИД-регулирование для осей X и Y.
Группа 3 — коричневая: включает серводвигатель постоянного тока X, Y.

Самодельный станок с ЧПУ

Шаг второй: серводвигатель постоянного тока
Параметры основного серводвигателя постоянного тока NF5475E отмечены красным прямоугольником на фото.

Самодельный станок с ЧПУ

Для питания мастер использовал источник питания 12 В постоянного тока, потому что это напряжение совместимо с L293D Motor Shield. Если использовать источник питания 24 В постоянного тока, модуль управления двигателем должен иметь более высокий уровень напряжения, например L298N.Энкодер должен получать питание от 5 В постоянного тока, и он имеет два канала A, B. Разрешение энкодера 200 200 импульсов на оборот. Т.е. энкодер будет генерировать 200 импульсов, когда двигатель совершит один оборот.

Самодельный станок с ЧПУ

Шаг третий: сборка станка
Построение оси Y
Сначала мастер измерил двигатель, ремни и шкивы. На старом серводвигателе установлен шкив с 20 зубьями. Мастер заменил его на шкив с 60 зубьями + зубчатый ремень 200 мм для привода ходового винта.

Самодельный станок с ЧПУ

В ящике просверлил отверстия. Установил опорные подшипники. Установил ходовой винт и стержни.

Самодельный станок с ЧПУ

Монтаж рабочей поверхности по оси Y
В качестве рабочей поверхности мастер использовал ламинированную доску.

Самодельный станок с ЧПУ

Чтобы зажать медную гайку ходового винта, он использовал опору шагового двигателя L и 2 акриловые пластины, как на картинке ниже. Диаметр отверстия L-образной опоры и медной гайки совмещены.

Самодельный станок с ЧПУ

Затем платформу нужно закрепить на опорных подшипниках + ходовой винт.

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Построение оси X
Маленькая коробка использовалась для того, чтобы построить структуру оси X. Как и ось Y, он использовал дополнительный шкив с 60 зубьями и зубчатый ремень 200 мм для привода ходового винта.

Самодельный станок с ЧПУ

Серводвигатель оси X спрятан внутри коробки. Один акриловый лист размером 100 x 230 мм был установлен на оси X, а позже на нем будет установлен CD-привод для оси Z.

Самодельный станок с ЧПУ

Медная гайка ходового винта зажимается между опорой двигателя L-образной формы и двумя небольшими акриловыми листами, как и ось Y. Дальше собирает две оси вместе.

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Построение ось Z
Для оси Z мастер использовал CD-привод. Ручка / карандаш зажимается алюминиевой муфтой.

Самодельный станок с ЧПУ

Далее раму укрепил шпильками. Установил рабочий стол.

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Шаг четвертый: монтаж платы управления
Arduino Mega Adapter Shield.
Дальше нужно вырезать плату 60 x 90 мм и смонтировать все детали. Adapter Shield используется для подключения Arduino Mega 2560 к L293D Motor Shield, энкодерам серводвигателей постоянного тока следующим образом:
Верхний разъем: подключение к L293D Motor Shield.
Нижний разъем: подключение к Arduino Mega 2560.
4 контакта — верхние штекерные разъемы: подключение к сервомотору X Encoders (5 В, GND, канал A, канал B).
4 контакта — верхние штекерные разъемы: подключение к сервомотору Y Encoders (5 В, GND, канал A, канал B).
2 контакта — верхний штекерный разъем: подключение к сигналам X.STEP и X.DIR.
2 контакта — верхний штекерный разъем: подключение к сигналам Y.STEP и Y.DIR.

Самодельный станок с ЧПУ

Распиновка разъема энкодера на серводвигателе NF5475E, должна быть такой, как показано ниже.

Самодельный станок с ЧПУ

Сборка платы управления
Затем собирает детали в следующем порядке:
Ардуино Мега 2560.
Плата
L293D
Arduino Uno
Плата расширения

Самодельный станок с ЧПУ

Устанавливает плату управления и блоки питания (5 и 12 В постоянного тока) внутри маленькой коробки.
Устанавливает выключатель.

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Шаг пятый: программирование
Код Arduino Mega 2560 можно скачать ниже.

Самодельный станок с ЧПУ

/* In this project, DC servo motors can be simulated as same as stepper motors and they can be controlled via GRBL firmware for CNC application. */ // Timer2 library #include «FlexiTimer2.h» // PID library #include <PID_v1.h> // AFMotor library #include <AFMotor.h> // Quadrature Encoder Library #include «Encoder.h» // Create the motor driver instances AF_DCMotor motorX(1, MOTOR12_8KHZ); AF_DCMotor motorY(2, MOTOR12_8KHZ); // Set up pins for the quadrature encoders — Arduino MEGA2560 has 6 interrupt pins. #define EncoderX_ChannelA 18 // Interrupt 5 #define EncoderX_ChannelB 22 #define EncoderY_ChannelA 20 // Interrupt 3 #define EncoderY_ChannelB 24 // Set up STEP & DIRECTION pins for X and Y axis #define STEP_XPIN 19 // Interrupt 4 #define STEP_YPIN 21 // Interrupt 2 #define DIR_XPIN 23 #define DIR_YPIN 25 // Turn on/ off debugging for X/Y servo motor #define DEBUG_X 0 // For X servo motor #define DEBUG_Y 0 // For Y servo motor // For calculating the actual movements #define STEPSPERMM_X 300.0 // STEP/mm is used in the GRBL firmware for DC servo motor X axis. #define DEADBW_X 30.0 // Deadband width = 30.0 —> Acceptable error for positioning in mm: 0.10mm. #define STEPSPERMM_Y 300.0 // STEP/mm is used in the GRBL for DC servo motor Y axis. #define DEADBW_Y 30.0 // Deadband width = 30.0 —> Acceptable error for positioning in mm: 0.10mm. // Set up Input double INPUT_X; double INPUT_Y; double OLD_INPUT_X = 0; double OLD_INPUT_Y = 0; // Set up Actual value double ACTUAL_X_MM; double ACTUAL_Y_MM; double OLD_ACTUAL_X_MM; double OLD_ACTUAL_Y_MM; // PID controller constants double KP_X = 10.0; // P for X servo motor double KI_X = 0.03; // I for X servo motor double KD_X = 0.01; // D for X servo motor double KP_Y = 10.0; // P for Y servo motor double KI_Y = 0.03; // I for Y servo motor double KD_Y = 0.01; // D for Y servo motor // The Output variable motor speed to the motor driver double OUTPUT_X; double OUTPUT_Y; double OLD_OUTPUT_X = 0; double OLD_OUTPUT_Y = 0; // Setpoint double SETPOINT_X = 0; double SETPOINT_Y = 0; double OLD_SETPOINT_X = 0; double OLD_SETPOINT_Y = 0; double ERROR_X = 0; double ERROR_Y = 0; // Direction int directionX; int directionY; // PID controller PID myPID_X(&INPUT_X, &OUTPUT_X, &SETPOINT_X, KP_X, KI_X, KD_X, DIRECT); PID myPID_Y(&INPUT_Y, &OUTPUT_Y, &SETPOINT_Y, KP_Y, KI_Y, KD_Y, DIRECT); // Setup optical encoders Encoder XEncoder(EncoderX_ChannelA, EncoderX_ChannelB); Encoder YEncoder(EncoderY_ChannelA, EncoderY_ChannelB); void setup() { // For debugging if (DEBUG_X || DEBUG_Y) { Serial.begin(115200); } pinMode(STEP_XPIN, INPUT); pinMode(STEP_YPIN, INPUT); pinMode(DIR_XPIN, INPUT); pinMode(DIR_YPIN, INPUT); // The stepper simulator attachInterrupt(4, doXstep, RISING); // PIN 19 (Interrupt 4) — Interrupt X step at rising edge pulses attachInterrupt(2, doYstep, RISING); // PIN 21 (Interrupt 2) — Interrupt Y step at rising edge pulses // Outpout PWM limits myPID_X.SetOutputLimits(-255, 255); myPID_Y.SetOutputLimits(-255, 255); // Compute output every 1ms myPID_X.SetSampleTime(1); myPID_Y.SetSampleTime(1); // Setup PID mode myPID_X.SetMode(AUTOMATIC); myPID_Y.SetMode(AUTOMATIC); // Apply PID every 1ms by FlexiTimer2 FlexiTimer2::set(1, 1.0 / 1000, doPID); FlexiTimer2::start(); } void loop() { // Read X and Y axis servo encoders INPUT_X = XEncoder.read(); INPUT_Y = YEncoder.read(); // Calculating the error ERROR_X = (INPUT_X — SETPOINT_X); ERROR_Y = (INPUT_Y — SETPOINT_Y); // For debugging if (DEBUG_X) { ACTUAL_X_MM = INPUT_X / STEPSPERMM_X; // Debugging X motor actual position in mm if (OLD_ACTUAL_X_MM != ACTUAL_X_MM) { Serial.print(«ACTUAL X(MM): «); Serial.println(ACTUAL_X_MM); OLD_ACTUAL_X_MM = ACTUAL_X_MM; } // Debugging position X encoders if (OLD_INPUT_X != INPUT_X) { Serial.print(«POSITION X: «); Serial.println(INPUT_X); OLD_INPUT_X = INPUT_X; } // Debugging X stepping input if ( SETPOINT_X != OLD_SETPOINT_X ) { Serial.print(«SETPOINT X: «); Serial.println(SETPOINT_X); OLD_SETPOINT_X = SETPOINT_X; } // Debugging X motor PWM output if ( OUTPUT_X != OLD_OUTPUT_X ) { Serial.print(«OUTPUT X: «); Serial.println(OUTPUT_X); OLD_OUTPUT_X = OUTPUT_X; } } if (DEBUG_Y) { ACTUAL_Y_MM = INPUT_Y / STEPSPERMM_Y; // Debugging Y motor actual position in mm if (OLD_ACTUAL_Y_MM != ACTUAL_Y_MM) { Serial.print(«ACTUAL Y(MM): «); Serial.println(ACTUAL_Y_MM); OLD_ACTUAL_Y_MM = ACTUAL_Y_MM; } // Debugging Y stepping input if ( SETPOINT_Y != OLD_SETPOINT_Y ) { Serial.print(«SETPOINT Y: «); Serial.println(SETPOINT_Y); OLD_SETPOINT_Y = SETPOINT_Y; } // Debugging position Y encoders if (OLD_INPUT_Y != INPUT_Y) { Serial.print(«POSITION Y: «); Serial.println(INPUT_Y); OLD_INPUT_Y = INPUT_Y; } // Debugging Y motor PWM output if ( OUTPUT_Y != OLD_OUTPUT_Y ) { Serial.print(«OUTPUT Y: «); Serial.println(OUTPUT_Y); OLD_OUTPUT_Y = OUTPUT_Y; } } } void doXstep() { if ( digitalRead(DIR_XPIN) == HIGH ) SETPOINT_X—; else SETPOINT_X++; } void doYstep() { if ( digitalRead(DIR_YPIN) == HIGH ) SETPOINT_Y—; else SETPOINT_Y++; } void doPID() { interrupts(); myPID_X.Compute(); myPID_Y.Compute(); if (abs(ERROR_X) < DEADBW_X) // If servo motor X is in position within the deadband width (acceptable error) { motorX.setSpeed(0); // Turn off servo motor X } else { motorX.setSpeed(abs(int(OUTPUT_X))); // Servo motor X is regulated by PID controller ouput } if (abs(ERROR_Y) < DEADBW_Y) // If servo motor Y is in position within the deadband width (acceptable error) { motorY.setSpeed(0); // Turn off servo motor Y } else { motorY.setSpeed(abs(int(OUTPUT_Y))); // Servo motor Y is regulated by PID controller ouput } int directionX; int directionY; if(OUTPUT_X > 0) { directionX = FORWARD; } if(OUTPUT_X < 0) { directionX = BACKWARD; } if(OUTPUT_Y > 0) { directionY = FORWARD; } if(OUTPUT_Y < 0) { directionY = BACKWARD; } motorX.run(directionX); motorY.run(directionY); }

Для этого проекта нужно установить следующие библиотеки:
PID Бретта Борегарда (PID_v1)
Библиотека Adafruit Motor Shield (AFMotor)
Библиотека кодировщика
Библиотека FlexiTimer2

Шаг шестой: параметры GRBL
Параметры GRBL для ЧПУ следующие

Самодельный станок с ЧПУ

$0 10.000 Step pulse time $1 25.000 Step idle delay $2 0.000 Step pulse invert $3 0.000 Step direction invert $4 0.000 Invert step enable pin $5 0.000 Invert limit pins $6 0.000 Invert probe pin $10 1.000 Status report options $11 0.010 Junction deviation $12 0.002 Arc tolerance $13 0.000 Report in inches $20 0.000 Soft limits enable $21 0.000 Hard limits enable $22 0.000 Homing cycle enable $23 0.000 Homing direction invert $24 25.000 Homing locate feed rate $25 500.000 Homing search seek rate $26 250.000 Homing switch de-bounce delay $27 1.000 Homing switch pull-off distance $30 1000.000 Maximum spindle speed $31 0.000 Minimum spindle speed $32 0.000 Laser-mode enable $100 300.000 X-axis travel resolution $101 300.000 Y-axis travel resolution $102 53.333 Z-axis travel resolution $110 20000.000 X-axis maximum rate $111 20000.000 Y-axis maximum rate $112 2000.000 Z-axis maximum rate $120 20.000 X-axis acceleration $121 20.000 Y-axis acceleration $122 10.000 Z-axis acceleration $130 210.000 X-axis maximum travel $131 297.000 Y-axis maximum travel $132 40.000 Z-axis maximum travel

Самодельный станок с ЧПУ

Шаг седьмой: настройка ПИД-регулятора
Оптимальные параметры PID, которые соответствуют значениям настройки GRBL на предыдущем шаге следующие:
// The PID parameters double KP_X = 10.0; // P for X servo motor double KI_X = 0.03; // I for X servo motor double KD_X = 0.02; // D for X servo motor double KP_Y = 10.0; // P for Y servo motor double KI_Y = 0.03; // I for Y servo motor double KD_Y = 0.02; // D for Y servo motor
Он также применил функцию « d eadband » в ПИД-регуляторе. Серводвигатели постоянного тока работают без сбоев. Они не нагреваются и не перегреваются, даже если поддерживается их непрерывная работа в течение многих часов.
#define STEPSPERMM_X 300.0 // STEP/mm ($100) is used in the GRBL firmware for DC servo motor X axis. #define DEADBW_X 30.0 // Deadband width in pulses = 30.0 —> Acceptable error for positioning in mm: 0.10mm.[url=https://winder.github.io/ugs_website/download/]Универсальная платформа Gcode (UGS)[/url] #define STEPSPERMM_Y 300.0 // STEP/mm ($101) is used in the GRBL firmware for DC servo motor Y axis. #define DEADBW_Y 30.0 // Deadband width in pulses = 30.0 —> Acceptable error for positioning in mm: 0.10mm.

Шаг восьмой: тестирование
Теперь можно установить ручку в держатель, поместить лист на рабочем столе и протестировать устройство.
В этом проекте используются следующее ПО и расширения:
Прошивка GRBL
Универсальная платформа Gcode (UGS)
Inkscape 1.0
Расширения Gcodetools
AxiDraw Software 2.6.3 от Evil Mad Scientist Laboratories

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Все готово.

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Самодельный станок с ЧПУ

Добавить комментарий

Ваш адрес email не будет опубликован.


вернуться наверх
Меню
Самоделки
Adblock
detector