基于LPC2148的手持式熱敏條碼打印機(jī)研制
摘 要: 介紹了EAN-13常見(jiàn)商用條碼編碼格式,給出一個(gè)打印實(shí)例,設(shè)計(jì)一種基于LPC2148的熱敏打印機(jī)控制主板,并給出了系統(tǒng)硬件組成框圖。為使打印機(jī)工作于電池供電的便攜模式,設(shè)計(jì)了高效率電源管理電路。同時(shí)對(duì)中文字庫(kù)的編碼方法進(jìn)行研究后,按字庫(kù)使用頻度設(shè)計(jì)兩個(gè)字庫(kù),并將常用字庫(kù)集成在CPU內(nèi)部。最后給出條碼、漢字及字符的打印編程思路。
條碼技術(shù)是自動(dòng)識(shí)別與數(shù)據(jù)采集(AIDC)技術(shù)中應(yīng)用最古老、最成熟的技術(shù),具有輸入速度快、可靠性高、采集信息量大、靈活實(shí)用等特點(diǎn),是迄今為止最經(jīng)濟(jì)、實(shí)用的一種自動(dòng)識(shí)別技術(shù),且條碼標(biāo)簽易于制作,識(shí)別裝置便宜、操作簡(jiǎn)單。
熱敏打印機(jī)具有噪聲低、速度快、可靠性高、打印字符清晰等優(yōu)點(diǎn),被廣泛應(yīng)用在POS終端系統(tǒng)、銀行系統(tǒng)、醫(yī)療儀器等領(lǐng)域,尤其在物流、倉(cāng)儲(chǔ)、工業(yè)生產(chǎn)等場(chǎng)合。
本文設(shè)計(jì)一種基于LPC2148的手持高速熱敏打印機(jī)器,采用電池供電,能打印條碼、漢字和字符等,可應(yīng)用于工業(yè)生產(chǎn),物流運(yùn)輸跟蹤等方面。其體積小,易于嵌入到其他需要打印功能的產(chǎn)品中。
1 一維條形碼打印原理
一維條形碼是由一組粗細(xì)不同的黑白條按一定編碼規(guī)則排列組成的標(biāo)記,有UPC-E、EAN-8、EAN-13等多種格式,其中以EAN-8、EAN-13在商業(yè)領(lǐng)域最為常見(jiàn)[1]。
EAN-13碼共有13位數(shù)字,按照“模塊組合法”進(jìn)行編碼。其符號(hào)結(jié)構(gòu)由8部分組成,如圖1所示。其中,最左邊第一個(gè)數(shù)字為前置碼,代表左側(cè)數(shù)據(jù)編碼規(guī)則。起始符不代表任何資料,為固定邏輯101。分隔符為固定邏輯01010,將數(shù)據(jù)資料分成左右兩部分。左側(cè)6個(gè)數(shù)字的編碼方式取決于前置碼類(lèi)型。前置碼共10個(gè),它決定左側(cè)6個(gè)數(shù)字的10種編碼方式,分A類(lèi)和B類(lèi),具體編碼值可根據(jù)相關(guān)表格查找。右側(cè)有5位數(shù)據(jù)和1位校驗(yàn)碼,其編碼方式為固定C類(lèi),校驗(yàn)碼也可用作數(shù)據(jù)。
圖1中條碼的前置碼為9,左側(cè)數(shù)據(jù)編碼方式為ABBABA,右側(cè)為固定的CCCCCC,所以770157001687的編碼為101(起始)-0111011-0010001-0100111-0011001-000101-0111011-01010(中間碼)-1110010-1110010-1100110-1010000-1001000-1000100-101(結(jié)束)。其中,0代表?xiàng)l碼的白細(xì)條,1代表?xiàng)l碼的黑細(xì)條。每個(gè)黑、白細(xì)條的寬度為0.33 mm[1],實(shí)際中可由熱敏打印機(jī)的熱敏元件大小確定。打印機(jī)根據(jù)這個(gè)二進(jìn)制編碼即可打印出圖1所示的條碼。
2 熱敏打印機(jī)時(shí)序
選用精工LTPA245高速熱敏打印機(jī),它共有384個(gè)熱敏打印機(jī)元件,排成行的形式。打印寬度為48 mm,驅(qū)動(dòng)電壓為4.5 V~8.5 V,邏輯電壓為2.7 V~5.25 V,打印速度為427個(gè)點(diǎn)行/秒(53.4 mm/s)~720個(gè)點(diǎn)行/秒(90 mm/s)[2]。LTPA245具有小巧、打印速度快等優(yōu)點(diǎn),適用于條碼打印。
LTPA245采用串行通信接口,數(shù)據(jù)通過(guò)串行方式移入打印機(jī)內(nèi)部,其驅(qū)動(dòng)時(shí)序如圖2所示。其中,CLK為串行移位時(shí)鐘,DAT為串行移位數(shù)據(jù),/LATCH為鎖存信號(hào),DST為分段加熱控制信號(hào)。384 bit為一行數(shù)據(jù),在CLK作用下,數(shù)據(jù)從DAT端逐一移入打印機(jī)內(nèi)數(shù)據(jù)寄存器中。每一個(gè)數(shù)據(jù)位對(duì)應(yīng)1個(gè)加熱元件,當(dāng)該單元數(shù)據(jù)為0時(shí),表示不加熱,為1時(shí)表示加熱。熱敏紙被加熱的位置變黑,不加熱的位置不變色(白)。當(dāng)384個(gè)bit(12 words)全部移入打印機(jī)之后應(yīng)產(chǎn)生1個(gè)/LATCH的鎖存信號(hào)(負(fù)脈沖),將數(shù)據(jù)送到打印寄存器。為防止打印電流過(guò)大,控制DST0~DST5,使之逐一輸出1,這樣一行數(shù)據(jù)就分為6段(次)打印完畢。一行打印結(jié)束后,從A、/A、B、/B端送出脈沖,驅(qū)動(dòng)進(jìn)給電機(jī)帶動(dòng)紙前移一段距離,繼續(xù)打印[3]。
3 系統(tǒng)組成
打印機(jī)控制主板結(jié)構(gòu)如圖3所示,由主控CPU(AMR7)、打印頭、電機(jī)驅(qū)動(dòng)、保護(hù)電路、通信接口、中文字庫(kù)、電源管理電路等組成。采用全SMT貼片工藝,所有元件集成在一塊60 mm×70 mm的PCB電路板上,體積小巧。
4 硬件電路設(shè)計(jì)
4.1 主控CPU[4]
主控CPU選用NXP公司LPC2148微處理器。這是一片64腳的ARM7TDMI-S內(nèi)核微處理器。體積小,共有44個(gè)通用I/O口。內(nèi)部集成USB2.0協(xié)議塊、IIC總線(xiàn)、SPI接口、2個(gè)ADC(14路)、1個(gè)DAC、2個(gè)UART。片上存儲(chǔ)器容量大,共有512 KB Flash、32 KB RAM(8 KB與USB共享)。支持串口ISP、JTAG下載方式,功能強(qiáng)大,開(kāi)發(fā)周期短,更為詳細(xì)的資料見(jiàn)參考文獻(xiàn)[4]。
4.2 進(jìn)給電機(jī)驅(qū)動(dòng)
一行打印結(jié)束,由進(jìn)給電機(jī)帶動(dòng)熱敏紙移動(dòng)到下一行繼續(xù)打印。LPTA245打印機(jī)采用2線(xiàn)4相微型小體積、大力矩精密步進(jìn)電機(jī)。電機(jī)有A、B兩組線(xiàn)圈,4個(gè)控制端,分別為A、/A、B、/B。當(dāng)按表1的規(guī)律給這些控制端送入脈沖時(shí),電機(jī)便能勻速傳動(dòng)。
選用專(zhuān)用步進(jìn)電機(jī)驅(qū)動(dòng)芯片LB1836。該芯片共14個(gè)引腳,無(wú)需外圍元件,通電即可工作。
4.3 電源管理電路
電源管理電路包括電池充電、電源切換、穩(wěn)壓電路,如圖4所示。由CPU的硬件PWM模塊產(chǎn)生38 kHz的脈沖驅(qū)動(dòng)Bust電路,輸出一個(gè)穩(wěn)定的直流電壓。輸入12 V電壓,經(jīng)Bust電路降壓得到一個(gè)穩(wěn)定的8.2 V電壓給鋰電池充電。在充電的過(guò)程中,CPU實(shí)時(shí)監(jiān)測(cè)電池電壓(VB)、充電電流(Vi)及電池溫度(VT),以保護(hù)其不被過(guò)沖或異常溫升損壞。此外,通過(guò)控制Q1可在外接電源和電池之間切換。
LM2576是開(kāi)關(guān)型電源穩(wěn)壓芯片,效率高,最大輸出電流為3 A,能為打印機(jī)提供穩(wěn)定、較大的工作電流及電壓(VPP/VE)。AM1117產(chǎn)生3.3 V電壓供所有集成電路使用。需要說(shuō)明的是,LPTA245的邏輯電壓能工作在3.3 V,與CPU的邏輯一致,所以能直接連接。
4.4 標(biāo)準(zhǔn)字庫(kù)
國(guó)標(biāo)碼共有一級(jí)漢字3 755,二級(jí)漢字3 008,共有漢字6 763個(gè)。若按Ucdos漢字系統(tǒng)標(biāo)準(zhǔn)字庫(kù)計(jì)算,每個(gè)漢字為24×24點(diǎn)陣,一級(jí)簡(jiǎn)碼共需270 360 B個(gè)存儲(chǔ)單元,二級(jí)簡(jiǎn)碼共需216 576 B個(gè)存儲(chǔ)單元。數(shù)字、字母、符號(hào)等682個(gè),為24×12點(diǎn)陣,共需24 552 B存儲(chǔ)單元[5-6]。考慮到LPC2148內(nèi)部已集成512 KB Flash非揮發(fā)性存儲(chǔ)器,將常用的一級(jí)漢字簡(jiǎn)碼和682個(gè)常用的符號(hào)存儲(chǔ)在CPU內(nèi)部,以提高訪問(wèn)速度,大約需占用CPU 295 KB個(gè)存儲(chǔ)單元。余下二級(jí)簡(jiǎn)碼則存放在外部擴(kuò)展的EEPROM芯片25LC040中。25LC040內(nèi)有512 KB存儲(chǔ)單元,接到CPU的UART1口,其工作在3.3 V時(shí)的傳輸速度為2 Mb/s[7]。
4.5 通信及保護(hù)電路
與外部通信采用USB及RS-232通信接口。由于LPC2148內(nèi)部集成USB2.0協(xié)議及接口電路[4],外接插頭即可工作。LPC2148內(nèi)部集成2個(gè)兼容16C550的符合工業(yè)標(biāo)準(zhǔn)的UART口,每口帶16個(gè)發(fā)送/接收FIFO緩沖器,外接RS-232電平轉(zhuǎn)換芯片即可使用。
為保護(hù)打印機(jī),電路應(yīng)該具有缺紙、過(guò)熱檢測(cè)功能。圖5(a)為溫度檢測(cè)電路。圖中U3A接成比較器,負(fù)極接打印頭內(nèi)的NTC溫度電阻,正極接U3B輸出。U3B輸入來(lái)自CPU內(nèi)的DAC輸出。當(dāng)溫度超過(guò)設(shè)定值后從T-PR端產(chǎn)生脈沖觸發(fā)CPU中斷。由于NTC電阻的非線(xiàn)性及環(huán)境溫度的影響,U3A端的電壓可能不固定,CPU通過(guò)內(nèi)置可編程DAC輸出可變模擬電壓,能消除NTC的非線(xiàn)性影響以及提高對(duì)環(huán)境溫度的適應(yīng)能力。
圖5(b)為缺紙檢測(cè)電路,當(dāng)打印機(jī)缺紙時(shí)Q5受D3光照而導(dǎo)通,P-V端輸出低電平觸發(fā)CPU中斷。CPU響應(yīng)圖5中的兩個(gè)中斷以保護(hù)打印機(jī)不會(huì)因過(guò)熱和缺紙空打而損壞。
5 軟件設(shè)計(jì)
這里介紹兩個(gè)重要的打印機(jī)進(jìn)程:(1)條碼打印;(2)非條碼打印。當(dāng)CPU接收的數(shù)據(jù)作為條碼打印時(shí),按圖6(a)流程合成EAN-13的條碼數(shù)據(jù)。當(dāng)CPU接收到的數(shù)據(jù)作為非條碼的數(shù)字、符號(hào)、漢字、控制符時(shí),按圖6(b)流程合成非條碼的點(diǎn)陣數(shù)據(jù)。根據(jù)GB2312-80國(guó)標(biāo),數(shù)字、符號(hào)、漢字、控制符等按區(qū)位碼排列,每個(gè)漢字用2個(gè)字節(jié)表示其位置,第2個(gè)字節(jié)表示區(qū)位,第1個(gè)字節(jié)表示區(qū)中位置。計(jì)算機(jī)大多以機(jī)內(nèi)碼作為標(biāo)準(zhǔn)交換信息。區(qū)位碼和機(jī)內(nèi)碼的轉(zhuǎn)換按下式進(jìn)行:
機(jī)內(nèi)碼=區(qū)位碼+A0A0H (1)
無(wú)論是機(jī)內(nèi)碼或區(qū)位碼,都無(wú)法直接獲得漢字或字符在字庫(kù)中的存儲(chǔ)位置,因此還要將(1)式按下式映射到字庫(kù)的起始地址,忽略字庫(kù)存放的起始地址,只要求得其偏移量即可在字庫(kù)中找到其點(diǎn)陣數(shù)據(jù)。因字符點(diǎn)陣占36 B,故:
字符起始地址=(機(jī)內(nèi)碼-A0A1H)×36 (2)
漢字點(diǎn)陣占72 B,故:
漢字起始地址=(機(jī)內(nèi)碼-A0A1H)×72 (3)
本文設(shè)計(jì)的熱敏打印機(jī),通過(guò)USB及RS-232通信口接收計(jì)算機(jī)標(biāo)準(zhǔn)機(jī)內(nèi)碼交換碼,能打印條碼、字符、漢字等,具有體積小、重量輕、速度快的優(yōu)點(diǎn)?;?strong>LPC2148的打印機(jī)控制主板、元件少、體積小、性能可靠、集成度高,重要的是可嵌入到其他產(chǎn)品中,具有一定的市場(chǎng)價(jià)值。