roboforum.ruТехнический форум по робототехнике. |
|
|
setar писал(а):калибровка температуры
setar писал(а):просто полоски которые при нормальной температуре должны слиться в ровную поверхность.
как видно при заниженной температуре такого не происходит и слой отделяется от рафта
karabas2011 писал(а):То есть по этому тесту у тебя нижняя рабочаа 244C ?
setar писал(а):помогите разобраться в последовательности тестов.
а то они друг за друга по кольцу цепляются...
сейчас я могу подбирать поток , ширину экструзии, величину отката, скорость отката, температуру печати.
По идее вначале нужно подобрать температуру, а поток лучше вообще не трогать, в идеале при правильной калибровке экструдера от равен 1 (что и видно в одном из моих тестов)
setar писал(а):karabas2011 писал(а):То есть по этому тесту у тебя нижняя рабочаа 244C ?
да, поставил в работу 245С
как понять что совсем высокая ... не знаю, лень сопло от нагара чистить.
но даже по фотке зметно что чем выше температура тем больше выцветает пластик (с насышенно желтого переходит в беловатый)
Про сопли тут же можно, это тоже калибровка.
Сейчас выведал формулу вычисления у автора Кисслайсера, так что сразу буду выдавать рекомендации в его терминах и значениях.
Позже посмотрю Slic3r
Добавлено спустя 14 минут 35 секунд:
помогите разобраться в последовательности тестов.
а то они друг за друга по кольцу цепляются...
сейчас я могу подбирать поток , ширину экструзии, величину отката, скорость отката, температуру печати.
По идее вначале нужно подобрать температуру, а поток лучше вообще не трогать, в идеале при правильной калибровке экструдера от равен 1 (что и видно в одном из моих тестов)
#include <stdio.h>
#include <math.h>
float fil_dia, fil_s, k_s;
float path_h, path_k, path_s, path_w;
float pos_e, pos_x, pos_y, pos_z;
float temp, bed_temp;
float fill_speed, move_speed;
float max_x, max_y;
// инициализация
init ()
{
fil_s = (M_PI*fil_dia*fil_dia)/4; // площадь сечения прутка
path_s = path_k*path_w*path_h; // площадь слоя укладки
k_s = path_s/fil_s; // отношение площадей прутка и экструзии
pos_x = 0;
pos_y = 0;
pos_z = 0;
pos_e = 0;
}
// расход прутка для заданной длинны экструзии
float filament_length (float path_l)
{
float fil_l = k_s*path_l;
return fil_l;
}
label ()
{
printf(";3Dprinter calibrator v0.0.2 setar@roboforum.ru LGPL 2013\n",fil_s);
printf(";Filament Dia = %.3f mm\n",fil_dia);
printf(";Path heigth = %.3f mm\n",path_h);
printf(";Path width = %.3f mm\n",path_w);
printf(";Path filling = %.3f\n",path_k);
printf(";Temp = %.fC\n",temp);
printf(";Bed temp = %.fC\n",bed_temp);
printf(";Fill speed = %.f mm/s\n",fill_speed);
printf(";Move speed = %.f mm/s\n",move_speed);
printf(";Max X = %.f mm\n",max_x);
printf(";Max Y = %.f mm\n",max_y);
printf(";--- calculated ---\n");
printf(";Filament S = %.4f mm^2\n",fil_s);
printf(";Path S = %.4f mm^2\n",path_s);
printf(";Path S/Filament S = %.4f mm^2\n",k_s);
}
start_g ()
{
printf(";--- start gcode ---\n");
printf("G28 ; home\n");
printf("G21 ; unit in mm\n");
printf("G92 E0 ; set extruder to zero\n");
printf("M82 ; use absolute distances\n");
printf("M107 ; fan off\n");
printf("M104 S%.f; set temp\n",temp);
printf("M190 S%.f; wait bed temp\n",bed_temp);
printf(";--- head clean ---\n");
printf("G1 X0 Y0 Z15 F15000;go start positions\n");
printf("M109 S%.f; wait heat\n",temp);
printf("G1 X0 Y10 Z0.5;go near bed level \n");
printf("G1 E5 F100; extruse a bubble\n");
printf("G4 S5 ; wait 5 sec\n");
printf("G1 Z5\n");
printf("G4 S3 ; wait 3 sec\n");
printf("G1 F15000\n");
printf("G1 X0 Y20 Z%.2f\n",path_h);
printf("G1 X0 Y35\n");
printf(";--- end start gcode ---\n");
}
stop_g ()
{
printf(";--- stop gcode ---\n");
printf("M400 ; wait for buffer to clear\n");
printf("M104 S0 ; turn off temperature\n");
printf("M140 S0 ; turn off bed\n");
printf("G0 Y150 Z%.2f F15000 ; Present Part\n",pos_z+5);
printf("M84 ; disable motors\n");
printf("\n");
}
// линия из текущей позиции в x,y на высоте z со скоростью s (mm/c) и потоком flow (относительно 1)
fill_line (float x,float y, float z, float s, float flow)
{
float len = sqrt ((pos_x-x)*(pos_x-x)+(pos_y-y)*(pos_y-y));
float dest_e = pos_e+flow*filament_length(len);
float f = s * 60;
printf("G1 X%.2f Y%.2f Z%.2f E%.2f F%.f\n",x,y,z,dest_e,f);
pos_e = dest_e;
pos_x = x;
pos_y = y;
pos_z = z;
}
// перемещение в точку x,y,z со скоростью s (mm/c)
move_to (float x,float y, float z, float s)
{
float f = s * 60;
printf("G1 X%.2f Y%.2f Z%.2f F%.f\n",x,y,z,f);
pos_x = x;
pos_y = y;
pos_z = z;
}
zerro_pos_e ()
{
printf("G92 E0\n");
pos_e = 0;
}
path_width_adjust()
{
float flow = 1;
int n = 0;
float wk = 0.8;
float x;
float mid_x=max_x/2;
float mid_y=max_y/2;
pos_z = 3*path_h;
for ( wk = 0.8; wk <= 2; wk = wk + 0.1)
{
n=n+1;
path_w = path_h * wk;
printf(";--- path_w %.3f start ---\n",path_w);
for ( x = n*7+(mid_x-50)+5; x < n*7+(mid_x-50)+10; x = x + 2*path_w)
{
move_to (x,(mid_y-50),pos_z,move_speed);
fill_line (x,(mid_y+50),pos_z,fill_speed,flow);
move_to (x+path_w,(mid_y+50),pos_z,move_speed);
fill_line (x+path_w,(mid_y-50),pos_z,fill_speed,flow);
}
printf(";--- path_w %.3f stop ---\n",path_w);
zerro_pos_e();
}
}
temp_adjust ()
{
float flow;
int n = 0;
float x;
pos_z = 3*path_h;
float mid_x = max_x/2;
float mid_y = max_y/2;
float min_temp = 180;
float max_temp = 260;
for ( temp = min_temp; temp <= max_temp; temp = temp + (max_temp-min_temp)/10)
{
n=n+1;
printf(";--- temp %.2f start ---\n",temp);
printf("G1 Z%.f\n",pos_z+5);
printf("M109 S%.f; wait heat\n",temp);
for ( x = n*7+(mid_x-50)+5; x < n*7+(mid_x-50)+10; x = x + 2*path_w)
{
move_to (x,mid_y-50,pos_z,move_speed);
fill_line (x,mid_y+50,pos_z,fill_speed,1);
move_to (x+path_w,mid_y+50,pos_z,move_speed);
fill_line (x+path_w,mid_y-50,pos_z,fill_speed,1);
}
printf(";--- temp %.2f stop ---\n",temp);
zerro_pos_e();
}
}
path_flow_adjust ()
{
float flow;
int n = 0;
float x;
pos_z = 3*path_h;
float mid_x = max_x/2;
float mid_y = max_y/2;
for ( flow = 0.2; flow < 2.2; flow = flow + 0.2)
{
n=n+1;
printf(";--- fill %.2f start ---\n",flow);
for ( x = n*7+(mid_x-50)+5; x < n*7+(mid_x-50)+10; x = x + 2*path_w)
{
move_to (x,mid_y-50,pos_z,move_speed);
fill_line (x,mid_y+50,pos_z,fill_speed,flow);
move_to (x+path_w,mid_y+50,pos_z,move_speed);
fill_line (x+path_w,mid_y-50,pos_z,fill_speed,flow);
}
printf(";--- fill %.2f stop ---\n",flow);
zerro_pos_e();
}
}
do_suck (float suck,float s)
{
float dest_e = pos_e - suck;
float f = s * 60;
printf("G1 E%.2f F%.2f\n",dest_e,f);
pos_e = dest_e;
}
do_prime (float prime,float s)
{
float dest_e = pos_e + prime;
float f = s * 60;
printf("G1 E%.2f F%.2f\n",dest_e,f);
pos_e = dest_e;
}
suck_adjust ()
{
float suck,suck_speed;
int n = 0;
float x;
float mid_x = max_x/2;
float mid_y = max_y/2;
pos_z = 3*path_h;
suck_speed = 10;
for ( suck= 0.4; suck <= 2; suck = suck + 0.2)
{
n=n+1;
printf(";--- suck %.2f start ---\n",suck);
for ( x = n*10+(mid_x-50)+5; x < n*10+(mid_x-50)+10; x = x + 2*path_w)
{
// прямое направление
move_to (x,(mid_y-50),pos_z,move_speed);
fill_line (x,(mid_y-30),pos_z,fill_speed,1);
do_suck(suck,suck_speed);
move_to (x,(mid_y+30),pos_z,move_speed);
do_prime(suck,suck_speed);
fill_line (x,(mid_y+50),pos_z,fill_speed,1);
// обратное направление
move_to (x+path_w,(mid_y+50),pos_z,move_speed);
fill_line (x+path_w,(mid_y+30),pos_z,fill_speed,1);
do_suck(suck,suck_speed);
move_to (x+path_w,(mid_y-30),pos_z,move_speed);
do_prime(suck,suck_speed);
fill_line (x+path_w,(mid_y-50),pos_z,fill_speed,1);
}
printf(";--- suck %.2f stop ---\n",suck);
zerro_pos_e();
}
}
suck_speed_adjust (float suck)
{
float suck_speed;
int n = 0;
float x;
float mid_x = max_x/2;
float mid_y = max_y/2;
pos_z = 3*path_h;
for ( suck_speed= 2; suck_speed <= 50; suck_speed = suck_speed + 4)
{
n=n+1;
printf(";--- suck speed %.2f start ---\n",suck_speed);
for ( x = n*7+(mid_x-50); x < n*7+(mid_x-50)+5; x = x + 2*path_w)
{
// прямое направление
move_to (x,(mid_y-50),pos_z,move_speed);
fill_line (x,(mid_y-30),pos_z,fill_speed,1);
do_suck(suck,suck_speed);
move_to (x,(mid_y+30),pos_z,move_speed);
do_prime(suck,suck_speed);
fill_line (x,(mid_y+50),pos_z,fill_speed,1);
// обратное направление
move_to (x+path_w,(mid_y+50),pos_z,move_speed);
fill_line (x+path_w,(mid_y+30),pos_z,fill_speed,1);
do_suck(suck,suck_speed);
move_to (x+path_w,(mid_y-30),pos_z,move_speed);
do_prime(suck,suck_speed);
fill_line (x+path_w,(mid_y-50),pos_z,fill_speed,1);
}
printf(";--- suck speed %.2f stop ---\n",suck_speed);
zerro_pos_e();
}
}
main ()
{
fil_dia = 1.7; // диаметр прутка
path_h = 0.25; // высота слоя
path_w = 0.32; // ширина слоя
path_k = 0.875; // коэфициент заполнения прямоугольника при экструзии, KisSlicer =1
temp = 245; // температура
bed_temp = 130; // температура стола
fill_speed = 30; // скорость экструзии
move_speed = 100; // скорость перемещения
max_x = 180; // размер стола
max_y = 180; // размер стола
init (); // инициализация
label (); // печать заголовка
start_g (); // стартовый код
zerro_pos_e(); // занулим положение прутка
float x,y;
printf(";--- raft ---\n");
pos_z= 2*path_h;
float mid_x = max_x/2;
float mid_y = max_y/2;
move_to ((mid_x-50)-path_w/2,(mid_y-50)-path_w/2,pos_z,move_speed);
do_prime (1,1);//якорь
printf("G4 S3 ; wait 3 sec\n");
fill_line ((mid_x+50)+path_w/2,(mid_y-50)-path_w/2,pos_z,fill_speed,3);
fill_line ((mid_x+50)+path_w/2,(mid_y+50)+path_w/2,pos_z,fill_speed,3);
fill_line ((mid_x-50)-path_w/2,(mid_y+50)+path_w/2,pos_z,fill_speed,3);
fill_line ((mid_x-50)-path_w/2,(mid_y-50)+path_w/2,pos_z,fill_speed,3);
move_to ((mid_x-50),(mid_y-50),pos_z,move_speed);
for ( y = (mid_y-50); y < (mid_y+50); y = y + 2*1)
{
fill_line ((mid_x+50),y,pos_z,fill_speed,3);
fill_line ((mid_x+50),y+1,pos_z,fill_speed,3);
fill_line ((mid_x-50),y+1,pos_z,fill_speed,3);
fill_line ((mid_x-50),y+2*1,pos_z,fill_speed,3);
}
printf(";--- end raft ---\n");
// из нижеследующих тестов нужно выбрать один сняв ремарку
// path_flow_adjust (); // подбираем поток (при нормально калиброванном экструдере не требуется)
path_width_adjust (); // подбираем ширину экструзии
// temp_adjust (); // подбираем температуру печати
// suck_adjust (); // подбираем величину отката
// suck_speed_adjust(1); // подбираем скорость отката
stop_g (); // код окончания
}
Сейчас этот форум просматривают: Google [Bot] и гости: 11