孙超林,王鑫,李前,卢雁飞,江良义
(天津理工大学 工程训练中心,天津 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