Самодельный станок ЧПУ на ардуино с DC моторами + энкодеры.

Конструкции станков, линейные перемещения, направляющие, передачи.
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Самодельный станок ЧПУ на ардуино с DC моторами + энкодеры.

Сообщение Wikly »

Всем доброго времени суток.

Наконец то закончен первый станочек из фанеры..

т.к. тратиться на шаговые двигатели не охото, было решено взять моторы постоянного тока из старых струйных принтеров. От туда же и направляющие и энкодеры..
Фото:
IMG_20170324_180012.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107084&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.19 МБ)</a>
Пришлось заказать на Ebay линейные подшипники внутренним диаметром 8 мм. (примерно 300 руб. 10 шт.) и подшипники качения внутренним диаметром 6 мм (также примерно 300 руб. за 10 штук).

Так же куплены две шпильки М6 длиной 1 м. (около 100 р. за метр.)

В качестве электроники выбрал ардуино мега (куплено в Ebay за 400 руб) + Плата расширения для управления моторами Motorhield v 1. (Цена 100 р.)

Фото:
IMG_20170324_180056.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107085&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.12 МБ)</a>
IMG_20170324_180121.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107086&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.2 МБ)</a>
IMG_20170324_180132.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107087&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.36 МБ)</a>
Код для ардуины был взят с сайта: http://www.ecnc.ru, немного переделан для работы с моторами DC. С этого же сайта была взята и управляющая программа на ПК.

Видео работы станочка (Youtube): https://www.youtube.com/watch?v=j5dMaj5l2gk&t=21s
И гравировка самодельной фрезой из сверла: https://www.youtube.com/watch?v=3l74Qfh ... e=youtu.be

Еще фото:
IMG_20170323_155749.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107091&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (691.21 КБ)</a>
IMG_20170323_155800.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107092&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.32 МБ)</a>
IMG_20170323_204017.jpg (11084 просмотра) <a class='original' href='./download/file.php?id=107093&sid=7da26a0ea0671ce3ab689df6d3b33e38&mode=view' target=_blank>Загрузить оригинал (1.19 МБ)</a>
...

Всё работает. Но конечно жесткость станка хромает.

Так же имеется вопрос: Может кто знает как научить ардуино обрабатывать G-код.?
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

Как говориться "из говна и палок"! :hehehe:
Ни в коей мере не осуждаю, и не насмехаюсь.
Все начинается с малого.
легкое удивление вызвает, как на ардуине умудрились сервопетлю с энкодерами, по постоянному току сделать, если не сложно, киньте ссылочку на источник, просто из любопытства.
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

odekolon писал(а):Как говориться "из говна и палок"!
Совершенно верно!
Задача стояла построить, чтоб работало! И, работает!
odekolon писал(а):как на ардуине умудрились сервопетлю с энкодерами, по постоянному току сделать
Над этим долго голову ломал. Было прочитано довольно много инфы, и в итоге получилось.

Сигналы с энкодеров идут на внешние прерывания ардуины (У Mega прерываний 6, потому и была выбрана именно она).
Код ардуины для работы с энкодероми и моторами получился такой:

Код: Выделить всё

void setup() {
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor3.setSpeed(255);

 int i;
 Serial.begin(9600);

   attachInterrupt(3, blink1, CHANGE);
   attachInterrupt(2, blink2, CHANGE);
   attachInterrupt(4, blink3, CHANGE);

 delayTime=4; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения)
}

void  moveBackward(int sm)
{
  if (sm == 0)
  {
    while (P1 < 1){
    motor1.run(FORWARD);
    }
    motor1.run(RELEASE);
    P1 = 0;
  }
  else if (sm == 1)
  {
    while (P2 < 1){
    motor2.run(FORWARD);
    }
    motor2.run(RELEASE);
    P2 = 0;
  }
  else if (sm == 2)
  {
    while (P3 < 1){
    motor3.run(FORWARD);
    }
    motor3.run(RELEASE);
    motor3.run(BACKWARD);
    delay(5);
    motor3.run(RELEASE);
    P3 = 0;
  }
}

void moveForward(int sm)
{
  if (sm == 0)
  {
    while (P1 < 1){
    motor1.run(BACKWARD);
    }
    motor1.run(RELEASE);
    P1 = 0;
  }
  else if (sm == 1)
  {
    while (P2 < 1){
    motor2.run(BACKWARD);
    }
    motor2.run(RELEASE);
    P2 = 0;
  }
  else if (sm == 2)
  {
    while (P3 < 1){
    motor3.run(BACKWARD);
    }
    motor3.run(RELEASE);
    motor3.run(FORWARD);
    delay(5);
    motor3.run(RELEASE);
    
    P3 = 0;
  }
}
Полный код:

Код: Выделить всё

#include <AFMotor.h>

int motorPins[3][4] = {{2, 3, 4, 5},{7, 8, 6, 9},{10, 11, 12, 13}};
int count;
int count2[3] = {0,0,0};
int delayTime;
int val = 0;
int rot=0;
int incomingByte = 0;
int sign=1;
int P1,P2,P3, s = 0;

AF_DCMotor motor1(3, MOTOR12_64KHZ); 
AF_DCMotor motor2(2, MOTOR12_64KHZ); 
AF_DCMotor motor3(4, MOTOR12_64KHZ); 

void blink1()
{
  P1++;
}

void blink2()
{
  P2++;
}

void blink3()
{
  P3++;
}



//Процедура настройки прошивки
void setup() {
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor3.setSpeed(255);

 int i;
 Serial.begin(9600);

   attachInterrupt(3, blink1, CHANGE);
   attachInterrupt(2, blink2, CHANGE);
   attachInterrupt(4, blink3, CHANGE);

 delayTime=4; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения)
}

void  moveBackward(int sm)
{
  if (sm == 0)
  {
    while (P1 < 1){
    motor1.run(FORWARD);
    }
    motor1.run(RELEASE);
    P1 = 0;
  }
  else if (sm == 1)
  {
    while (P2 < 1){
    motor2.run(FORWARD);
    }
    motor2.run(RELEASE);
    P2 = 0;
  }
  else if (sm == 2)
  {
    while (P3 < 1){
    motor3.run(FORWARD);
    }
    motor3.run(RELEASE);
    motor3.run(BACKWARD);
    delay(5);
    motor3.run(RELEASE);
    P3 = 0;
  }
}

void moveForward(int sm)
{
  if (sm == 0)
  {
    while (P1 < 1){
    motor1.run(BACKWARD);
    }
    motor1.run(RELEASE);
    P1 = 0;
  }
  else if (sm == 1)
  {
    while (P2 < 1){
    motor2.run(BACKWARD);
    }
    motor2.run(RELEASE);
    P2 = 0;
  }
  else if (sm == 2)
  {
    while (P3 < 1){
    motor3.run(BACKWARD);
    }
    motor3.run(RELEASE);
    motor3.run(FORWARD);
    delay(5);
    motor3.run(RELEASE);
    
    P3 = 0;
  }
}

//Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно
void MoveSM(long x, long y, long z) {
  long c[3], c2[3];
  double c1[3], d[3];
  long m, i;
  boolean flg;
  
  c[0] = x;
  c[1] = y;
  c[2] = z;
  
  m = 1;
  for (i=0; i<3; i++) {
    if (m < abs(c[i])) m = abs(c[i]);
  }
  
  for (i=0; i<3; i++) {
    c1[i] = 0;
    d[i] = 1.0 * c[i] / m;
    c2[i] = 0;
  }

  flg = false;
  for (i=0; i<3; i++) {
    if (abs(c1[i]) < abs(c[i])) flg=true;
  }
  while (flg) {
    flg=false;
    for (i=0; i<3; i++) {
      if (abs(c1[i]) < abs(c[i]))
       c1[i] += d[i];
      if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
       if (c[i]>0) {
        c2[i]++;
        moveForward(i);
       } else {
        c2[i]--;
        moveBackward(i);
       }
      }
      if (abs(c1[i]) < abs(c[i])) flg=true;
    }
    delay(delayTime);
  }
}

//Основной цикл
void loop() {
 if (Serial.available() > 0) { //Пришла команда
  long c[4]={0,0,0,0};
  int i;
  sign=1;
  i=0;
  incomingByte = Serial.read();
  while (incomingByte!=';') { //Читаем входящую строку, признак конца строки знак "точка с запятой"
   if (c[i]==0) {
    if (incomingByte=='-')
     sign=-1;
   }
   if (incomingByte==',') {
    c[i]*=sign;
    sign=1;
    i++;
   } else if (incomingByte>='0' && incomingByte<='9') {
    c[i]=c[i]*10+incomingByte-'0';
   }
   while (Serial.available() == 0) {
    delay(2);
   }
   incomingByte = Serial.read();
  }
  c[i]*=sign;
  MoveSM(c[0],c[1],c[2]); //Вращаем двигатели на заданное число шагов
  Serial.println("OK");  //Отправляем компьютеру сообщение "OK", значит можно высылать новую команду
 }
 else
  delay(100); //Если ничего не пришло, ждём 1/10 секуды.
}
Сами энкодеры простые, 4 пин, направление не считывают.
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

Wikly писал(а): Так же имеется вопрос: Может кто знает как научить ардуино обрабатывать G-код.?
наверное можно попытаться ваш код, привитнить к GRBL, но наверное будет трудновато....
поскольку ваша система регулирования получилось "вещь в себе" наверное проще будет поискать на помойках шаговые движки от принтеров и все-таки пойти по традиционному пути.
А самопальная сервосистема таит в себе множество поводных камней... аппаратных и программных.
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

odekolon писал(а):можно попытаться ваш код, привитнить к GRBL,
Смотрел в эту сторону. Сейчас с ним разбираюсь. Возможно удастся привинтить. :-)
odekolon писал(а):А самопальная сервосистема таит в себе множество поводных камней... аппаратных и программных.
Ну пока работает довольно не плохо.. Но еще тестирую.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение AndyBig »

Wikly писал(а):Но конечно жесткость станка хромает.
Высшая степень дипломатичности :-D
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

Нашел неплохой сайт, по ардуино и серво... http://www.homofaciens.de/technics-mach ... -v2_en.htm Возможно по нему перекодирую Ардуину. Управляющая программа там из под линукса...
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

Подскажите знающие люди, если на шпильки (ну или на моторы) прикрутить механические энкодеры типа таких:
Encoder.JPG
Encoder.JPG (10.27 КБ) 10935 просмотров
как раз имеется три штуки.
Как они себя ведут? могут ли пропускать сигналы (шаги)?
nevkon
Почётный участник
Почётный участник
Сообщения: 2393
Зарегистрирован: 17 июл 2015, 10:25
Репутация: 302
Настоящее имя: Константин
Откуда: Балаково (Саратовская обл.)
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение nevkon »

Работать будут, но износятся очень быстро.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Сергей Саныч »

На высокой скорости (выше 3-5 об/сек) у таких энкодеров появляется серьезный дребезг. И, да, надолго их не хватит. Ресурс около 30000 оборотов.
Чудес не бывает. Бывают фокусы.
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

Понятно, в принципе так и думал. Буду искать оптические. Спасибо за подсказку.
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

To Wikly:
Дружеский совет: чем проходить тернистый путь который давным-давно прошли прошли производители сервоприводов, чтоб получить уникальную конструкцию, может стоит заняться чем-нибудь более полезным для себя и для комьюнити? Интересных задач полно, к примеру сделать готовую сборку linuxCNC на малине.

Нет, творчество ради творчества, штука полезная, каждый инженер испытывает потребность "херней позаниматься" но слишком углубляться не стоит.

Хотя если поставить задачу "Квазиполноценный сервопривод постоянного тока на ардуине" , может и есть смысл позаниматься...
Но тогда вместо кривого станка, придется сначала создать испытательный стенд с энкодером, динамометром и т.п., а потом уже городить свой сервопривод.

Если хотите просто на станке деревяшки поточить, купите китайкий набор GRBL + шаговики - и пилите себе на здоровье. :D
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Аватара пользователя
ScrewDriver
Мастер
Сообщения: 1942
Зарегистрирован: 06 сен 2016, 01:44
Репутация: 498
Настоящее имя: Василий
Откуда: Москва
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение ScrewDriver »

Все уже придумано и разработано давно:
https://hackaday.io/project/11224-mechaduino

Это серва на ардуинке. В качестве датчика используется редкоземельный магнит и датчик магнитного поля.
перепелить на механический энкодер я думаю не составит труда, при желании.
Промышленная автоматика, ПЛК, приводы, SCADA системы
Мой Ютуб канал.
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

ScrewDriver писал(а):Все уже придумано и разработано давно:
https://hackaday.io/project/11224-mechaduino
Это серва на ардуинке. В качестве датчика используется редкоземельный магнит и датчик магнитного поля.
перепелить на механический энкодер я думаю не составит труда, при желании.
Ух! Удивил! :good:
правда это не движок постоянного тока, но все равно интересно!

Кто б из форумчан доплилил бы проект до оптики, драйвер можно поядреней прикрутить и готов гибридный привод хоуммэйд :hehehe:
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Аватара пользователя
ScrewDriver
Мастер
Сообщения: 1942
Зарегистрирован: 06 сен 2016, 01:44
Репутация: 498
Настоящее имя: Василий
Откуда: Москва
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение ScrewDriver »

odekolon писал(а):Кто б из форумчан доплилил бы проект до оптики
А зачем? оптика капризная, готовые энкодеры стоят дорого.
на магнитике - имхо самое то. Единственно там он специфичный довольно - заказывать из америки или искать в китае.
Промышленная автоматика, ПЛК, приводы, SCADA системы
Мой Ютуб канал.
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

может быть, хотя у нас как-то получается оптику по случаю по дешевке брать.
Мне кажется этот разговор нужно перевести в отдельную тему. Может кто реально сделает...
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
alex1816
Мастер
Сообщения: 224
Зарегистрирован: 03 фев 2017, 01:06
Репутация: 35
Настоящее имя: Александр
Откуда: Украина
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение alex1816 »

Хорошая тарадайка получилась:)
Молодец.
Правда для работы c энкодерами наверное лучше было бы использовать не мегу, а что-то из серии STM32.
Там и частоты побольше, и есть специальный режим портов для работы с энкодерами.
Самые простенькие по конфигурации стоят около 2,5$.
За такие деньги можно и каждому энкодеру к примеру отдельный сопроцессор сделать, а основным процессором считывать готовые числа(к примеру по квадратной шине).
Работать с STM32 очень просто, конфигурация настраивается мышкой в CubeMX.
Wikly
Новичок
Сообщения: 10
Зарегистрирован: 24 мар 2017, 15:51
Репутация: 3
Настоящее имя: Иван
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение Wikly »

alex1816 писал(а):Хорошая тарадайка получилась:)
Молодец.
Правда для работы c энкодерами наверное лучше было бы использовать не мегу, а что-то из серии STM32.
Там и частоты побольше, и есть специальный режим портов для работы с энкодерами.
Самые простенькие по конфигурации стоят около 2,5$.
За такие деньги можно и каждому энкодеру к примеру отдельный сопроцессор сделать, а основным процессором считывать готовые числа(к примеру по квадратной шине).
Работать с STM32 очень просто, конфигурация настраивается мышкой в CubeMX.
C STM32 никогда не сталкивался, а несколько Дунь уже в наличии были (Нано, Уно, Мега).
Спасибо за инфу, поглядим, что такое эта STM32...
alex1816
Мастер
Сообщения: 224
Зарегистрирован: 03 фев 2017, 01:06
Репутация: 35
Настоящее имя: Александр
Откуда: Украина
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение alex1816 »

Wikly писал(а):поглядим, что такое эта STM32...
Думаю не пожалеете.
Разобраться с ним очень просто, конфигурация через CubeMX(бесплатна с офф сайта), потом программирование на С. То есть код на С думаю не тяжело перенесется с меги, уно и тп. В процессе программирования конфигурацию можно загружать в куб и перенестраивать(или добавлять) ноги.
Все очень удобно и просто.
Я с нуля(ну немного навыки на С) сделал самоделку с клавиатурой, экраном, энкодером(у меня правда абсолютный), управление мотором и тп.
Использовал одну из самых простых отладочных плат ценой чуть больше 2еув http://www.ebay.com/itm/STM32F103C8T6-A ... SwygJXhGtV.


Кроме того прямо CubeMX может установить в чип FreeRTOS (realtime OS).
Там уже надо программировать с учетом семафоров и тп.
Я с этим пока не занимался, но может пригодится.

А если учесть, что это ядро ARM Cortex-M3 , 32бит процессор, и частоты процессора посерьезнее - думаю не пожалеете.
Аватара пользователя
odekolon
Мастер
Сообщения: 1103
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 360
Настоящее имя: Борис
Контактная информация:

Re: Самодельный станок ЧПУ на ардуино с DC моторами + энкоде

Сообщение odekolon »

alex1816 писал(а):
Wikly писал(а):поглядим, что такое эта STM32...
Думаю не пожалеете.
O ! а я как раз позавчера такую заказал (чисто поиграться)
alex1816 пожалуйста, заведите тему в разделе "электроника", дайте ссылки на софт, напишите про грабли на которые наступали.
Обчество вам спасибо скажет и репутации добавит :D
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Ответить

Вернуться в «Механика»