靳 濤, 馬 杰, 楊立闖
(河北工業(yè)大學(xué) 電子信息工程學(xué)院,天津 300401)
3D打印的3.0時(shí)代的到來,提供了3D打印技術(shù)[1,2]與WiFi技術(shù)相結(jié)合的方案[3],基于移動(dòng)終端無線網(wǎng)絡(luò)技術(shù),3D打印由傳統(tǒng)單一設(shè)備的“制造”向網(wǎng)絡(luò)信息化的“智造”轉(zhuǎn)型。改善傳統(tǒng)打印機(jī)電纜連接通信的弊端[4],利用移動(dòng)終端設(shè)備實(shí)現(xiàn)3D打印機(jī)數(shù)據(jù)的遠(yuǎn)程實(shí)時(shí)交互。
本文基于嵌入式實(shí)時(shí)系統(tǒng)設(shè)計(jì)一種3D打印機(jī)遠(yuǎn)程控制系統(tǒng),利用WiFi模塊將下位機(jī)STM32主控芯片與用戶Android移動(dòng)控制端連接,建立用戶與3D打印機(jī)之間的無線傳輸網(wǎng)絡(luò),用戶通過Android移動(dòng)終端可以對(duì)3D打印機(jī)的實(shí)時(shí)控制,節(jié)省了用戶現(xiàn)場觀察的不必要時(shí)間。該系統(tǒng)具有結(jié)構(gòu)簡單、成本低、功耗低、易安裝等優(yōu)點(diǎn)。設(shè)計(jì)重點(diǎn)為3D打印機(jī)的控制系統(tǒng)與Android移動(dòng)終端的遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)。
3D打印機(jī)無線網(wǎng)絡(luò)系統(tǒng)由WiFi模塊建立一個(gè)核心網(wǎng)關(guān),協(xié)調(diào)上層應(yīng)用層與底層無線網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)交互。3D打印機(jī)的各項(xiàng)參數(shù)經(jīng)WiFi網(wǎng)絡(luò)傳至用戶移動(dòng)終端。本文采用WiFi模塊的接入點(diǎn)(access point,AP)模式和STA(station)模式[5]。AP模式下,WiFi模塊是無線網(wǎng)絡(luò)的中心節(jié)點(diǎn),Android移動(dòng)終端連接打印機(jī)無線網(wǎng)絡(luò)熱點(diǎn),在不需要基礎(chǔ)設(shè)施的情況下快速組建局域網(wǎng)進(jìn)行數(shù)據(jù)傳輸。STA模式下,WiFi模塊是無線網(wǎng)絡(luò)的終端節(jié)點(diǎn),通過網(wǎng)關(guān)連接到Internet網(wǎng),與遠(yuǎn)端TCP 客戶端相連。這種組網(wǎng)方式可將3D打印機(jī)的數(shù)據(jù)通過無線路由器的橋接功能轉(zhuǎn)發(fā)到服務(wù)器的網(wǎng)關(guān)進(jìn)行處理,Android移動(dòng)終端則通過外網(wǎng)直接訪問服務(wù)器的IP地址,進(jìn)而得到打印機(jī)數(shù)據(jù),實(shí)現(xiàn)3D打印機(jī)的遠(yuǎn)程控制。3D打印機(jī)無線網(wǎng)絡(luò)控制系統(tǒng)整體框架如圖1所示。
圖1 無線網(wǎng)絡(luò)系統(tǒng)整體框架
3D打印機(jī)控制系統(tǒng)整體框架如圖2所示,主控制器為STM32F405,通過USB OTG電路讀取U盤里的Gcode模型文件,主控芯片逐行解析文件中的G指令,對(duì)步進(jìn)電機(jī)的轉(zhuǎn)速方向、位置偏移量和速度精確控制,其中4路步進(jìn)電機(jī)驅(qū)動(dòng)分別控制X,Y,Z和擠出機(jī)的步進(jìn)電機(jī)的驅(qū)動(dòng)脈沖。3路限位開關(guān)用于反饋步進(jìn)電機(jī)的位置信息,定位打印的初始和結(jié)束位置。主控制器分別通過三極管開關(guān)電路及比例—積分—微分(proportional-integral-differential,PID)算法控制噴頭加熱棒和熱床溫度,噴頭采用K型熱電偶經(jīng)SPI接口反饋主控制器,熱床采用DS18B20單總線溫度傳感器采溫反饋到主控制器,對(duì)3D打印機(jī)的溫度系統(tǒng)實(shí)時(shí)控制。Android移動(dòng)終端的APP通過WiFi網(wǎng)絡(luò)傳輸打印數(shù)據(jù)。
圖2 3D打印機(jī)控制系統(tǒng)整體框架
系統(tǒng)控制電路的主控芯片為ARM內(nèi)核的STM32F405微控制器,內(nèi)部含有1MB Flash,256 kB RAM,168 MHz工作頻率,完全可以運(yùn)行RT—Thread實(shí)時(shí)操作系統(tǒng)。
采用USR—C215芯片,該無線模塊設(shè)有3種WiFi工作模式:STA,AP,AP+STA,可以提供十分靈活的組網(wǎng)方式和網(wǎng)絡(luò)拓?fù)浞椒āV骺刂破髋c該模塊實(shí)現(xiàn)串口數(shù)據(jù)到網(wǎng)絡(luò)數(shù)據(jù)的透傳,包括Socket透傳和Http Client透傳,可實(shí)現(xiàn)3D打印機(jī)快速組網(wǎng)。USR-C215電路原理如圖3所示。
圖3 USR—C215電路原理
設(shè)計(jì)的電機(jī)驅(qū)動(dòng)模塊采用Allergro公司的A4988電機(jī)驅(qū)動(dòng)器,可在全、半、1/4,1/8及1/16步進(jìn)模式時(shí)操作步進(jìn)電機(jī),輸出驅(qū)動(dòng)性能可達(dá)到35V及±2A。
本文采用1/16細(xì)分,即將MS1,MS2,MS3引腳置高,主控制器只需控制驅(qū)動(dòng)模塊的EN,DIR,STEP 3個(gè)引腳即可完全控制步進(jìn)電機(jī)驅(qū)動(dòng)。其中,EN為步進(jìn)電機(jī)的使能端,DIR為步進(jìn)電機(jī)的方向控制端,STEP為步進(jìn)電機(jī)的脈沖輸入端[6]。步進(jìn)電機(jī)驅(qū)動(dòng)電路原理如圖4所示。
圖4 步進(jìn)電機(jī)驅(qū)動(dòng)電路原理
USB OTG電路是3D打印機(jī)中用于接插U盤的接口電路,為保證信號(hào)傳輸正常,抑制干擾,USB的D+和D-兩根線要差分處理,同時(shí)串聯(lián)差分阻抗,以防止信號(hào)反射。本設(shè)計(jì)為防止熱插拔中靜電的干擾,采用PRTR5V0U4D靜電保護(hù)芯片來保護(hù)D+,D-,VBUS引腳的功能。USB OTG電路原理如圖5所示。
圖5 USB OTG電路原理
本文選用了RT-Thread實(shí)時(shí)操作系統(tǒng)[7],具有實(shí)時(shí)性、穩(wěn)定性、可裁剪性的特點(diǎn)。系統(tǒng)中的任務(wù)采用線程來實(shí)現(xiàn),通過線程來描述任務(wù)的優(yōu)先級(jí)和上下文關(guān)系,并通過系統(tǒng)提供的調(diào)度器將最高的就緒線程運(yùn)行。
本文的3D打印機(jī)遠(yuǎn)程控制系統(tǒng),需要將各自功能設(shè)計(jì)成各自可調(diào)度的,序列化的并行執(zhí)行程序線程,將3D打印機(jī)的功能:電機(jī)驅(qū)動(dòng)、WiFi傳輸、U盤G命令解析、加熱控制、液晶顯示劃分為執(zhí)行任務(wù),RT—Thread操作系統(tǒng)根據(jù)任務(wù)的優(yōu)先級(jí)來執(zhí)行對(duì)應(yīng)的任務(wù)操作。各應(yīng)用線程創(chuàng)建完后,由調(diào)度器根據(jù)各個(gè)線程的優(yōu)先級(jí)先后進(jìn)行調(diào)度。每個(gè)線程將在就緒、運(yùn)行、掛起3個(gè)狀態(tài)不停切換,從而3D打印機(jī)的各個(gè)線程得以實(shí)時(shí)運(yùn)行。3D打印機(jī)遠(yuǎn)程控制系統(tǒng)流程如圖6所示。
圖6 3D打印機(jī)遠(yuǎn)程控制系統(tǒng)流程
WiFi模塊的底層配置主要實(shí)現(xiàn)串口數(shù)據(jù)的收發(fā)與報(bào)文的廣播。本文采用緩沖機(jī)制和信號(hào)量來收發(fā)串口數(shù)據(jù),即將數(shù)據(jù)存儲(chǔ)到串口寄存器,并保存到環(huán)形緩沖區(qū)buffer中,定義head變量標(biāo)記當(dāng)前寫入的位置,tail變量表示發(fā)送數(shù)據(jù)的位置,同時(shí)標(biāo)記當(dāng)前數(shù)據(jù)處理長度len。當(dāng)接收指針指向緩沖區(qū)末尾時(shí),只要緩沖區(qū)頭的數(shù)據(jù)被處理,緩沖區(qū)指針會(huì)重新指向頭位置,這樣當(dāng)數(shù)據(jù)處理線程阻塞時(shí),連續(xù)收到的數(shù)據(jù)會(huì)保存到緩沖區(qū)中而避免了丟失。當(dāng)數(shù)據(jù)處理的線程處于就緒狀態(tài),則開始數(shù)據(jù)處理,要求處理數(shù)據(jù)的速度高于接收到的數(shù)據(jù),緩沖區(qū)部分設(shè)計(jì)為一個(gè)結(jié)構(gòu)體。
本文為WiFi模塊設(shè)計(jì)一個(gè)獨(dú)立的線程用于WiFi數(shù)據(jù)處理,其優(yōu)先級(jí)為23,系統(tǒng)上電后會(huì)輪詢WiFi模塊的NREADY與NLINK引腳狀態(tài),判斷WiFi模塊是否啟動(dòng)完畢,是否有WiFi節(jié)點(diǎn)接入,紅綠發(fā)光二極管指示當(dāng)前連接狀態(tài)。主控制器將接收WiFi數(shù)據(jù)按特定協(xié)議解析數(shù)據(jù),實(shí)現(xiàn)控制3D打印機(jī)的操作;反之,3D打印數(shù)據(jù)通過串口發(fā)到WiFi模塊,并廣播到AP節(jié)點(diǎn)。WiFi底層流程如圖7。
圖7 WiFi底層流程
本系統(tǒng)采用開環(huán)控制步進(jìn)電機(jī)驅(qū)動(dòng)命令,然后對(duì)命令的參數(shù)進(jìn)行解析,從而驅(qū)動(dòng)4路步進(jìn)電機(jī)的協(xié)調(diào)運(yùn)動(dòng)。其中U盤里的運(yùn)動(dòng)指令包括電機(jī)運(yùn)動(dòng)的坐標(biāo)位置,速度大小,每層的高度等參數(shù)。在解析命令過程中,需要加入一個(gè)緩沖區(qū)協(xié)調(diào)讀取與解析命令的時(shí)間差。為防止電機(jī)在啟動(dòng)和停止時(shí)發(fā)生失步和過沖,需以電機(jī)的啟動(dòng)頻率啟動(dòng)然后增加到工作頻率,在停止時(shí)電機(jī)先降低到脈沖頻率最后降低到截止頻率,因此電機(jī)的運(yùn)動(dòng)采用S型曲線算法。流程如圖8所示。
圖8 電機(jī)行程管理
本文Android移動(dòng)終端基于adt-bundle-eclipse開發(fā)平臺(tái),采用Java語言開發(fā)。
設(shè)計(jì)將USR—C215的WiFi模塊設(shè)計(jì)成服務(wù)器,將Android移動(dòng)終端設(shè)計(jì)成客戶端,二者之間的數(shù)據(jù)傳輸采用TCP/IP協(xié)議,通過Socket通信[8~10]。
USR—C215 WiFi模塊作為無線網(wǎng)卡,將IP地址映射到無線路由器中,這里使用動(dòng)態(tài)配置網(wǎng)關(guān)。本文通過開啟后臺(tái)的IP地址連接服務(wù),采用key—value鍵值對(duì)來存儲(chǔ)變化的IP與端口號(hào)。客戶端連接服務(wù)器Socket的IP與端口號(hào)后,建立Socket實(shí)例對(duì)象,通過InputStream讀取數(shù)據(jù),通過OutputStream將數(shù)據(jù)封裝發(fā)送,完成服務(wù)器與客戶端的數(shù)據(jù)對(duì)話。
為實(shí)時(shí)查看打印機(jī)中的狀態(tài)數(shù)據(jù),需開啟U盤文件監(jiān)聽,打印狀態(tài)數(shù)據(jù)監(jiān)聽以及打印控制命令監(jiān)聽,每隔100 ms會(huì)更新1次監(jiān)聽數(shù)據(jù)??蛻舳私邮誛iFi模塊節(jié)點(diǎn)數(shù)據(jù),通過Broadcast同步廣播機(jī)制,將數(shù)據(jù)發(fā)送到不同的廣播接收進(jìn)程進(jìn)行數(shù)據(jù)處理。Android 移動(dòng)終端流程如圖9。
圖9 Android移動(dòng)終端流程
本設(shè)計(jì)采用WiFi的STA模式測試,WiFi模塊的IP映射到本地的無線路由器,Android移動(dòng)終端則通過外網(wǎng)連接無線路由器的靜態(tài)IP與端口,實(shí)現(xiàn)WiFi模塊—無線路由器—Internet—Android移動(dòng)終端之間的數(shù)據(jù)傳輸通路。
1)登錄:打開軟件進(jìn)入登錄界面,輸入正確的用戶名和密碼,跳轉(zhuǎn)到應(yīng)用程序的主界面,如圖10(a)所示。
2)設(shè)置服務(wù)器的IP與端口號(hào):設(shè)置遠(yuǎn)程路由器的靜態(tài)IP和端口號(hào),如圖10(b)所示。
3)數(shù)據(jù)傳輸:選中U盤按鍵,即可讀取U盤文件列表,選擇打印文件模型,如圖10(c)所示,轉(zhuǎn)至“打印狀態(tài)”界面,如圖10(d)所示,即可開始模型打印。3D打印機(jī)的電機(jī)歸位原點(diǎn),等待噴頭、熱床溫度升至打印溫度,即可開始讀取U盤G指令,并打印模型。在打印過程中,可遠(yuǎn)程查看打印機(jī)的打印數(shù)據(jù)、控制打印機(jī)的停止、熱床溫度、自動(dòng)斷電等操作。當(dāng)打印出現(xiàn)異常,如在打印過程中噴頭降低到目的溫度以下,手機(jī)會(huì)啟動(dòng)聲音報(bào)警,及時(shí)提醒用戶,并采取相應(yīng)措施。提高打印的成功率。
圖10 Android智能手機(jī)移動(dòng)界面
3D打印機(jī)遠(yuǎn)程數(shù)據(jù)傳輸測試如表1。通過對(duì)3D打印機(jī)不同距離的多次模型打印測試,得出結(jié)論:手機(jī)端登錄路由器公網(wǎng)IP的WiFi網(wǎng)絡(luò),即可異地遠(yuǎn)程控制打印機(jī)。在毫秒(ms)級(jí)上可以達(dá)到手機(jī)端與3D打印機(jī)數(shù)據(jù)的實(shí)時(shí)交互,且信號(hào)強(qiáng)度在-75~-60 dBm以內(nèi),遠(yuǎn)程數(shù)據(jù)傳輸丟包率均小于2 %,滿足無線遠(yuǎn)程傳輸要求,達(dá)到了設(shè)計(jì)目的。
實(shí)際測試證明,用戶通過手機(jī)實(shí)現(xiàn)了遠(yuǎn)程控制3D打印機(jī)的功能。移動(dòng)終端通過對(duì)U盤、電機(jī)、溫度系統(tǒng)的數(shù)據(jù)監(jiān)聽,保證了移動(dòng)終端與網(wǎng)關(guān)數(shù)據(jù)的實(shí)時(shí)交互,為用戶查看打印狀態(tài)帶來了很大的便利,提高了打印的成功率。