我终于做好了一台3d打印机!!

fun

说到底最重要的是打印机的程序,我直接使用了开源的 Marlin,这样我还可以在这基础上添加我自己的程序。

配置Marlin固件

说来有意思,我最近在整一些arduino的东西,没想到Marlin固件也是基于arduino而开发,这就省事了好多,所以直接下载Marlin就行了源代码就可以了。

Marlin官网:http://marlinfw.org/

我下载的是1.1.9.1版本的固件,实际上是无所谓,也就是多多少少有些地方会有所不同。

2021-04-28_10-35-05

下载之后会有一个 arduino 项目文件,所以直接使用 arduino IDE 打开就可以。

这个项目中其他文件尽量不要去修改,因为涉及到一些单片机的程序,当然我肯定会自己修改,毕竟我是

image2

当然,有个文件还是需要修改的,找到Configuration.h,你可以叫这个文件为配置文件(好low的名字),打开之后,如果你会 C/C++ 的话,你就会发现里面全是宏定义,这就有意思了(我超爱宏定义的)。

接下来我会说一下比较重要或需要修改的宏定义。

串口设置

这个主板与电脑通信使用的是串口通信,所以需要设置一下端口号:

1
#define SERIAL_PORT 0

端口号默认是0,还可以选择其他端口号。

波特率使用默认的 250000 就可以,其实我在以前玩单片机的时候还没用过这么大的波特率。

1
#define BAUDRATE 250000

主板选择

这一条语句是设置你当前使用的是什么主板

1
2
3
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif

我就不讲#ifndef是什么意思了,毕竟 C/C++ 的知识。主板的型号在boards.h中,打开就可以看到各种型号。

我就选择的是BOARD_RAMPS_14_EFB主板,别问我为什么,我买的主板店家就这样告诉我的。

挤出机设置

一般情况就使用一个挤出机就够了,所以需要设置成一个挤出机(其实默认就是一个):

1
#define EXTRUDERS 1

耗材的直径最好修改一下,默认为 3.0 ,改成1.75,虽然我感觉这个修改可能用不上。

1
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

热传感器设置

传感器需要自己好好检查一下自己选择的传感器型号,然后再去设置:

1
2
3
4
5
6
7
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_CHAMBER 0

简单说一下,0 代表了不适用任何热传感器;1 代表了 100K 的热敏电阻,这是最常用的;其他的选择就看源代码中的程序吧。

我需要一个热传感器,这是用来控制喷头的温度,所以是必须的;其次我还在热床的位置添加了一个温控,所以TEMP_SENSOR_BED也需要设置成 1 。

接下来最好修改一下工作温度的范围,在这个区间里才会正常工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define HEATER_4_MINTEMP 5
#define BED_MINTEMP 5

#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define BED_MAXTEMP 80

我建议热床的最大温度还是调低一些,直接 150 度的话就烧了,我就设置成 80 度了。

限位开关

下面这个宏定义是默认打开的,不用去修改它,它的作用是限位开关有最小值

1
2
3
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG

除此之外,所有最小值宏定义被注释上了,因为我使用了双 Z 轴,所以我需要打开一个宏定义,X轴的最大值:

1
#define USE_XMAX_PLUG

我用的这些限位开关是机械式的微动开关,需要长期打开的,所以就需要把下面的 false 改成 true,如果使用的是光电对管,这就不需要常开。

1
2
3
4
5
6
7
#define X_MIN_ENDSTOP_INVERTING true
#define Y_MIN_ENDSTOP_INVERTING true
#define Z_MIN_ENDSTOP_INVERTING true
#define X_MAX_ENDSTOP_INVERTING true
#define Y_MAX_ENDSTOP_INVERTING true
#define Z_MAX_ENDSTOP_INVERTING true
#define Z_MIN_PROBE_ENDSTOP_INVERTING true

电机驱动

我的打印机使用了5个步进电机,其中 Z 轴就有两个,所以需要这样打开:

1
2
3
4
5
6
7
8
9
10
11
#define X_DRIVER_TYPE  TMC2208
#define Y_DRIVER_TYPE TMC2208
#define Z_DRIVER_TYPE TMC2208
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC2208
#define E1_DRIVER_TYPE TMC2208
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988

另外,我使用的是TMC2208的驱动,所以需要修改成这个驱动的宏。

然后是动能部分,推荐一个网站,这个网站可以算出合适的参数:

https://blog.prusaprinters.org/calculator_3416/

先设置 X 和 Y 轴的步进电机,这两个步进电机是是使用同步带传动,所以直接填入就可以

我使用的是TMC2208,可以直接挑战32细分,使用的同步轮是20,下图是我所填入的设置还有计算出来的结果:

2021-04-28_13-48-05

我得到的结果为160,一会设置的时候,X 和 Y 都要设置成 160。

除了传送带,还有丝杆的电机也需要计算我用的是 8 毫米直径的丝杆:

2021-04-28_14-02-20

挤出机我用的是泰坦挤出机,大概450左右,后期再精细调节。

将这些算出来,直接填入下面的数组中,四个数分别对应X、Y、Z、挤出机四种步进电机的值。

1
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 160, 160, 800, 450 }

同时需要设置电机最大速度,可以把 Z 轴和挤出机的速度提高一点:

1
#define DEFAULT_MAX_FEEDRATE          { 300, 300, 20, 50 }

启动加速度值,可以随便调:

1
#define DEFAULT_MAX_ACCELERATION      { 2000, 2000, 100, 10000 }

加速度值,可以随便调:

1
2
3
#define DEFAULT_ACCELERATION          2000    // X, Y, Z 和 E 打印移动的加速度
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z 移动(非打印)的加速度

点击正反相问题有两种解决方法,第一种是修改接线,第二种是修改下面的值:

1
2
3
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false

由于归航的时候使用的都是最小值,所以全部都使用最小值(-1代表最小,1代表最大):

1
2
3
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

限定位置

最主要的是设置热床的尺寸,这个就要根据自己的选择了,我使用的是220大小的热床,我留了一些余量,直接200:

1
2
#define X_BED_SIZE 200
#define Y_BED_SIZE 200

接下来就是归航的范围,注意最后一个是打印的高度,根据自己搭建的最大值去设置。

1
2
3
4
5
6
7
8
// 归位后行程限值(mm),对应于终点位置。
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 190

预热常数

根据自己需要去设置,我的是使用的是PLA,所以设置成 210 度,热床 60 度;如果使用的是TPU的话是230度,热床 50 度

1
2
3
4
5
6
7
#define PREHEAT_1_TEMP_HOTEND 210 
#define PREHEAT_1_TEMP_BED 60
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255

#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED 110
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255

LCD设置

这是我的强项了,我最喜欢玩屏了,可惜的是我买的是12864,很low的一款屏,有时间我魔改一下换成tft的彩屏。

12864是可以设置成中文的,所以在这个位置改成中文:

1
#define LCD_LANGUAGE cn

遗憾的是,没有字库文件,所以需要添加进来字库文件。

对了,我买的不是普通的12864,是一种小款的屏幕,如图:

2021-04-28_17-16-10

建议直接查找这个宏,然后再打开:

1
#define MKS_MINI_12864

SD卡设置

我需要用到SD卡来导入文件,所以需要打开这个宏:

1
#define SD_CHECK_AND_RETRY

蜂鸣器设置

我这个提供了一个蜂鸣器,所以我打算使用上:

1
#define SPEAKER

其他设置

设置一下打印机的名字,这些字符会在打印机就绪的时候显示出来:

1
#define CUSTOM_MACHINE_NAME "Magic-Matrix"

最后的设置

以上部分大致设置完毕了,但双Z轴还没有设置成功,所以需要设置一下双Z轴。

打开Configuration_adv.h头文件,这个头文件是高级配置,接下来我需要在这里去配置。

找到一下宏定义,并配置成这样:

1
2
3
4
5
6
7
8
9
10
// 双 Z 轴步进电机驱动
#define Z_DUAL_STEPPER_DRIVERS
#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
// 双限位开关
#define Z_DUAL_ENDSTOPS
#if ENABLED(Z_DUAL_ENDSTOPS)
#define Z2_USE_ENDSTOP _XMAX_
#define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif

Simplify3D设置

3D打印机是不可以直接使用 stl 模型的,所以在这之前需要进行切片处理。我使用的切片软件为Simplify3D,简称 S3D,这款软件真的很强,不得不佩服,接下来说一下我自己的设置内容。

挤出机设置

2021-05-06_17-06-54

这里最需要设置的有两个,一个是喷嘴口径,我使用的是0.4mm的喷嘴;另一个设置的是挤出倍率,这个需要慢调,表面太稀疏了就调大,太堆积了就调小。

其次就是回抽设置,如果没有回抽的话会出现很严重的拉丝现象。我是使用的是近程挤出机,所以,我适当调小了回抽距离,远程挤出可以考虑加大一下。

温度设置

2021-05-06_17-20-40

我使用的是PLA材料,温度需要控制在210左右,温度低会黏着不好,温度太高会有点变形,设置成210就差不多了。

热床就定在60度就可以了。

脚本

这款软件可以自定义脚本,但我没有去写多余的脚本,我只写了一个结束脚本。

当打印结束的时候,X轴会移到中间,Y轴会伸到前面,这样做的目的就是方便拿起打印的物体。

脚本程序为(分号是注释):

1
2
3
4
M104 S0 ; turn off extruder
M140 S0 ; turn off bed
M84 ; disable motors
G1 X100 Y200