Трудный путь к ЧПУ

Leontev_Evgeniy
Offline
Зарегистрирован: 06.02.2018

Привет, пишешь что очень много добра есть у тебя? Напиши на почту leontev_zhenya@mail.ru

Посмотрим, может что ценное и найду у вас.

Leontev_Evgeniy
Offline
Зарегистрирован: 06.02.2018

"Есть идеи как можно понизить трудоемкость создания таких 3D моделей?" - заказать мне, я сделаю, не дорого.

Почта: leontev_zhenya@mail.ru 



Skype: leontev1979



VK:          https://vk.com/leontev1979  

Portfolio: https://vk.com/public121812933 

Telegram: @Vizual_3D



WhatsApp: +79241442570

ivan_fly
Offline
Зарегистрирован: 19.10.2017

Проблема с прошивкой GRBL. 

Собственно была такая проблема, спасибо добрым людям - помогли решить:

Не крутились движки в GRBL-controller.

Драйвер и движок проверял, прямо на шилде без GRBL, мною написанным скетчем - крутит его отлично.

GRBL-controller ардуину с шилдом видит. Команды принимает, не ругается.

G0 F100
G0 X1 - выполняет

Если нажать на стрелочку - движение есть.

Но, например:...
G0 X20 - GRBL-controller изображает, что все в порядке, координаты меняются на +20, но двигатель не крутится...
В это время амперметр показывает ток на движке - 0. Хотя пока стоит без движения примерно 0,5 А.
Более того, пару месяцев назад получалось все и с GRBL-controller.
Но потом снес из памяти ардуины скетч - пример из библиотеки GRBL (использовал ардуину для других проектов).
Да, и если зайти в консоль - Grbl 0.9j ['$' for help] - появляется.
Но если отправить "$" - ничего не происходит...
Хотя непосредственно в Grbl-controller все эти команды работают.
Настройки GRBL по умолчанию. Пока не менял.

Решение - попадались старые левые прошивки GRBL. Вот здесь скачал последнюю и... все )))

https://github.com/grbl/grbl/

mix010185
Offline
Зарегистрирован: 13.09.2018

добрый день! начел собирать чпу на токихже двигателях, в качестве кантролера в зял ардуино UNO шилд версии 3 и драйвера А4988. вот у меня вопрос к вам не подскажите на шилд для управления двигателями вы какое напряжение использовали 12в или 24в

nevkon
Offline
Зарегистрирован: 20.01.2015

По нормальному надо подавать 24В, но тогда питание ардуинки нужно делать отдельно - стабилизатор у нее не рассчитан на такое напряжение (максимум 17-19В и то на пределе, будет такой что жарить на нем можно будет). Соответственно линии надо будет разделять. На 12В работать будет, но потеряете в динамике и скорости.

mix010185
Offline
Зарегистрирован: 13.09.2018

спасибо понел

mix010185
Offline
Зарегистрирован: 13.09.2018

спасибо понел

mix010185
Offline
Зарегистрирован: 13.09.2018

Добрый день! Подскажите пожалуйста какие флезы лучши применять для обработки фанеры и древесины.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

mix010185 пишет:

Добрый день! Подскажите пожалуйста какие флезы лучши применять для обработки фанеры и древесины.

Неплохие фрезы Kyosera tycom. Острые и долго не тупятся

Для фанеры, например, эта
https://www.ebay.com/itm/151248427803
 

Также там можно подобрать фрезы для акрила. 
Например, эту
https://www.ebay.com/itm/152624581348

mix010185
Offline
Зарегистрирован: 13.09.2018

Спасибо огромное!

nevkon
Offline
Зарегистрирован: 20.01.2015

Ну для фанеры простая спиральная фреза не очень подходит. Даже очень острые они довольно сильно мохрят край (хотя у меня пока все они мохрят, но спиральные ужас какой-то). Лучше использовать вертикальную (без спирали) или кукурузу. Фрезы больше 2 мм для совсем мелких нежестких станков я бы не стал брать, но сильно тонкие тоже не стоит, оптимально - 1.5-2мм. При обработке кукурузой стоит учитывать что у нее плохой отвод стружки и заглубляться надо постепенно.

Вопрос к sav13 - брали фрезы по ссылке (кстати эта около 1.5мм - 1/16"=1.5875мм, не очень удобный для вычисления размер)? Интересует кончик, не получается найти двухзаходную фрезу с правильно заточенным кончиком, у всех как будто лопату точили.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

nevkon пишет:

Вопрос к sav13 - брали фрезы по ссылке (кстати эта около 1.5мм - 1/16"=1.5875мм, не очень удобный для вычисления размер)? Интересует кончик, не получается найти двухзаходную фрезу с правильно заточенным кончиком, у всех как будто лопату точили.

Брал несколько фрез для акрила у этого продавца, еще разных доложил,  так как доставка все равно платная, а так дешевле получалось. Эти фрезы нормально берут не очень толстый акрил без охлаждения. Фанеру не замечал, чтобы мохрили - кромка очень острая у них и рез получается ровный. А вот кукуруза на толстой фанере греется и начинает жечь. Может из-за того что кукуруза китайская, тупая у меня )))

Дюймовые размеры не очень удобно, но один раз приспосабливаешься к размеру и нормально

Кстати, у Kyosera есть и метрические размеры:
https://www.ebay.com/itm/10-2-00mm-0787-KYOCERA-TWO-FLUTE-CARBIDE-ENDMIL...

mix010185
Offline
Зарегистрирован: 13.09.2018

Добрый день извеняюсь за беспокойство. Я ранее писал что начел сборку станка на двигателях m49sp-2k но шилд решил поменять на версию 4 с arduino NANO а драйвера оставил теже A4988 и вот я его собрал. Залил прошивку grbl 9 но он не хочет работать. двигателя на осях подергиваются иногда на пол шага и все. пробывал подавать 24в сняв перемычку подачи 12 вольт и подал на обозначенные клемы 24v не чего не изменилось. Как новичек я несилен в этом подскажите пожалуйста что нужно сделать буду очень я признатилен. С уважением Михаил. 

mix010185
Offline
Зарегистрирован: 13.09.2018

за рание спасибо!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

интересна, какой язык для тебя родной?

mix010185
Offline
Зарегистрирован: 13.09.2018

а для тебя?

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

mix010185 пишет:

Добрый день извеняюсь за беспокойство. Я ранее писал что начел сборку станка на двигателях m49sp-2k но шилд решил поменять на версию 4 с arduino NANO а драйвера оставил теже A4988 и вот я его собрал. Залил прошивку grbl 9 но он не хочет работать. двигателя на осях подергиваются иногда на пол шага и все. пробывал подавать 24в сняв перемычку подачи 12 вольт и подал на обозначенные клемы 24v не чего не изменилось. Как новичек я несилен в этом подскажите пожалуйста что нужно сделать буду очень я признатилен. С уважением Михаил. 

1. Неправильно подключены движки (перепутаны провода)
2. Движкам не хватает усилия крутить оси - механика слишком тугая
3. Неправильно выставлен ток а драйвере

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Когда-то давным давно я тоже начел, но начел с того, что электронику, подключил к движкам, лежащим на столе, настроил ток на драйверах, залил прошивку и попробовал выполнять G-код. Когда убедился, что все работает, приступи к сборке.....но до готового станка у меня дело не дошло....

nevkon
Offline
Зарегистрирован: 20.01.2015

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

зы. Механика должна рукой ленгко приводиться в движение пальцами, если винт уже на месте, то он должен легко вращаться от усилия двух пальцев, если винта еще нету, то все должно перемещаться также от легкого толчка.

Собственно фото не помешает хотя бы общее.

mix010185
Offline
Зарегистрирован: 13.09.2018

Да ходовые гайки у меня туговаты ктк чтобы избежать люфтов но пальцами крутятся оси, буду пружины урезать и двигатели сниму буду пробовать обучить. Спасибо за подсказки фото скину позже

mix010185
Offline
Зарегистрирован: 13.09.2018

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

Nosferatu
Offline
Зарегистрирован: 04.11.2012

mix010185 пишет:

...может проблема с драйверами? ...

Ну так проверьте драйвера.

Подаём вручную импульс на STEP. Проверяем уровни на выходах драйвера 1А,2А,1В,2В. Записываем.  И повторяем  4-16 раз.

Squb
Offline
Зарегистрирован: 12.09.2016

Всем доброе утро, долго вдохновлялся вашими успехами)))

Вот собрал свой станок. Станина из профильной трубы 40х20 и 20х20, двигатели Nema17, драйвера A4988, управление программой Mach3. Материалы на его изготовление стоили окло 13 т.р., не считая старого компа с LPT(с БП копьютера 12 В используется для питания моторов). В качестве шпинделя китайский гравер на 135 Вт. В качестве стола доски, фрезерованные самим станком для придания ровности))

Дерево обрабатывать можно, но осторожно. А фрезеровать ПП вроде можно, но тут отдельная проблема как из герберов сделать нормальную УП, что-то простое конечно получается.

Главный вопрос такой, он уже не раз задавлся, зазал я "экструдер"(https://ru.aliexpress.com/item/Upgrade-MK8-Extruder-Nozzle-Latest-Print-...) и теперь хочу добавить опцию 3д печати: снял шпиндель - поставил "экструдер" и вуаля....

Вопрос в том, кто-то смог довести эту идею до конца или это гиблое дело?

И второй вопрос, подскажите какие пути для решения поставленной задачи кто-то из вас встречал?

Я вижу два варианта: 1) - идеальный, управление осями остается у Mach3, но добавляется какая-то программа для контроля температуры и подачи пластика экструдером....

2) Докупаю плату RAMPS 1.4 и прошивкой Maarlin получаю желанный 3д принтер.... но надо будет переключать не только шпиндель, но и двигатели с платы на плату...

Кто, что думает по этому поводу?

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Squb пишет:

...1) - идеальный, управление осями остается у Mach3, но добавляется какая-то программа для контроля температуры и подачи пластика экструдером....

Читал, что ставят "Mach3 Addon  Converting a CNC Machine to a 3D Printer".

Тема интересная. Держите в курсе, как сделаете.

svm
Offline
Зарегистрирован: 06.11.2016

У меня работает под МАЧ, без всяких аддонов, просто в текстовом редакторе автозаменой меняем все "E" на "A" и МАЧ проглатывает. Нагрев экструдера и стола-автономный. На 168 ардуинке. Первые запчасти для принтера печатал на большом фрезере, с полем 1000х500х300. Т.к. каретки тяжелые (около 30 кг) то  печать была очень медленной. http://3dtoday.ru/blogs/svm/project-dragon/

svm
Offline
Зарегистрирован: 06.11.2016

   

 

Squb
Offline
Зарегистрирован: 12.09.2016

svm пишет:

У меня работает под МАЧ, без всяких аддонов, просто в текстовом редакторе автозаменой меняем все "E" на "A" и МАЧ проглатывает. Нагрев экструдера и стола-автономный.

То что мне надо, но как я понял есть отдельные команды в G-кодах для экструдера, типа подача пластика, скорость, направление.. В том чуде, что я заказал идет термопара (К-type) и как я понял резистор в роли нагревателя, с термопарой нужна схема усилитиля, чтобы ваять что-то свое под Ардуино))

Как настроить MACH3, экструдер как 4-ая ось?

А температура у вас как задается и измеряется? 

svm
Offline
Зарегистрирован: 06.11.2016

Squb пишет:

Как настроить MACH3, экструдер как 4-ая ось?

А температура у вас как задается и измеряется? 

Экструдер включен как ось "А". И соответственно калибруется. В G кодах меняется наименование осей-вместо "Е", указывается "А"и все. По нагревателю- используется стандартный для всех китайцев. В качестве термодатчика NTC резистор на 100 кОм.

Дело было давно, но сейчас попрбую поискать схему и скетч.

Вот скетч, управление две кнопки и два переменных резистора

 

// Версия для про мини
//входы установки   А2 - экструдер, А3 - стол
//входы термисторов А6 - экструдер, А7 - стол
//инверсные выходы нагрева D2 - экструдер, D3 - стол


#include <Wire.h>
float t_extr,t_stol,t_sr;
int rez,Ust_extr,Ust_stol;
unsigned long StartTime;
byte i,e,s,scan_code,rev;

byte simv[15]={63,6,91,79,102,109,125,7,127,111,64,129,65,8,72};//знакогенер ТМ 1650
byte simv_razr[4];//разряды индикатора
//---------------------------------------------------------------------------------------
void setup(void)
{Wire.begin();Wire.beginTransmission(36);Wire.write(17);Wire.endTransmission();//инит индикатора          
//Serial.begin(9600);
//analogReference(EXTERNAL);// лучше подключить AREF к 3.3 В,и питать ими цепь термистора
//так как он не так сильно "шумит"
 rev=1;// показать реальную температуру экструдера
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
}

void loop(void)
{
// выбор режима двумя кнопками кратковременное нажатие-реальная температура, длительное установка
Wire.beginTransmission(0x25);        // обращаемся к клавиатуре(к любому порту 0х24-0х27)
 Wire.requestFrom((0x25), 1);         //запрашиваем один байт
 scan_code = Wire.read();            // читаем скан код TM 1650
 Wire.endTransmission();
if (scan_code == 68)rev=1;//режим экструдер
if (scan_code == 108)rev=3;//режим стол
if (scan_code <60) StartTime=millis();//если кнопки не нажаты
if(millis() - StartTime>1000)rev++;//если долго нажаты показываем установки

// Устновка температуры экструдера
t_sr = 0;
for (i=0; i< 10; i++) {
t_sr += analogRead(A2);
delay(10);
}
Ust_extr=(int(t_sr /= 10)>>4)+187;// измеряем 10 раз, сдвигаем в диапазон 187-250 град.


// Устновка температуры стола
t_sr = 0;
for (i=0; i< 10; i++) {
t_sr += analogRead(A3);
delay(10);
}
Ust_stol=(int(t_sr /= 10)>>4)+77;// измеряем 10 раз, сдвигаем в диапазон 77-150 град.

// измеряем температуру экструдера(10 раз для усреднения)
//int i;
t_sr = 0;
for (i=0; i< 10; i++) {
t_sr += analogRead(A6);
delay(10);


// теория http://arduino-diy.com/arduino-thermistor
}
t_sr /= 10;
t_sr = 1023 / t_sr - 1;            // конвертируем значение в сопротивление
t_sr = 9820 / t_sr;                // 9820 -реальное значение резистора делителя
t_extr = t_sr / 100000;            // (R/Ro)
t_extr = log(t_extr);              // ln(R/Ro)
t_extr /= 3950;                       // 1/B * ln(R/Ro)
t_extr += 1.0 / 298.15;               // + (1/To)//(25 + 273.15)
t_extr = 1.0 / t_extr;             // инвертируем
t_extr -= 273.15;                     // конвертируем в градусы по Цельсию

if (t_extr < Ust_extr) digitalWrite(2, LOW);//63+187=250
else digitalWrite(2,HIGH );

// измеряем температуру стола

//int i;
t_sr = 0;
for (i=0; i< 10; i++) {
t_sr += analogRead(A7);
delay(10);
}
t_sr /= 10;
t_sr = 1023 / t_sr - 1;            // конвертируем значение в сопротивление
t_sr = 9820 / t_sr;
t_stol = t_sr / 100000;            // (R/Ro)
t_stol = log(t_stol);              // ln(R/Ro)
t_stol /= 3950;                       // 1/B * ln(R/Ro)
t_stol += 1.0 / 298.15;               // + (1/To)//(25 + 273.15)
t_stol = 1.0 / t_stol;             // инвертируем
t_stol -= 273.15;                     // конвертируем в градусы по Цельсию



if (t_stol < Ust_stol) digitalWrite(3, LOW);// 63+77=150
else digitalWrite(3, HIGH);

Chow_disp(); 

        
//Serial.print("Temperature ");
//Serial.print(t_extr);
//Serial.print("  //  ");
//Serial.print(rez);
//Serial.print(" *C   Rev - ");        
//Serial.print(rev);
//Serial.print(" * Ust_extr - ");        
//Serial.print(Ust_extr);
//Serial.print(" * Ust_stol - ");        
//Serial.println(Ust_stol);
delay(150);
}

//***********************************************************************************
void Chow_disp(){ 

if (rev==1)rez= t_extr;
if (rev==2)rez= Ust_extr; 
if (rev==3)rez= t_stol;
if (rev==4)rez= Ust_stol;   
simv_razr[0]=(rez%10);
simv_razr[1]=(rez%100/10);
simv_razr[2]=(rez%1000/100);
simv_razr[3]=(rev+10);
Wire.beginTransmission(55);Wire.write(simv[simv_razr[0]]);Wire.endTransmission();
Wire.beginTransmission(54);Wire.write(simv[simv_razr[1]]);Wire.endTransmission(); 
Wire.beginTransmission(53);Wire.write(simv[simv_razr[2]]);Wire.endTransmission();
Wire.beginTransmission(52);Wire.write(simv[simv_razr[3]]);Wire.endTransmission();
}

Вот нашел, кажется рабочий вариант, для установки используются два переменных резистора 1-10 кОм

Кнопки подключены с ТМ1650, и обрабатываются ей. Где-то был еще вариант с графическим дисплеем от старенькой Моторолы С115  и ПИД регулятором. Но заметного улучшения он не дает. Только удобство пользования. Если найду выложу.


#include <Adafruit_GFX.h>
#include <ST7558.h>
#include <Wire.h>
#include <PID_v1.h>

//***********************Входа*********************************
#define T1 A6                //thermistor 1 подключен к A1
#define T2 A7                //thermistor 2 подключен к A0
#define Pot_Extruder_Pin  A2 // установка температуры экструдера
#define Pot_Bed_Pin       A1 // установка температуры стола
//***********************Выхода********************************
#define ExtruderOutput 10    //выход нагрева экструдера
#define BedOutput 9          //выход нагрева стола
#define RST A0               //сброс  С115
ST7558 lcd = ST7558(RST);

unsigned long StartTime;
long POT_previousMillis = 0; // will store last time LED was updated
long POT_interval = 300;     // Периодичность проверки установок температуры 
long Ustan_previousMillis =0;// 
long Ustan_interval = 2000;  // Длительность режима установки
long Display_previousMillis =0;
long Display_interval = 500;// Периодичность вывода на дисплей
double Current_Extruder_Temp = 0;
double Extruder_Temp = 185;
double Set_Extruder_Temp = 185;
double Current_Bed_Temp = 0;
double Bed_Temp = 75;
double Set_Bed_Temp = 75;
byte rev;
int Extruder_Pot_Value;
int Bed_Pot_Value;
float current_cels;

#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH  40
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x3, 
0xc7, 0xff, 0xff, 0xe3, 0xcf, 0xff, 0xff, 0xf3, 0xcc, 0x0, 0x0, 0x33, 0xcf, 0xff, 0xff, 0xf3, 
0xcc, 0x0, 0x0, 0x33, 0xcf, 0xff, 0xff, 0xf3, 0xcc, 0x0, 0x0, 0x33, 0xcf, 0xff, 0xff, 0xf3, 
0xcc, 0x0, 0x0, 0x33, 0xcf, 0xff, 0xff, 0xf3, 0xc7, 0xff, 0xff, 0xe3, 0x0, 0x60, 0x6, 0x0, 
0x0, 0x78, 0x1c, 0x0, 0x0, 0x3c, 0x38, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0x0, 0x0, 
0x0, 0x0, 0x40, 0x0, 0x0, 0x7, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 
0x0, 0xf, 0xf0, 0x0, 0xc0, 0x0, 0xf8, 0x3, 0xc0, 0x0, 0x70, 0x3, 0xc0, 0x3, 0xe0, 0x3, 
0xc0, 0x7, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xfb, 
0xd8, 0xc1, 0x83, 0x1b, 0xdf, 0xff, 0xff, 0xfb, 0xcf, 0xff, 0xff, 0xf3, 0xc7, 0x0, 0x0, 0xe3, 
0xc2, 0x0, 0x0, 0x43, 0xc0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe  };
void setup()   {
  Wire.begin();
  lcd.init();
  lcd.setContrast(65);
  rev=1;// показать реальную температуру экструдера
  pinMode(ExtruderOutput, OUTPUT);
  digitalWrite(ExtruderOutput, LOW);
  pinMode(BedOutput, OUTPUT);
  digitalWrite(BedOutput, LOW);
  initPID();
  }
void loop() {
 if (millis() - POT_previousMillis > POT_interval) 
{
POT_previousMillis = millis(); 

//Extruder_Temp=Current_Extruder_Temp;
// Чтение резистора установки экструдера
Extruder_Pot_Value = analogRead(Pot_Extruder_Pin); // Установка температуры экструдера (150-350 С)
Extruder_Pot_Value = map(Extruder_Pot_Value, 0, 1023, 150, 350); 
Set_Extruder_Temp = Extruder_Pot_Value;
// изменения были? 
 if (abs(Set_Extruder_Temp-Extruder_Temp)> 2)  {rev=1; // если да-устанавливаем режим дисплея
 Extruder_Temp=Set_Extruder_Temp;
 Ustan_previousMillis = millis();}


// Чтение резистора установки стола
Bed_Pot_Value = analogRead(Pot_Bed_Pin); // Установка температуры стола (30-130 C)
Bed_Pot_Value = map(Bed_Pot_Value, 0, 1023, 30, 130); 
Set_Bed_Temp = Bed_Pot_Value;
// изменения были? 
if (abs(Set_Bed_Temp-Bed_Temp)> 2)            {rev=2;// если да-устанавливаем режим дисплея
  Bed_Temp=Set_Bed_Temp; Ustan_previousMillis = millis();} 
//если время установки вышло - перходим на отображение текущей температуры
if (millis() - Ustan_previousMillis > Ustan_interval) rev=0;
}
  //****************************************************************   
 if (millis() - Display_previousMillis > Display_interval) 
{
  Display_previousMillis = millis();   // Скорость обновления индикации
  Chow_disp();

//СВЕТОФОР
  
Manage_Temperatures ();}
}

//***********************************************************************************
void Chow_disp(){ 

  lcd.clearDisplay();
  lcd.drawBitmap(0, 0,  logo16_glcd_bmp, 32, 40, BLACK);
  lcd.setTextSize(2);
  lcd.setTextColor(BLACK);

 //Экструдер
  lcd.setCursor(36, 0);
  if (rev==1)  {lcd.print (int(Extruder_Temp));}
  else  {lcd.print (int(Current_Extruder_Temp));}
  lcd.setCursor(72, -4);
  lcd.print("o");
  lcd.setCursor(83, 0);
  lcd.print("C");

  //Стол
  lcd.setCursor(36, 24);
  if (rev==2)  {lcd.print (int(Bed_Temp));}
  else  {lcd.print (int(Current_Bed_Temp));}
  lcd.setCursor(72, 20);
  lcd.print("o");
  lcd.setCursor(83, 24);//+14+4
  lcd.println("C");
  lcd.setCursor(0, 48);
  if (rev==1)  {lcd.print ("SET Extr");}
  if (rev==2)  {lcd.print ("SET  Bed");}
  else
  {lcd.print (" WORK t  ");}
  //lcd.println (rev);
  //lcd.println (Current_Extruder_Temp);//(rev);
  lcd.display();
 }

double OutputValueExtruder;
double OutputValueBed;
double KP_Extruder = 40;//27;//400;45        30   40
double KI_Extruder = 0.8 ;//.08;//0.08;08    0.8  0.8
double KD_Extruder = 25;//18;//00;//400;50   20   25
double KP_Bed = 400;
double KI_Bed = 0.08;
double KD_Bed = 400;

PID PIDExtruder(&Current_Extruder_Temp, &OutputValueExtruder, &Set_Extruder_Temp,KP_Extruder,KI_Extruder,KD_Extruder, DIRECT);
PID PIDBed(&Current_Bed_Temp, &OutputValueBed, &Set_Bed_Temp,KP_Bed,KI_Bed,KD_Bed, DIRECT);

//int WindowSizeExtruder = 5000;
//unsigned long windowStartTimeExtruder;

//int WindowSizeBed = 5000;
//unsigned long windowStartTimeBed;

void read_Temperatures(){

        Current_Extruder_Temp = read_termistor(T1);
        Current_Bed_Temp = read_termistor(T2);
 }
         // Включаем ПИД Экструдера
void initPIDExtruder(){
     PIDExtruder.SetMode(AUTOMATIC);
}
         // Включаем ПИД Стола
void initPIDBed(){
     PIDBed.SetMode(AUTOMATIC);
}

void Manage_Extruder_Temperature (){
  read_Temperatures();
  PIDExtruder.Compute();
  analogWrite(ExtruderOutput,OutputValueExtruder); 
}

void Manage_Bed_Temperature (){
  read_Temperatures();
  PIDBed.Compute();
  analogWrite(BedOutput,OutputValueBed); 
}

void initPID(){
initPIDExtruder();
initPIDBed();
}

void Manage_Temperatures (){
Manage_Extruder_Temperature ();
Manage_Bed_Temperature ();
}

float read_termistor(int THERMISTOR_PIN)
{
    // delay(10);
     float rawtemp = analogRead(THERMISTOR_PIN);
     float current_celsius = 0;
// преобразование сопротивления термистора в значение температуры
// теория http://arduino-diy.com/arduino-thermistor
rawtemp = 1023 / rawtemp - 1;        // конвертируем значение в сопротивление
rawtemp = 9820 / rawtemp;            // 9820 -реальное значение резистора делителя
rawtemp = rawtemp / 100000;          // (R/Ro)
rawtemp = log(rawtemp);              // ln(R/Ro)
rawtemp /= 3950;                     // 1/B * ln(R/Ro)
rawtemp += 1.0 / 298.15;             // + (1/To)//(25 + 273.15)
rawtemp = 1.0 / rawtemp;             // инвертируем
current_celsius=rawtemp - 273.15;    // конвертируем в градусы по Цельсию
current_cels=rawtemp - 273.15;
return current_celsius;
}

оба файла полжить в одну папку. Подробности уже не помню, поэтому сильно прошу не мучать.  Скетчи все равно придется под своё железо переделывать, просто легче начинать не с "0"

mix010185
Offline
Зарегистрирован: 13.09.2018

Всем добра! Вот я закончил свой станок все двигается не болтается, но столкнулся с проблемой ни где нет ко кого нибудь G код что бы проверить работоспособность, грубую калибровку провёл но ни как не могу разобраться в создании G кода. Использовать решил GcodeUniversalSendor. Буду признатилен за подсказку.

svm
Offline
Зарегистрирован: 06.11.2016

Загляни сюда, проще не бывает. http://selenur.ru/?page_id=400 , а вообще стоит набрать в поисковике - генератор G кодов и выбирай.

mix010185
Offline
Зарегистрирован: 13.09.2018

Спасибо!

mix010185
Offline
Зарегистрирован: 13.09.2018

Да попробовал софт но он создаёт в двух осях.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

mix010185 пишет:
G код что бы проверить работоспособность...

F100.0 
X0.0 
Y0.0 
Z0.0
X10.0 
Y10.0 
Z10.0

Mach3 кушает такой код. F - это скорость.

x_pack
Offline
Зарегистрирован: 13.10.2017

хм...
36 вольт...

Electronik83
Offline
Зарегистрирован: 06.12.2015

Ребят, появился вопросик про $H. Повесил только один концевик на ось Z, grbl 0.9j поднастроил.

Теперь при нажатии $H станок отлично отрабатывает концевик по Z, но потом начинает искать концевики X Y, которых у меня нету и останавливается по мягким пределам (soft limits) с огромным ругательством.

Как сделать, чтобы он не искал X Y концевики при поиске дома ($H)?

Или на поиск нуля передать как то? Я просто с этим нулем не очень вкурил еще....

P.S. Так странно задавать вопрос - обычно я только отвечал до этого в другой ветке:)))

nevkon
Offline
Зарегистрирован: 20.01.2015

Подозреваю что никак (или править прошивку).

Можно вывод $$ ? Может там есть параметры какие концевики установлены.

Чисто в теории обнулять Z можно подключив датчик как щуп. В этом случае выставляются нули по осям, а затем делается Z-probe.

Electronik83
Offline
Зарегистрирован: 06.12.2015
**** Connected to COM15 @ 115200 baud ****
Grbl 0.9j ['$' for help]
>>> $$
$0 = 10    (step pulse, usec)
$1 = 20    (step idle delay, msec)
$2 = 0    (step port invert mask:00000000)
$3 = 4    (dir port invert mask:00000100)
$4 = 0    (step enable invert, bool)
$5 = 0    (limit pins invert, bool)
$6 = 0    (probe pin invert, bool)
$10 = 3    (status report mask:00000011)
$11 = 0.010    (junction deviation, mm)
$12 = 0.002    (arc tolerance, mm)
$13 = 0    (report inches, bool)
$20 = 0    (soft limits, bool)
$21 = 1    (hard limits, bool)
$22 = 1    (homing cycle, bool)
$23 = 0    (homing dir invert mask:00000000)
$24 = 250.000    (homing feed, mm/min)
$25 = 500.000    (homing seek, mm/min)
$26 = 250    (homing debounce, msec)
$27 = 1.000    (homing pull-off, mm)
$100 = 119.000    (x, step/mm)
$101 = 119.000    (y, step/mm)
$102 = 80.000    (z, step/mm)
$110 = 10000.000    (x max rate, mm/min)
$111 = 10000.000    (y max rate, mm/min)
$112 = 10000.000    (z max rate, mm/min)
$120 = 1000.000    (x accel, mm/sec^2)
$121 = 1000.000    (y accel, mm/sec^2)
$122 = 500.000    (z accel, mm/sec^2)
$130 = 1.000    (x max travel, mm)
$131 = 1.000    (y max travel, mm)
$132 = 10.000    (z max travel, mm)
ok
>>> $G
[G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 F0. S0.]
ok
nevkon
Offline
Зарегистрирован: 20.01.2015

Да, давно я с грбл не игрался. Если правильно помню:

$20 = 0    (soft limits, bool)
$21 = 1    (hard limits, bool)
$22 = 1    (homing cycle, bool)
 
софт лимиты отключены, по датчикам включены и включено хомление. Никаких разделений по осям не вижу. Значит вариант только задействовать Z-probe с софт лимитами.
 
зы.
$130 = 1.000    (x max travel, mm)
$131 = 1.000    (y max travel, mm)
$132 = 10.000    (z max travel, mm)
перемещение по x/y по 1 мм и по z на 10 мм максимум? За что так с софт лимитами?

 

Electronik83
Offline
Зарегистрирован: 06.12.2015

Хотя софт лимиты и отключены, но при нахождении хоум он все равно использует их.

А маленькое перемещение по XY - дак это чтобы "станок" далеко не уезжал и не возвращать его постоянно обратно.

LeeVan
Offline
Зарегистрирован: 09.11.2016

У меня вскочил вопрос:

Перемещение инструмента отсчитывается по шагам двигателя. По этой причине нужна калибровка. Ну тоись какому перемещению соответствует 1000 шагов двигателя, к примеру. Но всю картинку портит back lash. Свободный ход в пределах люфта без перемещения инструмента.

А можно ли по другому? Установить датчик перемещения инструмента по осям, и отсчитывать фактическое перемещение, независимо от числа шагов двигателя. Исчезнет проблема калибровки и back lash заодно.

Есть ли какая софтина, которая работает по этому принципу?

nevkon
Offline
Зарегистрирован: 20.01.2015

Есть - Mach3, Mach4, linuxcnc и другие того же плана. Ставите линейку с подключением к контроллеру. Настраиваете допуск рассогласования.

LeeVan
Offline
Зарегистрирован: 09.11.2016

nevkon пишет:
Есть - Mach3, Mach4, linuxcnc и другие того же плана. Ставите линейку с подключением к контроллеру. Настраиваете допуск рассогласования.

немного не понял.

Расcогласование чего с чем?

Мотор крутится, пока линейка не покажет нужное перемещение.

Рассогласования в принципе не может быть. Оно подразумевает два источника данных. Мотор и линейка, к примеру. Контроллер считает шаги мотора, сравнивает с перемещением по линейке, вычисляется разница и цена деления.

А если строго по перемещению - никакого рассогласования быть не может. Ему взяться неоткуда.

nevkon
Offline
Зарегистрирован: 20.01.2015

Тогда это вами написанная система, на ваш страх и риск.

Все указанные работают так: задается перемещение моторам (количество импульсов), по факту исполнения проверяется позиция по линейке, если в допуске согласования, то мотору дается перемещение для получения нужного значения, если не в допуске, то система уходит в аварию и останавливает станок (мало ли что помешало войти в зону согласования - может мотор сгорел или драйвер, может что-то попало в движущиеся части).

 

Если же вам нужно убрать "мертвый ход", то это настраивается без всяких линеек (ни одна линейка вам не уберет люфты).

LeeVan
Offline
Зарегистрирован: 09.11.2016

nevkon пишет:
сли же вам нужно убрать "мертвый ход", то это настраивается без всяких линеек (ни одна линейка вам не уберет люфты).

само собой не уберет, это проблема точности механики, а не варианта примененной электроники.

Собственно сам по себе мертвый ход полностью устранить невозможно, его можно только компенсировать.

Да и критичным он становится только в легких любительских конструкциях, потому как зазоры в ходовых парах вызвают вибрацию при обработке. Ну и задержку между началом вращения двигателя и последующим перемещением каретки привода.

Похоже готовых решений с линейкой нету. Жаль.

nevkon
Offline
Зарегистрирован: 20.01.2015

Почему сразу нет? Может и есть, только вы форумом ошиблись. Вам на chipmaker.ru или cnc-club.ru надо.

LeeVan
Offline
Зарегистрирован: 09.11.2016

спасибо, уже иду

x_pack
Offline
Зарегистрирован: 13.10.2017

хм...
Mechaduino - closed loop stepper controller

LeeVan
Offline
Зарегистрирован: 09.11.2016

x_pack пишет:
хм... Mechaduino - closed loop stepper controller

не, не полетит

(по линку) "They also hint at doing something very clever with a magnetic encoder on the board which allows them, after a calibration routine, to get the accuracy they’ve promised."

Они прилепили датчик угла поворота на шаговый двигатель. И после калибровки он чета там покажет.

Опять таки привязка идет не к реальному перемещению инструмента (каретки, суппорта), а к углу поворота шагового двигателя. Что не одно и то-же.

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

Пока все зазоры не выберет, реального перемещения не будет. Стало быть зачем считать его шаги? Как суппорт поехал, считай его перемещение. А сколько там шагов двигатель сделал, без разницы

 

LeeVan
Offline
Зарегистрирован: 09.11.2016

Вот тут линейные датчики перемещения интересные

https://www.linearmotiontips.com/linear-encoders-improve-accuracy/

Они дают значение абсолютного перемещения по оси, с неплохой точностью и заодно инкремент.

Правда много буков и по буржуйски.

 

x_pack
Offline
Зарегистрирован: 13.10.2017

хм...
Можно всё, но зачем?)
Какой суппорт, какой мёртвый ход?
Нахрена это вообще Ардуине например, как вы это к ней всё агрегатируете?
Но даже на базе Линукс снс, Мач зачем это для домашней реализации снс либо 3д печати?)