3D打印机如何添加⾃动调平功能
原理说明
3d打印打印时最重要的是第⼀层的效果,如果第⼀层能够很好的粘在打印*台上,后⾯的如果不出意外,都可以顺利完成。但是第⼀层的打印并没有那么容易,其中⼀个原因就是打印*台是否⽔*的问题。如果*台不⽔*,可能导致模型的第⼀层在⼀个位置⾮常牢固,在另⼀个位置却根本没有粘上。甚⾄会损坏打印头(*台不*,由低的位置运动到⾼的位置可能会撞坏打印头)。
本教程将通过图⽂及视频的⽅式演⽰为你的3d打印机添加⾃动调*功能。以后再也不⽤⼿动调*了。这⾥介绍的是⽤官⽅Marlin固件的⽅式,不是rostock或kossel等Delta版本的Marlin,Delta版本的配置有可能会在以后推出。
⾃动调*的局限性
虽说是⾃动调*,但是现在的调*功能时有局限性的,即你的打印*台是*的(没有弯曲或凹凸情况),但你的*台并没有放置到⽔*的位置(或与打印头垂直)。如果你的打印*台是弯曲的或凹凸不*,理论上来说是不起作⽤或作⽤很⼩的。所以建议⼤家的打印*台是玻璃之类的*整度⾮常⾼的*⾯。
基本原理
电⼦世界⾥,任何的测量都需要传感器来实现。⽽调*⽤的传感器其实就是Z轴的零位置限位开关(Z-min)。为了实现Z-min对不同XY坐标的探测,Z-min的安装位置需要跟着打印头⼀起移动,但Z-min如果在打印头旁边,如果在打印时可能会碰到打印的物体从⽽损坏模型。所以在标准XYZ三轴打印机中,常常通过添加⼀个⼩舵机来控制Z-min的收起和放下,即需要触发Z-min时(回零或调*),通过舵机放下Z-min;不⽤的时候就会收起Z-min。具体舵机安装将在下⼀个环境说明。
由于Z-min不在只⽤于回零来使⽤,所以在打开⾃动调*功能后,回零也就有所区别。请看下⾯视频的前⾯⼀段,发送G28(XYZ全部回零)命令后,XY分别回零,然后XY分别运动到打印*台中⼼位置,放下Z-min,来完成Z轴的回零。并且如果XY轴没有回零,并不能单独为Z轴回零。Z轴的回零位置是⼀个基准点,即在(x,y)坐标位置的Z零点。后⾯的调*都是根据这个点的偏移来确定的。
请看视频的后半段,发送G29(⾃动调*命令)后的反映,打印机的Z-min会移动到四个不同XY坐标(固件中可以配置)进⾏探测。并且得到四个位置相对于G28确定的基准点的Z位置进⾏对⽐和计算,得到打印*台的倾斜程度,从⽽在以后的运动中,将各个位置的Z偏移补偿进去(同⼀层打印时,Z轴可能会动),从⽽完成⾃动调*功能。
如果你明⽩了基本的原理,再进⾏后⾯的⼯作就很顺利了。
硬件准备及配置
硬件安装
所需硬件
1、⼀个⼩舵机,⼤家可以看到我⽤的舵机是9G型号。理论来说⽤什么型号都可以,但是⼩了不会占⽤太多空间;
2、⼀个⼩限位(机械式),⼩限位开关即可(⿏标按键),带柄不带柄都可以,我⽤的不带柄的;
3、固定舵机在加热头运动部件上的⼩零件,我是⾃⼰打印的,不太合适,最后⽤502粘上的;
4、固定限位开关的触碰柄,我也是打印的,这个基本上是标准的可以在这⾥下载:;
5、⽀持舵机接⼝的打印机控制板,这⾥以MakerLab的为例;
安装
由于每个⼈的打印机都不同,就不说了。总之就是保证尽可能少的影响其它部件的情况下,固定舵机,并且限位开关的柄可以收放⾃如,并且收起后,打印头的⾼度要低于限位的⾼度,即打印时限位开关舵机等零件不能妨碍打印的进程。
注意:安装限位开关触碰柄的时候,注意舵机的极限⾓度的位置(0度和180度),因为咱们⽤舵机主要两个位置最关键,⼀个是收起限位时,⼀个是放下限位时,这两个位置都不要太靠*舵机的0和180度位置(即舵机的极限位置),极限位置的舵机不稳定,并且可能容易烧舵机。⼤家注意。
下图是舵机即固定舵机的部分:
下图是限位开关收起后的位置,不会妨碍打印及其它部分的运动:
下图是限位开关放下后的效果,放下后,限位开关当然要⽐打印头的位置更低才可以,否则打印头都撞车了,限位开关还没触发:
接线
Mega Controller已经引出了四路舵机接⼝,都是标准的接⼝,所以将舵机线连接到图⽚所⽰位置,标记为30的位置即可,主要舵机线中黄⾊的为信号线,对应控制板⼦上的S标记。如果:
舵机⾓度确定
由于舵机是⽤于做调*,调*的准确性直接影响了打印的效果。所以舵机的⾓度控制就⾄关重要,⽽这个⾓度参数(两个⾓度,收起和放下时舵机分别所处⾓度)⾮常重要,需要⽤于固件的配置。
修改固件
默认的Marlin固件并没有添加对舵机的⽀持(可以剩下RAM和ROM空间)。所以⾸先打开你的Marlin固件,到Configuration.h⽂件,搜
索“NUM_SERVOS”关键词(670⾏左右),来到
c
//#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command
然后将最前⾯的//删除,并将后⾯的数字改为1,默认该数字可能是3.
修改完成后,其它参数不变,上传新固件到控制板。完成后,打开你⽤的最顺⼿的上位机软件,我以printrun为例,选择串⼝和波特率,连接。连接成功后,就可以测试舵机是否可以控制了。在发送命令区域,输⼊命令M280 P0 S100,其中M280是⽤于控制舵机的G代码,P0标识第⼀个舵机,如果你有其它舵机,可以⽤P1、P2等来分别控制,S后⾯的数字表⽰舵机运动的⾓度,输⼊命令后,点击Send(发送)或回车。
此时,如果⼀切都配置得当,你应该看到了舵机会动,如果不动再试⼀下其它的⾓度即更换S后⾯的数
字,如果其它⾓度依然不动,请检查接线即固件是否正确。(注意,Ramps⽤户直接接在舵机接⼝位置是不能⽤的,因为舵机接⼝默认是不供电的,需要将Ramps复位按键旁边的两个电源接在⼀起才可以,标记为VCC和5V,将这两个端⼦连接,就可以为舵机供电了。)
测试⾓度
由于舵机⾓度不能通过其它⽅式获得,只能需要你⾃⼰进⾏实际的测试,所以通过发送上⾯的命令,不断修改S后⾯的⾓度值,来得到两个⽐较完美的⾓度分别对应收起和放下时的位置。记在旁边备⽤。
我通过测试,到的⾓度为:
放下⾓度为:125度;
收起⾓度为:42度;
你的配置不太可能跟我的⼀样,所以⼀定要⾃⼰测试⼀下。
处于放下状态时,输⼊M280 P0 S42命令后的效果是这样的:
处于收起状态时,输⼊M280 P0 S125命令后的效果是这样的:
如果得到的⾓度你很满意,即不影响其它部分运动,也可以在放下时进⾏正常调*,那么就可以进⼊下⼀环节了。
RAMPS1.4的板⼦舵机是接在哪⾥,⿇烦能说下嘛?
注意,Ramps⽤户直接接在舵机接⼝位置是不能⽤的,因为舵机接⼝默认是不供电的,需要将Ramps复位按键旁边的两个电源接在⼀起才可以,标记为VCC和5V,将这两个端⼦连接,就可以为舵机供电了。
参考图⽚,其中紫⾊框内的两个针需要接在⼀起,否则舵机没有供电;红⾊框就是第⼀个舵机应该接的位置:
好的,再请教⼀下,这个在玛林⾥⾯是不是要把引脚改为11
不需要改,配置好舵机数量,发送命令时M280 P0 S42中的P0就是指的这个管脚对应的舵机
按本页修改后在打开上位机,舵机转到⼀个⾓度
但是在上位机输⼊M280 P0 SX没有反应,这⾥X表⽰⼀个数,我⽤的是RAMPS1.4的板⼦,上位机是PRONTERFACE,
各个参数都配置正确了吗?
#define NUM_SERVOS 1 按你的教程改了这⾥
然后5V供电也跳线了,我输⼊M280 P0 SX没有反应
我输⼊G28 XYZ可以回零,z回零的时候,舵机会转下来,舵机上的限位开关碰到底板后舵机就转上去,
看上去舵机和限位开关是能正常⼯作的,
但是M280 P0 S。。这个代码没有起到作⽤
我在⽹上搜了下国外的贴⼦,好像在在PINS。H这个⽂件⾥⾯设置P11接⼝?是不是这个原因?
能调*说明正常。是不是你输⼊命令时有问题
M280 P0 S34
这就是我发送的指令,字母都是⼤写三个⼀起发的,中间空格空开,是这样吗?
没错,舵机不动?试试其它⾓度
不动,我这两天试了很多个值,呵呵
可以了,我把M280 P0 S34
中的M换成⼩写的m可以了,为什么不能识别⼤写的,我开始⼀直以为是要⼤写
是很寄怪,我⼀直记得G代码这些都是要⼤写的,我输⼊的是⼩写但是他信框⾥的⼜是⼤写
固件配置
舵机相关
如果你需要舵机来收起、放下调*探针(Z-min限位开关),那么舵机相关的参数是必须要配置的。如果你的板⼦是Mega Controller(我们的合体板⼦),将舵机连接在Servos接⼝,标记30的位置。
还记得上⼀部分讲到的通过发送命令来获得放下和收起调*探针的⾓度吗?我的⾓度分别是:
放下:125度;
收起:42度;
每个⼈的数据都不太可能⼀样,⼀定要⽤⾃⼰的数据,得到这两个数据后,修改固件配置⽂件的:
// Servo Endstops
//
// This allows for servo actuated endstops, primary usage is for the Z Axis to eliminate calibration or bed height changes.
// Use M206 command to correct for switch height offset to actual nozzle height. Store that setting with M500.
//⾃动调*探针安装的哪个轴,-1表⽰关闭,0标识在此轴上,分别上XYZ,将下⾯两⾏代码原有的“//”删除,如下
#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 125,42} // X,Y,Z Axis Extend and Retract angles
//定义xyz三个轴上舵机放下和收起后的⾓度。将之前获得的⾓度数据填在Z轴对应的位置,即第5(放下⾓度)和第6(收起⾓度)个数据。改完上⾯的参数后,舵机相关的参数就配置完成了。
⾃动调*功能开启及相关参数
上⾯已经配置好了舵机的相关参数,但是要想实现⾃动调*,还需要配置下⾯这段区域的参数:
//============================= Bed Auto Leveling ===========================
//是否开启⾃动调*功能,如果开启,删除前⾯的//
//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
//下⾯开始是针对⾃动调*功能的具体设置
#ifdef ENABLE_AUTO_BED_LEVELING
// these are the positions on the bed to do the probing
//⾃动调*时的4个位置,为了防⽌测试时挤出机超出XY轴的范围,可以适当调整下⾯参数,让这⼏个参数都靠*打印*台中⼼位置的坐标
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 135
dnf抉择之沼
#define BACK_PROBE_BED_POSITION 160
#define FRONT_PROBE_BED_POSITION 20
// these are the offsets to the prob relative to the extruder tip (Hotend - Probe)
//调*传感器与挤出头的坐标偏移,加热头坐标-调*探针坐标,这⾥的参数可以不调整,因为⼿动测量这⼏个数据精确性实在太差,暂时保留之前的默认值即可。下⾯的参数是我调出来的,⼤家不要⽤我的参数。
#define X_PROBE_OFFSET_FROM_EXTRUDER -34
#define Y_PROBE_OFFSET_FROM_EXTRUDER 8
车太贤主演的电影
#define Z_PROBE_OFFSET_FROM_EXTRUDER -14.3
#define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case
/
/回原点前,z轴升起的距离,放置太低,调*探针⽆法放下
#define XY_TRAVEL_SPEED 8000 // X and Y axis travel speed between probes, in mm/min
//调*时,XY轴的运⾏速度
#define Z_RAISE_BEFORE_PROBING 15 //How much the extruder will be raised before traveling to the first probing point.
//运⾏到第⼀个调*点前,Z轴升起的距离
#define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points
//运⾏到下⼀个调*点前,Z轴升起的距离
//If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
赛尔号米瑞斯//The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it. // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
//舵机关闭延时,为了防⽌抖动,建议开启这个功能。否则舵机会抖动。后⾯的参数保持默认只即可。
#define PROBE_SERVO_DEACTIVATION_DELAY 300
//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing,
//it is highly recommended you let this Z_SAFE_HOMING enabled
//Z轴安全回零配置。开启后,Z轴回零前,XY必须先回零才可以
#define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
// When defined, it will:
// - Allow Z homing only after X and Y homing AND stepper drivers still enabled博客上传视频
// - If stepper drivers timeout, it will need X and Y homing again before Z homing
// - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
// - Block Z homing only when the probe is outside bed area.
#ifdef Z_SAFE_HOMING
#define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28)
#define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28)
#endif
// with accurate bed leveling, the bed is sampled in a ACCURATE_BED_LEVELING_POINTSxACCURATE_BED_LEVELING_POINTS grid and least squares solution is calculated
// Note: this feature occupies 10'206 byte
#define ACCURATE_BED_LEVELING
#ifdef ACCURATE_BED_LEVELING
// I wouldn't see a reason to go above 3 (=9 probing points on the bed)
#define ACCURATE_BED_LEVELING_POINTS 2
#endif
#endif
调*相关的固件配置也已经完成,但⾥⾯有⼏个关键参数还需要再次确定,否则得到的数据将不正确,暂时还不需要上传,下⾯的参数配置后再上传。请参考下⼀部分。
确定具体参数
上⼀部分已经配置了⾃动调*相关的所有参数,并且也已经把舵机收起放下的⾓度测量了出来。
要想正常使⽤⾃动调*,我们还需要精确测量下⾯三个参数:
#define X_PROBE_OFFSET_FROM_EXTRUDER -34
#define Y_PROBE_OFFSET_FROM_EXTRUDER 8
#define Z_PROBE_OFFSET_FROM_EXTRUDER -14.3
之前配置参数时,我们建议⼤家把上⾯的参数保持默认值即可。现在我们需要把这⼏个参数测试出来。
为了保证顺利测试,还需要配置下⾯这个参数:#define min_software_endstops true,此参数默认值是true,需要改为false,否则移动轴时,不能运⾏到⼩于0坐标的位置。改完这个参数就可以上传固件了。
确定上⾯⼏个参数的⽅法
为了能够更加精确的确认上⾯的三个参数,即挤出头与调*探针的精确偏移量,我们需要⽤3d打印机⾃带的这个三维坐标系统来确定,⽽不是⽤尺⼦量。
注意:如果⽤此⽅法,操作之前各轴的steps_per_mm参数必须计算正确,否则得到的数据是不准确的。
第⼀步、在打印*台的中间位置⽤笔标记⼀个参考点
为了能够保证精度,我们需要确定⼀个参考点,参考点可以选择打印*台上的任意位置,但是为了能够保证打印头和调*探针都能⽅便抵达,所以选择*台中⼼位置⽐较好。标记⼀个⼩点,就像下图:
第⼆部、放下探针移动调*探针刚好来到标记点位置并⼿动置零
放下探针(命令:M280 P0 S125[125改为你的放下⾓度]),并通过上位机上的⼿动操作按钮,移动XY两个轴让探针刚好来到标记点上⽅,然后再移动Z轴(最后阶段尽量⽤0.1mm的按钮),让探针刚好碰到打印*台。此时在上位机中输⼊命令:G92 X0 Y0 Z0。
第三步、移动打印头来到标记点位置并得到偏移量
收起探针,移动XY及Z轴,让打印头与*台之间的距离恰好能够通过⼀张A4纸。然后输⼊命令:M114来获取现在的坐标,你会得到类似与下⾯的信息:
ok C: X:-34.00 Y:8.00 Z:-14.3 E:0.00
⽽这些数据就是你的固件中所需要的三个偏移量,将这三个数据添加到你的固件中的位置即可。
汤姆 克鲁斯女儿修改完这个参数后,你可以将之前改的#define min_software_endstops false中的false重新改为true,保障打印机的安全。然后重新上传固件。⾃动调*功能的配置已经在你的打印机上配置完成了。开始真机测试吧。。
问答:
38.88红包代表啥意思我不⽤舵机固件怎么改啊
请问,探针和挤出头之间的Z向距离 Z_PROBE_OFFSET_FROM_EXTRUDER,可以通过M指令进⾏调整吗,每次改0.1都要刷⼀次固件,好⿇烦,能联机调试就⽅便了。
真机测试
固件上传完成后,你可以测试⼀下是否能够进⾏调*功能,为了能够保证调*探针顺利放下,最好将Z轴升⾄合适的位置,防⽌探针⽆法放下到位,⽽造成撞车现象。在上位机中点击上⾯的左下⾓⼩房⼦,注意是没有标记任何字母的那个,来进⾏XYZ三个轴的回零,
你会发现,回零跟没有添加⾃动调*功能前是有区别的,现在的回零是XY回零完成后,来到(Xmax/2,Ymax/2)坐标位置,放下Z探针,进⾏Z 轴回零,并且,不能单独对Z轴进⾏回零,回零完成后输⼊G29⾃动调*命令,你会看到开始对固件中配置的4个点进⾏调*,此时你应当仔细观察,发现是否有超界的地⽅,如果有应该修改固件中的调*点的坐标。回零和调*的操作视频如下:
如果你的打印机也可以完成上⾯的动作,说明你的⾃动调*功能配置成功了,Oh,yeah。
如果你想测试⼀下⾃动调*功能是否有作⽤,可以故意把*台弄斜,⽐如我把玻璃的右边抬⾼了⼀个螺丝帽的⾼度。
然后经过回零、调*操作后,让Z轴坐标确定后,调整XY坐标,你会发现虽然你只是在改变XY坐标,但
是Z轴为了能够适应*台不*的原因,Z 轴也会动,并且各个位置Z轴与*台直接的距离是不会变的。
问答:
怎么样把G28这个调*功能增加到⼀个真正的打印⽂件⾥⾯啊
切⽚软件⾥的启动代码G28下⾯加上G29,⽐如像这样:
我不⽤舵机,调零传感器是可拆卸的,这样固件怎么改啊,还有我想在调零后热床向下移动⼀段距离后停⽌,好便于取下调零传感器,然后在⼿动点击启动打印
不⽤⾃动调* 打印⽂件的时候,都会开始归零
安装了鸵机后 Z轴怎么归零呢?