【打印虎】RepRap 3D打印机新一代Salai主板安装与配置教程 第二版

第一节、Salai主板介绍

随着3D打印机,特别是面向DIY爱好者的RepRap Prusa i3 3D打印机被越来越多的朋友所了解和熟悉,玩3D打印机的朋友们对现有3D打印机设计的改进也越来越深入,同时对3D打印机的核心部件3D打印机主板的要求也越来越高了。

经典的RepRap Prusa i3 3D打印机的主板,通常采用Melzi或者Arduino Mega 2560 + RAMPS这两种方案之一。在这两种方案中,Melzi方案为全合一的形式,单片PCB板,可靠性高;Arduino Mega 2560 + RAMPS方案采用多块PCB板插接的形式,由1片Arduino 2560,1片RAMPS以及4片步进电机驱动板组成,灵活性高。经过打印虎深入评测对比,我们认为Melzi更适合一般的3D打印机玩家的需求,因此在我们之前的各种对3D打印机的介绍文章中,绝大部分都是以Melzi主板为例的。

虽然我们很喜欢Melzi主板,但它也存在诸多限制,影响我们对3D打印机的深入研究和开发。比如,Melzi主板不能支持双挤出头,这让希望用水溶性耗材作为支撑的朋友就不能选择Melzi主板了;另外Melzi主板采用的CPU主频、内存容量都比较低,这样Melzi主板就只能支持12864 LCD液晶屏,而不能支持更高级的彩色触摸屏。为了解决这些问题,让广大3D打印机爱好者有一块更好用的3D打印机主板,打印虎在Melzi主板的基础上研发了Salai主板,解决了目前Melzi主板的一系列问题,提供给3D打印机DIY爱好者一个更好的选择。

很多朋友都知道,Melzi主板最开始是基于Arduino Leonardo进行的设计改进,而Leonardo就是我们熟知的列奥纳多·达·芬奇,所以Melzi主板的设计者选择了达·芬奇最钟爱的学生Francesco Melzi,弗朗西斯科·梅尔兹作为主板的名字。作为Melzi的改进型,我们选择了达·芬奇的另一名学生,Gian Giacomo Caprotti,吉安·贾科莫·卡普罗蒂,又名Salai(萨莱),作为第二代主板的名字。

image002

达·芬奇《萨莱头像》

Salai主板的主要技术参数包括:

  1. 处理器:AT91SAM3X8E,32位ARM核心,512K FLASH ROM,96K SRAM,84MHz主频,可以提供高达80KHz的均匀步进电机步频信号
  2. 用户界面采用3.5英寸全彩TFT触摸屏
  3. 支持双挤出头,提供5个独立的32细分DRV8825步进电机驱动,直接提供高达2A的步进电机脉冲电流输出
  4. 提供3个独立的大功率MOSFET驱动,用于双挤出头加热以及热床加热
  5. 支持XYZ结构,CoreXY结构以及三角洲结构3D打印机
  6. 支持多种自动调平模式,不论使用哪种机械结构,都有合适的自动调平解决方案
  7. 提供Micro SD卡(TF卡)接口以及U盘扩展模块,脱机打印G-code文件
  8. 支持机械及光电限位开关,提供更准确的步进电机定位
  9. 支持热电偶,提供更精确的温度测量值
  10. 支持断电续打,打印完成自动关机
  11. 支持引出步进电机信号线,可以外接更大的步进电机驱动模块,驱动更大的步进电机
  12. 主要电气连接使用螺丝端子,不需要压线或者焊接
  13. 外形尺寸:210mm x 81mm x 17mm,安装孔与Melzi兼容
  14. 重量:106g

2016年8月,打印虎大幅更新了第一版Salai的设计,推出了第二版Salai主板v2.0,在原有设计的基础上,增加了限位开关、热敏电阻以及步进电机的接口引出,将步进电机驱动芯片换位了32细分的DRV8825,并重进规划了断电续打模块、Wifi模块以及热电偶支持的方式。整块主板功能更多性能更强使用更方便。

image004

上图为一片Salai主板,可以看到在这片主板的设计中,各个接口的位置、形式都尽量保持与Melzi一致。

image006

上图为工作状态的Salai主板+TFT屏幕

虽然Salai主板继承了很多Melzi主板的特性,但这两块主板之间的差别还是不小的,我们专门列了一个表格,对比Salai和Melzi之间的差别:

  Salai Melzi
MCU型号 AT91SAM3X8E ATmega 1284P
总线宽度 32位 8位
主频速度 84MHz 16MHz
FLASH容量 512K 128K
SRAM容量 96K 16K
LCD支持 彩色3.5寸TFT触摸屏 单色12864 LCD屏
步进电机驱动 DRV8825,32细分 A4988,16细分
挤出头支持 2个 1个
自动调平支持 支持 不支持
SD卡支持 支持(支持中文文件名) 支持
光电限位开关支持 支持 需要对主板进行调整
热电偶支持 支持 不支持
断电续打支持 支持 不支持

从以上表格可以看出,打印虎推出的下一代3D打印机主板Salai,主板采用了32位ARM体系结构,CPU运行速度是传统8位主板的5倍,可以有效提高3D打印的质量,同时支持双挤出头,自带3.5英寸的TFT全彩触摸屏,配合大幅改进的Repetier-firmware固件,拥有丰富的操作功能和良好的用户界面。这个产品的固件不仅功能丰富,还是开源的,可以满足深入学习的需求!产品不光性能高、颜值高,核心代码开源,价格还特别低,有兴趣的朋友,可以到打印虎的产品页面,看看更详细的信息,这里就不多说了。

第二节、安装USB驱动程序

上一节我们介绍了Salai主板的基础特性,下面我们详细讲解拿到一片Salai主板之后如何安装使用。首先,要把Salai主板与电脑连接起来,为下一步刷固件(调整参数)做准备。连接Salai主板与电脑非常简单,只要两步即可完成。第一步是使用排线连接Salai主板与3.5寸TFT触摸屏:

image008

注意两根10pin排线要JP1对JP1,JP2对JP2,两根线之间不要混淆。

第二步就是连接Salai主板与电脑之间的USB线了。连线之后,主板上的两个LED应该亮起(下图红框内),同时3.5寸TFT触摸屏上应该显示正确的信息:

image010

由于这时候我们还没有连接3D打印机的热敏电阻,因此3.5寸TFT触摸屏上会报告当前温度为“损坏”。不用担心,等会我们连接好热敏电阻之后,这里就会显示为正常的当前温度值了。

虽然连接好USB线之后,Salai主板就得到供电开始运行了,但实际上这时电脑只起到一个供电的作用,在驱动程序安装之前,还不能和Salai主板交换数据。通常Windows会提示“未能成功安装设备驱动程序”,如下图所示。为了让电脑与Salai主板通讯,我们需要先给它安装驱动程序。

image009

Salai主板的驱动程序,已经包含在Arduino安装包内,我们只要下载Arduino并安装驱动即可。由于Arduino官方提供的安装包,不包含SAM核心组件,在下载完成之后还需要单独安装,比较麻烦,因此打印虎重新封装了最新的Arduino 1.6.11版本,同时包含了Arduino主程序以及SAM核心组件,给大家提供了方便。打印虎打包的Arduino 1.6.11版本可以从这里下载(打印虎本地下载百度云下载)。

下载之后直接执行安装包文件就可以开始安装过程了,如下图所示:

image012

直接按下安装,就会开始安装Arduino 1.6.11的过程。由于需要安装的文件数量很多,这个过程的用时会比较久,要等一会才能完成。

image013

全部完成之后,按下关闭就可以了。这时候,桌面上会出现Arduino 1.6.11的图标。

image014

双击这个图标即可启动Arduino 1.6.11了。但我们这里的目标,并不是使用Arduino 1.6.11(下一节会使用这个工具刷固件),而是安装驱动程序。因此我们先打开设备管理器。

打开设备管理器最简单的方法,是在“我的电脑”上单击鼠标右键,选择菜单项“管理”,并在打开的“计算机管理”窗口的左侧选择“设备管理器”。如下图所示:

image014

这时,我们可以看到在“端口(COM和LPT)”这个类别中,会出现一个“未知设备”。这个未知设备就是我们的Salai主板了。鼠标双击这个“未知设备”,并在弹出的窗口中,点击“重新安装驱动程序”按钮。

image015

在打开的更新驱动程序软件窗口中,单击“浏览计算机以查找驱动程序软件”这一项。

image017

在编辑框中填上我们刚才安装Arduino 1.6.11的路径,再点下一步按钮。

image019

这时候会提示用户是否安装“Arduino USB Driver”,当然选择“安装”。

image020

安装完成之后,回到设备管理器,可以看到我们的Salai主板已经驱动起来了。由于Salai与Arduino Due在驱动上是完全兼容的,所以从电脑上我们看起来是一个Arduino Due设备。之后的COM3表示这个设备当前在COM3串口上,在不同的电脑上,这个情况也有可能会改变,不管COM口的编号是多少,都是正确的结果。

image021

到此为止,Salai主板的驱动程序已经成功安装完成,下面我们就可以和主板进行通讯了。下一节,我们会首先介绍如何给主板刷固件,以配合我们的3D打印机的参数。然后,我们还会介绍如何与上位机软件Repetier-host配合使用Salai主板。

第三节、给Salai主板刷固件

Salai主板的一大特点,就是它使用了RepRap 3D打印机最常用的固件Repetier-firmware,这种固件运行稳定,同时兼容性特别好,可以和多种上位机软件配合使用。特别是在配合Repetier-host时,可以发挥出完整的功能,具有极佳的兼容性(毕竟是同一家公司开发的)。而且,为了保证广大3D打印机玩家的进一步改造需求,打印虎保持了所用固件的开源。大家可以直接获得固件的源代码,并在源代码的基础上进一步修改获得自己希望的功能。

将随Salai主板附送的源代码包zip文件解压之后,可以得到这样一个Repetier文件夹,包含了一组源代码文件,如下图所示。

这组文件全部是Repetier-firmware的源代码文件,用C++语言写成。如果需要对这些文件进行较多的修改,可以安装一个文本编辑器,比如notepad++,打开这些文件并进行编辑。下面我们可以看到,直接使用Arduino软件也可以进行修改,但比较不方便。

image023

启动Arduino 1.6.11软件,可以看到初始窗口:

image027

在这个窗口中,选择菜单“文件”-“打开”,并将路径切换到刚才解压得到的Repetier目录,在目录中选择Repetier.ino文件,如下图所示:

image027

这里需要注意一点,因为Windows会隐藏已知的文件扩展名,所以在有些电脑上,Repetier.ino文件会显示为Repetier,“.ino”部分被隐藏了。不论扩展名是否隐藏,打开操作本身没有变化。

按下“打开”按钮之后,我们会得到一个新的Arduino窗口,里面就是整个Repetier工程了。如下图:

image031

在将固件刷入Salai主板之前,我们必须按照自己的3D打印机配置,修改固件里面的配置值。Repetier-firmware所有的配置值,都保存在Configuration.h文件中。为了打开Configuration.h文件,我们要先点击文件名标题栏最右侧的向下小三角,然后在弹出的菜单中选择Configuration.h文件:

image032

在Configuration.h文件中,我们要修改的主要配置项目包括:

  1. 挤出头的数量;
  2. 3D打印机是否有热床;
  3. 限位开关的种类;
  4. 步进电机的方向;
  5. 步进电机的分辨率;
  6. 热敏电阻的参数;
  7. 3D打印机的长宽高参数;

除了以上几项,还有稍微不太常用的

  1. 3D打印机的运行速度参数;
  2. 3D打印机的运行加速度参数;

下面我们逐一搞定这些配置项目。首先是挤出头的数量。找到配置文件中的这一行:

#define NUM_EXTRUDER 1

(小窍门:可以用Ctrl+F打开“寻找”对话框,并输入这一行,就可以迅速跳到正确的位置上,不需要一行一行看了)

这一行配置了挤出头的数量。1代表一个挤出头,2代表两个挤出头。

第二项,是3D打印机是否有热床。找到配置文件中的这一行:

#define HAVE_HEATED_BED true

可以看到,缺省设置是为有热床的3D打印机准备的。如果你的3D打印机没有热床,可以把这一行最后的true改为false,告诉固件这台3D打印机不包含热床。

第三项,是限位开关的种类,常用的限位开关有两种接法,一种是常通的,一种是常断的。如果我们连接了限位开关的C(也就是COM)以及NC接口,如下图所示,则是“常通”接法。这种接法在限位开关未触发的时候,是处于短路状态,触发之后变为断路。

image032

反之,如果连接了C以及NO接口,如下图所示,则是“常断”接法。这种接法在限位开发未触发的时候,是处于断路状态,触发之后变为短路。

image033

如果是第一种接法,也就是“常通”的接法,那么Configuration.h文件中应该设置为

#define ENDSTOP_X_MIN_INVERTING false
#define ENDSTOP_Y_MIN_INVERTING false
#define ENDSTOP_Z_MIN_INVERTING false

这也是初始的设置。

如果是第二种接法,也就是“常闭”的接法,那么上面三行中所有的false都应该改为true:

#define ENDSTOP_X_MIN_INVERTING true
#define ENDSTOP_Y_MIN_INVERTING true
#define ENDSTOP_Z_MIN_INVERTING true

第四项,是步进电机的方向。步进电机的方向,通常在第一次配置的时候不能很好的确定,因此可以先保持原样刷固件,如果发现运行方向与预期不一致,可以在第二轮中进行调整。在Configuration.h文件中,步进电机方向的设置为:

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false

这三行确定了XYZ的方向。可选值为true和false。如果发现步进电机的运行方向是反的,可以将false改为true,或者反之将true改为false。

另外,在将步进电机加热之后(要首先确定热敏电阻设置是正确的,否则有可能会过热),还可以观察挤出头步进电机的方向。如果挤出头的方向反了,可以调整

#define EXT0_INVERSE true
#define EXT1_INVERSE true

这两行。其中EXT0对应挤出头1,EXT1对应挤出头2。

第五项是步进电机的分辨率。步进电机的分辨率是一个比较麻烦的问题,需要进行一定的计算。具体的计算方法,我们这里就不详细介绍了,对比不清楚的朋友,可以参考另外一篇文章【打印虎原创】RepRap_Prusa_i3_3D打印机步进电机设置图解,专门介绍了步进电机的分辨率计算。我们这里只介绍如何在配置文件中修改步进电机分辨率:

#define XAXIS_STEPS_PER_MM 80
#define YAXIS_STEPS_PER_MM 80
#define ZAXIS_STEPS_PER_MM 800
#define EXT0_STEPS_PER_MM 101
#define EXT1_STEPS_PER_MM 101

以上五行,分别对应了XYZ轴以及两个挤出头步进电机的分辨率。将它们修改为正确的值即可。

下面,第六项是热敏电阻的参数。我们见过的国内绝大多数3D打印机,都采用了R0=100K, beta=3950的热敏电阻。如果你也使用了同样的热敏电阻,那么就不用修改配置文件了。如果很不幸你的热敏电阻与此不同,那么你需要修改这些项目:

#define GENERIC_THERM1_R0 100000
#define GENERIC_THERM1_BETA 3950

很明显,这两行分别对应了热敏电阻的R0值和beta值,修改为你使用的元器件的实际值就可以了。

最后,第七项是3D打印机的长宽高参数。这项参数非常直观,只要直接按照自己3D打印机的实际数值(以毫米为单位)设置即可:

#define X_MAX_LENGTH 200
#define Y_MAX_LENGTH 200
#define Z_MAX_LENGTH 180

如果你的3D打印机比较特殊,可以使用更快的运行速度,或者必须使用更慢的运行速度,则需要调整这些配置项:

#define MAX_FEEDRATE_X 200
#define MAX_FEEDRATE_Y 200
#define MAX_FEEDRATE_Z 2
#define HOMING_FEEDRATE_X 40
#define HOMING_FEEDRATE_Y 40
#define HOMING_FEEDRATE_Z 2

前面三项,MAX_FEEDRATE,指的是3D打印机的最大速度。所有超过这个速度的G-code指定运动动作,全部会降低到这个速度值之后才被执行。

后面三项,HOMING_FEEDRATE,指的是3D打印机的归零速度。可以看出,在XYZ结构的3D打印机配置中,Z轴的速度一般都设定的很低。这是因为Z轴通常使用了丝杆结构,而丝杆结构不能支持比较高的运动速度。

除了速度之外,加速度参数也会对机械运动产生较大影响。

#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 3000
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 3000
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 3000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 4000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 4000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 4000

对于XYZ结构的3D打印机来说,如果某一个轴比较重,步进电机达不到这个加速度,就会产生失步的现象。如果调试过程中发现失步现象,可以将这里的加速度值调低试试,可能会有明显的效果。前面三项MAX_ACCELERATION,指的是打印过程中的最大加速度值;后面三项MAX_TRAVEL_ACCELERATION,指的不喷丝只是运动挤出头XYZ值时的最大加速度值。

将以上所有内容都修改完成之后,就可以刷固件了。正式开始刷之前,我们还要在Arduino环境中选择正在使用的主板类型以及端口号。这些只要使用菜单项“工具”下面的“开发板”以及“端口”就可以了。开发板选择为Salai AT91SAM3X8E(通常是开发板菜单的最后一项),端口选择为设备所在的实际端口,如图:

image037

开发板以及端口都选择好之后,只要按下Arduino窗口工具栏上的向右箭头按钮,就可以开始刷固件过程了。

image038

这个过程需要持续一段时间,完成后,在下方的日志窗口中,我们会看到这样的内容:

image039

这就说明刷固件过程成功完成了。

需要注意的是,固件刷好之后,我们配置在固件中的各个参数值,却不一定能立即起作用。这是由于Repetier-firmware会把一部分配置参数值保存在EEPROM之中,而在每次主板启动时,自动从EEPROM中读取这些参数值。我们建议的方式,是在每次刷完固件之后,使用触摸屏上的菜单界面“配置”-“将EEPROM恢复出厂设置”,这样可以保证当前的EEPROM中的值,与刚刚刷入的固件配置文件的设置值完全一致。如果你不满足于此,想深入理解EEPROM,了解如何处理EEPROM中的参数值,可以参考我们这篇教程的第七节内容。

image041

第四节、给Salai主板刷三角洲固件以及自动调平的使用

上一节中我们介绍了给Salai主板刷固件的方法,其中举例使用的是XYZ结构的3D打印机。除了XYZ结构的3D打印机之外, Salai主板Repetier固件也完全支持三角洲3D打印机。下面我们就介绍一下如何对三角洲3D打印机进行配置。

与配置XYZ结构的3D打印机一样,配置三角洲3D打印机固件也同样需要使用Arduino环境。由于上一节已经详细介绍了Arduino环境的使用,因此这一节中就不再重复了。这一节中,我们只关注于固件配置文件Configuration.h的修改。修改完成后,使用与上一节同样的方法,就可以将配置好的固件刷入主板了。

为了方便大家,我们把为三角洲机型已经修改了初始值的配置文件,保存为Configuration_Delta.h文件。大家可以从这个文件开始修改。修改完成后,刷固件之前,可以把Configuration.h文件删除,把Configuration_Delta.h改名为Configuration.h文件,这样刚刚修改的内容,加上我们准备好的基础配置,就变成了Configuration.h文件。

对于三角洲3D打印机来说,在固件文件中,我们要修改的主要配置项目包括:

  1. 3D打印机类型(三角洲);
  2. 3D打印机是否有热床;
  3. 限位开关的设置;
  4. 步进电机的方向;
  5. 步进电机的分辨率;
  6. 热敏电阻的参数;
  7. 3D打印机的高度参数;
  8. 三角洲3D打印机半径相关参数;

与XYZ结构的3D打印机配置类似,还有稍微不太常用的

  1. 3D打印机的运行速度参数;
  2. 3D打印机的运行加速度参数;

下面我们逐一搞定这些配置项目。首先是3D打印机类型。找到配置文件中的这一行:

#define DRIVE_SYSTEM 0

将其中的数值0改为3。其中0代表XYZ结构的3D打印机,3代表三角洲结构的3D打印机。

第二项,是3D打印机是否有热床。找到配置文件中的这一行:

#define HAVE_HEATED_BED false

可以看到,缺省设置是为没有热床的三角洲3D打印机准备的。如果你的3D打印机有热床,可以把这一行最后的false改为true,告诉固件这台3D打印机不包含热床。

第三项,是限位开关的设置。由于三角洲3D打印机的限位开关都是高位限位开关,因此我们首先把原定义的低位限位开关改为高位限位开关,找到并修改以下六行:

#define MIN_HARDWARE_ENDSTOP_X false
#define MIN_HARDWARE_ENDSTOP_Y false
#define MIN_HARDWARE_ENDSTOP_Z false
#define MAX_HARDWARE_ENDSTOP_X true
#define MAX_HARDWARE_ENDSTOP_Y true
#define MAX_HARDWARE_ENDSTOP_Z true

这样,就关闭了三个低位限位开关,打开了三个高位限位开关。

上一节中,我们已经详细说明了限位开关连接的两种方式,“常通”接法以及“常断”接法。这里我们就不再重复给图片了。对于三角洲3D打印机来说,除了XYZ三个限位开关之外(三个限位以及不对应于XYZ三个空间正交轴,而是对应于三角洲3D打印机的三个立柱),还通常具有第四个限位开关,用于自动调平。这样的情况下,如果是第一种接法,也就是“常通”的接法,那么固件配置文件中应该设置为

#define ENDSTOP_X_MAX_INVERTING false
#define ENDSTOP_Y_MAX_INVERTING false
#define ENDSTOP_Z_MAX_INVERTING false
#define Z_PROBE_ON_HIGH 1

如果是第二种接法,也就是“常闭”的接法,那么上面几行中所有的false都应该改为true,同时1都应该改为0。

#define ENDSTOP_X_MAX_INVERTING true
#define ENDSTOP_Y_MAX_INVERTING true
#define ENDSTOP_Z_MAX_INVERTING true
#define Z_PROBE_ON_HIGH 0

第四项,是步进电机的方向。步进电机的方向,与上一节讲到的方式一样,可以先保持原样刷固件,如果发现运行方向与预期不一致,可以在第二轮中进行调整。在固件配置文件中,步进电机方向的设置为:

#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true

这三行确定了XYZ的方向。可选值为true和false。如果发现步进电机的运行方向是反的,可以将false改为true,或者反之将true改为false。

另外,在将步进电机加热之后(要首先确定热敏电阻设置是正确的,否则有可能会过热),还可以观察挤出头步进电机的方向。如果挤出头的方向反了,可以调整

#define EXT0_INVERSE true

第五项是步进电机的分辨率。步进电机的分辨率是一个比较麻烦的问题,需要进行一定的计算。具体的计算方法,我们这里就不详细介绍了,对比不清楚的朋友,可以参考另外一篇文章【打印虎原创】RepRap_Prusa_i3_3D打印机步进电机设置图解,专门介绍了步进电机的分辨率计算。我们这里只介绍如何在配置文件中修改步进电机分辨率:

#define BELT_PITCH 2
#define PULLEY_TEETH 16
#define STEPS_PER_ROTATION 200
#define EXT0_STEPS_PER_MM 101

其中,BELT_PITCH指的是同步带每一个齿之间的距离,通常是2mm。PULLEY_TEETH指的是同步轮的齿数,16齿或者20齿的同步轮比较常见。然后,是步进电机一圈的步数STEPS_PER_ROTATION。对于1.8度步进角的步进电机来说,一圈200步。对于0.9度步进角的步进电机来说,要把这里改为400。最后,EXT0_STEPS_PER_MM指的是挤出头步进电机的分辨率。

下面第六项是热敏电阻的参数。仍然与上面一节相同,与热敏电阻相关的固件配置项目,包括:

#define GENERIC_THERM1_R0 100000
#define GENERIC_THERM1_BETA 3950

很明显,这两行分别对应了热敏电阻的R0值和beta值,修改为你使用的元器件的实际值就可以了。

第七项是3D打印机的高度参数。与上一节的XYZ结构的3D打印机不同,三角洲3D打印机只能设置Z轴的高度,而XY轴的运动范围是由下面马上要讲到的第七项参数设置的。

#define Z_MAX_LENGTH 180

将这一项直接改为3D打印机的实际运行高度。因为下面还要进行自动调平,这里的设置比实际值小10mm左右最合适。

最后第八项是三角洲并联臂3D打印机所特有的配置项,如下图所示:

image042

#define DELTA_DIAGONAL_ROD 217 // mm
#define PRINTER_RADIUS 100
#define DELTA_MAX_RADIUS 80

DELTA_DIAGONAL_ROD指的是并联臂的长度。市面上最常见的并联臂长度是217mm。PRINTER_RADIUS指的是在3D打印机喷头对准热床中心时并联臂在水平方向的长度。217mm的并联臂,对应的水平方向长度正好是100mm。最后一个参数DELTA_MAX_RADIUS指的是打印平面的最大可使用半径。虽然打印平面一般是100mm半径,但由于挤出头效应器(Effector)以及上面的风扇会占用一定的空间,受此限制,通常这个半径设置在80mm会比较合理。

第九项和第十项是步进电机的速度和加速度。三角洲类型3D打印机的一大特点就是速度快。特别是Z轴的移动,XYZ类型的3D打印机一般使用丝杆,因此速度会非常慢。而三角洲类型3D打印机的Z轴移动速度,由于使用了同步带传动,因此可以获得与XY轴完全一样的速度。如果我们还保持原来的3D打印机速度,就太浪费了。我们可以修改以下配置项(修改为XYZ三个轴都使用同样的数值):

#define MAX_FEEDRATE_Z 200
#define HOMING_FEEDRATE_Z 40
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 3000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 4000

这些值的具体含义,可以参考上一节的解释,这里就不再重复了。

到此为止,所有相关的参数都已经修改完成了。如果你有一些使用三角洲类型3D打印机的经验,就会知道我们上面设置的并联臂长度、水平方向半径以及3D打印机高度等数值,都不会太准确。能精确到毫米,已经是非常不容易了。但即使精确到毫米的程度,如果直接使用的话,最终打印效果仍然会不够理想,因为在打印第一层的时候,喷头与热床之间的距离需要非常精确地保持一个很小的数值,比如0.3mm。可以想象,完全通过手工测量和计算,很难达到这样的精度。

为了解决这个问题,常见的三角洲3D打印机都附带了自动调平的设施,而固件也已经支持了自动调平。下面就让我们来使用自动调平功能,最终校准我们对三角洲3D打印机的各项设置值。

在固件中找到这样两行:

#define FEATURE_Z_PROBE false
#define FEATURE_AUTOLEVEL false

将其中的false改为true,即打开了三角洲固件的Z轴高度测试以及自动调平两项功能。重刷固件,并且清理EEPROM的值(参考上一节),我们就可以开始了。

Repetier-firmware自带的自动调平功能非常简单易用。只要在菜单上选择“配置”-“常规配置”-“自动调平测试”,即可开始自动调平过程。在这个过程中,要保持警惕。如果发现挤出头部分撞机了,或者其他问题,要立即切断电源并分析问题。切不可在无人情况下执行这个动作。如果一切顺利,这个过程完成之后你的3D打印机就已经完成了调平。再次进入这个菜单,可以发现“自动调平变换”已经变为了“开”。

image044

在执行了自动调平功能之后,也许你会发现Z轴的高度值还不是非常合适。这时候,我们可以再调整一下Z轴的高度值。在Repetier-host里面,使用菜单“配置”-“固件配置”,在打开的对话框中,找到Z max length一项,微微增加一点(每次尝试1mm左右的改变量即可),把Z轴归零之后降到底部(Z=0)观察,逐渐逼近真实的Z轴高度。

image045

完成Z轴高度调整后,喷嘴和打印平面之间,应该留有一条能透光的细缝,就是我们期待的最佳高度了。

第五节,硬件的连接

如果你还没有把Salai主板安装到3D打印机上,那现在就应该进行安装了。下图给出了各个接口的作用。懂英文的朋友,直接看主板上印刷的文字,也可以直接理解。

image030

3.5寸TFT触摸屏的接口比较简单,连接的时候注意主板和显示屏上的JP1连JP1,JP2连JP2,不要交换反接。USB接口、SD卡接口以及断电续打接口比较简单,都带有防呆设计,不会接反,这里就不详细介绍了。下面主要介绍连接中可能会有问题的接口。

每个接头的背面,都有具体每根线代表的意义。电源以及风扇分正负极,千万不要把正负极接反哦。热床、挤出头加热管实际上是一个纯电阻,不分正负极,但如果使用红黑双色导线的话,还是建议把黑线接在-,红线接在+。养成好习惯可以减少出错的几率。

XYZ以及E1/E2步进电机接口,从左到右应该连接步进电机的B-, B+, A+, A-四条线。下图是一种常见的步进电机线的颜色,在这种情况下,正确的连线应该是从左到右蓝黄红绿

image031

对于另一种常见的步进电机线的颜色来说,正确的连线应该是从左到右蓝红黑绿。

image032

几个限位开关接口,包括XYZ以及自动调平限位开关,主板上都已经配备了相关的上拉电阻和电容器,因此只要简单地直接接上开关就可以用了。理论上,应该把开关的COM端(公共端)连接-,将另一端NC或者NO连接S(可以看主板背面的印刷)。但实际上无论怎么连接都可以正常工作的。

热敏电阻没有正负极,两根导线也不区分颜色,可以随意连接。

LED灯条接口带有防呆设计,但不一定与你的实际情况相符,这里要注意正负极。

如果你的3D打印机使用的不是热敏电阻,而是热电偶,那么你需要外接热电偶模块。热电偶模块的+, -, S三根线要与主板上的TC1/TC2接口对应连接好,如图。

image033

除了以上介绍的最常用的接口以外,Salai 2.0还增加了很多其他接口,提供给有高级定制需求的用户使用:

image034

首先是WIFI云服务模块接口。这个接口实际上比较常用,放在这里是因为比较容易画图。把WIFI模块插入这个接口之后,3D打印机就具备了联网的能力,用户可以远程监控、操作3D打印机的运行。

SD卡延长外接以及USB延长外接,是比较简单的两个接口。有些用户设计的3D打印机,不太方便使用主板上已经固定好的SD卡接口或USB接口。这种情况下,可以使用外接模块,让机器设计更加灵活。

下面是XYZ限位开关旁边的3pin限位开关连接。有些用户直接购买了带电路板的限位开关,这时就需要主板上提供包括电源在内的3pin接口。比如下图的机械限位开关和光电限位开关,都可以直接插在主板提供的3pin接口上。注意红色线对应+,黑色线对应-,蓝色线对应S,不要插反。在限位开关的3pin接口旁边,提供了3.3V/5V切换跳线。这个跳线决定了给限位开关模块供电的电压。使用时,先尝试使用3.3V电压,对于一些不能用3.3V电压的光电限位开关,可以切换为5V电压。

image035

类似地,在主板左侧还有一组开关接口。包括了自动调平限位开关,以及断丝检测光电开关连接。对于这组接口,也是同样地可以进行3.3V/5V供电切换。

Salai 2.0主板,为了允许用户外接更强大的步进电机控制板,引出了所有步进电机的四根信号线。它们分别是ENABLE使能信号,DIR方向信号,STEP步进信号以及GND地线。对于有一些电子方面技术能力的用户,可以外接这些信号线。

最后,Salai 2.0主板还提供了4个舵机接口。在一些自动调平方案中,需要使用舵机,这时候就可以使用这些接口了。

image036

Salai主板的没一个步进电机驱动芯片旁边,都有一个微调电位器(上图红框中)。这个电位器负责控制步进电机驱动芯片的参考电压,进而控制主板输出的步进电机脉冲电流大小。对于Salai 2.0来说,由于采用了DRV8825步进电机驱动芯片,因此参考电压的计算公式为:

Vref = I_TripMax * 0.5

如果你希望输出1.0A的驱动电流,则步进电机驱动芯片的参考电压应该设置为0.5V。具体的测量方法也很简单,使用万用表的电压档,黑色表笔接地(电源接口的右侧接线柱,或者USB接口的外壳,都是接地的),红色表笔接触微调电位器的顶盖,就可以测出当前的参考电压了。

如果你采用的是普通42步进电机,没有特殊的需求,可以保持出厂的设置0.5V,这个值对于大多数普通42步进电机都是合适的。

如果你用的是上一版的Salai主板,由于采用了A4988步进电机驱动芯片,上面的公式要改为(系数变为0.8):

Vref = I_TripMax * 0.8

第六节、Repetier-host的安装和测试

把所有这些接口都连好,就可以开始联机测试了。当然在测试之前,要先把Repetier-host软件安装好。还没有下载Repetier-host的朋友,从这里可以下载Repetier-host软件最新版1.6.2版(打印虎本地下载百度云下载)。

下载完成之后,双击开始安装的过程。第一个界面是选择语言。很遗憾这里面没有中文,只能是凑合用英文了。(安装完成后,软件主界面大部分都有中文)。

image039

之后一路Next下去,直到选择安装模块的页面。

image040

在这个界面下,我们建议红框内的两项,一项是Repetier-Server,另一项是Skeinforge Slicer,都不要选中。因为这两项都没有包含在安装包中,如果选中的话,会临时从互联网上下载,安装速度就很慢了。

特别值得一提的是Repetier-Server,这个3D打印机私有云服务器还是挺好用的,希望了解这个软件的朋友,可以参考打印虎的另一篇教程文章【打印虎】Repetier-Server基础图解教程

继续再按几次Next,完成整个安装过程。最后安装完成的同时,Repetier-host也同时启动起来了,如下图(第一次启动会同时载入一个演示用的模型文件,第二次开始就不再自动载入了):

image052

第一次启动Repetier-host之后,需要先对3D打印机进行设置。按下主窗口右上角“打印机设置”按钮,可以打开打印机设置对话框,如下图所示。最新版本的Repetier-host,绝大多数选项已经非常适合直接使用,只有很少的地方还需要调整。首先,是“连接”选项卡里面的通讯端口及波特率。通讯端口保持Auto通常是可以的,如果发现有问题,可以改为3D打印机实际的通讯串行口,比如COM3。波特率一定要保持初始的115200,否则会不能正常使用。

image044

然后,另一个需要调整的地方是“挤出头”选项卡。如下图。这里最关键的选项,一个是挤出头的数目,另一个是挤出头的喷嘴直径。很显然,这两个选项都必须根据实际的情况进行修改,才能让3D打印机正常工作。

image046

以上所有的配置项都调整好之后,就可以按下窗口左上角的“连接”按钮,连接3D打印机了。

image057

如果一切正常的话,“连接”按钮将会变为绿色。这时候,将右侧的窗口切换到“手动控制”选项卡,就可以进行各个步进电机、限位开关以及热床挤出头的加热测试了。

这些基础的测试项目,我们已经在【打印虎】零基础自制RepRap Prusa i3图解全攻略中做了详细的介绍,这里就不再重复了。这里我们介绍一个比较常见问题的解决,就是挤出头温度偏移的问题。当我们给挤出头设定一个温度(比如200度)进行加热的时候,有些情况下会发现挤出头温度稳定下来之后会有一个偏移,一直高几度或者低几度。这个问题通常是由于固件中初始设置的PID值是个通用值,并非最适合你的挤出头加热棒、加热铝块使用。我们可以使用固件提供的自动PID测试功能进行PID校准,经过校准之后这个问题很可能就可以解决了。

具体的方法很简单,首先在Repetier-host中打开日志记录窗口。点击工具栏的“是否记录”按钮,下方的日志记录窗口就会显示出来了。注意为了看到所有的日志内容,我们要把“记录命令”和“记录应答”两个选项打开,点击蓝色小灯让它亮起。

image043

然后在Repetier-host的手动控制界面上,输入

M303 S200 P0 X

这行命令中,S200代表目标温度为200度,P0代表测试第一个挤出头,X代表测试完成后自动将PID参数值保存到EEPROM中。如图:

image044

这行命令发送之后,在屏幕最下方的日志窗口内会看到

Info:PID Autotune start

这样自动PID测试功能就开始运行了。下图左侧箭头所指的五次温度起伏,就是整个自动PID测试的过程。当温度升降循环五次之后,系统就会自动找到最合适的PID参数值,并且将其存储在EEPROM之中了。

Kp: 5.41

Ki: 0.21

Kd: 33.99

Info:PID Autotune finished ! Place the Kp, Ki and Kd constants in the Configuration.h or EEPROM

整个过程完成后,会在日志区看到以上的内容。Kp, Ki和Kd就是PID三参数的值。没有记下也没关系,这些值已经存储在EEPROM中,不会轻易丢失了。image045

如右侧箭头所指的位置所示,当我们再次对挤出头进行加温时,就会看到温度曲线平滑流畅,并且温度可以非常好地稳定在指定温度的位置处了。

第五节、EEPROM的使用和清除

固件的设置,是一个比较有趣的话题,很多玩3D打印机的朋友,在遇到设置相关的问题时都会犯迷糊。实际上,对于某一项特定的设置,比如说X轴的步进电机分辨率,在3D打印机主板上,有三个不同的位置(也是三种不同的存储器)保存了这项内容,而它们的值还有可能不同。让我们先来了解一下这些保存设置内容的位置,以方便大家的理解。

首先,是固件配置文件(configuration.h)中的设置值。配置文件中的值,会跟随固件一起编译,之后在刷机过程中,保存在了3D打印机的静态存储区(Flash ROM)中。除了刷机之外,静态存储区的内容不会发生变动,可以认为是只读的。每次开机的时候,都是一样的值在等待着我们。

第二份设置值,保存在电可擦写静态存储区(EEPROM)。EEPROM的读写代价,比静态存储区要小。因此,3D打印机允许在刷机之后,修改设置值,而这些修改之后的设置值,就存储在EEPROM之中。每次开机,程序会先检查EEPROM,如果EEPROM中是空白的,则将静态存储区的第一份设置值复制到EEPROM之中。而如果EEPROM中已经有保存好的设置值,则程序会直接使用EEPROM中的值。有些朋友在玩3D打印机过程中可能会有这样的经验,就是明明修改了固件配置文件中的设置值,但刷机之后竟然没有发生变化。这种情况,往往就是EEPROM在捣鬼了。我们完全可以使用G-code M502 M500两条指令(指令的具体含义可以参考下面),重写EEPROM,解决这样的问题。

第三份设置,保存在内存(RAM)中。实际用户使用的值,就是内存中的值。由于内存只在加电情况下能够保持其中的内容,因此每次开机时,3D打印机会根据上面描述的逻辑,重建内存中的设置值。如果某条指令修改的是内存中的设置值,那么这也代表着这次修改是一个临时修改,下次开机这个值就会消失了。

总的来说,三份固件设置,使用的优先级是

内存 > EEPROM > 配置文件

但设置的持久性,就要反过来了。明确了解这些,特别有助于我们解决一些与设置相关的问题,也给我们使用Repetier-host提供了参考。在Repetier-host中,我们可以通过菜单项“配置”-“固件配置”,看到当前EEPROM中的各项设置值。如下图:

image050

在这里,可以直接修改设置值,并立即起作用。比如说X轴的步进电机分辨率,就可以直接在X-axis steps per mm后面进行修改。这显然比修改Configuration.h更方便。同时也如前面所述,这种修改的持久性要小于在Configuration.h中的修改。在用户清除EEPROM之后,这项改动就消失了,会恢复为之前刷机时在Configuration.h中设置的值。

在了解如何查看当前EEPROM的值之后,我们还希望知道如何清除EEPROM的值,让刚刚刷机时在Configuration.h中设置的值起作用。这个动作在Repetier-host中不太容易,没有一个按钮或者菜单项可以直接完成,而是要在“手动控制”面板上输入两条G-code指令来完成这个动作。首先输入M502,按下“发送”。再输入M500,再按下“发送”,这样就完成了对EEPROM的清除重置操作。如下图所示(图中是已经完成两条命令输入后的状态)

image061

图中的三个红框,分别是G-code输入和发送功能,M502的执行结果,以及M500的执行结果。看到这样的执行结果,说明EEPROM已经恢复到Configuration.h中设置的状态了。当然想看到这些内容,“记录命令”以及“记录应答”这两个开关一定要处于“开”的位置。

如果想对G-code有更多的了解,可以参考打印虎的原创文章【打印虎】RepRap 3D打印机G-code命令专家详解

另一种更简单的清除EEPROM值的方法,前面已经提到过了,就是使用触摸屏上的菜单“配置”-“将EEPROM恢复出厂设置”,这样就可以了。相比上面使用Repetier-host的方法,更加简便易行。

第六节、结束语

到此为止,与Salai主板相关的部分就介绍完了。如果对Repetier-host的使用还存在问题,大家可以参考我们之前写的教程【打印虎】3D打印控制软件Repetier-Host使用基础图解教程 第二版,里面详细介绍了Repetier-host的使用方法。

如果你看了我们的文章,对Salai主板很感兴趣,可以到我们的产品页面查看产品详情,产品页面的底部,是打印虎淘宝店的连接,购买主板可以到打印虎淘宝店完成。

另外,Salai主板原生配置了3.5寸彩色TFT触摸屏,使用这个屏幕,用户可以完全脱离电脑,直接操作3D打印机。对于这个触摸屏界面的使用,我们这篇文章就不介绍了,另一篇文章【打印虎】RepRap 3D打印机新一代Salai主板触摸屏使用教程对触摸屏界面进行了详细的介绍,有需要的朋友可以跳到这篇文章,了解详情。

打印虎作为国内最专业的3D打印机软件、硬件研发厂商,提供3D打印机软件、硬件研发定制服务。无论您是3D打印机DIY玩家,或者是3D打印机的生产企业,都欢迎来打印虎选购产品,洽谈合作。我们会用专业的态度加精湛的技术帮助你解决3D打印机研发中的困难,提供最优质产品和服务。希望能够得到广大用户的认同和选择。我们的联系方式可以从打印虎网站获得。祝大家玩机愉快,每天都有好心情。