Страница 1 из 2

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

Добавлено: 24 мар 2017, 16:31
Wikly
Всем доброго времени суток.

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

т.к. тратиться на шаговые двигатели не охото, было решено взять моторы постоянного тока из старых струйных принтеров. От туда же и направляющие и энкодеры..
Фото:
IMG_20170324_180012.jpg (11728 просмотров) <a class='original' href='./download/file.php?id=107084&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 (11728 просмотров) <a class='original' href='./download/file.php?id=107085&mode=view' target=_blank>Загрузить оригинал (1.12 МБ)</a>
IMG_20170324_180121.jpg (11728 просмотров) <a class='original' href='./download/file.php?id=107086&mode=view' target=_blank>Загрузить оригинал (1.2 МБ)</a>
IMG_20170324_180132.jpg (11728 просмотров) <a class='original' href='./download/file.php?id=107087&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 (11728 просмотров) <a class='original' href='./download/file.php?id=107091&mode=view' target=_blank>Загрузить оригинал (691.21 КБ)</a>
IMG_20170323_155800.jpg (11728 просмотров) <a class='original' href='./download/file.php?id=107092&mode=view' target=_blank>Загрузить оригинал (1.32 МБ)</a>
IMG_20170323_204017.jpg (11728 просмотров) <a class='original' href='./download/file.php?id=107093&mode=view' target=_blank>Загрузить оригинал (1.19 МБ)</a>
...

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

Так же имеется вопрос: Может кто знает как научить ардуино обрабатывать G-код.?

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

Добавлено: 24 мар 2017, 16:47
odekolon
Как говориться "из говна и палок"! :hehehe:
Ни в коей мере не осуждаю, и не насмехаюсь.
Все начинается с малого.
легкое удивление вызвает, как на ардуине умудрились сервопетлю с энкодерами, по постоянному току сделать, если не сложно, киньте ссылочку на источник, просто из любопытства.

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

Добавлено: 24 мар 2017, 16:54
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 пин, направление не считывают.

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

Добавлено: 24 мар 2017, 17:09
odekolon
Wikly писал(а): Так же имеется вопрос: Может кто знает как научить ардуино обрабатывать G-код.?
наверное можно попытаться ваш код, привитнить к GRBL, но наверное будет трудновато....
поскольку ваша система регулирования получилось "вещь в себе" наверное проще будет поискать на помойках шаговые движки от принтеров и все-таки пойти по традиционному пути.
А самопальная сервосистема таит в себе множество поводных камней... аппаратных и программных.

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

Добавлено: 24 мар 2017, 17:12
Wikly
odekolon писал(а):можно попытаться ваш код, привитнить к GRBL,
Смотрел в эту сторону. Сейчас с ним разбираюсь. Возможно удастся привинтить. :-)
odekolon писал(а):А самопальная сервосистема таит в себе множество поводных камней... аппаратных и программных.
Ну пока работает довольно не плохо.. Но еще тестирую.

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

Добавлено: 24 мар 2017, 18:19
AndyBig
Wikly писал(а):Но конечно жесткость станка хромает.
Высшая степень дипломатичности :-D

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

Добавлено: 25 мар 2017, 21:07
Wikly
Нашел неплохой сайт, по ардуино и серво... http://www.homofaciens.de/technics-mach ... -v2_en.htm Возможно по нему перекодирую Ардуину. Управляющая программа там из под линукса...

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

Добавлено: 28 мар 2017, 15:03
Wikly
Подскажите знающие люди, если на шпильки (ну или на моторы) прикрутить механические энкодеры типа таких:
Encoder.JPG
Encoder.JPG (10.27 КБ) 11579 просмотров
как раз имеется три штуки.
Как они себя ведут? могут ли пропускать сигналы (шаги)?

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

Добавлено: 28 мар 2017, 15:45
nevkon
Работать будут, но износятся очень быстро.

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

Добавлено: 28 мар 2017, 15:58
Сергей Саныч
На высокой скорости (выше 3-5 об/сек) у таких энкодеров появляется серьезный дребезг. И, да, надолго их не хватит. Ресурс около 30000 оборотов.

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

Добавлено: 28 мар 2017, 16:08
Wikly
Понятно, в принципе так и думал. Буду искать оптические. Спасибо за подсказку.

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

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

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

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

Если хотите просто на станке деревяшки поточить, купите китайкий набор GRBL + шаговики - и пилите себе на здоровье. :D

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

Добавлено: 29 мар 2017, 14:33
ScrewDriver
Все уже придумано и разработано давно:
https://hackaday.io/project/11224-mechaduino

Это серва на ардуинке. В качестве датчика используется редкоземельный магнит и датчик магнитного поля.
перепелить на механический энкодер я думаю не составит труда, при желании.

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

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

Кто б из форумчан доплилил бы проект до оптики, драйвер можно поядреней прикрутить и готов гибридный привод хоуммэйд :hehehe:

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

Добавлено: 29 мар 2017, 14:54
ScrewDriver
odekolon писал(а):Кто б из форумчан доплилил бы проект до оптики
А зачем? оптика капризная, готовые энкодеры стоят дорого.
на магнитике - имхо самое то. Единственно там он специфичный довольно - заказывать из америки или искать в китае.

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

Добавлено: 29 мар 2017, 14:57
odekolon
может быть, хотя у нас как-то получается оптику по случаю по дешевке брать.
Мне кажется этот разговор нужно перевести в отдельную тему. Может кто реально сделает...

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

Добавлено: 30 мар 2017, 08:36
alex1816
Хорошая тарадайка получилась:)
Молодец.
Правда для работы c энкодерами наверное лучше было бы использовать не мегу, а что-то из серии STM32.
Там и частоты побольше, и есть специальный режим портов для работы с энкодерами.
Самые простенькие по конфигурации стоят около 2,5$.
За такие деньги можно и каждому энкодеру к примеру отдельный сопроцессор сделать, а основным процессором считывать готовые числа(к примеру по квадратной шине).
Работать с STM32 очень просто, конфигурация настраивается мышкой в CubeMX.

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

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

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

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


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

А если учесть, что это ядро ARM Cortex-M3 , 32бит процессор, и частоты процессора посерьезнее - думаю не пожалеете.

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

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