靳 涛, 马 杰, 杨立闯
(河北工业大学 电子信息工程学院,天津 300401)
3D打印的3.0时代的到来,提供了3D打印技术[1,2]与WiFi技术相结合的方案[3],基于移动终端无线网络技术,3D打印由传统单一设备的“制造”向网络信息化的“智造”转型。改善传统打印机电缆连接通信的弊端[4],利用移动终端设备实现3D打印机数据的远程实时交互。
本文基于嵌入式实时系统设计一种3D打印机远程控制系统,利用WiFi模块将下位机STM32主控芯片与用户Android移动控制端连接,建立用户与3D打印机之间的无线传输网络,用户通过Android移动终端可以对3D打印机的实时控制,节省了用户现场观察的不必要时间。该系统具有结构简单、成本低、功耗低、易安装等优点。设计重点为3D打印机的控制系统与Android移动终端的远程控制系统设计。
3D打印机无线网络系统由WiFi模块建立一个核心网关,协调上层应用层与底层无线网络节点的数据交互。3D打印机的各项参数经WiFi网络传至用户移动终端。本文采用WiFi模块的接入点(access point,AP)模式和STA(station)模式[5]。AP模式下,WiFi模块是无线网络的中心节点,Android移动终端连接打印机无线网络热点,在不需要基础设施的情况下快速组建局域网进行数据传输。STA模式下,WiFi模块是无线网络的终端节点,通过网关连接到Internet网,与远端TCP 客户端相连。这种组网方式可将3D打印机的数据通过无线路由器的桥接功能转发到服务器的网关进行处理,Android移动终端则通过外网直接访问服务器的IP地址,进而得到打印机数据,实现3D打印机的远程控制。3D打印机无线网络控制系统整体框架如图1所示。
图1 无线网络系统整体框架
3D打印机控制系统整体框架如图2所示,主控制器为STM32F405,通过USB OTG电路读取U盘里的Gcode模型文件,主控芯片逐行解析文件中的G指令,对步进电机的转速方向、位置偏移量和速度精确控制,其中4路步进电机驱动分别控制X,Y,Z和挤出机的步进电机的驱动脉冲。3路限位开关用于反馈步进电机的位置信息,定位打印的初始和结束位置。主控制器分别通过三极管开关电路及比例—积分—微分(proportional-integral-differential,PID)算法控制喷头加热棒和热床温度,喷头采用K型热电偶经SPI接口反馈主控制器,热床采用DS18B20单总线温度传感器采温反馈到主控制器,对3D打印机的温度系统实时控制。Android移动终端的APP通过WiFi网络传输打印数据。
图2 3D打印机控制系统整体框架
系统控制电路的主控芯片为ARM内核的STM32F405微控制器,内部含有1MB Flash,256 kB RAM,168 MHz工作频率,完全可以运行RT—Thread实时操作系统。
采用USR—C215芯片,该无线模块设有3种WiFi工作模式:STA,AP,AP+STA,可以提供十分灵活的组网方式和网络拓扑方法。主控制器与该模块实现串口数据到网络数据的透传,包括Socket透传和Http Client透传,可实现3D打印机快速组网。USR-C215电路原理如图3所示。
图3 USR—C215电路原理
设计的电机驱动模块采用Allergro公司的A4988电机驱动器,可在全、半、1/4,1/8及1/16步进模式时操作步进电机,输出驱动性能可达到35V及±2A。
本文采用1/16细分,即将MS1,MS2,MS3引脚置高,主控制器只需控制驱动模块的EN,DIR,STEP 3个引脚即可完全控制步进电机驱动。其中,EN为步进电机的使能端,DIR为步进电机的方向控制端,STEP为步进电机的脉冲输入端[6]。步进电机驱动电路原理如图4所示。
图4 步进电机驱动电路原理
USB OTG电路是3D打印机中用于接插U盘的接口电路,为保证信号传输正常,抑制干扰,USB的D+和D-两根线要差分处理,同时串联差分阻抗,以防止信号反射。本设计为防止热插拔中静电的干扰,采用PRTR5V0U4D静电保护芯片来保护D+,D-,VBUS引脚的功能。USB OTG电路原理如图5所示。
图5 USB OTG电路原理
本文选用了RT-Thread实时操作系统[7],具有实时性、稳定性、可裁剪性的特点。系统中的任务采用线程来实现,通过线程来描述任务的优先级和上下文关系,并通过系统提供的调度器将最高的就绪线程运行。
本文的3D打印机远程控制系统,需要将各自功能设计成各自可调度的,序列化的并行执行程序线程,将3D打印机的功能:电机驱动、WiFi传输、U盘G命令解析、加热控制、液晶显示划分为执行任务,RT—Thread操作系统根据任务的优先级来执行对应的任务操作。各应用线程创建完后,由调度器根据各个线程的优先级先后进行调度。每个线程将在就绪、运行、挂起3个状态不停切换,从而3D打印机的各个线程得以实时运行。3D打印机远程控制系统流程如图6所示。
图6 3D打印机远程控制系统流程
WiFi模块的底层配置主要实现串口数据的收发与报文的广播。本文采用缓冲机制和信号量来收发串口数据,即将数据存储到串口寄存器,并保存到环形缓冲区buffer中,定义head变量标记当前写入的位置,tail变量表示发送数据的位置,同时标记当前数据处理长度len。当接收指针指向缓冲区末尾时,只要缓冲区头的数据被处理,缓冲区指针会重新指向头位置,这样当数据处理线程阻塞时,连续收到的数据会保存到缓冲区中而避免了丢失。当数据处理的线程处于就绪状态,则开始数据处理,要求处理数据的速度高于接收到的数据,缓冲区部分设计为一个结构体。
本文为WiFi模块设计一个独立的线程用于WiFi数据处理,其优先级为23,系统上电后会轮询WiFi模块的NREADY与NLINK引脚状态,判断WiFi模块是否启动完毕,是否有WiFi节点接入,红绿发光二极管指示当前连接状态。主控制器将接收WiFi数据按特定协议解析数据,实现控制3D打印机的操作;反之,3D打印数据通过串口发到WiFi模块,并广播到AP节点。WiFi底层流程如图7。
图7 WiFi底层流程
本系统采用开环控制步进电机驱动命令,然后对命令的参数进行解析,从而驱动4路步进电机的协调运动。其中U盘里的运动指令包括电机运动的坐标位置,速度大小,每层的高度等参数。在解析命令过程中,需要加入一个缓冲区协调读取与解析命令的时间差。为防止电机在启动和停止时发生失步和过冲,需以电机的启动频率启动然后增加到工作频率,在停止时电机先降低到脉冲频率最后降低到截止频率,因此电机的运动采用S型曲线算法。流程如图8所示。
图8 电机行程管理
本文Android移动终端基于adt-bundle-eclipse开发平台,采用Java语言开发。
设计将USR—C215的WiFi模块设计成服务器,将Android移动终端设计成客户端,二者之间的数据传输采用TCP/IP协议,通过Socket通信[8~10]。
USR—C215 WiFi模块作为无线网卡,将IP地址映射到无线路由器中,这里使用动态配置网关。本文通过开启后台的IP地址连接服务,采用key—value键值对来存储变化的IP与端口号。客户端连接服务器Socket的IP与端口号后,建立Socket实例对象,通过InputStream读取数据,通过OutputStream将数据封装发送,完成服务器与客户端的数据对话。
为实时查看打印机中的状态数据,需开启U盘文件监听,打印状态数据监听以及打印控制命令监听,每隔100 ms会更新1次监听数据。客户端接收WiFi模块节点数据,通过Broadcast同步广播机制,将数据发送到不同的广播接收进程进行数据处理。Android 移动终端流程如图9。
图9 Android移动终端流程
本设计采用WiFi的STA模式测试,WiFi模块的IP映射到本地的无线路由器,Android移动终端则通过外网连接无线路由器的静态IP与端口,实现WiFi模块—无线路由器—Internet—Android移动终端之间的数据传输通路。
1)登录:打开软件进入登录界面,输入正确的用户名和密码,跳转到应用程序的主界面,如图10(a)所示。
2)设置服务器的IP与端口号:设置远程路由器的静态IP和端口号,如图10(b)所示。
3)数据传输:选中U盘按键,即可读取U盘文件列表,选择打印文件模型,如图10(c)所示,转至“打印状态”界面,如图10(d)所示,即可开始模型打印。3D打印机的电机归位原点,等待喷头、热床温度升至打印温度,即可开始读取U盘G指令,并打印模型。在打印过程中,可远程查看打印机的打印数据、控制打印机的停止、热床温度、自动断电等操作。当打印出现异常,如在打印过程中喷头降低到目的温度以下,手机会启动声音报警,及时提醒用户,并采取相应措施。提高打印的成功率。
图10 Android智能手机移动界面
3D打印机远程数据传输测试如表1。通过对3D打印机不同距离的多次模型打印测试,得出结论:手机端登录路由器公网IP的WiFi网络,即可异地远程控制打印机。在毫秒(ms)级上可以达到手机端与3D打印机数据的实时交互,且信号强度在-75~-60 dBm以内,远程数据传输丢包率均小于2 %,满足无线远程传输要求,达到了设计目的。
实际测试证明,用户通过手机实现了远程控制3D打印机的功能。移动终端通过对U盘、电机、温度系统的数据监听,保证了移动终端与网关数据的实时交互,为用户查看打印状态带来了很大的便利,提高了打印的成功率。