劉 晉 步亞男 金禹含 蘇 臣
(遼寧師范大學計算機信息與技術學院 遼寧 大連 116000)
?
桌面3D打印機控制系統的設計與實現
劉晉步亞男金禹含蘇臣
(遼寧師范大學計算機信息與技術學院遼寧 大連 116000)
目前市場上的桌面3D打印機的控制系統基本都是國外開發的開源控制系統,因此有必要開發一款3D打印機的控制系統。該控制系統下位機程序運行在arm處理器和μCOS環境下,上位機控制軟件是在微軟的WPF框架下通過c#語言開發的。系統工作過程為:上位機軟件讀取并處理文件中讀取的命令,然后通過串口發送到下位機,下位機接到命令后對命令進行處理并控制步進電機的運動。最后系統經過調試運行,雖然在打印效果和機器運行速度上沒有顯著提高,但是這是一種新的嘗試,證明了該控制系統的可行性。
3D打印arm stm32μCOSWPF
自1984年Charles Hull制作出第一臺3D打印機以來,3D打印技術歷經了30多年的發展,正逐步成為最有生命力的先進制造技術之一[1]。在全球3D Systems和Stratasys兩家公司的產品占據了絕大多數市場份額[2]。目前市場上的桌面3D打印機種類繁多。常見的有RepRap類型、BoxBot類型、RepStrap類型等。本文用的是RepRap機型,它具有開源的控制板以及固件[3]。本文沒有用開源的控制板和固件,而是嘗試著開發一款新型的3D打印機控制系統。整個控制系統分為上位機程序和下位機程序兩部分。上位機程序讀取G-code文件將命令行通過usb轉串口數據線發送到stm32開發板。下位機主要包括溫控模塊、串口數據接收模塊、數據處理模塊、電機運動控制模塊等。
1.1機械原理
3D打印機根據其使用的坐標系可分為笛卡爾坐標系和極坐標系等。根據其材料的成型原理可分為:燒結和融化、粉末-粘合劑、熔融沉積造型技術、層壓制造、高分子聚合反應等。本文使用的RepRap機型的核心靈感來源于笛卡爾機械,它可以沿X、Y和Z軸三個直線方向移動,每個軸使用較高精度和準度的小型步進電機,再通過細分控制步進電機使其精度達到1 mm左右。其中,X軸和Y軸通過同步帶沿軸向提供快速、精準的定位,Z軸通過螺紋桿實現精準定位。其材料成型的原理為熔融沉積造型技術。即在指定的位置上讓熱熔塑料通過加熱后的噴頭,擠出很細塑料絲。最后通過沉積塑料絲的方式繪制3D物品。
1.23D打印機的工作鏈
3D打印機工作流程中的每一步都有相應的軟硬件配合,正是它們構成了3D打印的工作鏈。工作鏈的簡圖如圖1所示。
(1) 3D模型
整個流程是從一個3D模型開始的。它可以是.stl文件或者其他3D模型的文件格式,可以從網上下載,也可以通過3D制作軟件制作。
(2) 模型分層和路徑文件
模型準備好后,由于3D打印機是將模型按層打印的,一次只打印一層。所以需要把模型分層,并且生成路徑文件。打印頭根據路徑文件運動并擠出打印絲。Cura是一款應用比較廣泛的分層軟件,這里將直接使用Cura軟件進行分層。
(3) 打印控制軟件
打印控制軟件是在電腦端的應用軟件,它將G-code文件中的命令行發送至底層的控制板從而控制打印機工作。
(4) 固件
固件即底層的控制程序,負責解釋G-code指令,控制電子器件執行。固件直接影響到打印物品的質量。

圖1 3d打印機工作鏈
上位機控制軟件的開發環境為visual studio2010中的WPF開發框架,WPF開發理念更符合自然哲學的思想而且界面較好,與其他界面開發工具相比,較為簡單,程序更加簡潔清晰。底層控制程序的開發環境為 windows XP下的Keil MDK,使用意法半導體公司的stm32開發板,處理器為ARMCortex-M3。同時為其移植了μCOSⅢ嵌入式實時操作系統。
圖2為開發環境中的預覽效果,有原點坐標初始化、噴頭溫度設置、打開文件按鈕、發送按鈕、串口狀態顯示、暫停打印按鈕等。

圖2 軟件界面圖
3.1打開文件按鈕
此功能通過OpenFileDialog類實現。打開文件后,文件路徑顯示到界面,用SerialPort類打開串口并進行參數初始化。使用COM6端口,波特率為115 200,數據位8位,停止位1位。
3.2發送按鈕
此按鈕實現從G-Code文件讀取一行命令,并發送到下位機。由于G-Code文件一般都是幾萬行,而且每行命令需發到下位機解處理后才能讀取下一條。因此由于長時間未跳出button的事件處理函數,因此在發送按鍵的事件處理函數中新建一個線程專門用于讀取G-Code文件。如果未收到下位機的反饋則掛起該線程,以保證其它的線程不受影響。
4.1開發前準備
開發之前,需先將μCOSⅢ移植到stm32開發板上,μCOS是一個可裁剪、可固化、可剝奪型的實時內核[5]。底層控制程序主要包括以下幾個模塊兒。
4.2溫控模塊
溫控模塊包括測溫和加熱兩部分。溫控模塊的電路圖如圖3所示。首先通過ADC外設獲得熱敏電阻的分壓,從而確定其電阻,進一步根據熱敏分度表獲得當前溫度。得到當前溫度后通過PID算法,實現了快速,穩定的溫度控制。

圖3 溫控模塊電路圖
4.3限位開關模塊
3D打印機工作前需要將打印頭回到原點,并進行一系列的初始化。這里將限位開關一端接地,另一端連接到控制板的外部中斷接口。通過外部中斷判斷打印頭是否到達原點位置。調試過程中筆者發現打印頭在還未觸發限位開關時,步進電機就已經停止了轉動。經過反復調試,發現步進電機的脈沖信號對外部中斷信號造成了干擾。解決方法為將普通的導線換成了屏蔽雙絞線。
4.4串口接收模塊
上位機和下位機通過串口實現通信,其中,PA9和PA10分別為串口通信的發送和接收引腳。將PA9配置為復用推挽輸出模式,PA10配置為浮空輸入模式,然后進行USART的初始化。當數據發送至串口觸發串口中斷并執行串口中斷處理函數。其中需用到μCOS-Ⅲ提供的存儲管理方法。
4.5命令解析模塊
此模塊通過有限狀態機實現。本文的狀態機如圖4所示。當命令解析模塊收到一條命令后將其分成若干段。如收到” G0 F9000 X0 Y0 Z0”后,將其分解為”G0”、”F9000”、”X0”、”Y0”、”Z0”等作為狀態機的事件,根據當前狀態執行不同的程序,并根據情況改變當前狀態。

圖4 狀態機狀態轉換圖
4.6電機控制模塊
PWM在電子技術中占據著重要的地位,被廣泛應用在逆變電路中。以正弦波為例,將正弦波等分成N份,利用相同數量的等幅不等寬的矩陣脈沖代替,使矩形脈沖的中點重合,且使矩形脈沖和相應的正弦波部分面積相等,就得到一系列幅值相等而寬度隨正弦規律變化的矩形脈沖[8]。3D打印工作過程中需要步進電機轉動精確地步數。因此直接利用定時器的PWM輸出功能有一定的局限性。因此本文利用stm32的通用定時器和GPIO重新實現了步進電機電脈沖的輸出控制。
本文使用通用定時器的四個通道,其中三個通道分別控制PB10、PB12、PB14輸出電平,控制X、Y、Z軸步進電機的運動。另外一個控制擠出機的步進電機。在定時器中斷處理函數中有四個分支。如果中斷來自通道1,則改變X軸步進電機控制引腳PB10的輸出電平,并且將當前比較寄存器TIMx_CCR的值加上T。通過改變T的值就可以控制PB10輸出固定周期的脈沖信號。由于定時器的時鐘頻率為1 KHz,所以定時器的脈沖間隔T=1/1 MHz。即計數周期為1微秒。如果每計T個數,改變一次輸出電平,則脈沖信號的周期為2T微秒。為了控制步進電機轉動精確地步數,文章中用了X_Step變量。每走一步X_Step變量執行減1操作。一旦X_Step為0。則關閉相應通道的計時脈沖。這樣就可以輸出固定步數、固定周期的脈沖信號了,從而實現了對步進電機的精確控制。
將上位機和下位機用于同步的控制字符顯示在打印控制軟件界面上。當機器運行卡住時,可以確定問題的所在。調試中,經常出現上位機發送100條左右命令時機器停止運行。通過控制字符知道問題出在下位機。通過編程軟件的watch功能發現,機器停止運行時,控制電機運動的一個變量值為0。該變量直接決定脈沖信號波周期。若它的值為0,則沒有脈沖信號輸出。將算法優化后,問題得到了解決。目前,3D打印機已經可以持續的運行。圖5為調試過程打印出的一些樣品。

圖5 打印樣品
本控制系統在運行上相對穩定,是3D打印控制系統的一次新的嘗試。雖然在打印效果上沒有市場上的打印機完美,但是對于國內3D打印的發展有一定的借鑒和參考意義。
[1] 黃健,姜山.3D打印技術將掀起“第三次工業革命”?[J].新材料產業,2013(1):62-67.
[2] 王雪瑩.3D打印技術與產業的發展及前景分析[J].中國高新技術企業,2012(26):3-5.
[3] Brian Evans.解析3D打印機[M].北京:機械工業出版社,2013.
[4] 劉鐵猛.深入淺出WPF[M].北京:中國水利水電出版社,2010.
[5] Jean J Labrosse.嵌入式實時操作系統μc/OS-Ⅲ[M].北京:北京航空航天大學出版社,2012.
[6] 姜換新.ARM嵌入式系統C語言編程[J].計算機應用與軟件,2003,20(10):15-16.
[7] 譚同超.有限狀態機及其應用[D].廣州:華南理工大學,2013.
[8] 謝可,姚鴻強.基于PWM的數字音頻播放器設計[J].計算機應用與軟件,2014,31(5):328-329,333.
[9] 牛晰.桌面3D打印機結構分析及機體設計研究[J].設計,2015(4):94.
DESIGN AND IMPLEMENTATION OF DESKTOP 3D PRINTER CONTROL SYSTEM
Liu JinBu Ya’nanJin YuhanSu Chen
(CollegeofComputerandInformationTechnology,LiaoningNormalUniversity,Dalian116000,Liaoning,China)
Most of the desktop 3D printer control systems on the market are basically the open source system developed by other countries. Therefore we decided to develop a 3D printing control system with the help of our tutor. The lower computer in control system operates its program on arm processor and in the environment of μCOS, and the control software of the upper computer is developed by c# in WPF frame of Microsoft. The working processes are as follows: the upper computer software reads and processes the commands in a text file, and then sends the processed commands to lower computer system through serial port. The lower system processes the commands after receiving them and controls the motions of stepper motor. Finally we debugged the system. Though there has no significant improvement in both printing effect and operation speed of printer, however as a new attempt, it proves the feasibility of this control system.
3D printingarm stm32μCOSWPF
2015-07-12。劉晉,教授,主研領域:嵌入式系統。步亞男,碩士生。金禹含,碩士生。蘇臣,碩士。
TP3
A
10.3969/j.issn.1000-386x.2016.10.072