一、Marlin的简单介绍
Marlin固件是一个3D打印的开源固件,3D打印固件有许多,Marlin最为健全和强大,当然相对也会复杂一些。使用Gcode控制爱,Gcode是数控机床等工控控制使用范围较广的一种指令协议。在这里介绍一些Marlin的入门经验。
Marlin固件的下载地址:https://github.com/MarlinFirmware/Marlin
Marlin配置与软件详解:
http://wenku.baidu.com/link?url=6SpLLAaNvEk5KCjpkvC6ZnOiCB-9_tOqhoW8D8TrmthRdhWnHGuYjjgUINbMqsHo5XLP06YBrOU9NB9-W9vezNcNFHFny-JUxk2wlEkKfBC&qq-pf-to=pcqq.c2c
http://www.slideshare.net/roboard/3d-printer-marlin
Gcode解读:http://www.3ddayin.net/3ddayinjiceping/1141_2.html
RepRap网址:http://reprap.org/wiki/RepRap_Options#Slicing_Software
二、Marlin的配置
我使用的是MKS BASE开发板,arduino2560,简单罗列一下我认为比较重要的固件配置:
Marlin固件的基本配置:Configuration.h
#define SERIAL_PORT 0 //串口号
#define BAUDRATE 250000 //波特率
#define MOTHERBOARD BOARD_RAMPS_13_EFB //板级型号
#define CUSTOM_MENDEL_NAME "UARMBOT" //液晶屏显示内容
#define EXTRUDERS 1 //挤出头个数
#define TEMP_SENSOR_0 1 //挤出头1,温度传感器型号
#define TEMP_SENSOR_1 0 //没有则为0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 0
#define HEATER_0_MINTEMP 5 //喷嘴1的最低温度
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define BED_MINTEMP 5
#define HEATER_0_MAXTEMP 50 //喷嘴1的最高温度
#define HEATER_1_MAXTEMP 50
#define HEATER_2_MAXTEMP 50
#define BED_MAXTEMP 50
#define DISABLE_X false //失能某一个轴
#define DISABLE_Y false
#define DISABLE_Z false
#define DISABLE_E false
#define DISABLE_INACTIVE_EXTRUDERtrue
#define INVERT_X_DIR false //转动方向
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define X_HOME_DIR 1 //home的方向和起始位置:1=MAX, -1=MIN
#define Y_HOME_DIR 1 //但是MANUAL_HOME_POSITIONS定义之后起始位置就可以自己设定
#define Z_HOME_DIR 1
#define X_MAX_POS 500 //xyz的最大最小值
#define X_MIN_POS -500
#define Y_MAX_POS 500
#define Y_MIN_POS -500
#define Z_MAX_POS 500
#define Z_MIN_POS -500
#define MANUAL_X_HOME_POS 0 //home的起始坐标,需要宏定义
MANUAL_HOME_POSITIONS
#define MANUAL_Y_HOME_POS 0
#define MANUAL_Z_HOME_POS 0
#define NUM_AXIS 4 //轴的数量和回home时的速度
#define HOMING_FEEDRATE {5*600, 5*600,5*600, 0}
//单位1mm距离所对应的脉冲数,移动1mm的step数
#define DEFAULT_AXIS_STEPS_PER_UNIT {50.0,50.0,50.0,192.59924}
#define DEFAULT_MAX_FEEDRATE {5000, 5000, 5000,5000} //最大速度(mm/sec)
#define DEFAULT_MAX_ACCELERATION {9000,9000,9000,9000} //最大加速度
#define DEFAULT_ACCELERATION 1000 //默认的打印加速度
#define DEFAULT_RETRACT_ACCELERATION 1000 //默认的收缩加速度
//单次最大加速度的速度,小则打的细腻但是慢,大则粗糙但快
#define DEFAULT_XYJERK 200.0 // (mm/sec)
#define DEFAULT_ZJERK 200.0 // (mm/sec)
#define DEFAULT_EJERK 200.0 // (mm/sec)
三、Marlin特殊机械结构的坐标计算
因为我调试的机械是一个三轴的机械臂,我的calculate_delta也是自己计算的
voidcalculate_delta(float cartesian[3])
{
double _stretch =sqrt(sq(cartesian[Y_AXIS]+lenght_oright_to_home+lenght_center_to_origin)+sq(cartesian[X_AXIS]))-lenght_center_to_origin;
double _height = cartesian[Z_AXIS]+height_oright_to_home;
double xx =_stretch*_stretch+_height*_height;
double xxx=ARM_B2-ARM_A2+xx;
double angleB=acos((_stretch*xxx+_height*sqrt(4.0*ARM_B2*xx-xxx*xxx))/(xx*2.0*ARM_B))*RAD_TO_DEG;
xxx=ARM_A2-ARM_B2+xx;
double angleA=acos((_stretch*xxx-_height*sqrt(4.0*ARM_A2*xx-xxx*xxx))/(xx*2.0*ARM_A))*RAD_TO_DEG;
delta[X_AXIS]=atan(cartesian[X_AXIS]/(cartesian[Y_AXIS]+lenght_oright_to_home+lenght_center_to_origin))*RAD_TO_DEG;// 21是圆心到原点的Y轴偏移
delta[Y_AXIS] =(angleA - angle_lower_arm); delta[Z_AXIS]=(angleB - angle_upper_arm) ;
//将角度转换为脉冲数
delta[X_AXIS] *= pulse_UNIT_angle;
delta[Y_AXIS] *= pulse_UNIT_angle;
delta[Z_AXIS] *= pulse_UNIT_angle;
}
四、测试如下:
1、首先在网上下载一些简笔图画或者自己在电脑的画画板写上字,保证背景纯白色(图像处理的简单一些)
2、使用b2g软件生成Gcode代码,然后使用文本打开Gcode,手动调整一下Gcode的写字画画的高度和速度。
3、使用pronterface软件与机械臂相连并发送生成的Gcode。
4、效果图:图上的文字和图片都是机械臂画出来的