月度归档:2014年12月

【打印虎】用QCAD修改RepRap Prusa i3 3D打印机框架设计图解

玩开源3D打印机的朋友,一般都听说过Prusa i3,这是RepRap.org从2005开始的开源软件、硬件3D打印机计划的最新一代设计。目前,Prusa i3已经是最广泛使用的桌面3D打印机机型。打印虎在之前的系列教程中,也都是以Prusa i3作为最主要的学习对象。如果你还没有自己的3D打印机,马上参考【打印虎】零基础自制RepRap Prusa i3图解全攻略,低成本搭建一台属于自己的3D打印机。

有些朋友,在搭建、使用了原始设计的Prusa i3之后,会发现有些设计不能满足自己需求,或者希望进一步提升特性。这时候,Prusa i3开放源代码的特征就变得非常有价值,我们可以对其进行有针对性的改进了。

那么我们该如何对我们手里的Prusa i3进行改进呢?从Prusa i3的整体设计上可以看出,这台3D打印机大量采用了标准部件。非标准的部件,主要包括两部分:一部分是亚克力板(或者铝板)框架;另一部分是3D打印的零件。对这两大部分,打印虎会分别写一篇教程,讲解如何在已有源代码(或者原始文件)的基础上,对其进行编辑、修改,进而满足自己的需求。本篇教程,我们专门讲解亚克力板的设计和改进。如果需要了解如何修改3D打印件,大家可以参考【打印虎】用OpenSCAD修改RepRap 3D打印机打印件设计图解

想对亚克力板框架进行编辑修改,首先你需要有一个2D CAD软件。这方面,虎哥我推荐大家采用QCAD,这个软件免费,开源而且使用起来比较简单,是一种不错的选择。当然,如果你已经有使用熟练的2D CAD软件,那么完全可以继续使用。这种情况下,你可以跳过讲解QCAD使用的地方,直接看我对Prusa i3框架进行了哪些修改就行啦。

QCAD的最新版本可以从这里下载(打印虎本地下载百度云下载)。下载完成之后,请大家按照软件的提示进行安装,下面的教程,我们假设大家已经安装好这个软件。需要注意的是,这篇文章并不是QCAD的使用教程,因此不会详细介绍每一个QCAD的功能。我对QCAD的介绍,都会围绕着我们的任务进行,尽量使用简单的QCAD操作命令,以完成对Prusa i3的改造作为主线。那么,我们的具体任务是什么呢?

在第一节开始之前,先给自己做个广告。打印虎日前已经开始销售RepRap Prusa i3 3D打印机套件,如果你自己或周围的朋友对搭建3D打印机感兴趣,不妨选择打印虎。我们提供的元件,经过严格筛选,品质优良。3D打印机的关键部件都做了专门的优化,包括采用了优质步进电机、全铝挤出头、铝基板热床以及改进的梯形丝杆Z轴,让你的3D打印机达到更高的精度,并且经久耐用。不光硬件质量有保障,打印虎还特别提供免费的固件升级服务,从购买之日开始,打印虎承诺每季度一次,至少四次固件升级,给你的3D打印机提供无限助力。另外,打印虎还提供最好的3D打印机技术支持服务,与顾客做朋友,让你没有后顾之忧。如果想了解更多,请访问我们的产品页面http://www.dayinhu.com/products

第一节,需求分析

在观察了几种派生的RepRap Prusa i3设计之后,我认为Prusa i3 improved for laser cut(为激光切割准备的Prusa i3改进型),是最适合的工作基础。这个文件,由作者上传到Thingiverse网站共享。大家可以从这里下载(打印虎本地下载百度云下载)。下载、解压Zip压缩包之后,我们可以看到一组文件。这组文件大部分都是3D模型,用于3D打印制造3D打印机零件用。只有两个DXF文件是用于激光切割亚克力板准备。再仔细观察这两个文件,就会发现它们只是切割零件的排布顺序不同而已。因此我们只使用其中一个文件,Prusa_i3_Frame_V2_Laser_Cut_Layout.DXF。我把这个文件复制了一份,改名为Prusa_i3_dayinhu.DXF,并用QCAD打开这个文件:

image001

从这张图上我们可以观察到,整个切割设计,包含了12个零件。由大到小来看,门型主框架1块;三角支撑板2块;热床支撑板1块;Z轴顶板2块;Z轴步进电机小支架共6块。

而虎哥我的需求,是这样的:

(1)     这个设计的Y轴运动空间不够大,因此需要增加三角支撑板宽度;

(2)     Y轴的步进电机端,我希望使用一个亚克力板部件,代替目前的打印件;

(3)     我希望将Z轴传动部分改为运动更流畅的M8梯形丝杆,而梯形丝杆螺母需要比较大的安装控件,因此需要增大步进电机主轴和光杆之间的距离;

(4)     现在的热床支撑板使用3D打印件与直线轴承连接,我希望改为更简单的直接连接直线轴承方式;

(5)     现有设计,所有亚克力板之间的连接处都使用了四方螺母,我希望修改设计,使其可以适用于更常见的六边形螺母;

当然,这些需求并不是我盯着这个亚克力板的设计图纸凭空想出来的。实际上,这些需求都是我在搭建、使用Prusa i3 3D打印机的过程中,由实际问题引发的。同时,为了解决这些需求,也需要反复试验。虽然我们下面主要讲的都是如何修改这个设计图,但你要知道,这些内容只是一项特定的技术,而并不是我的思考问题、解决问题的过程。想要学到更深入的内容,还需要多动手实践,并在实践中勤于思考。

第二节,放大螺母安装空间显示

好,废话少说,我们下面就开始干活了。因为考虑到大家对QCAD软件的使用并不熟悉,需要一个由浅入深的过程,因此我的修改从最简单的一项需求,也就是上面我列出的需求(5)开始做起。经过我的测量和试验,支持六边形螺母对图纸的改动很小,现有的螺母安装空间,宽度增大1mm就可以了。当然,图纸上螺母安装空间比较多,每一个都要进行同样的改动。下面我们正式开始做。

我们上来遇到的第一个问题,就是每个螺母的安装空间,在整个图面上是一个很小的局部。在初始状态下,我们很难有效的选择需要修改的线段,并观察到修改的结果。因此,我们需要先放大一个螺母的安装空间显示,然后再进行具体的修改操作。

让我们以整个图面的最左上角的位置为例,进行操作。把鼠标移动到图面的左上角位置,然后将鼠标滚轮向上推。这时,你应该能够看到,整个工作空间以鼠标位置为中心,进行了放大操作。完成结果如下图所示:

image002

可以看到,整个图面的左上角清晰的展示了出来。这时,我们再进行下面的操作,就方便的多了。如果你的显示效果与我这里不同,请向反方向推动鼠标滚轮,以实现缩小操作,然后移动鼠标位置,再次尝试放大。在进行下一步操作之前,请多试几次此操作,以达到比较熟练的程度。

好了,这里出现了一个新的概念,“视口(Viewport)”。首先需要大家理解的,是刚才我们的所有操作,虽然使图纸在屏幕上产生了大小变化,但是,图纸所表达的内容并没有任何的改变。这就像我们使用不同比例尺的地图,虽然看起来大小不同,但地图表达的都是完全一样的意思。另一方面,虽然我们图纸的大小可以任意的缩放(比画在纸上方便多了),但显示器的大小的固定的。当我们把图纸放大之后,虽然图纸上的细节非常清晰,但我们就不能看到全貌了。这样,我们工作用的显示空间,就叫做“视口”,在“视口”之外,还有很多暂时我们看不到的图纸部分。

如果你在操作过程中,出现了失误,无法再调整回最初的状态,也不用着急。在键盘上键入Z, A两个字母,或是选择菜单的View – Auto Zoom,图面就恢复到最初的状态了。

搞明白缩放操作之后,我们再介绍一下滚动条。在视口的右侧和下侧,分别是垂直滚动条和水平滚动条。用鼠标拖放这两个滚动条,可以在保持现有显示比例的情况下,查看模型的不同部分。你可以试试看。

当然,滚动条只是移动视口的一种方法。在编辑过程中,另一种非常方便的方法,是按下键盘Ctrl键+鼠标左键的同时,拖动鼠标。这时,视口会随着鼠标的移动而移动。虽然最初看上去这个方法比使用滚动条麻烦,但真正使用起来就会发现,这个方法其实更容易和其他操作配合起来。虎哥非常建议大家一定要掌握这个方法。

缩放视口和移动视口这两个操作,在QCAD中是非常基础的操作。对图纸的编辑工作中,我们会极其频繁的使用这个功能。以至于我在后面不能再详细的描述这两个动作,只能说“请大家把视口移动到某位置处”。因此,需要大家对这一组操作非常熟练。如果你感觉还不太熟,可以在这里再练习一下。下面我们要继续前进了。

第三节,编辑一条线段

利用刚才我们展示的放大视口功能,继续放大上一小节的视口内容,直到我们得到一个大大的螺丝安装孔。用鼠标单击这个孔螺母安装位左侧的线段,线段变为暗红色,并带有蓝色的控制点,代表它已经被选定。如下图所示:

image003

这个时候,我们在之前一直忽略的,在QCAD主窗口之外的属性编辑窗口(Property Editor)里面发生了变化。如下图所示:

image004

如果你找不到这个窗口,很可能是在此之前已经被关闭了。可以通过菜单View – Property Editor将它重新打开。

虽然CAD图纸也是一张图,但和Photoshop这样的工具最大的区别在于,CAD图纸需要精确的标注和修改。因此,属性编辑窗口,就是未来我们经常使用的一个工作区了。

我们这一步的目标,是把这根线的长度增加1mm。从现在的大约2mm,增加到大约3mm。我们先看看直接在属性编辑窗口内修改长度会如何。

image005

这时,左侧主窗口的内容变成了这样:

image006

看起来和我的希望有点差别。我还是希望这条线段上下分别增加0.5mm。对称修改,可能引起的问题也会少些。那么我再次修改,这次先修改启动点的Y轴坐标,再修改长度:

image007

这次看起来可以了:

image008

好了,现在你已经学会了最基础的调整线段两端坐标的方法了。理论上,所有对线段的修改都可以用这样的方法完成。对其他元素,比如圆型的修改,也可以通过类似的方法,修改圆心坐标和半径搞定。但如果所有的操作都这样做,未免过于麻烦。QCAD还提供了很多方便快捷的编辑方法。现在,我们来调整上下两根小线段。

第四节,调整一个螺母安装空间

这两根线段,调整前后长度不会发生变化。因此,我们可以使用移动命令完成。先选定上面的小线段,在键盘上键入M, V两个字母,或是选择菜单的Modify – Move, Copy,进入移动模式。进入移动模式时,菜单栏最左侧,会出现这样的提示:

image009

出现这个图标,就代表我们已经在移动模式中了。把鼠标移动到横线竖线交叉点处,屏幕上会出现Intersection字样,代表QCAD知道,现在我们想选定的,就是这个交叉点。单击鼠标,选定这个点。这是我们进入移动模式之后第一次单击鼠标。

image010

再把鼠标移动到竖线的端点处。QCAD提示End字样,代表它知道我们想选定的,就是这个端点。再次单击鼠标,选定这个点。

image011

这是我们第二次在移动模式下点击鼠标。点击鼠标的时刻,QCAD会弹出一个对话框,如下:

image012

这里是让用户选择如何处理原始位置处的线段。删除原始线段,代表一个移动操作。保持原始线段,就是一个复制操作。我们当然选择删除。直接按下确定按钮。

image013

这样,这条水平线段也完成了编辑工作,移动到了目标位置。

回顾一下,我们在整个移动过程中,点击了两次鼠标。第一次,指定一个原点,第二次,指定一个目标点。实际上,这两个点构成了一个数学上的向量。被移动的对象(在这里是一条线段),就以这个向量的方向进行平移。扩展一点,这个移动向量的指定,不一定非要在原始对象上。可以以完全不相关的另一处对象上的点为基础来指定。这个功能很有趣,如果使用得当会非常方便,大家可以试试。这里就不给例子了。

使用刚才给出的两种方法,直接修改属性编辑器,或者对线段进行移动,完成剩余的所有线段的调整。完成之后如图所示:

image014

这样,我们就完成了一个螺母安装空间的调整。

第五节,调整所有的螺母安装空间

完成了亚克力主框架左上角的螺母安装空间修改之后,我们下一个目标是亚克力主框架右上角的那个。这个螺丝、螺母安装空间,方向和第一个一致,因此我们完全可以用类似刚才的移动功能完成。唯一的不同,是我们这里希望用复制的方式。

首先,把视口移动到主框架右上角。使用从左上角到右下角拖拽的方式,同时选定多条线段。这个动作可以参考下图的绿色方框。这里要注意的是,QCAD选定区域的时候,从左到右画框和从右到左画框的行为是不一致的。具体有什么不同,大家可以多试几次,自己得出结论。

image015

拖拽动作完成之后,会变成下图的样子。仍然是暗红色表示选定的线段,蓝色表示控制点。

image016

因为我们的目的,是把刚才那个已经编辑好的对象,复制到这个位置。因此右上角原有的对象就可以删除了。按下键盘上的Delete键,删除所有选定的对象。如下图:

image017

好了,这时候右上角的位置变成了一个缺口。等待把左上角的内容复制过来。把视口移动回主框架的左上角,用刚才的方法选定所有的相关线段,并再次执行移动命令(键入M, V两键或使用菜单完成)。移动命令中,第一个需要输入的点,使用这个螺丝、螺母空间的左上角的点。如图:

image018

移动命令需要输入两个点。这里,我们需要把视口移动嵌入在对象移动命令之中,先把视口移动回主框架的右上角。然后再点下对象移动命令的第二个点。如下图,这个点要点在缺口的左侧点上,对应于第一个点的位置。

image019

这时会再次出现选项对话框。这次与上次不同,要选择保留原始对象(Keep original)。按下确定按钮就可以了。

image020

这样,主框架右上角的螺丝、螺母安装空间的修改就完成了。

image021

有了前两个修改经验,后面的就非常简单了。只是有些地方,这个安装空间的方向不同。这种情况如何处理呢?比如说,整个图面最左下角的位置处,三角支撑板有一个向下开口的螺丝、螺母安装空间。对于这个问题,我们首先使用刚才的方法将一个已经改好的对象,复制到附近的一个空白处。如下图:

image022

图中空白处的对象,是已经修改好的。我们先用鼠标拖拽的方式,选定这个对象。然后,我们使用键盘命令R, O,或者菜单Modify – Rotate,对其进行旋转操作。旋转操作首先需要输入旋转中心。我们用鼠标单击这个对象右上角开口处的点,以这个点作为中心旋转。鼠标单击完成后,会出现对话框,询问旋转角度,以及是否保留原始对象。如下图:

image023

我们选择删除原始对象,并旋转180度,点确定按钮完成。这时,我们就得到了下图这样的状态:

image024

后面的事情都简单了,使用我们之前的方法,进行选定、删除、移动、复制等等一系列手段,就可以把所有的螺丝、螺母安装位置都修改为合适的形状了。

最后,提示一下,整张图面上,一共有20个类似的安装空间。千万不要漏掉了。

第六节,修改热床支撑板的连接方式

从第二节到第五节,我们详细描述了对螺母安装空间的修改方法。大家如果跟着做下来,也会对QCAD有一个初步的了解。与其他CAD软件类似,QCAD这个软件功能非常多,逐一介绍不是我们这篇教程的主要目的。因此后面几项修改,我们只介绍修改的原因和参数,具体的操作就不再详细列出了。我想如果有这样需要的朋友,一定可以参考QCAD的帮助文档学会的。

在这一节中,我们希望解决最初的需求(4),修改热床支撑板的连接方式。经过简单观察,就可以发现,在我们当前的设计中热床支撑板和Y轴之间,是用3D打印件加螺丝的方式连接的。如下图所示。

image025

实际上,这个位置还有另一种更简单的连接方式,在支撑板上留一个圆角方形口,用小扎带连接支撑板和轴承。

image026

我个人更喜欢第二种连接方式,而这种方式的设计图,其实已经存在于原始Prusa i3的文件中。我只需要将其复制到现在这张图中,就可以了。

首先找到原始设计的文件。https://github.com/josefprusa/Prusa3/。也可以从这里下载(打印虎本地下载百度云下载)。用QCAD打开old_single_plate\src\frame\6mm\Prusa3ALU-FREZOVANY-v4.dxf文件,可以看到,我希望要的支撑板样式,已经在其中了。下面一个问题,就是如何在两个文件之间进行复制操作。

首先,在我们正在编辑的文件中,删除原有的热床支撑板:

image027

然后,我们打开Prusa3ALU-FREZOVANY-v4.dxf文件。两个文件都打开之后,我们会注意到主窗口中的标签页。目前活跃的标签页是Prusa3ALU-FREZOVANY-v4.dxf。等一下,我还会切换回第一个标签页Prusa_i3_dayinhu.DXF。

image028

这个文件中的内容是分层(Layer)的,而且很多层都是锁定的。锁定状态,可以防止用户无意间修改到不应该修改的内容,但也会使我们需要的复制操作不能进行。首先,我们需要解除这些层的锁定。如下图,在主窗口右侧的层列表(Layer List)窗口中,点击这些锁图标。图标变为灰色时,代表目前没有锁定。

image029

这时,我们就可以在主窗口内,选定希望复制的部分。

image030

按下Ctrl-C键,进行对象复制操作。这个操作前面我们没有介绍过,但与对象的移动操作非常类似。一个明显的不同,在于这个操作不需要指定第一个点,第一个点自动被设置在对象的中心点上。下面按下Ctrl-V进行粘贴时,我们只需要指定第二个点,也就是目标对象的中心点,就可以了。

切换到目标模型的工作窗口,按下Ctrl-V。在合适的位置按下鼠标左键,完成复制操作。因为QCAD可以连续复制多个对象,这时还需要按下ESC键,退出粘贴状态。

下图是完成之后的样子。请大家注意热床支撑板与轴承连接的部分,已经变成一个圆角矩形开口了。

image031

在实际亚克力板切割、组装之后,我发现了一个问题:由于热床支架与Y轴框架的连接方式的改变,热床之间的高度稍稍变低了一点,进而导致固定热床和热床支架的螺丝,在Y轴上运动时,会撞到主框架板上。解决这个问题也很容易,只要把主框架上会碰到的部分变矮一点就可以了。下图展示了主框架左下角修改后的结果,右下角也要同样修改才行。

image032

第七节,修改Z轴传动部分定位孔

在虎哥我对Prusa i3 3D打印机的改造中,参考了一些已有的Prusa i3设计。其中,对Z轴的修改,是我认为比较关键的一项。Prusa i3的原始设计中,Z轴使用5mm丝杆,驱动固定在X轴两端的M5螺母。很显然,5mm丝杆以及M5螺母,原本并不是用于传动设计,在这里如此应用,还是非常勉强的。下图所示,就是Prusa i3的原始设计,红色箭头指向了M5螺母,这个螺母是从下方嵌入到X轴步进电机端3D打印塑料件中的。

image033

而更加理想的方式,是使用梯形丝杆,配上专用的M8铜质螺母。如下图所示:

image034

采用这样的配置,Z轴运动会更加顺滑,也更加符合机械设计的标准。

那么问题就来了,梯形螺杆配套的铜质螺母,是比较大的一个零件,如果想用这样的设计,必须要对X轴的两端3D打印件进行修改。增加丝杆和光杆之间的距离。我们这篇教程中不涉及3D打印件的修改,如果对此有兴趣,可以参考【打印虎】用OpenSCAD修改RepRap 3D打印机打印件设计图解。修改好了3D打印件之后,对应地,Z轴底端和顶端的亚克力部件,也必须做相应的修改才行。

具体来说,就是步进电机的主轴,与轴承所在的光杆之间,距离要由原来的17mm,改为20mm。如下图的上方零件所示。

image035

但很不幸,如果简单的修改,光轴会和小三角支撑板的连接部重叠。很明显这是不行的。为了解决这个问题,我们还需要修改小三角支撑板的固定孔的位置。经过试验,我发现只要把螺丝孔和下方的方孔向下移动5mm,把上方的方孔向上移动5mm,所有的问题就都解决了。如图:

image036

当然,对应的小三角支撑板也要相应的修改。Z轴顶部的亚克力部件也要相应的修改。这些都不要忘记。

小三角支撑板变成了这样(另外两个也要同样修改):

image037

Z轴顶端的亚克力板变成了这样(另外一个也要同样修改):

image038

这里还需要专门提一下,Z轴的顶板,因为两个孔的方向,并不是在X轴和Y轴的方向上,光轴圆心移动的位置,没法口算出来了。我们需要用初中数学学到的方法计算一下,光轴的孔沿步进电机丝杆到光轴的方向延伸3mm之后的圆心位置。得到新的光轴孔圆心位置之后,别忘记用勾股定理验算一下,丝杆孔圆心到光轴孔圆心之间的距离,是否正好是20mm。

经过真实的亚克力板切割、组装之后,发现这个设计是可行的,但还有一个小问题:那就是现在我们有两组不一样的小三角支撑板。一组是用于内侧,没有修改安装口的;另一组是用于外侧,修改了安装口。这样的情况,不论是在切割,还是安装阶段,都很容易搞混,提高了出错的概率。很明显,这不是一个好的工程实践。为了避免混淆,我们干脆把左右两边的小三角支撑板都改为不对称的安装口设计。这样就不会产生搞混问题了。

最终,我们的Z轴底端的亚克力板变成了这样:

image039

可以看到,我在对称方向上也加上了一个光杆安装孔。这是为了避免由于用户分不清方向导致安装时出错的容错设计。

第八节,增加Y轴步进电机的支撑板

Y轴步进电机的固定,在原本的Prusa i3设计中,是一个打印件。但其实这里完全可以用一个亚克力板切割件代替。只要我们把各种机械参数都搞清楚,就很容易做到。

首先是步进电机方面,如图。

image040

从图中我们可以看出,步进电机的四个角,都是由M3螺丝固定。四个螺丝孔排列为正方形,边长31mm。轴的突起圆台,直径在22mm。

3D打印机的Y轴框架方面,我们知道所有的支撑梁,都采用了M8螺杆。从3D打印件的设计文件(.scad)中,我们也很容易可以发现,两根支撑梁之间的间距,是20mm。

有了这些信息,这个亚克力部件就可以很容易绘制出来。如下图:

image041

图中,用于配合步进电机轴的突起圆台的大圆,直径23mm。用于穿过M8螺杆的中圆,直径8mm。用于穿过M3螺丝的小圆,直径3.2mm。步进电机的轴,与支撑梁上方梁的圆心高度一致。M8的孔和M3的孔之间的横向距离,只要保证在安装了步进电机的情况下,M8螺母可以顺利转动,就可以了。

第九节,三角支撑板Y轴方向延长

最后一项需求,是把三角支撑板在Y轴方向延长。根据我的实际测量,这块三角支撑板,再增加50mm的长度,就可以支持3D打印机在Y方向全尺寸利用20*20的热床了。这样,两块三角支撑板最后被我修改为这样的形状:

image042

除了三角支撑板本身要在Y方向延长之外,我们还需要相应的延长一些Y轴的安装槽口。同时,我发现原本不太容易搞定的电源和Melzi电路板,也都有相应的空间可以设置安装孔了。真是一举两得。

这里留一个问题给大家:虎哥我是如何获得电源和Melzi电路板的安装孔距离的?请大家自己思考,如果实在想不出来,可以加我QQ我悄悄告诉你。

第十节,结束语

到此为止,所有的亚克力板方面的修改已经完成,这个设计文件,可以送去切割亚克力板了。这篇教程,虽然整体上是以我们最初的需求为导向写成的,但如果你认真做下来,应该已经初步掌握QCAD的操作,并且有信心做出自己的进一步改进了。当然,也可以下载打印虎已经修改完成的版本Prusa_i3_dayinhu.DXF直接使用(打印虎本地下载百度云下载),或者在上面进行进一步的修改。

回顾一下,我们这篇教程中所需的文件都包括:

文件名 描述
qcad-3.7.1-win-installer.exe QCAD安装包
Prusa_i3_Improved_for_laser_cut.zip 为激光切割准备的Prusa i3改进型源文件包
Prusa3-master.zip 原始设计Prusa i3源文件包
Prusa_i3_dayinhu.DXF 打印虎修改的Prusa i3亚克力板切割CAD设计文件

所有的这些软件包,都可以在这里下载到(打印虎本地下载百度云下载)。

大家如果对修改Prusa i3 3D打印机的设计感兴趣,既可以参考我们这篇文章,以原始的Prusa i3设计为基础进行修改,也可以在虎哥我已经完成的基础上再进一步。按照Prusa i3 3D打印机发布的GPL v3的规则,对其所有的改动,都会继续保持开源。如果大家对GPL规则不够熟悉的,可以参考wikipedia上面的相关主题

当然大家也知道,国内有不少做3D打印机的公司或者个人,并没有遵循这样的规则,做了一点点改进,就把源代码藏起来,只是售卖成品。如果大家是利用自己的资源,从头开始研发,这当然无可厚非。但在别人的成果基础上做开发,而不遵守别人预先设定的规则,这显然是不合适的,虎哥决意不做这样的事情。从第一天起,打印虎就定下了自己的标准,不仅崇尚开源精神,而且完全遵循GPL开源规则。希望能够为国内的开源3D打印机领域带来一股新鲜空气,同时也希望能够得到广大3D打印机爱好者的支持!打印虎愿意和大家一起贡献自己的智力,让开源社区更加繁荣,让知识传播更加容易!

祝大家玩机愉快,每天都有好心情。如果有任何问题,请

联系打印虎 QQ 2404959972

 

【打印虎】用OpenSCAD修改RepRap Prusa i3 3D打印机打印件设计图解

玩3D打印机,特别是桌面级3D打印机的朋友都知道,3D打印机里面,有一些关键的部件,是靠3D打印技术设计、制造的。可以说,3D打印机是目前真正深入应用了3D打印技术的产品,让3D打印技术有了一定的用武之地。

最近打印虎希望改造一台自己的RepRap Prusa i3 3D打印机(搭建过程详见【打印虎】零基础自制RepRap Prusa i3图解全攻略),这时候问题就来了。3D打印机中使用的大部分标准零件都比较好办,直接到市场上采购就可以了。用作框架的亚克力板,也可以使用CAD软件进行改进,再利用激光切割机进行切割。如果对亚克力板的改造比较感兴趣,可以参考【打印虎】用QCAD修改RepRap Prusa i3 3D打印机框架设计图解这篇文章。还剩下一类零件,就是采用3D打印技术生产的3D打印件。我们今天要讨论的主要内容,就是如何改进这些3D打印件。

类似于其他的机械零件设计工作,设计、修改、查看Prusa i3的3D打印零件,也需要CAD软件的辅助。同时,Prusa i3 3D打印机是一个开源硬件、软件设计,它不仅为全世界的技术爱好者提供了一个很好的3D打印机设计方案,而且需要吸引开源社区的回馈,贡献力量帮助其发展、壮大。因此,Prusa i3的设计者并没有基于售价昂贵的工业级CAD工具进行开发,而是采用了一个开源、免费的CAD工具,OpenSCAD。

OpenSCAD的官方网址,在http://www.openscad.org/。在官网的页面上,可以看到它的简单介绍。简单来说,OpenSCAD开源、免费,是一个面向机械零件设计的CAD软件。它与其他CAD软件不同点在于它不是一个交互式的CAD建模工具软件,而是采用一种脚本语言定义模型的形状。这样的好处,是用户可以完全控制3D模型的所有参数,并且特别有利于使用源代码管理工具,对3D模型的历史修改进行记录。但也是因为这样的特征,它不适合进行3D艺术类型的创作,如果有这方面的需求,还是应该使用一个交互式的建模工具。

可能大家都没怎么听说过OpenSCAD,更不会使用,这没有关系。我们这篇文章,与打印虎的系列文章采用了同样的思路,就是以我们的一个实际需求为例子,介绍OpenSCAD的使用方法。这样,只要你跟着我们的例子一步一步做下去,就不仅学会了OpenSCAD的基础使用,而且还明白了如何对你的Prusa i3进行改进。从此,不管你对你的3D打印机有任何不满,都可以自己动手不求人了。

做事情的第一步,我们需要准备好工作环境。OpenSCAD软件尺寸不大,只有8M多(打印虎本地下载百度云下载)。下载完成后,按照软件提示进行安装即可。下面的教程,会假定大家已经安装好了这个软件。如果你已经准备好了,我们就要开始对Prusa i3 3D打印件的改造工作了。

在我们开始动手之前,先打个小广告。打印虎日前已经开始销售RepRap Prusa i3 3D打印机套件,如果你自己或周围的朋友对搭建3D打印机感兴趣,不妨选择打印虎。我们提供的元件,经过严格筛选,品质优良。3D打印机的关键部件都做了专门的优化,包括采用了优质步进电机、全铝挤出头、铝基板热床以及改进的梯形丝杆Z轴,让你的3D打印机达到更高的精度,并且经久耐用。不光硬件质量有保障,打印虎还特别提供免费的固件升级服务,从购买之日开始,打印虎承诺每季度一次,至少四次固件升级,给你的3D打印机提供无限助力。另外,打印虎还提供最好的3D打印机技术支持服务,与顾客做朋友,让你没有后顾之忧。如果想了解更多,请访问我们的产品页面http://www.dayinhu.com/products

第一节,需求分析

经过我的仔细研究和多方对比,我最终决定,以Prusa i3的一种改进型Prusa i3 vanilla (网址在https://github.com/josefprusa/Prusa3-vanilla)作为我的工作基础。这组文件,大家既可以从原始网站下载,也可以从本地下载(打印虎本地下载百度云下载)。下载、解压Zip压缩包之后,我们可以看到两个文件夹,一个是distribution(分发用),里面保存了所有完成的.stl文件。想要做3D打印的朋友,直接拿这个打印就可以了。另一个文件夹是src(源代码),里面的一组文件,除了一个.dxf文件(用于激光切割的平面CAD设计)之外,剩下的都是.scad文件。这些.scad文件,就是用于OpenSCAD的源代码了。大家都知道,如果只有.stl文件,虽然是可以打印的,但要改造起来就有难度了。有了.scad文件,对3D打印件的改造就容易多啦。

我把这组.scad文件复制了一份,放到了自己的文件夹中,然后双击x-end-motor.scad,我们来看看Prusa i3中最复杂零件的情况吧。

image001

双击x-end-motor.scad之后,出现了OpenSCAD的主窗口。窗口分为三个主要的区域。左侧是代码区,展示了正在处理的OpenSCAD脚本代码。我们可以直接在其中对代码进行编辑。右下是信息输出区,所有的OpenSCAD的输出信息,都会列在其中。未来我们会对脚本代码进行修改,如果出了错,会在这个区得到提示。认真研究出错提示,对快速解决问题是很有帮助的。最后,右上角是3D展示区。由于CAD算法很复杂,3D计算需要不少时间,因此不能实时展示用户对代码的修改,程序刚刚启动的时候,是一片空白的状态。

想看到3D效果展示,也不难。这时候,我们按下F6键,就会在提示栏出现一个进度条。等一会,当进度条前进到100%的时候,我们就可以在3D展示区看到完整的零件模型了。这时候,我们可以用鼠标右键拖放对视口进行平移操作,左键拖放对视口进行旋转操作。还可以通过菜单View – Show Axis展示坐标轴。当我们把零件调整到一个合适观察的位置后,我们可以看到窗口变成了这样:

image002

了解了我们的工作基础之后,就需要看一下我们的目标了。首先还是上图,这是我在完成了所有的修改之后,x-end-motor的样子:

image003

实际上,打印虎对这个零件做了不少的改进。主要的改进有

(1)     Z轴丝杆的安装位,由原来的M5丝杆,改进为梯形丝杆。这个改进增加了Z轴的稳定性,同时安装位要比原来大了不少。

(2)     X轴步进电机安装位,从原来的三个螺丝位的不封闭圈,改为了四个螺丝位的封闭圈。同时,为了让顶部很长的悬空部分能够顺利打印,增加了两个支撑板。

(3)     给X轴光轴增加了压力释放缝。更加便于X轴光轴的安装。

必须说明的是,这些需求,并不是凭空出现的,而是我在搭建、使用Prusa i3的过程中,由实际的问题引发的。同时,为了解决这些需求,也需要反复试验。虽然我们下面主要讲的都是如何修改OpenSCAD源代码,但你要知道,这些内容只是一项特定的技术,而并不是我的思考问题、解决问题的过程。想要学到更深入的内容,还需要多动手实践,并在实践中勤于思考。

第二节,源代码分析之一,bearing.scad文件

上一节我们已经把对Prusa i3 3D打印机的打印件的修改需求列清楚了,那下面具体该从何入手呢?很明显,想对3D打印机的打印件进行改进,就需要懂一些OpenSCAD。能读懂目前已有的代码,是最基础的一项要求。下面,我们就用x-end-motor.scad这个模型文件作为例子,一条一条语句学习。很快你就会发现,看似晦涩难懂的语句,其实相当容易掌握。

image004

源代码的第一段,并不是真正的脚本语句,而是一些注释信息。和很多种编程语言类似,注释信息是用两个斜线符号开始的一行。编辑器还很贴心的用绿色字体显示,以示区别。这些注释信息,说明了这个文件的内容、版权信息(GNU GPL v3)、作者以及相关信息的网址。这些内容,对于帮助我们理解源代码,是很有帮助的。接下来,是这样的一行:

image005

这一段只有一句话,是一条use语句。Use语句的作用,是引入另一个.scad文件。基本上,我们可以认为,就是把另一个.scad文件的全部内容,嵌入到use语句的位置处。既然这里引用了x-end.scad,我们就必须要看一下这个文件了。打开x-end.scad,一看不要紧,开头又是一行use语句。这次,被引用的文件,是bearing.scad。这样,我们要处理的就不是一个文件了,而是三个文件组成的一个文件组:

image006

这下,我们要先从bearing.scad开始了。深呼吸一口气,打开bearing.scad,并按下F6键计算3D模型之后,可以看到这样的内容(手工调整角度之后):

image007

容易发现,这其实就是x-end-motor中,垂直的容纳LM8UU轴承的管道。因为与LM8UU轴承的配合,是这套打印件的一项重要内容,因此不论是这样垂直的轴承托架,还是其他零件中使用的水平的轴承托架,都被归纳到了bearing.scad文件中。

我们还是集中于我们的任务,只看bearing.scad文件中与垂直托架相关的部分。其他部分有需要的朋友请自己研究。这样一个简单的零件(部分),首先定义了轴承的外径:

image008

使用卡尺测量,或者找一下资料,都能够容易得知,LM8UU的外径是15mm。在这里使用常量bearing_diameter表示。

image009

然后,定义了托架的壁厚3mm,使用常量thinwall表示。那么。这个零件总的直径,就是LM8UU的外径加上两个壁厚,这个常量保存于bearing_size之中。到此为止,都是一些常量定义,很容易懂。下面就要稍微复杂一点了。

image010

这一段代码,首先使用module定义了一个模块。这个模块的名字叫做vertical_bearing_base。这种模块,类似于编程语言中的函数。这里只是定义,如果后面没有人使用它,是不起任何作用的。那么,这里定义的这个函数,是什么作用呢?

新开启一个空的OpenSCAD,把前面的常量定义,以及这个模块中的一行(cylinder开头的一行),抄写过去,并按下F6键,可以看到:

image011

这样,我们就知道了,cylinder这一行的作用,就是建立一个高度为58,半径为bearing_size/2的圆柱体。注意图中,这个圆柱体以原点(0, 0, 0)作为底面的中心。$fn的作用,是说明这个圆柱体由多少个平面拟合而成。可以看出,90个平面拟合的圆柱体,已经非常圆了。这里,大家可以任意修改这几个值,看看结果会有什么样的变化,以加深对这条语句的理解。

下面再加入原来模块中的另一语句:

image012

这条语句,分为了两个部分。有了刚才的经验,就容易理解,后面一部分,就是建立一个立方体。这个立方体的尺寸,X方向是圆柱半径+4,Y方向是圆柱直径,Z方向也就是高度仍是58。最后的center=true参数,说明我们要把这个立方体的中心,放在原点(0, 0, 0)的位置上。

如果只有这部分,很明显圆柱和立方体两个部分是无法匹配的。但最前面的translate语句起了作用。这个语句只对同一行中的cube起作用,具体的作用,是在3D空间中的一个平移。这个平移,使立方体处于了正确的位置上。再配合上圆柱体,可以得到这样的结果:

image013

很明显,这就是我们所需要的零件的基础了。再取出不需要的部分,就可以得到所需的零件。仍然与前面一样,希望大家调整每一个参数,观察图中所起的变化。这非常有助于我们快速学习和掌握这种建模方法。熟练了之后大家就会发现,这种方法相比于交互式的建模方法,更加精确和可靠。

基础有了,中间的空洞部分如何生成呢?很简单,继续看bearing.scad文件的下一段:

image014

这里,又定义了另一个模块。这个模块也是两行。我们类似于上面的方法,我们建立一个新的工程,把这常量定义和这两行代码提出来,单独看看:

image015

仔细阅读一下就会明白,第一行代码,建立了一个高度为62,直径为15的圆柱体。第二行代码,建立了一个细长的立方体,并旋转了一个特定的角度。使用rotate函数,旋转角度的方法,是我们第一次见到。这个函数也很简单,只有一个参数,就是沿着x, y, z轴旋转的角度向量。在这个例子里,立方体沿着Z轴旋转了-70度。两行效果叠加,就形成了图中所示的结果。

看起来虽然已经明白,这第二个模块里面的内容,就是被切除的部分。但具体如何做到了切除,还要继续往下看代码。继续看bearing.scad文件:

image016

这个文件的最后,是一个difference函数。从名称也可以看出,这个函数完成了我们所需要的“减法”操作。需要注意的是,在difference函数的大括号里面,完成了对以上定义的两个模块的引用。到此为止,垂直轴承托架部分就完成了:

image017

第三节,源代码分析之二,x-end.scad文件

看完了bearing.scad文件,我们已经得到了一个垂直轴承托架。下面,我们继续第二个文件,x-end.scad。由于X轴步进电机端和X轴惰轮端有很多共同需要用的公共组件,因此设计者把这部分内容抽出来,形成了x-end.scad文件。这个文件,经过3D渲染之后的样子,是这样的:

image018

可以看出,这里包含了除了固定步进电机的部分的X轴步进电机端的所有部分了。下面我们就开始分析这个源代码文件。分析的方法与上一节类似,我们会把每个模块、每一行单独取出来,观察它的作用效果,就可以知道这一行的作用和意义了。因为我们已经有了些基础的经验,所以这一节我们会加快一些速度进行介绍。

首先是x_end_base模块。在观察这个模块的工作方式时,我们不仅需要在一个空白的.scad文件中先定义好常量,而且还需要把bearing.scad中预定义的两个模块,也一起复制进来。最后,放入x_end_base模块中的内容:

image019

可以看出,这里先调用cube函数,定义了一个大的高度为58的立方体,再调用预定义的vertical_bearing_base模块,加入垂直方向的轴承托架的基础部分。然后,使用cube函数和cylinder函数,完成下方的Z轴丝杆固定装置的基础定义。

这里需要注意的是,cylinder函数出现了不同的用法。这个函数除了能够定义“圆柱”之外,还能再$fn取6的时候,方便地定义六边形。

这样,通过组合一系列简单的3D几何形状,我们就得到了这个零件的基础。与上一节的方法类似,这里同样是要靠difference函数,来实现零件内部形状的切除。

下面的模块x_end_holes比较长。它整体都是在做零件内部形状的定义。为了清晰,我们把这个模块的内部再分成几个部分,单独讲解。首先,第一行很简单,就是调用了预先定义的vertical_bearing_holes()函数,把垂直方向的轴承托架内部形状定义出来:

image020

这部分之前我们已经测试过了,就不再次测试了。下面一段,需要整体处理。这一段定义了同步带运行所需的空间。包括主体的方形孔、主方形孔四个角的倒角以及为了释放压力所添加的缝隙。如下图所示:

image021

这里需要注意的是,这段代码,包括了一个difference函数,用于四个倒角的处理。再想到这段代码本身,就是在定义一个孔洞,因此未来将会被包含在另一个difference函数中。这清晰的说明了,difference函数是可以嵌套使用的。

再下面一端,定义了两根光杆的插孔位置,已经Z轴丝杆螺母的镶嵌位置。光杆的插孔,一方面为了缓解精度问题,另一方面为了让打印效果更理想,在圆柱的上方,增加了一个梯形台面。这样,也让原本简单的代码,发展成了另一个模块,pushfit_rod模块。这个模块我们就不再详细讲解了,相信有了之前的经验,大家都能够自行看懂了。

image022

到这里,大家可以发现,所有的代码,基本都是几种简单的几何形体,加上平移或者旋转,再加上一个difference“减法”函数,组合而成的。只要有耐心,足够细心,再加上准确的数字,不管有没有编程经验,大家都可以充分理解这种脚本语言。

这样,所有的内容都准备好了之后,再加上一个大的difference函数,执行基础部分和孔洞部分的“减法”,我们就得到了x-end.scad脚本执行的最终结果。

image018

第四节,源代码分析之三,x-end-motor.scad文件

看到这里,我们已经完全了解x-end-motor.scad所依赖的两个源文件,bearing.scad以及x-end.scad的内容与渲染结果了。现在,只剩下主文件,x-end-motor.scad等待着我们。在这个文件中,原本完全不能理解的代码,现在也已经变得可以阅读了。

首先,还是一个模块,定义了整个X轴步进电机端零件的基础。这个基础是在已经定义的模块x_end_base的基础上,再加上一个大的立方体得到的。

image023

与之前的方法类似,打开一个新的OpenSCAD窗口,把所需的常量定义、模块定义都准备好(注意这次我使用了use语句,避免杂乱的代码过多),然后独立执行这个模块,可以得到这样一个渲染结果:

image024

还是与之前的情况类似,下面是一个大的模块,定义了如何从已有的基础3D对象上切除一部分,以得到我们希望的结果。我们一部分一部分来。

image025

首先使用在x-end.scad文件中已经定义好的模块,切除除了右侧步进电机位之外的部分。单独使用这个模块,会得到这样的结果:

image026

然后的一大段代码,都被一个translate函数所包围了。我们把这一大段代码的每一部分单独挑出来,配合上translate函数,看看执行的效果如何。

第一段仍然是用于穿过同步带的空间。这部分没有另一侧精致,只是一个立方体,不带四个角的倒角了。

image027

接下来是四个螺丝孔位。这段代码看起来虽然很长,但其实内容很简单,每个螺丝孔位是两个圆柱,重复了四次,得到了四个螺丝孔位。

image028

再往下是两个巨大的立方体,切除了步进电机槽位的右上角和右下角。

image029

最后,是一个大的六边形柱体,切除了步进电机的轴位。

image030

以上的所有内容,拼合在一切,经过适当“加法”和“减法”,最终得到了我们所需的零件3D模型,如下图所示:

image031

到这里,虽然我们还没能完全掌握OpenSCAD的使用,但最基础的部分,以及其中所蕴含的方法,应该已经比较熟悉了。如果想比较系统的学习,也很容易,只要点击菜单上的Help – Documentation,就可以到达OpenSCAD的官方文档网站,那里有完整的相关资料。

除了OpenSCAD的技术之外,我们也已经把一直在研究的这个Prusa i3 3D打印机零件x-end-motor.scad的设计搞清楚了。下面,我们要根据自己的需求,对它进行一些修改。

第五节,源代码修改

在前面几节,我们学会了基础的OpenSCAD脚本语言,已经可以读懂现有的X轴步进电机端建模脚本文件x-end-motor.scad了。现在,可以再回头看一下第一节中列出的需求,下面我们要逐一解决它们了。

首先是需求(1),关于Z轴丝杆安装位的问题。现有的位置,是供嵌入一个M5螺母的大小。这个位置,对于下图所示的梯形丝杆螺母来说,确实是太小了。因此,我们首先需要扩大这个位置。

image032

经过试验,我发现对于x-end.scad部件底部的六边形螺母固定基座,要从原来的8mm半径,变为13mm半径。同时,要把这个部件的中心,向远离垂直轴承安装管的方向移动3mm。这样,Z轴相邻的两根杆(一根光杆,一根梯形丝杆)之间的距离,由17mm变为20mm。按下F6键重新渲染之后,可以得到如下图的结果。

image033

很明显,其他几个相关的部件,也需要相应的调整才行。这个调整也不复杂,如下图所示,先把零件主体立方体和梯形螺母固定基座的立方体两个地方,调整长度,配合已经调整了位置和大小的梯形螺母固定基座六边形。

image034

然后,把现有的六边形M5螺母嵌入位置去掉,改为用于梯形螺母的嵌入位,如图:

image035

这时候,出现了一个问题,就是四个M3螺丝孔,其中两个靠近零件主体的螺丝孔被挡住了一点点。这样别说螺丝的头部没有地方安装,就连螺丝杆都不一定能钻过去。但是,如果再修改梯形螺杆的X方向坐标,还要联动修改整个机器架构,未免显得太过于麻烦。不如就再扩大一些螺丝的安装位置算了。

基于这样的思路,我又补上了两个圆台,一个立方体,把用于安装螺丝的位置空了出来。如下图所示:

image036

到此位置,我的需求(1),关于Z轴丝杆安装位的问题已经得到了解决。当然,由于梯形丝杆和光杆之间的距离加大了3mm,必须同时修改亚克力板的相应设计才可以。这点请模仿我修改设计的朋友不要忘记了。

关于需求(2),X轴步进电机安装位的问题,会更加简单一点。由于这个需求,并不是一个功能性需求,而仅仅是为了美观的考虑,因此,不设计到任何限制尺寸方面的调整。同时,所有修改的内容都位于x-end-motor.scad文件中。

还是一步一步来做。首先,在x-end-motor.scad文件中,注释掉对模型右上角的切除语句。结果如下图所示:

image037

然后,把步进电机轴轴位切除口,由原来的一个简单的六边形,变为一个更美观的鼓型。这里,我们使用了一个前面没有介绍过的intersection函数。这个函数的作用,是求两个或多个立体几何形状的交集。我们这里使用的鼓型,就是一个立方体和两个圆柱体的交集。如果想知道更具体的细节,大家可以参考文档,或是按照我们前面介绍过的方法,把语句单独提出来渲染,观察它们独立的形状。

image038

再接下来,我们还使用一个立方体和一个圆柱的difference函数,调整了右上角的形状,去除了原始的直角,让它变成了一个更加优雅的弧形。

image039

在我把X轴步进电机位置修改成这样之后,就发现它在设计上确实变得美观了一点,但3D打印过程中,会造成一个超长的过桥动作,导致打印效果很差。为了解决这个问题,我在建模阶段,增加了两个用于支撑的平板,既节省材料,又让顶部的过桥距离大大缩短,只有原来的三分之一了。这样再尝试打印,首先过桥的地方完全没有了问题。同时,这个支撑非常容易去除,只要用手轻轻一掰,就可以在根部断掉。这样,我们就得到了让人满意的近乎完美的结果。

image040

最后要解决的是需求(3),给X轴光轴增加了压力释放缝。

对于这个问题,我们要再回到x-end.scad文件。在上下两个光杆的构造代码后,需要再增加两个细长的立方体,就可以解决这个问题了。如图:

image041

这里需要补充说明一点的是,这个缝隙的大小,也是经过了几次试验最终得到的。它既不能太大从而导致光杆安装松懈,又不能过小导致打印后实际粘在了一起。同时,为了使光杆能够真正顺利安装,打印虎还有一个建议,就是使用8毫米的钻头,对已经成型的打印件进行清理操作。我们的实践证明,使用钻头是非常有效的方法。

第六节,结束语

到此为止,我们所有的工作都已经完成。如果你是跟着虎哥我一步一步做到这里的,那现在你应该已经初步掌握OpenSCAD的使用方法了。相信在这个基础上,再经过简单查阅OpenSCAD帮助文档,各种复杂的3D机械零件建模都难不住你了。

当然,我们这篇教程,只具体介绍了一个3D零件的修改方法(虽然是最复杂的一个)。如果你想要所有经过打印虎修改的Prusa i3 3D打印机打印件模型文件,可以从这里下载(打印虎本地下载百度云下载)。受到开源精神的鼓舞,我们非常乐于见到大家在我们工作的基础上继续改进。

回顾一下,我们这篇教程中所需的文件都包括:

文件名 描述
OpenSCAD-2014.03-x86-32-Installer.exe Open SCAD安装程序
Prusa3-vanilla-master.zip Prusa i3 vanilla版,本教程参考的基础文件
Prusa-i3-dayinhu-scad.zip 经过打印虎修改的Prusa i3 .scad框架设计文件

所有的这些软件包,都可以在这里下载到(打印虎本地下载百度云下载)。如果有的朋友觉得自己弄还是太麻烦,希望直接购买到一套,那么打印虎也可以提供。只要到打印虎网站上的产品页面上购买就可以了。

最后,祝大家玩机愉快,每天都有好心情。有任何关于文章的问题,请

联系打印虎 QQ 2404959972

 

【打印虎】RepRap 3D打印机热敏电阻设置图解

玩3D打印机的朋友,可能会希望装配自己的3D打印机,或者改进已有的3D打印机设计(有这方面需求的朋友,可以参考【打印虎】零基础自制RepRap Prusa i3图解全攻略)。在这个过程中,经常会遇到关于热敏电阻方面的问题。热敏电阻看似简单,但其实很有门道,在设置固件的时候,它常常是最复杂的一项设定。固件设置的过程中,我们得提供一组热敏电阻的配置参数,或是更复杂,提供一个温度-阻值的对应表,才能完整整个设置。但是这些参数的意义是什么,从哪里能得到这些参数,却又没有人告诉我们。这可真是难为了3D打印机爱好者。打印虎经过仔细研究,终于摸清了跟热敏电阻有关的方方面面,今天就给大家仔细讲解一下。

在我们正式开始之前,先打个小广告。打印虎日前已经开始销售RepRap Prusa i3 3D打印机套件,如果你自己或周围的朋友对搭建3D打印机感兴趣,不妨选择打印虎。我们提供的元件,经过严格筛选,品质优良。3D打印机的关键部件都做了专门的优化,包括采用了优质步进电机、全铝挤出头、铝基板热床以及改进的梯形丝杆Z轴,让你的3D打印机达到更高的精度,并且经久耐用。不光硬件质量有保障,打印虎还特别提供免费的固件升级服务,从购买之日开始,打印虎承诺每季度一次,至少四次固件升级,给你的3D打印机提供无限助力。另外,打印虎还提供最好的3D打印机技术支持服务,与顾客做朋友,让你没有后顾之忧。如果想了解更多,请访问我们的产品页面http://www.dayinhu.com/products

第一节,热敏电阻基础

3D打印机上常用的热敏电阻,是NTC(Negative Temperature Coefficient,也就是负温度系数)热敏电阻。所谓负温度系数,就是当温度上升时,热敏电阻的阻值减小。在3D打印机上,最常见的是玻璃封装的热敏电阻。不论是轴向导线的玻封NTC热敏电阻:

image001

还是单端的玻封NTC热敏电阻:

image002

这些都在3D打印机上很常见。

对于一个普通电阻,它的阻值是最关键的一个参数。而对于一个热敏电阻来说,最关键的参数是温度-阻值对应曲线。有些公司生产的热敏电阻,会在对应的数据手册(Datasheet)上,详细列出一个表格,上面的信息就是这个温度-阻值对应曲线。当然,表格肯定只能列出有限的采样点,但如果采样密度足够大,就可以足够精确地表示这条曲线了。

总是使用一个表格的方式表示热敏电阻的特征,还是过于麻烦了。为了简化参数,前人研究出了多种热敏电阻的数学模型。其中最简单,对于3D打印机也足够用的一种模型,是把热敏电阻的关键参数简化为三个:第一个参数是T0表示一个参考温度,通常是25℃;第二个参数是R0表示参考温度下的阻值;第三个参数是beta(也可以写做希腊字母β),它是一个描述热敏电阻阻值变化特征的参数,使用beta值可以计算出热敏电阻一个特定的阻值所对应的温度。这种热敏电阻参数模型,经过长期使用,得到了广泛的认可。有些热敏电阻的厂商,甚至不再给出热敏电阻的温度-阻值对应曲线,而是直接给出这三个参数,就算是完整地提供了热敏电阻的资料。

热敏电阻的特点,是稳定性、一致性都很好。不同的热敏电阻个体,只要他们的参数相同,就会表现出完全一致的电子特性。甚至不同厂商生产的热敏电阻,也会有几乎完全一样的特征曲线。这个特点非常重要,在下面,我们就会看到,很多与热敏电阻相关的数据和设置安排,都表现和利用到了这个特征。

如果我们拿到一个热敏电阻,却不知道它的内部参数,希望通过测量的方式得到,也是可能的。这种情况下,我们需要使用这个公式:

image003

其中,R0和T0我们已经都讲过了。T和R代表一个比较高的测量温度(比如85.5℃)下测量的阻值(比如5000欧姆)。同时假如T0是22℃,R0是115700欧姆,则可以计算beta值等于5237。

这样的方法从理论上完全可行,但实际操作需要一些设备,非常的麻烦。打印虎建议大家,在有可能的情况下,还是尽量从卖家获取热敏电阻的参数信息,就不要自己测量了。

在RepRap Prusa i3 3D打印机上,两个地方用到了热敏电阻。一个用于测量挤出头的温度,另一个用于测量热床的温度。用于测量挤出头温度的热敏电阻可见下图。红圈内的黑色导线头部,3mm金属套内的,就是使用无头螺丝固定的热敏电阻了。

image004

用于测量热床温度的热敏电阻可见下图。这里的热敏电阻,直接使用了玻封形式,用kapton胶带粘贴在热床的底部。尽量与热床紧密贴合。

image005

第二节,热敏电阻在电路板上的连接

在上一节中,我们了解了热敏电阻的基础知识,以及它在RepRap Prusa i3 3D打印机中的使用方法。那么从电路的角度,热敏电阻是如何连接的呢?在Melzi上,电路板最右上角的两个连接口BTEMP和ETEMP,就是为热敏电阻专门准备的:

image006

同时,图中两个小红圈内的,就是R2。关于R2,我们下面会详细解释。

只知道在电路板上如何连接,还不够我们解决问题。实际上,热敏电阻部分的电路图也非常简单,是这样的:

image007

其中R就是热敏电阻,而R1总是不连接。Vref通常是是+12V电压,被R和R2分压得到的Vmeasured的值经过ADC转换,就可以被单片机读取。那么如何计算热敏电阻的分压,R2是一个关键。不幸的是。在不同的电路板设计中,R2有着不同的取值。我见过两种不同的Melzi电路板,他们分别使用了4.7K和10K的阻值。后面我们就会看到,不同的阻值,对应了不同的热敏电阻计算发放和温度-ADC值对应表,不能搞错。

第三节,热敏电阻的设置(Repetier-firmware)

上面讲了很多理论上的东西,那么如果我用Prusa i3 3D打印机,应该如何设置固件呢?这里我们以Repetier-firmware和Marlin两种最常见的固件为例进行说明。

如果你使用的是Repetier-firmware,请首先参考【打印虎原创】Repetier-firmware深度配置图解教程。假如大家对它的在线配置工具已经初步了解,那么可以在“温度设置”一栏,找到这项设置:

image008

这个下拉框看似简单,但如果尝试使用,就会发现其中的玄机。我们先看一下其中的选项都有哪些,如下图所示:

image009

首先,这个下拉列表中,先列出了一系列给定型号的热敏电阻。根据我的调查,虽然这些型号在国内不好找,但应该是美国市场上常见的元件型号。这里面,有些型号非常的具体清晰,比如第一项Epcos的100K热敏电阻,就列出了非常具体的型号。但另一些,比如第二项热敏电阻,就只列出了一个非常模糊的名字。光看到名字,完全无法搞清楚它对应的beta值。即使我使用一个R0=200K的热敏电阻,也无法确定使用这项设置就是正确的。

既然这些预定义选项的热敏电阻在国内不太常见,现在我们又不了解他们的情况,不如先跳过,继续看后面的选项。这些预定义的热敏电阻,我们留到下一节再具体讨论。从AD8494这一行开始,就不是热敏电阻了,而是一些具有温度感应功能的芯片。我在国内还没有见过配置这种测温芯片的3D打印机,同时我们这篇文章主要讨论热敏电阻,所以这种类型也就略过不谈了。

再接下来,是用户自定义表格(User defined table)。当我们选择到这一个选项的时候,在页面底部会出现下图所示的一段:

image010

在这里,我们可以通过一个表格的形式,定义正在使用的热敏电阻。这里需要指定的数值,包括了R1(通常是0,代表未连接,不是短路哦),R2(根据所使用的电路板具体情况而定),以及一组温度-阻值的对应关系表。第一节已经谈到,这组温度-阻值的对应关系表,有可能由元器件厂商在元器件数据手册中提供。每当加入一行数据之后,ADC一列会展现出自动计算出的ADC数值。虽然我们在这里填写的是温度-阻值对应表,但实际生成的配置文件中,已经转化为温度-ADC值关系表了。而根据图中的分压电路,温度-ADC值关系表中的值,是与R2直接相关的,因此这里的R2的值必须填写正确,否则不能计算出正确的温度。

当然,有些热敏电阻的厂商,并没有在数据手册中直接给出温度-阻值对应关系表,而是按照简化模型,直接给出了一组三个参数,T0, R0和beta。如果是这种情况,我们可以直接使用下面的选项,通用热敏电阻表格(Generic thermistor table)就可以了。选择这个选项之后,页面底部也会相应的变化:

image011

可以看到,在这种情况下,固件设置就不需要用户提供完整的温度-阻值对应关系表,而是改为提供一组简化参数。如果你的热敏电阻厂商直接提供了T0, R0和beta参数,那么直接填入也就可以了。这三个关键参数之后的的温度范围(Min/Max Temperature)不会对计算产生实际影响,只是确定了计算温度的最小和最大值;而最后的R1/R2前面已经介绍过了,虽然不是热敏电阻的内部参数,同样也必须填写正确才能最终得到正确的温度值。

第四节,热敏电阻的设置(Marlin)

用过Marlin固件的朋友们都知道,Marlin是没有类似于Repetier-firmware的在线配置工具的。配置Marlin固件,还必须使用更为原始的直接编辑配置文件的方法,相对要困难一些。如果没有这方面的经验,首先请参考【打印虎原创】RepRap_Prusa_i3_3D打印机固件Marlin firmware配置教程。在对Marlin配置有了初步了解之后,可以在Marlin的配置文件中发现这样一段,是直接与热敏电阻相关的:

image012

可以看出,这段其实与Repetier-firmware配置工具中的下拉框内容类似,也是分为

(1) 负值是温度感应芯片;

(2) 0是未使用

(3) 100以下是常用的热敏电阻,也就是我们这篇文章讨论的内容;

(4) 100以上是Pt100/Pt1000温度传感器,我没实际用过,不太清楚具体情况,需要的朋友请自己查资料吧;

最遗憾的一件事情,是Marlin似乎并不支持用户直接使用T0, R0以及beta值来定义一个热敏电阻。这让事情变得麻烦了很多。下面,我们只有两个选择了,要么在预定义的热敏电阻中选择一个并使用,要么自己列一个热敏电阻的温度-ADC值表格并使用。

先说使用预定义的热敏电阻。预定义的热敏电阻,每个都在Marlin中对应了一个温度-ADC表格。这样的每个表格,实际上都对应了不同的T0, R0, beta这三个热敏电阻参数以及R2这个电路参数。要想找到对应的表格,必须把这四项内容都对应上。如果没有完全对应,测量出的温度,就肯定不是正确的。

仔细看一下configuration.h中提供的注释,再加上定义热敏电阻温度-ADC值对应表格的文件thermistortables.h中提供的注释,就会发现上面提到的这四项参数在注释中给出的很不全面。有些有beta值,有些没有给。有些指明了一种特定型号的热敏电阻,而另一些则含糊其辞。因此,想全面利用这个表格,我感觉是很困难的。想找到表格中的各种热敏电阻,在国内似乎也是困难重重。

好在这个表格的其中一个选项,也就是选项60,对应了最最常见的一种热敏电阻。经过我们的分析和测试,这种热敏电阻T0=25, R0=100k, beta≈3950, R2=4.7k。如果你的配置正好是这个情况,那么恭喜你,你可以直接在

#define TEMP_SENSOR_0

#define TEMP_SENSOR_BED

后面,填写60这个数字。否则,打印虎的建议是,不要使用预定义的表格了。这个表格引起的麻烦会比你的实际收获多。

好了,到此为止,如果你要用Marlin作为固件,并且使用了并非最常见的可以对应于选项1的热敏电阻作,那大概只剩下最后一条路可以走了,那就是自定义温度-ADC表格。做这件事需要几个步骤:

第一步,创建温度-ADC表格;

第二步,给这个表格赋予一个编号;

第三步,使用这个编号。

参考thermistortables.h文件中的各个表格,要创建一个温度-ADC表格并不算特别困难。为了满足C语言的规范,我们自己创建的表格,也必须满足一定的要求。首先,表格的位置,要放在这里:

image013

然后,表格要以

image014

这样一行作为开头;要以

image015

这样一行作为结尾。

中间的部分,就是这个表格的数据了。同样参考已有的表格,左侧的数字,是由低到高的ADC值;右侧的数字,是由高到低的温度值。

如果你的数据来源,是数据手册中提供的温度-阻值表,那么需要考虑到R2的分压效果,并把分压比例乘以1024(这是10-bit ADC的精度),得到某一温度下阻值对应的ADC值。

如果你的数据来源只有数据手册中列出的T0, R0以及beta值,那么反而好办些,可以利用下一节中介绍的工具,从这三个参数计算得到整个表格。

表格已经搞定了之后,我们要给这个表格赋予一个编号。我感觉99是一个合适的数字,因此把表格的第一行改为

image016

这一步就完成了。

最后,要使用这个编号。使用这个编号的方法也很简单,回到configuration.h文件,把热敏电阻的一段,修改为这样:

image017

当然,这里我们假设了你在挤出头和热床上使用了同样型号的热敏电阻,因此这两个地方都使用了我们自定义的热敏电阻编号99。如果你使用了两种不同的热敏电阻,那么你可能还需要启用数字98,再做一次自定义热敏电阻表格的工作。

第五节,热敏电阻表格计算脚本的使用

在上两节我们已经看到,相比于Repetier-firmware固件,Marlin固件没有直接提供通过T0, R0以及beta值设置一个热敏电阻的方法。如果所使用的热敏电阻在预定义表格中不存在,用户就必须通过一个自定义表格,设置一个热敏电阻。这对于只知道热敏电阻三参数的朋友来说,显然是一个麻烦事。好在RepRap.org提供了一个小工具,可以在一定程度上帮助我们。这个工具叫做createTemperatureLookup.py(打印虎本地下载百度云下载)。

一个坏消息是这个工具是Python语言编写的,如果你用的是Windows,则还需要另外安装Python语言的运行环境。而且,这个脚本只兼容Python 2,对于最新版本的Python 3,则还需要一些修改才行。为了简化,我们这里还是用Python 2.7.8吧(打印虎本地下载百度云下载)。

准备好了环境,我们就可以运行了。在Windows中运行cmd.exe,进入命令行模式。在命令行下,先切换到createTemperatureLookup.py所在的目录(我的是D:\work目录),然后键入命令:

C:\Python27\python.exe createTemperatureLookup.py –t0=25 –r0=100000 –beta=3950 –r1=0 –r2=4700

这一行命令的参数,含义都很明确,包含了热敏电阻内部参数T0, R0和beta,以及电路上的参数R1和R2,完全与上面我们的讨论相同,就不重复解释了。结果如图:

image018

好了,表格已经得到,同样地,左侧的数字,是由低到高的ADC值;右侧的数字,是由高到低的温度值。与我们所需的状态完全匹配。如果用在Marlin中,唯一的不同是在文件thermistortables.h中,左侧的值需要再*OVERSAMPLENR。这里可以理解为一个格式问题,只要大家把格式搞对,最终就可以得到正确的结果了。

第六节,Marlin预置选项设置的对比

上面几节,我们已经介绍并反复使用了在温度-阻值(以及温度-ADC值)数据表。在已知这个数据表,或者已知T0, R0, beta三项关键参数的情况下,我们已经可以正确配置Repetier-firmware和Marlin固件。最后的这一节,我想讨论一下Marlin中预定义的数据表。这纯粹是为了满足和虎哥我一样有好奇心的朋友。如果没有兴趣,就可以不再继续阅读本文了。

如果还有兴趣,那我们继续。话说Marlin固件中,列出了一大堆预定义的热敏电阻的温度-ADC值对应表。根据注释,这些表格,有些我们知道热敏电阻的具体型号,有些知道了关键的三个参数T0, R0和beta,有些则更模糊,只知道其中部分信息。那么我们如何理解这些预定义的热敏电阻表格呢?

首先,上文已经谈到神奇的选项60。它对应了最常见的一种热敏电阻。经过我们的分析和测试,这种热敏电阻T0=25, R0=100k, beta≈3950, R2=4.7k。我们看一下60对应的注释:

image019

这里只提到了R0=100k以及beta=3950,在thermistortables.h中,还有更多的注释:

image020

所以这个表格,其实就是通过createTemperatureLookup.py生成的!和我们在上一节所举的例子完全一样。看到这里,你就知道我们为什么选择了60这个选项了吧。

事实上,再深入研究,就会发现不仅选项60是最常见的热敏电阻,选项7、选项11都是。简单观察数字,其实还很难得到这个结论,如果你把这个表格绘制出来,情况就不同了:

image021

看到这张图,是不是觉得很有趣?红色的点,是选项7;绿色的点,是选项11;蓝色的点,是选项60。可以看出,这三条由采样点构成的曲线,非常完美的匹配在了一起,简直就是一条线。再看选项7的注释:

image022

和选项11的注释:

image023

 

image024

 

可以看出几个特点:

(1) 这三条曲线,数据来源确实不同,60来自脚本计算的数据;7和11,应该是来自于各自公司提供的数据手册;

(2) 它们的R2都是4.7k电阻;

(3) 它们的beta都在约等于3950,其中11和60都等于3950,而6根据数据手册beta=3974;

有些朋友,在设置热敏电阻的时候,图省事把选项设置为1。那么1和60的差别有多大呢?大家可以从下图得到一些启发:

image025

图中红色点是选项1,绿色点是选项60。可以看出,在低温区,这着两条曲线差别不大。但当加热到了200℃的时候,如果使用选项1,但实际使用的热敏电阻是选项60的话,会因为热敏电阻设置不当,报告为180℃左右,产生了不小的误差。

最后,我们再比较一下当采用完全相同的热敏电阻,但电路板上的R2不同的时候,会产生什么样的效果。下图两条曲线,都是同样的热敏电阻,T0=25℃, R0=100000, beta=3950,配合不同的R2时,会有这样的结果:

image026

图中红色点R2=10K,而绿色点R2=4.7K。从图中可见,整条曲线都发生了比较大的偏移。这样,使用了不正确的配置,即使在低温区,也会发现明显的温度问题。

第七节,结束语

希望你把整篇文章看完之后,会感觉到对3D打印机热敏电阻设置的理解加深了很多。如果下次再遇到热敏电阻的设置问题,你很有信心能够容易地解决掉,那就说明你已经很好的掌握了这篇教程希望教给大家的东西。

如果读完了之后一头雾水,那很可能是我们的教程讲的还不够清楚,也希望你能跟打印虎联系,告诉我们你的问题。我们希望能持续改进教程,写的越来越清晰易懂。

回顾一下,我们这篇教程中所需的文件都包括:

文件名 描述
createTemperatureLookup.py 热敏电阻表格计算脚本
python-2.7.8.msi Python 2.7.8 脚本运行环境

所有的这些软件包,都可以在这里下载到(打印虎本地下载百度云下载)。

祝大家玩机愉快,每天都有好心情。如果有任何问题,请

联系打印虎 QQ 2404959972

 

【打印虎】RepRap 3D打印机步进电机电流调整图解

玩3D打印机的朋友,可能会希望装配自己的3D打印机,或者改进已有的3D打印机设计(有这方面需求的朋友,可以参考【打印虎】零基础自制RepRap Prusa i3图解全攻略)。在3D打印机搭建完成之后,我们需要对步进电机进行固件设置,这方面的问题,在【打印虎原创】RepRap_Prusa_i3_3D打印机步进电机设置图解中我们已经讨论过了。但有时我们会发现即使设置正确,步进电机的工作似乎还是有些问题。有的情况是步进电机转动没有力量,不能带动负载运动,出现异常声响;有的情况是步进电机发热过度,非常烫手,温度超过100℃,如果过热时间太长,甚至会导致步进电机退磁报废。

这两种极端的情况,其实都与步进电机的电流强度有关。第一种情况是由于电流过于小导致步进电机达不到设计的工作状态。如果负载小还好,若负载较大,就会出现失步的情况,不能正常工作了。第二种情况则刚好相反,是由于电流过于大导致步进电机发热增加,超过正常的工作温度范围,损毁设备。

那么为了保证步进电机工作在一个正常的温度范围内,我们需要对3D打印机的输出电流进行调整。Melzi或者RAMPS主板,都使用A4988系列芯片对3D打印机进行控制。这类芯片,通过一个参考电压,决定输出电流的大小。而这个参考电压,是通过一个微调电位计分压得到的。因此,通过调整这个微调电位计,并观察这个微调电位计的分压电压,就可以知道输出电流的大小了。

如下图所示,图中是一个RAMPS使用的A4988驱动电路板,青色圈内的就是微调电位计。使用小螺丝刀转动它,就可以在一个电压范围内进行选择了。

image001

Melzi主板上A4988芯片的右下方,也有一个类似的微调电位计。下面的图展示了如何调整这个参考电压:

image002

做这个操作的时候需要注意以下几点:

(1) 把电路板平放在一个绝缘桌面上;

(2) 断开12V主电源,连接USB口;

(3) 把红色箭头指向处的跳线,跳到USB供电一侧,也就是图中状态的下侧;

(4) 把万用表的负表笔连接地,一个简单的不用手的办法如图所示;

(5) 一只手控制小螺丝刀,另一只手控制正表笔,小螺丝刀和正表笔都接触到电位计表面的金属盖上;

image003

调整的过程中观察万用表的读数。根据RepRap wiki的建议,应该调整到0.8V。根据我自己的经验,调整在0.8V~1.0V之间都是没有问题的,电压高一些,步进电机会稍微热一些,但3D打印机整体会更稳定些。大家根据自己的实际情况决定吧。

这里需要注意的一点是电位器的金属帽上,可能会存在氧化层,或者是焊接时留下的助焊剂。如果万用表没有读数,可以用表笔戳几下,保证接触到金属部分。

调整好的步进电机,应该转动轻快有力,噪音和发热量都在一定的程度内。如果是Prusa i3,工作过程中X轴和Y轴步进电机应该是最热的,但也应该能允许手在步进电机表面短时间停留,温度在70℃以内。如果感觉温度达到手不能接触的程度,那很可能就是过热了。这时应该增加散热措施,比如降低环境温度,或者增加散热片等。

这次的步进电机电流调整教程比较简单,希望大家喜欢。下面又到了我们的广告时间。打印虎日前已经开始销售RepRap Prusa i3 3D打印机套件,如果你自己或周围的朋友对搭建3D打印机感兴趣,不妨选择打印虎。我们提供的元件,经过严格筛选,品质优良。3D打印机的关键部件都做了专门的优化,包括采用了优质步进电机、全铝挤出头、铝基板热床以及改进的梯形丝杆Z轴,让你的3D打印机达到更高的精度,并且经久耐用。不光硬件质量有保障,打印虎还特别提供免费的固件升级服务,从购买之日开始,打印虎承诺每季度一次,至少四次固件升级,给你的3D打印机提供无限助力。另外,打印虎还提供最好的3D打印机技术支持服务,与顾客做朋友,让你没有后顾之忧。如果想了解更多,请访问我们的产品页面http://www.dayinhu.com/products

最后,祝大家玩机愉快。有任何问题,请

联系打印虎 QQ 2404959972