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