朱文琦
(河南工业职业技术学院自动化工程学院,河南 南阳 473000)
当前的3D打印机固件有很多种,其中Sprinter、Marlin有非常多的使用者。Sprinter功能相对简单、基本功能齐全,而Marlin的功能相对复杂、强大。Marlin固件是桌面级3D打印机固件中较流行的一种。因为其开源的特点,很多桌面级或工业级3D打印机都基于该固件。它使用Arduino Mega2560主板,使用者只需进行适当的配置就可以进行基本的打印,而且目前配置的说明文档也比较丰富。由于开源的特点,其已成为很多3D打印企业和科研院校研究3D打印机的首选[1]。
Marlin固件具有驱动控制板、读取与解析G代码、控制挤出头和加热板的温度、检测挤出头和加热板的温度、读取SD卡、支持液晶显示屏(liquid crystal display,LCD)等功能,但不支持网络连接。而Marlin硬件并不包含以太网接口,所以给使用Marlin而有远程网络打印需求的用户带来很多不便[2]。本文基于W5x00网络接口扩展板,对Marlin进行改造,使其具有连接到云打印平台的属性和功能,以满足更多应用场合的需求。
当前大多数基于Marlin的网络打印采用了另接一块ARM板,通过ARM板上的网络接口与外界进行网络连接,同时通过USB串口与Mega2560进行通信。这块ARM板是连接LAN/WAN与Mega2560主板的桥梁。
目前,常用网络连接方式如图1所示。这块ARM板可能是基于ARM的定制板卡,如图1(a)所示;也可能是通用的基于树莓派开发板卡,如图1(b)所示。
图1 常用网络连接方式
通常来说,这块ARM包含一个操作系统,比如嵌入式Linux系统。目前,很多企业和组织采用的是基于图1(b)的连接架构,比如说当前比较流行的OctoPrint开源应用[3]。这需要基于树莓派(Raspberry Pi)和Python安装OctoPrint的免费开源软件。OctoPrint是一款针对远程3D打印的、专业、强大的控制软件。它操作简单,可以帮助用户轻松、快捷地控制打印机,主要作用是帮助用户进行远程3D打印机的控制;可以通过以太网或Wi-Fi无线网络连接打印机控制,支持联机查询打印机的温度、工作进度、剩余线材量等信息。此外,还有非开源的商业软件Astroprint也采用类似的方法。它们都是基于树莓派的硬件,并内建嵌入式Linux系统,基于HTTP协议,通过浏览器访问3D打印机进行远程打印管理和监控打印状态和进度。
基于树莓派开发板卡的主要特性如下。
①打印机与计算机分离,通过有线或无线网络打印,支持浏览器/服务器(brower/server,B/S)结构,通过浏览器操作。
②远程打印控制软件有多种控制方式可调配,支持G代码直接输入。
③监控打印作业和温度。
④可通过远程摄像头实时观察打印效果。
⑤G代码视觉化(甚至适用于打印中)以及文件管理功能。
⑥兼容多种打印机,支持Marlin、Sprinter、Smoothie等主流打印机固件接口。
基于树莓派开发板卡的缺点在于:B/S结构只能一对一进行远程控制,不便于集群控制。同时,由于需要额外配置树莓派,成本较高。
另一种是采用如图1 (a)所示的架构图。它也是采用另一块ARM架构的包含串口和网口的开发板。和图1(b)所示方式不同点在于:图1(a)是其上运行自主开发的网卡转串口应用程序,实现网络报文到串口消息的转换。一般客户端采用客户端/服务器端(customer/server,C/S)接口,客户端基于Socket收发消息。而传送文件基于FTP协议。这种方式的优点在于可以进行一对一控制或者一对多控制,可以集群控制多台3D打印机。
但不管是图1(a)方案还是图1(b)方案,都需要额外的硬件,所以成本较高,而且需要两块板卡,不利于打印机内部硬件布局安排。本文讨论采用一种基于W5x00网络接口套件,通过串行外围设备接口(serial peripheral interface,SPI)总线连接到Mega2560主板,可以直接集成到主板上,使3D打印机具备网络通信的能力。
在本次项目中,国外客户需要短期内给现存打印机增加网络接口功能,并提供基本的远程打印功能,如打印文件传输、打印开始、打印暂停/继续、打印停止、打印状态查询以及打印机日志记录等。因此,在不修改打印机机械结构的前提下,需要寻找一种更方便、快捷、低成本的方法,增加3D打印机网络接口,使其可以接入云制造平台[4]。
需求是在不影响原打印机工作的机械结构和外形,以及原本地打印工作机制和流程的前提下,新增打印文件远程传输、远程打印启动、打印暂停、打印停止、打印状态获取、托盘回零、远程热床等基本打印功能。因此,硬件设计的要求是最大化地保留原有硬件和软件设计,满足敏捷设计的需求,缩短项目开发和产品上市的时间。不同网络接口方式特点比较如表1所示。根据表1,最终选择了W5x00网络接口的方式。其优点是兼容性好,开发周期短,而且后期可以合成到Mega2560主板上。由于只有一块主板,便于安装和维护,不需要修改机械结构和外形[5]。
表1 不同网络接口方式特点比较
W5x00是目前网络通信的首选。首先,它自带传输控制协议/网际协议(transmission control protocol/internet protocol,TCP/IP)协议栈的支持,只需要写有限的初始化代码就可以使用,不像以往的网络模块还要写读写函数、报文控制等其他驱动程序;其次,它只需SPI总线接口就可完成网络和单片机(microcontroller unit,MCU)之间的通信,而且速度和数据可靠性也有一定的保证。
该系列中,W5100是一款多功能的单片网络接口芯片,内部集成有10/100 MB以太网控制器。由于其高集成、高稳定、高性能和低成本等特点,一直大量用于嵌入式系统中。使用W5100可以实现没有操作系统的Internet连接。W5100与IEEE 802.3 10BASE-T和802.3u 100BASE-TX兼容。W5100内部集成了全硬件、稳定、高效的TCP/IP协议栈、以太网介质传输层和物理层。使用W5100不需要考虑以太网的控制,只需要进行简单的端口(Socket)编程。W5200是W5100的升级版。与W5100相比,W5200具有以下优势。
①W5200支持高速SPI总线(≤100 MHz),支持8个独立的端口同时连接。W5100只有4个独立端口。②W5200提供休眠模式和网络唤醒,更低功耗。③W5200具有极小巧的48引脚QFN无铅封装,芯片体积更小。④W5200使用简单,只需添加现有的库文件,覆盖Arduino IDE原有的W5100库文件,烧录后即可运行。⑤W5200具备32 KB内部通信缓冲,W5100只有16 KB。
因为W5200芯片和SD读卡器都通过在线串行编程(in-circuit serial programming,ICSP)针脚使用SPI总线与单片机通信,所以这两个功能不能同时使用,否则用户需要采用一个协同运作的库程序。而W5500与W5200扩展板相比,增加了POE供电、网络唤醒模式、集成主板等功能,且主板使用了一个新的高效SPI协议,支持80 MHz通信速率,从而能够更好地实现高速网络通信[6]。
几种以太网扩展板比较如表2所示。
表2中,W5500、W5200、W5100扩展板是兼容Arduino Mega2560主板的,可以利用Mega2560主板的SPI接口直接进行通信。
表2 几种以太网扩展板比较
根据表2,本文最终选择了W5500作为网络控制芯片,并和主板进行集成控制。主板与W5500芯片通信如图2所示。通过SPI方式进行连接,其引脚主要包含LED(控制引脚)、nINT(中断控制引脚)、nRST(芯片复位引脚)、PWDN(电源控制引脚)、5500_CS(网络接口卡片选引脚)、SD_CS SD(卡片选引脚)、MISO(主器件数据输入、从器件数据输出),MOSI(主器件数据输出、从器件数据输入),SCLK(时钟信号),SS(从器件使能信号)。
图2 主板与W5500芯片通信示意图
在实际的W5500与Mega2560主板的硬件连接电路中,主芯片采用ATMEL ALMEGA32。它是网络接口卡的控制芯片。其一端的引脚与Mega2560的控制引脚相连,而另一端的引脚连接以太网控制芯片W5500的对外接口。ATMEL ATMEGA32与主板的通信包含前述的SPI通信接口(MOSI,MISO,SCLK,nSCS)以及一些I/O控制端口(nINT,PWDN,nRST)等。
在硬件通信线路连接建立后,系统软件也需要作相应的修改。系统软件需要在不影响原打印机工作流程的前提下新增打印文件远程传输、远程打印启动、打印暂停、打印停止、打印状态获取、托盘回零、远程热床、获取日志等必要的3D打印机远程操作[7]。
系统Mega2560主板和以太网扩展芯片W5500通过SPI和输入输出接口连接。W5500可外接RJ-45物理接口和SD卡,负责处理打印操作、状态查询、G代码文件读取以及网络传输状态显示、收发网络数据和读写SD卡。而主板通过数据缓存接收待处理的G代码序列,并通过代码解释、插补等内部处理发送脉冲宽度调制(pulse width modulation,PWM)脉冲到电机驱动,通过I/O操作控制加热器进行温度控制以及其他相关的I/O操作,如开关门、开关水冷机等[8]。同时,3D打印机的温度数据及通过I/O数字量的读取获得当前打印机开关量的状态。由于被测打印机使用步进电机驱动,主板芯片不需要读取电机的状态反馈。
系统软件架构如图3所示。
图3 系统软件架构
具体到系统实现,需求被细化为以下四类。
①传输大文件。
由于3D打印G代码文件都比较大,部分文件达100~200 MB,所以要求网络文件传输速度非常快。因为SD卡存储和以太网传输都依赖SPI总线速度,所以实际使用中,SPI的速度是网络传输速度最主要的影响因素。实际测试中发现使用W5100时,上传速度为7.47 kbit/s,下载速度为51.79 kbit/s;而使用W5200和W5500时,由于其支持高速SPI,所以读写速度大大提高,在打开SD卡选项的SPI_FULL_SPEED的情况下,对于class 6和class10的高速SD卡,上传速度达到188.08 kbit/s,下载速度达到 170.18 kbit/s。传输100 MB的文件约需9 min,能够满足客户要求的100 kbit/s以上的传输速度需求。
②远程控制打印机操作。
远程打印机控制操作包含打开G代码文件、打印启动/继续、打印机暂停以及停止操作等控制。为了更好地兼容其他场合,数据格式采用标准的JS 对象简谱 (java script object notation,JSON)交换格式。
③获取打印机状态信息。
打印机状态信息获取包含获取信息(get info)、获取温度(get temp)、获取状态(get status)。获取信息包含打印机名、IP地址信息和MAC地址信息;获取温度包含左喷头温度T0、右喷头温度T1、腔室温度C、热床温度B、料仓温度F、料仓湿度H;获取状态包含打印机百分比、已花费时间、剩余时间、是否启动中、是否暂停中以及错误码。其格式也采用了标准的JSON格式编码。
④获取日志。
获取日志和传输大文件都是通过文件传输协议(file transfer protocol,FTP)传输。通过在主板上建立FTP服务器服务,然后通过通用的FTP软件,如FileZilla、FTPRush等软件即可进行传输。但是Arduino系统中并不自带FTP服务,需要参考开源程序FTP Server on Arduino并进行移植[9]。
系统其他需求(如托盘回零、远程热床等)在打印过程中会自动被执行,所以并没有设置专用指令来执行。另外,系统可以透传G代码控制指令,即直接远程输入G代码指令让3D打印机执行相关指令[10]。
云制造是新一代的智能制造平台,通过网络提供服务,集成异地企业的制造能力和生产水平,使企业通过平台即可完成产品的采购、设计、工艺、制造、生产、售后等各个环节,大大提高了企业和社会资源的利用率[11]。而3D打印机的柔性制造能力、创新生产能力可以大大提升企业新产品的协同设计和协同制造能力,使产品制造变得更加智能、高效、个性化[12]。
目前,很多3D打印机都采用基于Marlin的固件。由于Marlin没有内置的以太网接口,很多基于Marlin开源的3D打印机都没有云制造的接口。本文根据外国客户的3D打印机改进需求,在W5x00的基础上研究了基于Marlin的3D打印机云设计与实现,针对Marlin进行改造,使其具有连接到云打印平台的属性和功能,可以满足更多的应用场合需求。这种方案兼容性好,开发周期短,成本低,不需要更改打印机外壳。基于TCP/IP标准的通信协议也可方便地使用手机或者计算机上的TCP客户端软件进行连接和控制,并可以用作云制造的接口。该方案不仅适用于Marlin系统,也可以作简单改动后匹配其他类型的3D打印机固件系统。