MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入

3D打印机如何添加自动调平功能

每次打印前要调节打印平台?经常因为平台不平导致第一层粘结不好?甚至损坏打印头?本文将图文介绍如何添加自动调平功能。
原理说明24 硬件准备及配置24 固件配置1 确定具体参数2 真机测试7
Andy large avatar
MakerLab创客实验室  ›  学习系统  ›  3d 打印  ›  3D打印机如何添加自动调平功能

硬件准备及配置

By Andy at 2 年前 , 6197 次浏览

硬件安装

所需硬件

1、一个小舵机,大家可以看到我用的舵机是9G型号。理论来说用什么型号都可以,但是小了不会占用太多空间;
2、一个小限位(机械式),小限位开关即可(鼠标按键),带柄不带柄都可以,我用的不带柄的;
3、固定舵机在加热头运动部件上的小零件,我是自己打印的,不太合适,最后用502粘上的;
4、固定限位开关的触碰柄,我也是打印的,这个基本上是标准的可以在这里下载:thingiverse
5、支持舵机接口的打印机控制板,这里以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标识第一个舵机,如果你有其它舵机,可以用P1、P2等来分别控制,S后面的数字表示舵机运动的角度,输入命令后,点击Send(发送)或回车。
此时,如果一切都配置得当,你应该看到了舵机会动,如果不动再试一下其它的角度即更换S后面的数字,如果其它角度依然不动,请检查接线即固件是否正确。(注意,Ramps用户直接接在舵机接口位置是不能用的,因为舵机接口默认是不供电的,需要将Ramps复位按键旁边的两个电源接在一起才可以,标记为VCC和5V,将这两个端子连接,就可以为舵机供电了。)

测试角度

由于舵机角度不能通过其它方式获得,只能需要你自己进行实际的测试,所以通过发送上面的命令,不断修改S后面的角度值,来得到两个比较完美的角度分别对应收起和放下时的位置。记在旁边备用。
我通过测试,找到的角度为:
放下角度为:125度;
收起角度为:42度;
你的配置不太可能跟我的一样,所以一定要自己测试一下。

处于放下状态时,输入M280 P0 S42命令后的效果是这样的:

处于收起状态时,输入M280 P0 S125命令后的效果是这样的:

如果得到的角度你很满意,即不影响其它部分运动,也可以在放下时进行正常调平,那么就可以进入下一环节了。

本文最后更新于:一年前
24 回复
柯察极限 medium avatar
#1 - 2 年前
柯察极限

RAMPS1.4的板子舵机是接在哪里,麻烦能说下嘛?

Andy medium avatar
#2 - 2 年前
Andy

@柯察极限 注意,Ramps用户直接接在舵机接口位置是不能用的,因为舵机接口默认是不供电的,需要将Ramps复位按键旁边的两个电源接在一起才可以,标记为VCC和5V,将这两个端子连接,就可以为舵机供电了。

参考图片,其中紫色框内的两个针需要接在一起,否则舵机没有供电;红色框就是第一个舵机应该接的位置:

柯察极限 medium avatar
#3 - 2 年前
柯察极限

好的,再请教一下,这个在玛林里面是不是要把引脚改为11

Andy medium avatar
#4 - 2 年前
Andy

@柯察极限 不需要改,配置好舵机数量,发送命令时M280 P0 S42中的P0就是指的这个管脚对应的舵机

柯察极限 medium avatar
#5 - 2 年前
柯察极限

好的,过两天机器做好后试下,很感谢

柯察极限 medium avatar
#6 - 2 年前
柯察极限

按本页修改后在打开上位机,舵机转到一个角度
但是在上位机输入M280 P0 SX没有反应,这里X表示一个数,我用的是RAMPS1.4的板子,上位机是PRONTERFACE,

柯察极限 medium avatar
#8 - 2 年前
柯察极限

#define NUM_SERVOS 1 按你的教程改了这里
然后5V供电也跳线了,我输入M280 P0 SX没有反应
我输入G28 XYZ可以回零,z回零的时候,舵机会转下来,舵机上的限位开关碰到底板后舵机就转上去,
看上去舵机和限位开关是能正常工作的,
但是M280 P0 S。。这个代码没有起到作用

柯察极限 medium avatar
#9 - 2 年前
柯察极限

我在网上搜了下国外的贴子,好像在在PINS。H这个文件里面设置P11接口?是不是这个原因?

Andy medium avatar
#10 - 2 年前
Andy

@柯察极限 能调平说明正常。是不是你输入命令时有问题

柯察极限 medium avatar
#11 - 2 年前
柯察极限

M280 P0 S34
这就是我发送的指令,字母都是大写三个一起发的,中间空格空开,是这样吗?

柯察极限 medium avatar
#13 - 2 年前
柯察极限

不动,我这两天试了很多个值,呵呵

柯察极限 medium avatar
#14 - 2 年前
柯察极限

可以了,我把M280 P0 S34
中的M换成小写的m可以了,为什么不能识别大写的,我开始一直以为是要大写

柯察极限 medium avatar
#16 - 2 年前
柯察极限

是很寄怪,我一直记得G代码这些都是要大写的,我输入的是小写但是他信框里的又是大写

linzf2011 medium avatar
#17 - 一年前
linzf2011

为什么我改了参数之后,连固件都上传不了了??

linzf2011 medium avatar
#19 - 一年前
linzf2011

好像是固件不一样,用我经常用的马琳固件写不进去,但是下载了官方版本的,就可以了。对了想再问下,MKS-BASE V1.2 一体板有没有舵机接口的?

Andy medium avatar
#20 - 一年前
Andy

@linzf2011 要分析错误是什么,那个板子我不了解,不知道

linzf2011 medium avatar
#22 - 一年前
linzf2011

@Andy出现这个错误,是什么原因?
Marlin_main.cpp.o: In function __static_initialization_and_destruction_0':
C:\Users\zflin\AppData\Local\Temp\build7442297011639602355.tmp/Marlin_main.cpp:234: undefined reference to
Servo::Servo()'
Marlin_main.cpp.o: In function process_commands()':
C:\Users\zflin\AppData\Local\Temp\build7442297011639602355.tmp/Marlin_main.cpp:1496: undefined reference to
Servo::write(int)'
Marlin_main.cpp.o: In function MarlinSerial::write(unsigned char)':
/MarlinSerial.h:105: undefined reference to
Servo::read()'
Marlin_main.cpp.o: In function servo_init()':
C:\Users\zflin\AppData\Local\Temp\build7442297011639602355.tmp/Marlin_main.cpp:459: undefined reference to
Servo::attach(int)'

linzf2011 medium avatar
#23 - 一年前
linzf2011

@Andy 我现在发现我之前的那个固件里,没有SERVO的参数设置的,出现错误是不是就是这个原因?

Andy medium avatar
#24 - 一年前
Andy

@linzf2011 嗯,有可能,改一下试试看