原理说明 html
Kossel/Rostock等Delta(并联/三角洲)类型的机器,能够参考:http://learn.makerlab.me/guides/11安全
3d打印打印时最重要的是第一层的效果,若是第一层可以很好的粘在打印平台上,后面的若是不出意外,均可以顺利完成。可是第一层的打印并无那么容易,其中一个缘由就是打印平台是否水平的问题。若是平台不水平,可能致使模型的第一层在一个位置很是牢固,在另外一个位置却根本没有粘上。甚至会损坏打印头(平台不平,由低的位置运动到高的位置可能会撞坏打印头)。ide
本教程将经过图文及视频的方式演示为你的3d打印机添加自动调平功能。之后不再用手动调平了。这里介绍的是用官方Marlin固件的方式,不是rostock或kossel等Delta版本的Marlin,Delta版本的配置有可能会在之后推出。测试
自动调平的局限性ui
虽然说是自动调平,可是如今的调平功能时有局限性的,即你的打印平台是平的(没有弯曲或凹凸状况),但你的平台并无放置到水平的位置(或与打印头垂直)。若是你的打印平台是弯曲的或凹凸不平,理论上来讲是不起做用或做用很小的。因此建议你们的打印平台是玻璃之类的平整度很是高的平面。this
基本原理3d
电子世界里,任何的测量都须要传感器来实现。而调平用的传感器其实就是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零点。后面的调平都是根据这个点的偏移来肯定的。code
请看视频的后半段,发送G29(自动调平命令)后的反映,打印机的Z-min会移动到四个不一样XY坐标(固件中能够配置)进行探测。而且获得四个位置相对于G28肯定的基准点的Z位置进行对比和计算,获得打印平台的倾斜程度,从而在之后的运动中,将各个位置的Z偏移补偿进去(同一层打印时,Z轴可能会动),从而完成自动调平功能。视频
http://v.youku.com/v_show/id_XNzAyMjkzOTY0.html
若是你明白了基本的原理,再进行后面的工做就很顺利了。
硬件准备及配置
硬件安装
所需硬件
一、一个小舵机,你们能够看到我用的舵机是9G型号。理论来讲用什么型号均可以,可是小了不会占用太多空间;
二、一个小限位(机械式),小限位开关便可(鼠标按键),带柄不带柄均可以,我用的不带柄的;
三、固定舵机在加热头运动部件上的小零件,我是本身打印的,不太合适,最后用502粘上的;
四、固定限位开关的触碰柄,我也是打印的,这个基本上是标准的能够在这里下载:thingiverse ;
五、支持舵机接口的打印机控制板,这里以MakerLab的Mega controller为例;
安装
因为每一个人的打印机都不一样,就不说了。总之就是保证尽量少的影响其它部件的状况下,固定舵机,而且限位开关的柄能够收放自如,而且收起后,打印头的高度要低于限位的高度,即打印时限位开关舵机等零件不能妨碍打印的进程。
注意:安装限位开关触碰柄的时候,注意舵机的极限角度的位置(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标识第一个舵机,若是你有其它舵机,能够用P一、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代码这些都是要大写的,我输入的是小写可是他信框里的又是大写
固件配置
完整板的固件配置说明能够参考这里:http://learn.makerlab.me/guides/7/articles/43 。
这里只说明与自动调平有关的参数。
舵机相关
若是你须要舵机来收起、放下调平探针(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
#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,保障打印机的安全。而后从新上传固件。自动调平功能的配置已经在你的打印机上配置完成了。开始真机测试吧。。
问答:
我不用舵机固件怎么改啊
请问,探针和挤出头之间的Z向距离 Z_PROBE_OFFSET_FROM_EXTRUDER,能够经过M指令进行调整吗,每次改0.1都要刷一次固件,好麻烦,能联机调试就方便了。
真机测试
固件上传完成后,你能够测试一下是否可以进行调平功能,为了可以保证调平探针顺利放下,最好将Z轴升至合适的位置,防止探针没法放下到位,而形成撞车现象。在上位机中点击上面的左下角小房子,注意是没有标记任何字母的那个,来进行XYZ三个轴的回零,
你会发现,回零跟没有添加自动调平功能前是有区别的,如今的回零是XY回零完成后,来到(Xmax/2,Ymax/2)坐标位置,放下Z探针,进行Z轴回零,而且,不能单独对Z轴进行回零,回零完成后输入G29自动调平命令,你会看到开始对固件中配置的4个点进行调平,此时你应当仔细观察,发现是否有超界的地方,若是有应该修改固件中的调平点的坐标。回零和调平的操做视频以下:
http://v.youku.com/v_show/id_XNzAyMjkzOTY0.html
若是你的打印机也能够完成上面的动做,说明你的自动调平功能配置成功了,Oh,yeah。
若是你想测试一下自动调平功能是否有做用,能够故意把平台弄斜,好比我把玻璃的右边抬高了一个螺丝帽的高度。
而后通过回零、调平操做后,让Z轴坐标肯定后,调整XY坐标,你会发现虽然你只是在改变XY坐标,可是Z轴为了可以适应平台不平的缘由,Z轴也会动,而且各个位置Z轴与平台直接的距离是不会变的。
问答:
怎么样把G28这个调平功能增长到一个真正的打印文件里面啊
我不用舵机,调零传感器是可拆卸的,这样固件怎么改啊,还有我想在调零后热床向下移动一段距离后中止,好便于取下调零传感器,而后在手动点击启动打印
不用自动调平 打印文件的时候,都会开始归零 安装了鸵机后 Z轴怎么归零呢?