朱文琦
(河南工業(yè)職業(yè)技術(shù)學(xué)院自動化工程學(xué)院,河南 南陽 473000)
當(dāng)前的3D打印機(jī)固件有很多種,其中Sprinter、Marlin有非常多的使用者。Sprinter功能相對簡單、基本功能齊全,而Marlin的功能相對復(fù)雜、強(qiáng)大。Marlin固件是桌面級3D打印機(jī)固件中較流行的一種。因?yàn)槠溟_源的特點(diǎn),很多桌面級或工業(yè)級3D打印機(jī)都基于該固件。它使用Arduino Mega2560主板,使用者只需進(jìn)行適當(dāng)?shù)呐渲镁涂梢赃M(jìn)行基本的打印,而且目前配置的說明文檔也比較豐富。由于開源的特點(diǎn),其已成為很多3D打印企業(yè)和科研院校研究3D打印機(jī)的首選[1]。
Marlin固件具有驅(qū)動控制板、讀取與解析G代碼、控制擠出頭和加熱板的溫度、檢測擠出頭和加熱板的溫度、讀取SD卡、支持液晶顯示屏(liquid crystal display,LCD)等功能,但不支持網(wǎng)絡(luò)連接。而Marlin硬件并不包含以太網(wǎng)接口,所以給使用Marlin而有遠(yuǎn)程網(wǎng)絡(luò)打印需求的用戶帶來很多不便[2]。本文基于W5x00網(wǎng)絡(luò)接口擴(kuò)展板,對Marlin進(jìn)行改造,使其具有連接到云打印平臺的屬性和功能,以滿足更多應(yīng)用場合的需求。
當(dāng)前大多數(shù)基于Marlin的網(wǎng)絡(luò)打印采用了另接一塊ARM板,通過ARM板上的網(wǎng)絡(luò)接口與外界進(jìn)行網(wǎng)絡(luò)連接,同時(shí)通過USB串口與Mega2560進(jìn)行通信。這塊ARM板是連接LAN/WAN與Mega2560主板的橋梁。
目前,常用網(wǎng)絡(luò)連接方式如圖1所示。這塊ARM板可能是基于ARM的定制板卡,如圖1(a)所示;也可能是通用的基于樹莓派開發(fā)板卡,如圖1(b)所示。
圖1 常用網(wǎng)絡(luò)連接方式
通常來說,這塊ARM包含一個(gè)操作系統(tǒng),比如嵌入式Linux系統(tǒng)。目前,很多企業(yè)和組織采用的是基于圖1(b)的連接架構(gòu),比如說當(dāng)前比較流行的OctoPrint開源應(yīng)用[3]。這需要基于樹莓派(Raspberry Pi)和Python安裝OctoPrint的免費(fèi)開源軟件。OctoPrint是一款針對遠(yuǎn)程3D打印的、專業(yè)、強(qiáng)大的控制軟件。它操作簡單,可以幫助用戶輕松、快捷地控制打印機(jī),主要作用是幫助用戶進(jìn)行遠(yuǎn)程3D打印機(jī)的控制;可以通過以太網(wǎng)或Wi-Fi無線網(wǎng)絡(luò)連接打印機(jī)控制,支持聯(lián)機(jī)查詢打印機(jī)的溫度、工作進(jìn)度、剩余線材量等信息。此外,還有非開源的商業(yè)軟件Astroprint也采用類似的方法。它們都是基于樹莓派的硬件,并內(nèi)建嵌入式Linux系統(tǒng),基于HTTP協(xié)議,通過瀏覽器訪問3D打印機(jī)進(jìn)行遠(yuǎn)程打印管理和監(jiān)控打印狀態(tài)和進(jìn)度。
基于樹莓派開發(fā)板卡的主要特性如下。
①打印機(jī)與計(jì)算機(jī)分離,通過有線或無線網(wǎng)絡(luò)打印,支持瀏覽器/服務(wù)器(brower/server,B/S)結(jié)構(gòu),通過瀏覽器操作。
②遠(yuǎn)程打印控制軟件有多種控制方式可調(diào)配,支持G代碼直接輸入。
③監(jiān)控打印作業(yè)和溫度。
④可通過遠(yuǎn)程攝像頭實(shí)時(shí)觀察打印效果。
⑤G代碼視覺化(甚至適用于打印中)以及文件管理功能。
⑥兼容多種打印機(jī),支持Marlin、Sprinter、Smoothie等主流打印機(jī)固件接口。
基于樹莓派開發(fā)板卡的缺點(diǎn)在于:B/S結(jié)構(gòu)只能一對一進(jìn)行遠(yuǎn)程控制,不便于集群控制。同時(shí),由于需要額外配置樹莓派,成本較高。
另一種是采用如圖1 (a)所示的架構(gòu)圖。它也是采用另一塊ARM架構(gòu)的包含串口和網(wǎng)口的開發(fā)板。和圖1(b)所示方式不同點(diǎn)在于:圖1(a)是其上運(yùn)行自主開發(fā)的網(wǎng)卡轉(zhuǎn)串口應(yīng)用程序,實(shí)現(xiàn)網(wǎng)絡(luò)報(bào)文到串口消息的轉(zhuǎn)換。一般客戶端采用客戶端/服務(wù)器端(customer/server,C/S)接口,客戶端基于Socket收發(fā)消息。而傳送文件基于FTP協(xié)議。這種方式的優(yōu)點(diǎn)在于可以進(jìn)行一對一控制或者一對多控制,可以集群控制多臺3D打印機(jī)。
但不管是圖1(a)方案還是圖1(b)方案,都需要額外的硬件,所以成本較高,而且需要兩塊板卡,不利于打印機(jī)內(nèi)部硬件布局安排。本文討論采用一種基于W5x00網(wǎng)絡(luò)接口套件,通過串行外圍設(shè)備接口(serial peripheral interface,SPI)總線連接到Mega2560主板,可以直接集成到主板上,使3D打印機(jī)具備網(wǎng)絡(luò)通信的能力。
在本次項(xiàng)目中,國外客戶需要短期內(nèi)給現(xiàn)存打印機(jī)增加網(wǎng)絡(luò)接口功能,并提供基本的遠(yuǎn)程打印功能,如打印文件傳輸、打印開始、打印暫停/繼續(xù)、打印停止、打印狀態(tài)查詢以及打印機(jī)日志記錄等。因此,在不修改打印機(jī)機(jī)械結(jié)構(gòu)的前提下,需要尋找一種更方便、快捷、低成本的方法,增加3D打印機(jī)網(wǎng)絡(luò)接口,使其可以接入云制造平臺[4]。
需求是在不影響原打印機(jī)工作的機(jī)械結(jié)構(gòu)和外形,以及原本地打印工作機(jī)制和流程的前提下,新增打印文件遠(yuǎn)程傳輸、遠(yuǎn)程打印啟動、打印暫停、打印停止、打印狀態(tài)獲取、托盤回零、遠(yuǎn)程熱床等基本打印功能。因此,硬件設(shè)計(jì)的要求是最大化地保留原有硬件和軟件設(shè)計(jì),滿足敏捷設(shè)計(jì)的需求,縮短項(xiàng)目開發(fā)和產(chǎn)品上市的時(shí)間。不同網(wǎng)絡(luò)接口方式特點(diǎn)比較如表1所示。根據(jù)表1,最終選擇了W5x00網(wǎng)絡(luò)接口的方式。其優(yōu)點(diǎn)是兼容性好,開發(fā)周期短,而且后期可以合成到Mega2560主板上。由于只有一塊主板,便于安裝和維護(hù),不需要修改機(jī)械結(jié)構(gòu)和外形[5]。
表1 不同網(wǎng)絡(luò)接口方式特點(diǎn)比較
W5x00是目前網(wǎng)絡(luò)通信的首選。首先,它自帶傳輸控制協(xié)議/網(wǎng)際協(xié)議(transmission control protocol/internet protocol,TCP/IP)協(xié)議棧的支持,只需要寫有限的初始化代碼就可以使用,不像以往的網(wǎng)絡(luò)模塊還要寫讀寫函數(shù)、報(bào)文控制等其他驅(qū)動程序;其次,它只需SPI總線接口就可完成網(wǎng)絡(luò)和單片機(jī)(microcontroller unit,MCU)之間的通信,而且速度和數(shù)據(jù)可靠性也有一定的保證。
該系列中,W5100是一款多功能的單片網(wǎng)絡(luò)接口芯片,內(nèi)部集成有10/100 MB以太網(wǎng)控制器。由于其高集成、高穩(wěn)定、高性能和低成本等特點(diǎn),一直大量用于嵌入式系統(tǒng)中。使用W5100可以實(shí)現(xiàn)沒有操作系統(tǒng)的Internet連接。W5100與IEEE 802.3 10BASE-T和802.3u 100BASE-TX兼容。W5100內(nèi)部集成了全硬件、穩(wěn)定、高效的TCP/IP協(xié)議棧、以太網(wǎng)介質(zhì)傳輸層和物理層。使用W5100不需要考慮以太網(wǎng)的控制,只需要進(jìn)行簡單的端口(Socket)編程。W5200是W5100的升級版。與W5100相比,W5200具有以下優(yōu)勢。
①W5200支持高速SPI總線(≤100 MHz),支持8個(gè)獨(dú)立的端口同時(shí)連接。W5100只有4個(gè)獨(dú)立端口。②W5200提供休眠模式和網(wǎng)絡(luò)喚醒,更低功耗。③W5200具有極小巧的48引腳QFN無鉛封裝,芯片體積更小。④W5200使用簡單,只需添加現(xiàn)有的庫文件,覆蓋Arduino IDE原有的W5100庫文件,燒錄后即可運(yùn)行。⑤W5200具備32 KB內(nèi)部通信緩沖,W5100只有16 KB。
因?yàn)閃5200芯片和SD讀卡器都通過在線串行編程(in-circuit serial programming,ICSP)針腳使用SPI總線與單片機(jī)通信,所以這兩個(gè)功能不能同時(shí)使用,否則用戶需要采用一個(gè)協(xié)同運(yùn)作的庫程序。而W5500與W5200擴(kuò)展板相比,增加了POE供電、網(wǎng)絡(luò)喚醒模式、集成主板等功能,且主板使用了一個(gè)新的高效SPI協(xié)議,支持80 MHz通信速率,從而能夠更好地實(shí)現(xiàn)高速網(wǎng)絡(luò)通信[6]。
幾種以太網(wǎng)擴(kuò)展板比較如表2所示。
表2中,W5500、W5200、W5100擴(kuò)展板是兼容Arduino Mega2560主板的,可以利用Mega2560主板的SPI接口直接進(jìn)行通信。
表2 幾種以太網(wǎng)擴(kuò)展板比較
根據(jù)表2,本文最終選擇了W5500作為網(wǎng)絡(luò)控制芯片,并和主板進(jìn)行集成控制。主板與W5500芯片通信如圖2所示。通過SPI方式進(jìn)行連接,其引腳主要包含LED(控制引腳)、nINT(中斷控制引腳)、nRST(芯片復(fù)位引腳)、PWDN(電源控制引腳)、5500_CS(網(wǎng)絡(luò)接口卡片選引腳)、SD_CS SD(卡片選引腳)、MISO(主器件數(shù)據(jù)輸入、從器件數(shù)據(jù)輸出),MOSI(主器件數(shù)據(jù)輸出、從器件數(shù)據(jù)輸入),SCLK(時(shí)鐘信號),SS(從器件使能信號)。
圖2 主板與W5500芯片通信示意圖
在實(shí)際的W5500與Mega2560主板的硬件連接電路中,主芯片采用ATMEL ALMEGA32。它是網(wǎng)絡(luò)接口卡的控制芯片。其一端的引腳與Mega2560的控制引腳相連,而另一端的引腳連接以太網(wǎng)控制芯片W5500的對外接口。ATMEL ATMEGA32與主板的通信包含前述的SPI通信接口(MOSI,MISO,SCLK,nSCS)以及一些I/O控制端口(nINT,PWDN,nRST)等。
在硬件通信線路連接建立后,系統(tǒng)軟件也需要作相應(yīng)的修改。系統(tǒng)軟件需要在不影響原打印機(jī)工作流程的前提下新增打印文件遠(yuǎn)程傳輸、遠(yuǎn)程打印啟動、打印暫停、打印停止、打印狀態(tài)獲取、托盤回零、遠(yuǎn)程熱床、獲取日志等必要的3D打印機(jī)遠(yuǎn)程操作[7]。
系統(tǒng)Mega2560主板和以太網(wǎng)擴(kuò)展芯片W5500通過SPI和輸入輸出接口連接。W5500可外接RJ-45物理接口和SD卡,負(fù)責(zé)處理打印操作、狀態(tài)查詢、G代碼文件讀取以及網(wǎng)絡(luò)傳輸狀態(tài)顯示、收發(fā)網(wǎng)絡(luò)數(shù)據(jù)和讀寫SD卡。而主板通過數(shù)據(jù)緩存接收待處理的G代碼序列,并通過代碼解釋、插補(bǔ)等內(nèi)部處理發(fā)送脈沖寬度調(diào)制(pulse width modulation,PWM)脈沖到電機(jī)驅(qū)動,通過I/O操作控制加熱器進(jìn)行溫度控制以及其他相關(guān)的I/O操作,如開關(guān)門、開關(guān)水冷機(jī)等[8]。同時(shí),3D打印機(jī)的溫度數(shù)據(jù)及通過I/O數(shù)字量的讀取獲得當(dāng)前打印機(jī)開關(guān)量的狀態(tài)。由于被測打印機(jī)使用步進(jìn)電機(jī)驅(qū)動,主板芯片不需要讀取電機(jī)的狀態(tài)反饋。
系統(tǒng)軟件架構(gòu)如圖3所示。
圖3 系統(tǒng)軟件架構(gòu)
具體到系統(tǒng)實(shí)現(xiàn),需求被細(xì)化為以下四類。
①傳輸大文件。
由于3D打印G代碼文件都比較大,部分文件達(dá)100~200 MB,所以要求網(wǎng)絡(luò)文件傳輸速度非常快。因?yàn)镾D卡存儲和以太網(wǎng)傳輸都依賴SPI總線速度,所以實(shí)際使用中,SPI的速度是網(wǎng)絡(luò)傳輸速度最主要的影響因素。實(shí)際測試中發(fā)現(xiàn)使用W5100時(shí),上傳速度為7.47 kbit/s,下載速度為51.79 kbit/s;而使用W5200和W5500時(shí),由于其支持高速SPI,所以讀寫速度大大提高,在打開SD卡選項(xiàng)的SPI_FULL_SPEED的情況下,對于class 6和class10的高速SD卡,上傳速度達(dá)到188.08 kbit/s,下載速度達(dá)到 170.18 kbit/s。傳輸100 MB的文件約需9 min,能夠滿足客戶要求的100 kbit/s以上的傳輸速度需求。
②遠(yuǎn)程控制打印機(jī)操作。
遠(yuǎn)程打印機(jī)控制操作包含打開G代碼文件、打印啟動/繼續(xù)、打印機(jī)暫停以及停止操作等控制。為了更好地兼容其他場合,數(shù)據(jù)格式采用標(biāo)準(zhǔn)的JS 對象簡譜 (java script object notation,JSON)交換格式。
③獲取打印機(jī)狀態(tài)信息。
打印機(jī)狀態(tài)信息獲取包含獲取信息(get info)、獲取溫度(get temp)、獲取狀態(tài)(get status)。獲取信息包含打印機(jī)名、IP地址信息和MAC地址信息;獲取溫度包含左噴頭溫度T0、右噴頭溫度T1、腔室溫度C、熱床溫度B、料倉溫度F、料倉濕度H;獲取狀態(tài)包含打印機(jī)百分比、已花費(fèi)時(shí)間、剩余時(shí)間、是否啟動中、是否暫停中以及錯(cuò)誤碼。其格式也采用了標(biāo)準(zhǔn)的JSON格式編碼。
④獲取日志。
獲取日志和傳輸大文件都是通過文件傳輸協(xié)議(file transfer protocol,F(xiàn)TP)傳輸。通過在主板上建立FTP服務(wù)器服務(wù),然后通過通用的FTP軟件,如FileZilla、FTPRush等軟件即可進(jìn)行傳輸。但是Arduino系統(tǒng)中并不自帶FTP服務(wù),需要參考開源程序FTP Server on Arduino并進(jìn)行移植[9]。
系統(tǒng)其他需求(如托盤回零、遠(yuǎn)程熱床等)在打印過程中會自動被執(zhí)行,所以并沒有設(shè)置專用指令來執(zhí)行。另外,系統(tǒng)可以透傳G代碼控制指令,即直接遠(yuǎn)程輸入G代碼指令讓3D打印機(jī)執(zhí)行相關(guān)指令[10]。
云制造是新一代的智能制造平臺,通過網(wǎng)絡(luò)提供服務(wù),集成異地企業(yè)的制造能力和生產(chǎn)水平,使企業(yè)通過平臺即可完成產(chǎn)品的采購、設(shè)計(jì)、工藝、制造、生產(chǎn)、售后等各個(gè)環(huán)節(jié),大大提高了企業(yè)和社會資源的利用率[11]。而3D打印機(jī)的柔性制造能力、創(chuàng)新生產(chǎn)能力可以大大提升企業(yè)新產(chǎn)品的協(xié)同設(shè)計(jì)和協(xié)同制造能力,使產(chǎn)品制造變得更加智能、高效、個(gè)性化[12]。
目前,很多3D打印機(jī)都采用基于Marlin的固件。由于Marlin沒有內(nèi)置的以太網(wǎng)接口,很多基于Marlin開源的3D打印機(jī)都沒有云制造的接口。本文根據(jù)外國客戶的3D打印機(jī)改進(jìn)需求,在W5x00的基礎(chǔ)上研究了基于Marlin的3D打印機(jī)云設(shè)計(jì)與實(shí)現(xiàn),針對Marlin進(jìn)行改造,使其具有連接到云打印平臺的屬性和功能,可以滿足更多的應(yīng)用場合需求。這種方案兼容性好,開發(fā)周期短,成本低,不需要更改打印機(jī)外殼?;赥CP/IP標(biāo)準(zhǔn)的通信協(xié)議也可方便地使用手機(jī)或者計(jì)算機(jī)上的TCP客戶端軟件進(jìn)行連接和控制,并可以用作云制造的接口。該方案不僅適用于Marlin系統(tǒng),也可以作簡單改動后匹配其他類型的3D打印機(jī)固件系統(tǒng)。