Befor The Start

Because I became the president of the 3D printing club, I had no choice but to DIY two 3D printers. Along the way, I encountered many obstacles, so I decided to write them all down to help others avoid them.

I have two printers. One is based on the Ultimaker (UM) structure, using the Klipper, while the other is a delta structure printer with Marlin firmware.

If there are any parts that you don't understand, feel free to come directly to the 沙河学八二楼, or leave a comment below this post.

UM结构

这个结构还有个名字叫做笛卡尔打印机,正如其名,每一个坐标轴都由一个步进电机来驱动,从而实现了对打印机空间位置的精确控制。

这个过程中最重要的是:步进电机。

步进电机控制

步进电机简介

步进电机是一种特殊的无刷直流电机,在电机的内部能够产生指向某特殊方向的磁场,从而控制带有磁铁的转子来稳定而又精确地指向某一个确定的方向,当然步进电机并不能闭环地知道自己确切的位置,所以在外部负载过大的时候,电机会发生丢步的现象。

故步进电机的驱动方式是脉冲驱动,信号每给一次则电机转动一个角度,故这个就是步进电机名字的由来。

步进电机驱动方式(只是装个打印机可以跳过这一章

脉冲驱动很明显不太能用单片机的GPIO直接引出来,我们需要一些驱动芯片,对于3D打印机来说我们常用的驱动是:A4988

A4988驱动

这里以Arduino为例:

我们首先需要接个线先。

一个标准的A4988驱动板

引脚介绍

EN:使能引脚,低电平使能,但是默认拉低

MS1,2,3:三个引脚来选择步进电机的细分方式,即一个脉冲转动多少分之一的步进:

MS1MS2MS3微步分辨率
全步
半步
四分之一步
第八步
第十六步
A4988步进细分表

SLP引脚:为低电平有效输入。这意味着将该引脚拉至低电平可将驱动器置于睡眠模式,从而将功耗降至最低。特别是在不使用电动机以节省功率时,可以调用此方法。

RST:也是低电平有效输入。将其拉低时,将忽略所有STEP输入,直到将其拉高。它还通过将内部转换器设置为预定义的Home状态来重置驱动程序。原始状态基本上是电动机启动的初始位置,并且根据微步分辨率而不同。

  • 提示
    RST引脚悬空。如果不使用该引脚,则可以将其连接到相邻的SLP / SLEEP引脚以将其拉高并启用驱动器。

供电部分

注意,A4988驱动需要两路供电输入,VMOT与15GND为电机供电,支持8-32V输入,VDD与GND是输入给驱动IC供电,3.3-5V输入。

剩下的就是给电机输入的部分啦

单片机控制

用AccelStepper库来控制步进电机

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

我们用到的步进电机

42步进电机!

大概长这样:

42代表步进电机的机械尺寸:42mm*42mm

我们的打印机三个轴,挤出机都是靠这个玩意驱动。

驱动芯片选择A4988或者忘了叫啥。

FDM打印机都有啥:

FDM大概是在做什么

  1. 材料选择: FDM使用热塑性材料,通常是塑料丝(例如ABS、PLA、PETG等),作为原材料。这些材料在加热后会变软,然后冷却后变硬,使它们可以逐层叠加和固化。
  2. 加热喷嘴: 3D打印机配备有一个加热的喷嘴,将塑料丝加热到足够高的温度,以使其熔化并变成可挤出的熔体。
  3. 层层堆叠: 打印过程从底层开始,将熔化的塑料一层一层地堆叠在一起。打印底座(底层)完成后,打印平台向上移动,以使喷嘴位于下一层。这个过程不断重复,直到整个物体被完整打印出来。
  4. 支撑结构: 对于悬空或悬垂的部分,可能需要添加支撑结构,以确保打印过程中不会出现变形或塌陷。这些支撑结构通常在打印完成后需要手动移除。
  5. 冷却: 在每层堆叠后,熔化的塑料会迅速冷却和硬化,以固定形状。这有助于确保打印物体的稳定性和准确性。
  6. 后处理: 打印完成后,通常需要进行一些后处理工作,如去除支撑结构、砂纸打磨、油漆或其它表面处理,以提高打印品的质量和外观。

我们根据这个列表需要一步一步来搭建一个打印机。

首先我们需要选择 运动学模型

运动学模型

什么是简要的说就是,步进电机和喷头连接的方式,不同的连接方式有不同的特点与优劣,我们逐一细说。

笛卡尔(XYZ)模型

为什么叫做笛卡尔模型,这说明了每一个轴最少只需要一个电机来传动,比如一个电机负责x轴运动,一个负责y轴运动,一个负责z轴运动,这个就是标准的笛卡尔运动模型。

在这之中比较典型的是 UM结构与I3龙门架结构。

我们先谈UM结构,这也是笔者自己装的那个打印机结构

UM十字轴

打印机中间的挤出机部分固定在一个十字形交错光轴上,这就是这个结构的特点。

优点

  • 精度极高
  • 速度极快
  • 速度很快的时候精度还能很高

缺点

  • 安装过程对精度要求相当变态
  • 可用打印面积比较小

I3 龙门架

就像是码头上的龙门吊 这个玩意的结构也是这样,一个电机直接拉动整个平面,另外电机拉动另外两个轴运动。

优点

  • 安装非常方便,适合新手开干
  • 便宜,非常便宜
  • 因为简单,所以维修很方便
  • 占地面积不是很大

缺点

  • 精度相当烂
  • 速度相当慢
  • 打印过程容易因为平台移动给打印件撞飞

接下来我们介绍一些别的结构

Core XY

图上两个都是

这个玩意通过皮带来实现两个电机带动同一个轴,实现了很低的电机负载与很高的打印精度

优点

  • 安装相较于UM简单很多
  • 精度也很不错
  • 速度也很快

缺点

  • 用久了精度可能不那么高
  • 修起来很麻烦

线性三角洲

坏掉了我还没修好,但是基本是这个样子。

通过 三个轴的上下移动来推动挤出头的移动。

抄一段

目前市场上很常见的一种结构,专业名称为并联臂结构。这种结构最早是用于能够快速准确抓取轻小型物体的机器雕爪而设计的。现在为使用这种结构的机器人称之为并联机器人。这种结构兴起于90年代,因其速度快、精度高、柔性强等优点使并联机器人成为了现代工业机器人重要部分。

优点

  • 占地面积很小
  • 安装比较方便
  • 打印速度相当快(真的很逆天的快
  • 可以打很高的东西

缺点

  • 精度堪忧
  • 材料挺贵的

说得很好,怎么安装一台呢(以Klipper为例)

选择你的软件

首先我们需要选择一个合适的软件开控制打印机,这里我们有marlin和klipper两个选择。

klipper需要一个能运行linux的电脑作为上位机,marlin则不需要。但是marlin的后续调试难度和时间消耗远远大于Klipper,并且Klipper还有非常多提高打印精度的小操作,所以笔者选择了Klipper作为打印机软件。

选择你的上位机

因为我们选择了Klipper,所以选择一台上位机迫在眉睫,通常来说一台能够运行Linux的电脑就可以了,通常会推荐各种Linux开发板,比如香橙派或什么派,如果只是为了打印机,香橙派zero3是很不错的选择。

当然因为前文所说任何一个电脑都可以,你也可以狠狠地骚,比如我选择了一台二十手笔记本电脑作为上位机,也有人选择老红米2A作为上位机,这个主要看你的个人品味来选择。

选择你的下位机

我们通常需要一块下位机主板,我在这里选择的是MKSV2主板,这个看自己咯。

主板上面的接口数量直接决定你打印机的可扩展上限。

开始安装必要的软件

如果你从来没有Linux使用基础 那还是挺难的

首先我们需要给你的电脑装一个Ubuntu Linux (有一键安装脚本,Arch 之流用不了,非常难受(悲

关于如何安装Ubuntu 如果你选择的是香橙派zero3,请去他们官网看看怎么装的。

这里有一篇教程很详细地教你如何安装了Klipper在香橙派上

香橙派Klipper女仆级安装教程2022年6月版 - 哔哩哔哩 (bilibili.com)

安装你的物理硬件

这一部分我也没有办法教你

因为每个人的打印机都不相同,但是在bilibili有很多很多大佬会教大家如何安装一台打印机,在你安装好机器后可以继续回到这里来。

编辑你的配置文件

讲道理这个我没法告诉你要怎么做,因为每个人的打印机都不相同。但是Klipper官网地doc写得非常非常完善,所以:

Configuration reference - Klipper documentation (klipper3d.org)

如果你的主板芯片是mega2560,你需要针脚的对照表

下面这个是我的

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

[stepper_x]
step_pin: PF0
dir_pin: PF1
enable_pin: !PD7
microsteps: 16
rotation_distance: 80   ##rotation_distance = ((360°/1.8°) * microsteps) / 80 # # 旋转距离 = (圆周360°/步距角)*细分/每MM脉冲值
endstop_pin:^PE5 #X-Min, PE4:X-Max
position_endstop: 0
position_max: 220
homing_speed: 60

[stepper_y]
step_pin: PF6
dir_pin: PF7
enable_pin: !PF2
microsteps: 16
rotation_distance: 80
endstop_pin:^PJ1  #Y-Min, PJ0:Y-Max
position_endstop: 0
position_max: 220
homing_speed: 60

[stepper_z]
step_pin: PL3
dir_pin: !PL1
enable_pin: !PK0
microsteps: 16
rotation_distance: 16
endstop_pin: probe:z_virtual_endstop  #Z-Min, PD2:Z-Max
position_max: 160
position_min: -10
homing_speed: 10





[extruder]
step_pin: PA4
dir_pin: PA6
enable_pin: !PA2
microsteps: 16
rotation_distance: 4
nozzle_diameter: 0.4
filament_diameter: 1.750
heater_pin: PB4
sensor_type: ATC Semitec 104GT-2
sensor_pin: PK5
min_temp: 0
max_temp: 270
control: pid
pid_Kp: 21.438
pid_Ki: 0.888
pid_Kd: 129.435
max_extrude_only_distance: 50000.0
max_extrude_only_velocity: 40

[verify_heater extruder]
max_error: 120
hysteresis: 10
check_gain_time: 20
heating_gain: 1

[heater_bed]
heater_pin: PH5
sensor_type: ATC Semitec 104GT-2
sensor_pin: PK6
min_temp: -100
max_temp: 180
control: pid
pid_kp = 74.551
pid_ki = 1.053
pid_kd = 1319.559

[verify_heater heater_bed]
max_error: 12000
hysteresis: 30
check_gain_time: 300
heating_gain: 1

[fan]
pin: PH6





[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 3000
max_z_velocity: 25
max_z_accel: 30
[fan_generic LED]
pin: PL0
shutdown_speed: 1.0


[virtual_sdcard]
path: /home/qwqpap/printer_data/gcodes
[pause_resume]

[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
  TURN_OFF_HEATERS
  CANCEL_PRINT_BASE


[display_status]

[bltouch]
sensor_pin: ^PD2
control_pin: PB5
x_offset: -30.48
y_offset: 20.5
z_offset: 2.52
speed: 5.0
samples: 2
samples_result: median
sample_retract_dist: 3.0
samples_tolerance: 0.1
samples_tolerance_retries: 1

[safe_z_home]
home_xy_position: 50,50 # Change coordinates to the center of your print bed
speed: 60
z_hop: 20                 # Move up 10mm
z_hop_speed: 10


[gcode_macro G29]
gcode:
    BED_MESH_CLEAR
    G28
    BED_MESH_CALIBRATE
    BED_MESH_PROFILE SAVE=name
    SAVE_CONFIG
    BED_MESH_PROFILE LOAD=name

[bed_mesh]
speed: 60
horizontal_move_z: 10
mesh_min:40,40
mesh_max:170,170
probe_count: 4,4


在安装之后

选择你的耗材

我们打印的塑料有非常多种类,你需要根据你的需求和机器来选择。

最常见的是

PLA/PLA+

非常好材料 PLA 是非常非常环保 安全 健康的材料 无毒无害可降解 强度也还说得过去

非常好材料 PLA+ 不那么无毒,但是强度惊人

ABS

优点是非常坚硬,而且耐腐蚀耐高温,很强。

缺点就是需要很高的温度来打印,而且遇冷收缩导致非常容易翘边,所以需要打印机封箱,而且有毒,打印过程就会产生有毒有害物质

PETG

强度比PLA好不少,但是容易翘边!

如何开始打印

获取模型文件

首先你需要一个模型,格式为stl,通常的可以去

https://www.thingiverse.com/

找找你喜欢的,或者用solidworks自己画一个模型保存为stl。

之后需要

切片

对于自己diy的打印机选择cura是最好的选择了,在里面我们对模型进行切片后的gcode文件就可以交给打印机打印了。