выбором теста пока является ремарка ненужных методов.
сейчас там методы :
path_flow_adjust ();
path_width_adjust ();
suck_adjust ();
suck_speed_adjust();
и разремирован (активен) последний метод.
тоесть ты тестил скорость дестринга (не выставив поток и ширину экструзии)
кстати начинай сразу со второго метода если экструдер откалиброван
Добавлено спустя 5 минут 59 секунд:обновил код, добавил тест температуры, область тестирования вынес в центр кровати
Код:
#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 (); // код окончания
}
Добавлено спустя 2 минуты 22 секунды:внимание !
тест температуры пока зашит в функции temp_adjust ()
сейчас он от 180 до 260С