基于LPC2148的手持式热敏条码打印机研制
扫描二维码
随时随地手机看文章
摘 要: 介绍了EAN-13常见商用条码编码格式,给出一个打印实例,设计一种基于LPC2148的热敏打印机控制主板,并给出了系统硬件组成框图。为使打印机工作于电池供电的便携模式,设计了高效率电源管理电路。同时对中文字库的编码方法进行研究后,按字库使用频度设计两个字库,并将常用字库集成在CPU内部。最后给出条码、汉字及字符的打印编程思路。
关键词: 热敏打印机; ARM控制器; 条码; 机内码; 字库; 电池供电; 保护电路
条码技术是自动识别与数据采集(AIDC)技术中应用最古老、最成熟的技术,具有输入速度快、可靠性高、采集信息量大、灵活实用等特点,是迄今为止最经济、实用的一种自动识别技术,且条码标签易于制作,识别装置便宜、操作简单。
热敏打印机具有噪声低、速度快、可靠性高、打印字符清晰等优点,被广泛应用在POS终端系统、银行系统、医疗仪器等领域,尤其在物流、仓储、工业生产等场合。
本文设计一种基于LPC2148的手持高速热敏打印机器,采用电池供电,能打印条码、汉字和字符等,可应用于工业生产,物流运输跟踪等方面。其体积小,易于嵌入到其他需要打印功能的产品中。
1 一维条形码打印原理
一维条形码是由一组粗细不同的黑白条按一定编码规则排列组成的标记,有UPC-E、EAN-8、EAN-13等多种格式,其中以EAN-8、EAN-13在商业领域最为常见[1]。
EAN-13码共有13位数字,按照“模块组合法”进行编码。其符号结构由8部分组成,如图1所示。其中,最左边第一个数字为前置码,代表左侧数据编码规则。起始符不代表任何资料,为固定逻辑101。分隔符为固定逻辑01010,将数据资料分成左右两部分。左侧6个数字的编码方式取决于前置码类型。前置码共10个,它决定左侧6个数字的10种编码方式,分A类和B类,具体编码值可根据相关表格查找。右侧有5位数据和1位校验码,其编码方式为固定C类,校验码也可用作数据。
图1中条码的前置码为9,左侧数据编码方式为ABBABA,右侧为固定的CCCCCC,所以770157001687的编码为101(起始)-0111011-0010001-0100111-0011001-000101-0111011-01010(中间码)-1110010-1110010-1100110-1010000-1001000-1000100-101(结束)。其中,0代表条码的白细条,1代表条码的黑细条。每个黑、白细条的宽度为0.33 mm[1],实际中可由热敏打印机的热敏元件大小确定。打印机根据这个二进制编码即可打印出图1所示的条码。
2 热敏打印机时序
选用精工LTPA245高速热敏打印机,它共有384个热敏打印机元件,排成行的形式。打印宽度为48 mm,驱动电压为4.5 V~8.5 V,逻辑电压为2.7 V~5.25 V,打印速度为427个点行/秒(53.4 mm/s)~720个点行/秒(90 mm/s)[2]。LTPA245具有小巧、打印速度快等优点,适用于条码打印。
LTPA245采用串行通信接口,数据通过串行方式移入打印机内部,其驱动时序如图2所示。其中,CLK为串行移位时钟,DAT为串行移位数据,/LATCH为锁存信号,DST为分段加热控制信号。384 bit为一行数据,在CLK作用下,数据从DAT端逐一移入打印机内数据寄存器中。每一个数据位对应1个加热元件,当该单元数据为0时,表示不加热,为1时表示加热。热敏纸被加热的位置变黑,不加热的位置不变色(白)。当384个bit(12 words)全部移入打印机之后应产生1个/LATCH的锁存信号(负脉冲),将数据送到打印寄存器。为防止打印电流过大,控制DST0~DST5,使之逐一输出1,这样一行数据就分为6段(次)打印完毕。一行打印结束后,从A、/A、B、/B端送出脉冲,驱动进给电机带动纸前移一段距离,继续打印[3]。
3 系统组成
打印机控制主板结构如图3所示,由主控CPU(AMR7)、打印头、电机驱动、保护电路、通信接口、中文字库、电源管理电路等组成。采用全SMT贴片工艺,所有元件集成在一块60 mm×70 mm的PCB电路板上,体积小巧。
4 硬件电路设计
4.1 主控CPU[4]
主控CPU选用NXP公司LPC2148微处理器。这是一片64脚的ARM7TDMI-S内核微处理器。体积小,共有44个通用I/O口。内部集成USB2.0协议块、IIC总线、SPI接口、2个ADC(14路)、1个DAC、2个UART。片上存储器容量大,共有512 KB Flash、32 KB RAM(8 KB与USB共享)。支持串口ISP、JTAG下载方式,功能强大,开发周期短,更为详细的资料见参考文献[4]。
4.2 进给电机驱动
一行打印结束,由进给电机带动热敏纸移动到下一行继续打印。LPTA245打印机采用2线4相微型小体积、大力矩精密步进电机。电机有A、B两组线圈,4个控制端,分别为A、/A、B、/B。当按表1的规律给这些控制端送入脉冲时,电机便能匀速传动。
选用专用步进电机驱动芯片LB1836。该芯片共14个引脚,无需外围元件,通电即可工作。
4.3 电源管理电路
电源管理电路包括电池充电、电源切换、稳压电路,如图4所示。由CPU的硬件PWM模块产生38 kHz的脉冲驱动Bust电路,输出一个稳定的直流电压。输入12 V电压,经Bust电路降压得到一个稳定的8.2 V电压给锂电池充电。在充电的过程中,CPU实时监测电池电压(VB)、充电电流(Vi)及电池温度(VT),以保护其不被过冲或异常温升损坏。此外,通过控制Q1可在外接电源和电池之间切换。
LM2576是开关型电源稳压芯片,效率高,最大输出电流为3 A,能为打印机提供稳定、较大的工作电流及电压(VPP/VE)。AM1117产生3.3 V电压供所有集成电路使用。需要说明的是,LPTA245的逻辑电压能工作在3.3 V,与CPU的逻辑一致,所以能直接连接。
4.4 标准字库
国标码共有一级汉字3 755,二级汉字3 008,共有汉字6 763个。若按Ucdos汉字系统标准字库计算,每个汉字为24×24点阵,一级简码共需270 360 B个存储单元,二级简码共需216 576 B个存储单元。数字、字母、符号等682个,为24×12点阵,共需24 552 B存储单元[5-6]。考虑到LPC2148内部已集成512 KB Flash非挥发性存储器,将常用的一级汉字简码和682个常用的符号存储在CPU内部,以提高访问速度,大约需占用CPU 295 KB个存储单元。余下二级简码则存放在外部扩展的EEPROM芯片25LC040中。25LC040内有512 KB存储单元,接到CPU的UART1口,其工作在3.3 V时的传输速度为2 Mb/s[7]。
4.5 通信及保护电路
与外部通信采用USB及RS-232通信接口。由于LPC2148内部集成USB2.0协议及接口电路[4],外接插头即可工作。LPC2148内部集成2个兼容16C550的符合工业标准的UART口,每口带16个发送/接收FIFO缓冲器,外接RS-232电平转换芯片即可使用。
为保护打印机,电路应该具有缺纸、过热检测功能。图5(a)为温度检测电路。图中U3A接成比较器,负极接打印头内的NTC温度电阻,正极接U3B输出。U3B输入来自CPU内的DAC输出。当温度超过设定值后从T-PR端产生脉冲触发CPU中断。由于NTC电阻的非线性及环境温度的影响,U3A端的电压可能不固定,CPU通过内置可编程DAC输出可变模拟电压,能消除NTC的非线性影响以及提高对环境温度的适应能力。
图5(b)为缺纸检测电路,当打印机缺纸时Q5受D3光照而导通,P-V端输出低电平触发CPU中断。CPU响应图5中的两个中断以保护打印机不会因过热和缺纸空打而损坏。
5 软件设计
这里介绍两个重要的打印机进程:(1)条码打印;(2)非条码打印。当CPU接收的数据作为条码打印时,按图6(a)流程合成EAN-13的条码数据。当CPU接收到的数据作为非条码的数字、符号、汉字、控制符时,按图6(b)流程合成非条码的点阵数据。根据GB2312-80国标,数字、符号、汉字、控制符等按区位码排列,每个汉字用2个字节表示其位置,第2个字节表示区位,第1个字节表示区中位置。计算机大多以机内码作为标准交换信息。区位码和机内码的转换按下式进行:
机内码=区位码+A0A0H (1)
无论是机内码或区位码,都无法直接获得汉字或字符在字库中的存储位置,因此还要将(1)式按下式映射到字库的起始地址,忽略字库存放的起始地址,只要求得其偏移量即可在字库中找到其点阵数据。因字符点阵占36 B,故:
字符起始地址=(机内码-A0A1H)×36 (2)
汉字点阵占72 B,故:
汉字起始地址=(机内码-A0A1H)×72 (3)
本文设计的热敏打印机,通过USB及RS-232通信口接收计算机标准机内码交换码,能打印条码、字符、汉字等,具有体积小、重量轻、速度快的优点。基于LPC2148的打印机控制主板、元件少、体积小、性能可靠、集成度高,重要的是可嵌入到其他产品中,具有一定的市场价值。