蔡錦達(dá),郭振云
(上海理工大學(xué)機(jī)械工程學(xué)院,上海200093)
噴墨技術(shù)能在襯底上逐漸沉積具有不同化學(xué)和物理性質(zhì)的材料,這使其成為工業(yè)和家庭使用的一項(xiàng)重要的技術(shù)[1]。由于噴墨技術(shù)具有操作簡(jiǎn)單、成本低等優(yōu)點(diǎn),它已廣泛應(yīng)用于太陽(yáng)能電池板、平板顯示器中電子電路板砂、低成本的金屬涂層等多個(gè)行業(yè)的制造過(guò)程中?;趪娔蛴C(jī)機(jī)械原型的應(yīng)用程序在醫(yī)學(xué)領(lǐng)域已經(jīng)用于打印DNA 結(jié)構(gòu),使人造皮膚噴射細(xì)胞[2]。目前市場(chǎng)對(duì)于高質(zhì)量、快速并且更節(jié)省能源的專(zhuān)業(yè)噴頭及控制的需求更激烈[3],因此,研究各種噴頭的控制程序具有重要意義。
目前國(guó)內(nèi)大多數(shù)噴碼機(jī)不僅依賴(lài)于價(jià)格高昂的進(jìn)口產(chǎn)品,而且它們大多數(shù)采用分離的噴頭控制器,具有體積大、操作繁瑣等缺點(diǎn),完全沒(méi)有發(fā)揮微處理器和內(nèi)嵌操作系統(tǒng)結(jié)合產(chǎn)品的操作簡(jiǎn)便、遠(yuǎn)程傳輸、接口豐富的優(yōu)點(diǎn)[4]。例如文獻(xiàn)[5]采用多個(gè)的嵌入式RIP 處理卡來(lái)單獨(dú)控制每一噴頭,文獻(xiàn)[6]分別采用單獨(dú)的運(yùn)動(dòng)控制板和數(shù)據(jù)傳輸板及獨(dú)立的噴頭控制板實(shí)現(xiàn)噴墨控制,這些系統(tǒng)的布線都比較復(fù)雜,因此噴頭一般不能移動(dòng),否則會(huì)使控制臺(tái)混亂并在拖行過(guò)程中引起較大的機(jī)械振動(dòng),不能滿(mǎn)足醫(yī)療等行業(yè)對(duì)控制臺(tái)微振動(dòng)要求。而且每增加一個(gè)噴頭都需要增加相應(yīng)的模塊,這不僅使線路更加復(fù)雜,而且提高了生產(chǎn)成本。
因此本研究在文獻(xiàn)[7]的研究的基礎(chǔ)上設(shè)計(jì)基于Cortex-M3 處理器對(duì)XARR 公司生產(chǎn)的XJ128 噴頭的控制系統(tǒng),該系統(tǒng)中間無(wú)需復(fù)雜的控制卡,不僅布線比較少,成本也比較低,而且通過(guò)實(shí)驗(yàn)可發(fā)現(xiàn)該控制系統(tǒng)也能快速控制噴頭進(jìn)行噴液。
Cortex-M3 處理器是ARM 公司設(shè)計(jì)的最新一款32 位處理器系列,目的是全面替代目前的8/16 位單片機(jī)[8]。據(jù)調(diào)查,其有望成為32 位MCU 中8051[9]。在指令方式方面,Cortex-M3 采用thumb-2 技術(shù)并兼容顯存的ARM 解決方案,這比純ARM 代碼少使用31%的內(nèi)存,同時(shí)能提供比thumb 技術(shù)高38%的性能[10];在中斷方面,Cortex-M3 的嵌套向量中斷控制器提供了工業(yè)領(lǐng)先的中斷處理性能,控制器不僅可以控制多達(dá)255 個(gè)中斷,而且它用簡(jiǎn)單的6 個(gè)周期的取指取代了傳統(tǒng)的串行堆棧需要超過(guò)30 個(gè)時(shí)鐘周期的push-pop操作才能完成的動(dòng)作,使從中斷發(fā)生到進(jìn)入服務(wù)減少70%的周期數(shù)[11];在價(jià)格方面,目前最便宜的基于Cortex-M3 內(nèi)核的單片機(jī)售價(jià)為1 美元[12],由此可見(jiàn)Cortex-M3 適用于高性能、低功耗、實(shí)時(shí)應(yīng)用及具有競(jìng)爭(zhēng)性?xún)r(jià)格于一體的嵌入式領(lǐng)域[13]。
LPC1752 是基于Cortex-M3 內(nèi)核的微控制器,其CPU 操作頻率可高達(dá)100 MHz,外設(shè)包含一個(gè)高達(dá)64 K的Flash 存儲(chǔ)器和16 K 的數(shù)據(jù)存儲(chǔ)器,可以實(shí)現(xiàn)高速、高效的噴頭數(shù)據(jù)傳輸及控制;其次,LPC1752 還有一個(gè)外部中斷輸入,可以快速讀取噴頭的狀態(tài);最后,LPC1752 上有42 個(gè)管腳可以配置為邊沿檢測(cè)中斷,這有利于提高程序的實(shí)時(shí)性,使對(duì)時(shí)間敏感的程序可以在規(guī)定時(shí)間內(nèi)完成。因此,LPC1752 是首選的控制XJ128 噴頭的微控制器。
XJ128 噴頭[14-15]包含有128 個(gè)由壓電晶體材料構(gòu)成的通道驅(qū)動(dòng)器,內(nèi)置油墨過(guò)濾器及驅(qū)動(dòng)控制電路,整體安裝在一金屬塊骨架上。噴頭上有128 個(gè)噴嘴,每個(gè)噴嘴都是以“二態(tài)”方式運(yùn)作,因而可以按需噴射單一大小的墨點(diǎn)。其電氣接口共有30 個(gè)引腳,但是其中有10 個(gè)是沒(méi)有連接的保留接口,9 個(gè)為電源和接地引腳,其他11 個(gè)引腳為信號(hào)引腳。其主要功能引腳如表1所示。
表1 XJ128 噴頭的主要引腳
XJ128 噴頭的內(nèi)部有兩個(gè)64 位的數(shù)據(jù)移位寄存器,當(dāng)準(zhǔn)備就位(READY)信號(hào)變?yōu)榈碗娖綍r(shí),分別選中片選信號(hào)nSS1 和nSS2 后,利用數(shù)據(jù)時(shí)鐘(SCK)的上升沿時(shí)刻,MOSI 將64 位數(shù)據(jù)有序地裝載進(jìn)入相應(yīng)的移位暫存器。數(shù)據(jù)裝載完畢后準(zhǔn)備就位(READY)信號(hào)跳到非活躍狀態(tài),數(shù)據(jù)就可以轉(zhuǎn)載進(jìn)入移位暫存器。在此時(shí)刻,噴頭就可使用這組數(shù)據(jù)控制噴頭。然后觸發(fā)點(diǎn)火(nFIRE)信號(hào)按照設(shè)定數(shù)據(jù)啟動(dòng)“點(diǎn)火”射出所加載的液體。
由于移位暫存器擁有雙緩沖個(gè)體,系統(tǒng)允許噴頭在噴液進(jìn)行的同時(shí)裝載下一組數(shù)據(jù)。當(dāng)噴頭開(kāi)始打印最后一個(gè)相位的數(shù)據(jù)時(shí),準(zhǔn)備就位(READY)信號(hào)就會(huì)轉(zhuǎn)跳到停頓狀態(tài),噴頭就可以加載下一組數(shù)據(jù)。其裝載時(shí)序如圖1所示。
圖1 XJ128 噴頭的控制時(shí)序
由圖1 可以看出復(fù)位(nRESET)信號(hào)和點(diǎn)火(nFIRE)信號(hào)都有各自要求的頻寬,因此可以通過(guò)在調(diào)用延時(shí)子程序時(shí)改變函數(shù)參數(shù)來(lái)實(shí)現(xiàn)。Cortex-M3 的系統(tǒng)時(shí)鐘頻率為24 MHz,而復(fù)位(nRESET)信號(hào)的最小頻寬為500 ns,點(diǎn)火(nFIRE)信號(hào)的頻寬為1 μs ~120 μs,而且點(diǎn)火(nFIRE)信號(hào)必須在準(zhǔn)備就位(READY)信號(hào)被激活的狀態(tài)才有效,而傳輸過(guò)程中準(zhǔn)備就位(READY)信號(hào)的活躍脈寬的標(biāo)準(zhǔn)值為58 μs,因此延時(shí)函數(shù)不應(yīng)設(shè)定過(guò)長(zhǎng)。
XJ128 噴頭的MOSI 引腳內(nèi)的移位暫存器是64 位的,而Cortex-M3 上SPI 每次最多只能發(fā)16,因此系統(tǒng)需要發(fā)送4 次才能完成對(duì)一個(gè)芯片的數(shù)據(jù)裝載,為了方便數(shù)據(jù)的傳輸,本研究把預(yù)先設(shè)定的數(shù)據(jù)存放在數(shù)組中,這樣后面使用就比較方便。其次XJ128 芯片的噴頭由兩個(gè)64 位的移位暫存器分別控制前64 位和后64 位,只有兩個(gè)芯片全都裝載完數(shù)據(jù)后準(zhǔn)備就位(READY)信號(hào)才會(huì)變成活躍狀態(tài),之后點(diǎn)火(nFIRE)信號(hào)才能控制噴頭進(jìn)行噴射。
數(shù)據(jù)傳輸?shù)某绦蚣瓤梢栽诓樵?xún)中完成,也可以在中斷中完成。由于中斷不僅可以提高CPU 的工作效率,還具有實(shí)時(shí)處理的功能,能對(duì)控制系統(tǒng)中的各種參數(shù)和狀態(tài)做出快速響應(yīng)、及時(shí)處理[16],本研究選擇中斷處理的方式。而目前可有兩個(gè)中斷入口:一個(gè)是Cortex-M3 上SPI 的數(shù)據(jù)傳輸完成中斷,由圖1 可以看出只有在準(zhǔn)備就位(READY)信號(hào)處于低電平的情況下才能激活片選(nss(x))信號(hào),故另外一個(gè)中斷入口是準(zhǔn)備就位(READY)信號(hào)的邊沿中斷。數(shù)據(jù)傳輸完成后SPI 的傳輸完成標(biāo)志位會(huì)立即復(fù)位,而準(zhǔn)備就位(READY)信號(hào)則在XJ128 噴頭接收完數(shù)據(jù)后還需執(zhí)行兩相噴射才能被激活。也就是說(shuō)準(zhǔn)備就位(READY)信號(hào)的激活等待時(shí)間要比SPI 復(fù)位的等待時(shí)間長(zhǎng),即準(zhǔn)備就位(READY)信號(hào)才是最終決定是否傳輸下一組數(shù)據(jù)。因此本研究選擇準(zhǔn)備就位(READY)信號(hào)的下降沿做為中斷入口。
數(shù)據(jù)傳輸完成后還要控制點(diǎn)火(nFIRE)信號(hào)才能真正完成噴頭噴射過(guò)程,而點(diǎn)火(nFIRE)信號(hào)只有在準(zhǔn)備就位(READY)信號(hào)激活時(shí)才有效,那么要執(zhí)行點(diǎn)火(nFIRE)信號(hào),那么首先要判斷準(zhǔn)備就位(READY)信號(hào)的狀態(tài)。由于系統(tǒng)選擇以準(zhǔn)備就位(READY)信號(hào)下降沿中斷的方式實(shí)現(xiàn)數(shù)據(jù)從Cortex-M3 到噴頭的2 個(gè)64 位移位暫存器的傳輸,那么使用查詢(xún)的方式判斷再次準(zhǔn)備就位(READY)信號(hào)的狀態(tài)就顯得太冗余復(fù)雜了,最好也采用中斷的方式判斷準(zhǔn)備就位(READY)信號(hào)的狀態(tài)。
Cortex-M3 有獨(dú)立的上升沿中斷寄存器和下降沿中斷寄存器,因此GPIO 中PORT0 和PORT2 端口的每一個(gè)引腳都可以配置并觸發(fā)上升沿中斷、下降沿中斷或者邊沿中斷(同時(shí)設(shè)定上升沿中斷和下降沿中斷),這樣正好可以滿(mǎn)足以雙中斷的方式控制噴頭的要求。以準(zhǔn)備就位(READY)信號(hào)所接的引腳P0.2 為例,上升沿中斷使能寄存器(IO0IntEnR)可以使能P0.2 管腳的上升沿中斷,下降沿中斷使能寄存器(IO0IntEnF)可以使能P0.2 管腳下降沿中斷。
IO0IntEnR[2]=1 時(shí),P0.2 上升沿中斷使能;
IO0IntEnR[2]=0 時(shí),P0.2 上升沿中斷禁能;
IO0IntEnF[2]=1 時(shí),P0.2 下降沿中斷使能;
IO0IntEnF[2]=0 時(shí),P0.2 下降沿中斷禁能。
圖2 GPIO 邊沿中斷示意圖
中斷內(nèi)的數(shù)據(jù)傳輸如圖3所示。其中P[n]為控制噴頭中每個(gè)噴嘴的數(shù)值,該數(shù)組可以設(shè)的很大,以實(shí)現(xiàn)XJ128 噴頭的連續(xù)噴射,但是n 必須為8 的整數(shù)倍,這是由噴頭的移位暫存器和Cortex-M3 上SPI 的性質(zhì)決定的。i 表示每次裝載數(shù)據(jù)P[n]中的第i 個(gè)數(shù)據(jù),j表示裝載的次數(shù),F(xiàn)lag 為標(biāo)志位。
圖3 數(shù)據(jù)傳輸流程圖
XJ128 噴頭有一個(gè)低電平觸發(fā)的高溫誤差(nFAULT)信號(hào),當(dāng)噴頭的溫度高于臨界值45 ℃~55 ℃,高溫誤差(nFAULT)信號(hào)就會(huì)被激活,而且該信號(hào)是不能被更改的,只有當(dāng)噴頭溫度降低到臨街溫度以后后報(bào)警信號(hào)才能被解除。因?yàn)閼?yīng)用過(guò)程中要求噴頭精確的運(yùn)動(dòng),必須設(shè)定報(bào)警信號(hào)中斷,且中斷等級(jí)比準(zhǔn)備就位(READY)信號(hào)的中斷等級(jí)要高,這樣才可以在準(zhǔn)備就位(READY)信號(hào)的中斷運(yùn)行時(shí)進(jìn)入高溫中斷,實(shí)現(xiàn)高溫報(bào)警信號(hào)的啟動(dòng),然后再中斷內(nèi)通過(guò)邏輯復(fù)位信號(hào)對(duì)芯片進(jìn)行邏輯程序異步復(fù)位,該復(fù)位只是讓噴頭停止工作,但是并不會(huì)將數(shù)據(jù)輸入暫存器內(nèi)部的資料重組,因此,只需等到溫度降低后再通過(guò)點(diǎn)火(nFIRE)信號(hào)即可讓噴頭繼續(xù)工作,并不需要重新加載數(shù)據(jù)輸入暫存器的值。
由于要區(qū)別準(zhǔn)備就位(READY)信號(hào)和高溫誤差(nFAULT)信號(hào)的優(yōu)先級(jí),兩者不能同時(shí)使用I/O 口中斷。系統(tǒng)可以設(shè)置(nFAULT)信號(hào)所對(duì)應(yīng)的引腳為外部中斷EINT0(Cortex-M3 上外部中斷和I/O 口中斷分別使用兩個(gè)不同的中斷通道,可以設(shè)置不同的優(yōu)先級(jí))的邊沿中斷,同時(shí)設(shè)定上升沿中斷和下降沿中斷,并且兩者的中斷優(yōu)先級(jí)要比SPI 接口中斷的優(yōu)先級(jí)高,這樣就可以在下降沿中斷內(nèi)通過(guò)置位片選(nSS(x))信號(hào)和停止數(shù)據(jù)時(shí)鐘(SCK)信號(hào)來(lái)停止Cortex-M3對(duì)噴頭的數(shù)據(jù)傳輸,避免噴頭已儲(chǔ)存在暫存器內(nèi)的數(shù)據(jù)清除,從而保證噴頭嚴(yán)格按照設(shè)定的步驟工作;在高溫誤差(nFAULT)信號(hào)上升沿中斷內(nèi)復(fù)位片選(nss(x))信號(hào)和數(shù)據(jù)時(shí)鐘(SCK)信號(hào)使噴頭重新開(kāi)始工作。
根據(jù)上述實(shí)驗(yàn)設(shè)計(jì),本研究編寫(xiě)了基于Cortex-M3的噴頭的驅(qū)動(dòng)程序,在該程序中,噴頭的高溫誤差(nFault)信號(hào)連接開(kāi)發(fā)板的外部中斷EINT0,準(zhǔn)備就緒信號(hào)READY 連接GPIO 口中斷,其余各口連接在普通IO 口上,并按照相應(yīng)的要求設(shè)定為輸入或者輸出。通過(guò)示波器測(cè)量可得部分波形圖如圖4、圖5所示。
由圖4 和圖5 可知,當(dāng)準(zhǔn)備就位信號(hào)(READY)為低時(shí),nSS2 會(huì)先變?yōu)榈碗娖剑催x中nSS2 進(jìn)行數(shù)據(jù)傳輸,等待數(shù)據(jù)傳輸完成后nSS2 會(huì)跳變成高電平,然后nSS1 變?yōu)榈碗娖竭M(jìn)行數(shù)據(jù)傳輸,最后等待點(diǎn)火(nFIRE)信號(hào),然后再進(jìn)行下又一輪的控制。同樣,經(jīng)過(guò)測(cè)量,其他各個(gè)變量電平的變化也都滿(mǎn)足噴頭的驅(qū)動(dòng)要求。通過(guò)實(shí)驗(yàn)可以看出,該程序可以按照設(shè)定要求控制XJ128 噴頭相應(yīng)的噴孔進(jìn)行噴液。
圖4 nSS2 與nSS1 的波形圖
圖5 MOSI 與nSS2 的波形圖
本研究簡(jiǎn)要介紹了Cortex-M3 的優(yōu)點(diǎn)和XJ128 噴頭的接口及控制要求,重要研究了噴頭控制程序的設(shè)計(jì),提出了基于中斷的驅(qū)動(dòng)控制思路,最后通過(guò)示波器及噴頭控制實(shí)驗(yàn)對(duì)所編寫(xiě)的控制程序進(jìn)行了驗(yàn)證,證明該程序可以高效地控制噴頭的各個(gè)噴嘴。
本研究采用嵌入式微處理器控制直接對(duì)噴頭進(jìn)行,既實(shí)現(xiàn)了嵌入式微處理器的最大化利用,又節(jié)省了成本。此外,Cortex-M3 上有多達(dá)52 個(gè)管腳,其中42個(gè)可以配置中斷,不僅可以實(shí)現(xiàn)對(duì)多個(gè)噴頭高效的控制,還能實(shí)現(xiàn)對(duì)其他設(shè)備的控制,實(shí)現(xiàn)基于嵌入式微處理器的一體化控制。
[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 下驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2014,22(2):620-623.
[5]張秋風(fēng),劉 晉.基于計(jì)算機(jī)平臺(tái)的多噴頭噴繪機(jī)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2010,29(24):93-95.
[6]嚴(yán)彬彬.基于FPGA 的噴墨印刷系統(tǒng)高速接口的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京印刷學(xué)院信息工程學(xué)院,2013.
[7]王宏文,黃金蘭,董 苗.流水線上嵌入式噴碼機(jī)系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014,37(9):107-110.
[8]江一舟,張怡聰,李 斌.Cortex-M3 單片機(jī)在工業(yè)儀表中的應(yīng)用[J].儀表技術(shù),2010(6):24-26.
[9]何小慶.關(guān)注MCU 發(fā)展的新動(dòng)向[J].電子產(chǎn)品世界,2008(12):60-62.
[10]李 寧,熊 剛,徐良平.基于Cortex-M3 的MP3 播放器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2009(2):48-51.
[11]文先仕.基于ARM Cortex-M3 的智能監(jiān)控器的設(shè)計(jì)[D].成都:西華大學(xué)機(jī)械工程與自動(dòng)化學(xué)院,2010.
[12]周立功.深入淺出Cortex-M3[M].廣州:廣州致遠(yuǎn)電子有限公司,2009.
[13]張 旭,亓學(xué)廣,李世光,等.基于STM32 電力數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].電子測(cè)量技術(shù),2010,33(11):90-93.
[14]XJ128 Guide to Operation[EB/OL].http://www.xaar.co.uk/.
[15]程 爽,馬 海,劉祥謀,等.三維打印機(jī)中XJ-128 噴頭驅(qū)動(dòng)控制設(shè)計(jì)[J].機(jī)電工程技術(shù),2013,42(1):41-44.
[16]楊文顯,現(xiàn)代微型計(jì)算機(jī)與接口教程[M].北京:清華大學(xué)出版社.2014.