蔡锦达,郭振云
(上海理工大学机械工程学院,上海200093)
喷墨技术能在衬底上逐渐沉积具有不同化学和物理性质的材料,这使其成为工业和家庭使用的一项重要的技术[1]。由于喷墨技术具有操作简单、成本低等优点,它已广泛应用于太阳能电池板、平板显示器中电子电路板砂、低成本的金属涂层等多个行业的制造过程中。基于喷墨打印机机械原型的应用程序在医学领域已经用于打印DNA 结构,使人造皮肤喷射细胞[2]。目前市场对于高质量、快速并且更节省能源的专业喷头及控制的需求更激烈[3],因此,研究各种喷头的控制程序具有重要意义。
目前国内大多数喷码机不仅依赖于价格高昂的进口产品,而且它们大多数采用分离的喷头控制器,具有体积大、操作繁琐等缺点,完全没有发挥微处理器和内嵌操作系统结合产品的操作简便、远程传输、接口丰富的优点[4]。例如文献[5]采用多个的嵌入式RIP 处理卡来单独控制每一喷头,文献[6]分别采用单独的运动控制板和数据传输板及独立的喷头控制板实现喷墨控制,这些系统的布线都比较复杂,因此喷头一般不能移动,否则会使控制台混乱并在拖行过程中引起较大的机械振动,不能满足医疗等行业对控制台微振动要求。而且每增加一个喷头都需要增加相应的模块,这不仅使线路更加复杂,而且提高了生产成本。
因此本研究在文献[7]的研究的基础上设计基于Cortex-M3 处理器对XARR 公司生产的XJ128 喷头的控制系统,该系统中间无需复杂的控制卡,不仅布线比较少,成本也比较低,而且通过实验可发现该控制系统也能快速控制喷头进行喷液。
Cortex-M3 处理器是ARM 公司设计的最新一款32 位处理器系列,目的是全面替代目前的8/16 位单片机[8]。据调查,其有望成为32 位MCU 中8051[9]。在指令方式方面,Cortex-M3 采用thumb-2 技术并兼容显存的ARM 解决方案,这比纯ARM 代码少使用31%的内存,同时能提供比thumb 技术高38%的性能[10];在中断方面,Cortex-M3 的嵌套向量中断控制器提供了工业领先的中断处理性能,控制器不仅可以控制多达255 个中断,而且它用简单的6 个周期的取指取代了传统的串行堆栈需要超过30 个时钟周期的push-pop操作才能完成的动作,使从中断发生到进入服务减少70%的周期数[11];在价格方面,目前最便宜的基于Cortex-M3 内核的单片机售价为1 美元[12],由此可见Cortex-M3 适用于高性能、低功耗、实时应用及具有竞争性价格于一体的嵌入式领域[13]。
LPC1752 是基于Cortex-M3 内核的微控制器,其CPU 操作频率可高达100 MHz,外设包含一个高达64 K的Flash 存储器和16 K 的数据存储器,可以实现高速、高效的喷头数据传输及控制;其次,LPC1752 还有一个外部中断输入,可以快速读取喷头的状态;最后,LPC1752 上有42 个管脚可以配置为边沿检测中断,这有利于提高程序的实时性,使对时间敏感的程序可以在规定时间内完成。因此,LPC1752 是首选的控制XJ128 喷头的微控制器。
XJ128 喷头[14-15]包含有128 个由压电晶体材料构成的通道驱动器,內置油墨过滤器及驱动控制电路,整体安裝在一金属块骨架上。喷头上有128 个喷嘴,每个喷嘴都是以“二态”方式运作,因而可以按需喷射单一大小的墨点。其电气接口共有30 个引脚,但是其中有10 个是没有连接的保留接口,9 个为电源和接地引脚,其他11 个引脚为信号引脚。其主要功能引脚如表1所示。
表1 XJ128 喷头的主要引脚
XJ128 喷头的内部有两个64 位的数据移位寄存器,当准备就位(READY)信号变为低电平时,分别选中片选信号nSS1 和nSS2 后,利用数据时钟(SCK)的上升沿时刻,MOSI 将64 位数据有序地装载进入相应的移位暂存器。数据装载完毕后准备就位(READY)信号跳到非活跃状态,数据就可以转载进入移位暂存器。在此时刻,喷头就可使用这组数据控制喷头。然后触发点火(nFIRE)信号按照设定数据启动“点火”射出所加载的液体。
由于移位暂存器拥有双缓冲个体,系统允许喷头在喷液进行的同时裝载下一组数据。当喷头开始打印最后一个相位的数据时,准备就位(READY)信号就会转跳到停顿状态,喷头就可以加载下一组数据。其装载时序如图1所示。
图1 XJ128 喷头的控制时序
由图1 可以看出复位(nRESET)信号和点火(nFIRE)信号都有各自要求的频宽,因此可以通过在调用延时子程序时改变函数参数来实现。Cortex-M3 的系统时钟频率为24 MHz,而复位(nRESET)信号的最小频宽为500 ns,点火(nFIRE)信号的频宽为1 μs ~120 μs,而且点火(nFIRE)信号必须在准备就位(READY)信号被激活的状态才有效,而传输过程中准备就位(READY)信号的活跃脉宽的标准值为58 μs,因此延时函数不应设定过长。
XJ128 喷头的MOSI 引脚内的移位暂存器是64 位的,而Cortex-M3 上SPI 每次最多只能发16,因此系统需要发送4 次才能完成对一个芯片的数据装载,为了方便数据的传输,本研究把预先设定的数据存放在数组中,这样后面使用就比较方便。其次XJ128 芯片的喷头由两个64 位的移位暂存器分别控制前64 位和后64 位,只有两个芯片全都装载完数据后准备就位(READY)信号才会变成活跃状态,之后点火(nFIRE)信号才能控制喷头进行喷射。
数据传输的程序既可以在查询中完成,也可以在中断中完成。由于中断不仅可以提高CPU 的工作效率,还具有实时处理的功能,能对控制系统中的各种参数和状态做出快速响应、及时处理[16],本研究选择中断处理的方式。而目前可有两个中断入口:一个是Cortex-M3 上SPI 的数据传输完成中断,由图1 可以看出只有在准备就位(READY)信号处于低电平的情况下才能激活片选(nss(x))信号,故另外一个中断入口是准备就位(READY)信号的边沿中断。数据传输完成后SPI 的传输完成标志位会立即复位,而准备就位(READY)信号则在XJ128 喷头接收完数据后还需执行两相喷射才能被激活。也就是说准备就位(READY)信号的激活等待时间要比SPI 复位的等待时间长,即准备就位(READY)信号才是最终决定是否传输下一组数据。因此本研究选择准备就位(READY)信号的下降沿做为中断入口。
数据传输完成后还要控制点火(nFIRE)信号才能真正完成喷头喷射过程,而点火(nFIRE)信号只有在准备就位(READY)信号激活时才有效,那么要执行点火(nFIRE)信号,那么首先要判断准备就位(READY)信号的状态。由于系统选择以准备就位(READY)信号下降沿中断的方式实现数据从Cortex-M3 到喷头的2 个64 位移位暂存器的传输,那么使用查询的方式判断再次准备就位(READY)信号的状态就显得太冗余复杂了,最好也采用中断的方式判断准备就位(READY)信号的状态。
Cortex-M3 有独立的上升沿中断寄存器和下降沿中断寄存器,因此GPIO 中PORT0 和PORT2 端口的每一个引脚都可以配置并触发上升沿中断、下降沿中断或者边沿中断(同时设定上升沿中断和下降沿中断),这样正好可以满足以双中断的方式控制喷头的要求。以准备就位(READY)信号所接的引脚P0.2 为例,上升沿中断使能寄存器(IO0IntEnR)可以使能P0.2 管脚的上升沿中断,下降沿中断使能寄存器(IO0IntEnF)可以使能P0.2 管脚下降沿中断。
IO0IntEnR[2]=1 时,P0.2 上升沿中断使能;
IO0IntEnR[2]=0 时,P0.2 上升沿中断禁能;
IO0IntEnF[2]=1 时,P0.2 下降沿中断使能;
IO0IntEnF[2]=0 时,P0.2 下降沿中断禁能。
图2 GPIO 边沿中断示意图
中断内的数据传输如图3所示。其中P[n]为控制喷头中每个喷嘴的数值,该数组可以设的很大,以实现XJ128 喷头的连续喷射,但是n 必须为8 的整数倍,这是由喷头的移位暂存器和Cortex-M3 上SPI 的性质决定的。i 表示每次装载数据P[n]中的第i 个数据,j表示装载的次数,Flag 为标志位。
图3 数据传输流程图
XJ128 喷头有一个低电平触发的高温误差(nFAULT)信号,当喷头的温度高于临界值45 ℃~55 ℃,高温误差(nFAULT)信号就会被激活,而且该信号是不能被更改的,只有当喷头温度降低到临街温度以后后报警信号才能被解除。因为应用过程中要求喷头精确的运动,必须设定报警信号中断,且中断等级比准备就位(READY)信号的中断等级要高,这样才可以在准备就位(READY)信号的中断运行时进入高温中断,实现高温报警信号的启动,然后再中断内通过逻辑复位信号对芯片进行逻辑程序异步复位,该复位只是让喷头停止工作,但是并不会将数据输入暂存器内部的资料重组,因此,只需等到温度降低后再通过点火(nFIRE)信号即可让喷头继续工作,并不需要重新加载数据输入暂存器的值。
由于要区别准备就位(READY)信号和高温误差(nFAULT)信号的优先级,两者不能同时使用I/O 口中断。系统可以设置(nFAULT)信号所对应的引脚为外部中断EINT0(Cortex-M3 上外部中断和I/O 口中断分别使用两个不同的中断通道,可以设置不同的优先级)的边沿中断,同时设定上升沿中断和下降沿中断,并且两者的中断优先级要比SPI 接口中断的优先级高,这样就可以在下降沿中断内通过置位片选(nSS(x))信号和停止数据时钟(SCK)信号来停止Cortex-M3对喷头的数据传输,避免喷头已储存在暂存器内的数据清除,从而保证喷头严格按照设定的步骤工作;在高温误差(nFAULT)信号上升沿中断内复位片选(nss(x))信号和数据时钟(SCK)信号使喷头重新开始工作。
根据上述实验设计,本研究编写了基于Cortex-M3的喷头的驱动程序,在该程序中,喷头的高温误差(nFault)信号连接开发板的外部中断EINT0,准备就绪信号READY 连接GPIO 口中断,其余各口连接在普通IO 口上,并按照相应的要求设定为输入或者输出。通过示波器测量可得部分波形图如图4、图5所示。
由图4 和图5 可知,当准备就位信号(READY)为低时,nSS2 会先变为低电平,即选中nSS2 进行数据传输,等待数据传输完成后nSS2 会跳变成高电平,然后nSS1 变为低电平进行数据传输,最后等待点火(nFIRE)信号,然后再进行下又一轮的控制。同样,经过测量,其他各个变量电平的变化也都满足喷头的驱动要求。通过实验可以看出,该程序可以按照设定要求控制XJ128 喷头相应的喷孔进行喷液。
图4 nSS2 与nSS1 的波形图
图5 MOSI 与nSS2 的波形图
本研究简要介绍了Cortex-M3 的优点和XJ128 喷头的接口及控制要求,重要研究了喷头控制程序的设计,提出了基于中断的驱动控制思路,最后通过示波器及喷头控制实验对所编写的控制程序进行了验证,证明该程序可以高效地控制喷头的各个喷嘴。
本研究采用嵌入式微处理器控制直接对喷头进行,既实现了嵌入式微处理器的最大化利用,又节省了成本。此外,Cortex-M3 上有多达52 个管脚,其中42个可以配置中断,不仅可以实现对多个喷头高效的控制,还能实现对其他设备的控制,实现基于嵌入式微处理器的一体化控制。
[1]KHALATE A A,BOMBOIS X,BABUSKA,et al.Performance improvement of a drop-on-demand inkjet printhead using an optimization-based feedforward control method[J].Control Engineering Practice,2011(19):771-781.
[2]WILLIAMS C.Ink-jet printers go beyond paper[J].Physics World,2006(19):24-29.
[3]EZZELDIN M,BOSCH P.P.J V D,WEILAND S.Experimental-based feedforward control for a DoD inkjet printhead[J].Control Engineering Practice,2013,21(7):940-952.
[4]王宏文,董 苗,梁彦彦.XJ128 喷头在WinCE 下驱动程序的设计与实现[J].计算机测量与控制,2014,22(2):620-623.
[5]张秋风,刘 晋.基于计算机平台的多喷头喷绘机控制系统的设计与实现[J].微型机与应用,2010,29(24):93-95.
[6]严彬彬.基于FPGA 的喷墨印刷系统高速接口的设计与实现[D].北京:北京印刷学院信息工程学院,2013.
[7]王宏文,黄金兰,董 苗.流水线上嵌入式喷码机系统设计[J].现代电子技术,2014,37(9):107-110.
[8]江一舟,张怡聪,李 斌.Cortex-M3 单片机在工业仪表中的应用[J].仪表技术,2010(6):24-26.
[9]何小庆.关注MCU 发展的新动向[J].电子产品世界,2008(12):60-62.
[10]李 宁,熊 刚,徐良平.基于Cortex-M3 的MP3 播放器设计[J].单片机与嵌入式系统应用,2009(2):48-51.
[11]文先仕.基于ARM Cortex-M3 的智能监控器的设计[D].成都:西华大学机械工程与自动化学院,2010.
[12]周立功.深入浅出Cortex-M3[M].广州:广州致远电子有限公司,2009.
[13]张 旭,亓学广,李世光,等.基于STM32 电力数据采集系统的设计[J].电子测量技术,2010,33(11):90-93.
[14]XJ128 Guide to Operation[EB/OL].http://www.xaar.co.uk/.
[15]程 爽,马 海,刘祥谋,等.三维打印机中XJ-128 喷头驱动控制设计[J].机电工程技术,2013,42(1):41-44.
[16]杨文显,现代微型计算机与接口教程[M].北京:清华大学出版社.2014.