孫超林,王鑫,李前,盧雁飛,江良義
(天津理工大學 工程訓練中心,天津 300384)
STM32的環保型便攜式3D打印機研制*
孫超林,王鑫,李前,盧雁飛,江良義
(天津理工大學 工程訓練中心,天津 300384)
本文以STM32F1系列32位微處理器作為主控芯片,混合式步進電機為XYZ三軸提供動力,構成小型便捷式3D打印機。該打印機可通過SD卡進行脫機離線打印,減少對主機的依賴,提高便攜性,還配備了觸摸屏控制功能,使控制界面更加簡單明了,降低了操作失誤的可能性;同時采用環保型材料PLA(Polylactic Acid,即聚乳酸),打印過程中不產生任何有害物質,打印產品可用于家庭、辦公室等環境。
STM32;步進電機;SD卡;觸摸屏;3D打印機
隨著科技的進步與發展,人們的生活方式日趨便捷化,各種能省時、省力的科技產品也相繼問世。擁有一臺能制作出任何能想到形狀的物品的機器是很方便的,3D打印機實現了這種可能[1]。它取代了傳統的加工方式,先是通過繪圖軟件建立模型,再經由主控芯片處理和分析控制步進電機完成一步步打印。相當于將整個模型橫向剖成無數個平面,由X軸和Y軸打印這一平面,再移動Z軸,打印下一平面,層層相疊,合成完整的作品[2]。并且打印過程中只產生很少的邊角廢料,節省了大量的原材料,降低了生產成本。
系統的總體設計框圖如圖1所示。

圖1 系統總體設計框圖
STM32系列微處理器是專為高要求、高性能、低成本、低功耗的嵌入式應用設計的,它基于ARM Cortex-M3的內核。由于STM32F103ZET6的高性能、低功耗以及豐富的外設遠滿足3D打印機的需求,因此該3D打印機采用主頻為72 MHz的STM32F103ZET6作為主控芯片。該主控芯片是同類產品中性能最高的產品,功耗為36 mA,而它的工作電壓是2.0~3.6 V,這是32位市場上功耗最低的產品,相當于0.5 mA/MHz[3],非常適合本系統的開發。
1.1 電機控制模塊
同其他控制系統一樣,電機是一個給3D打印機提供工作動力的關鍵部件,電機的性能直接影響噴頭運動的精度。對于3D打印機的選型,一般從電流、軸直徑、電機驅動、扭矩四個方面考慮。桌面級別的3D打印機,一般用4線2相步進電機,電流可以用1.5 A,一般電流用1 A就足夠了。同步帶帶動的3D打印機需要根據同步輪和聯軸器來選擇軸直徑,一般都在5 mm左右。綜合考慮,該3D打印機的電機采用混合式步進電機[4],具體型號為17HD34008-22B,該電機擁有高速度、高扭矩、低噪音、高性價比等優勢。
1.2 溫度控制模塊
系統采用的溫度傳感器接口是2路100K NTC(熱電阻)、 1路MAX6675(熱電偶)。其可再擴展1路NTC、 1路MAX6675)。NTC溫度傳感器是利用NTC熱敏電阻在一定的測量功率下,電阻值隨著溫度上升而迅速下降。利用這一特性, 可將NTC熱敏電阻通過測量其電阻值來確定相應的溫度,從而達到檢測和控制溫度的目的。而MAX6675是進行熱電偶冷端補償和數字化 K 型熱電偶信號,其可輸出12位分辨率、SPI兼容、只讀的數據。轉換器的精度為 0.25 ℃,最高可讀+1024 ℃,如果使用數據的 8LSB,則溫度范圍為0~+700 ℃[5]。熱電偶的功能是感應熱電偶兩端的溫度差。熱電偶的熱端可以測量0~+1023.75 ℃的溫度范圍,冷端( MAX6675 所在的電路板) 的溫度只能在-20 ℃~+85 ℃范圍內。當冷端的溫度波動時, MAX6675也能精確地感知熱電偶兩端的溫度差,MAX6675可以感知并修正冷端溫度的變化。器件采用熱敏二極管將環境溫度轉換為電壓,為了計算實際溫度,MAX6675將會測量熱電偶輸出端到熱敏二極管之間的電壓。器件內部電路將會把二極管電壓(檢測環境溫度)和熱電偶電壓(檢測遠端環境溫度)傳到ADC 中的轉換功能模塊中, 用來計算遠端的實際溫度。當熱電偶冷端和 MAX6675 有相同的溫度時,MAX6675 工作在最佳的狀態。要避免在MAX6675 附近放置發熱器件或元件,因為這可能導致冷端測量誤差。
1.3 噴頭控制模塊
噴頭控制模塊的穩定性是保證噴頭吐絲連續均勻的關鍵,也是保證打出來的產品質量的關鍵。噴頭的溫度控制模塊采用熱熔擠壓快速成型工藝,通過上位機設定溫度后,需使其溫度保持在穩定區間,以此來保證成型的質量。為了更好地配合噴頭的溫度控制模塊,該打印機采用一種新型的聚乳酸(PLA)生物可降解材料[6],其具有良好的生物可降解性,使用后能被自然界中的微生物在特定條件下完全降解,最終生成二氧化碳和水,不污染環境,這對保護環境非常有利,是公認的環境友好材料,而且其熔點為200°[7],這也大大降低了噴頭的溫度控制模塊要求。
1.4 2.8寸TFT觸摸屏
顯示屏如圖2所示,設計了較好的人機交互系統。直接利用觸摸屏控制打印的所有步驟及其溫度設置,簡單方便。

圖2 顯示屏
1.5 SD卡
SD卡用來實現3D打印機的脫機打印,將所需要打印的產品文件存儲到SD卡中,然后直接通過觸摸屏調用文件打印即可,省去了大量的聯機打印時間,并且不影響手頭的其他工作進行,大大增強了實用性。
2.1 程序流程圖
程序流程圖是整個軟件設計的核心,所有步驟均圍繞其展開,如圖3所示。

圖3 程序流程圖
2.2 程序算法
2.2.1 步進電機各軸脈沖數計算
X、Y軸:步進電機每轉步數(1.8度步距角的電機為200,0.9度步距角的電機為400)×步進電機驅動細分配置(一般16細分)/同步帶齒間距/同步輪齒數。Z軸:步進電機每轉步數×步進電機驅動細分配置/絲杠導程。E軸:步進電機每轉步數×步進電機驅動細分配置×擠出機齒輪傳動比/擠出輪周長。
2.2.2 溫度控制算法
由于3D打印機需要對噴頭和熱床進行加熱,所以溫度控制在3D打印機中非常重要[8]。一個好的溫度控制系統不僅能提高打印精度,還能有效防止各部件由于溫度過高造成的損壞。綜合考慮,本設計溫度控制采用PID算法。
閉環溫度控制系統如圖4所示。圖中,td為給定的目標溫度,tr為溫度傳感器測得的實際溫度,Δt=td-tr。將輸入PID控制器,通過調節PID參數kp、ki、kd三個參數使溫度快速達到給定值且在上下一個極小的范圍內波動。

圖4 閉環溫度控制系統框圖
PID控制器的部分代碼如下:
float pid_input;//PID輸入值
float pid_output;//PID輸出值
int e;
pid_input = current_temperature[e];
//定義當前溫度為PID輸入值
pid_error[e] = target_temperature[e] - pid_input;//計算誤差
pTerm[e] = Kp * pid_error[e];
temp_iState[e] += pid_error[e]; //誤差累加
temp_iState[e] = constrain(temp_iState[e], temp_iState_min[e], temp_iState_max[e]); //積分限幅
iTerm[e] = Ki * temp_iState[e];
#define K2 (1.0-K1)
dTerm[e] = (Kd * (pid_input - temp_dState[e]))*K2 + (K1 * dTerm[e]);
//兩次誤差相減得到微分環節
temp_dState[e] = pid_input;
pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX); //輸出溫度
2.2.3 核心控制算法簡述
由3D打印機原理可知,3D打印之所以能夠打印出構建的3D模型,是由Gcode指令控制步進電機的運動來完成的。但是Gcode指令并不能直接控制步進電機運動,步進電機要得到各軸具體的移動距離才能計算出步數來移動,這就需要算法來實現。首先要從SD 卡中得到Gcode指令(get_command()函數),然后通過process_command()函數對這些指令進行解析,通過這個函數可以在獲取X、Y、Z、E各軸的參數后計算出目標坐標,也可以獲取當前坐標,注意這個坐標為打印件的實際坐標。知道了當前坐標與目標坐標便可以計算出空間中移動的距離了。對于普通結構來說,G1每次將新讀取的Gcode代碼參數傳遞給process_command()函數中prepare_move()函數的某一數組以后,prepare_move()函數就會將其傳遞到plan_buffer_line()進行電機的運動。最后再將打印件的實際坐標轉換為X、Y、Z三軸的運動坐標并計算出步進電機的步數。以下為打印機核心控制算法部分代碼:
void loop(void){
while(1){
if(buflen < (BUFSIZE-1)) {
get_command();
//從SD卡或者串口獲取gcode
}
if(buflen){
process_commands(); //解析gcode并且執行代碼
if(buflen > 0){
buflen = (buflen-1);
bufindr = (bufindr + 1)%BUFSIZE;
}
}
manage_heater(); //控制噴頭和熱床溫度
manage_inactivity(); //控制停止打印
checkHitEndstops(); //檢查endstop的狀態
}
}
打印機本體采用鋁型材框架組合而成,以矩形框架為主體,下方兩爪為支撐,結構精簡。打印機工作時X、Y、Z三軸聯動,X軸步進電機通過傳送帶帶動打印平臺沿正負X方向移動,而Y軸則位于矩形框上框沿Y軸方向移動并帶動打印噴頭,Z軸通過絲杠傳動使打印平臺沿Z軸方向上下移動。各軸均通過步進電機轉動的角度來改變位置,工作時具有較高的穩定性,并且能夠保證打印的精度。
本文提出了一種基于STM32微處理器的便攜式3D打印機的整體設計及部分核心算法,包括硬件電路的設計,打造打印機所需的材料以及打印機所實現功能需要的各種器件;還給出了以STM32為主控芯片的軟件程序和部分關鍵代碼。經過多次調試和反復改裝,該系統實現了3D打印物件的精密打印,并能進行穩定工作。
[1] 柳建,雷爭軍,顧海清,等. 3D打印行業國內發展現狀[J]. 制造技術與機床,2015(3): 17-21.
Environmental Protection and Portable 3D Printer Based on STM32
Sun Chaolin,Wang Xin,Li Qian,Lu Yanfei,Jiang Liangyi
(Engineering Training Center,Tianjin University of Technology,Tianjin 300384,China)
In the project,the STM32F1 series 32-bit MCU is used as the master control chip,and the hybrid step-motor provides the power for X,Y and Z triaxial,those constitute a compact and convenient 3D printer.This printer can off-line print through the SD card,which can reduce the dependence on the host to improve the portability of the device.Besides,a touch-screen control function is equipped,which makes the control interface more straightforward and reduces the possibility of operator error.It also uses green materials-PLA (Polylactic Acid).In the printing process,no harmful substances is produced.The printed products can be used in homes,offices and other environments.
STM32;step-motor;SD Card;touch screen;3D printer
國家級大學生創新創業訓練計劃項目資助(項目編號:201510060003)。
TP334.8
A