单片机控制微型打印机1引言由于常用的微型针式打印机的速度慢,噪声大,无法满足某些场合的需要。微型热敏打印机具有打印速度快、噪音低、可靠性高、字迹清晰、机头小而轻等优点,可满足各种场合的打印要求,因此得到广泛应用。笔者在汽车行驶记录仪的开发过程中,根据厂家要求,选用较为先进的热敏打印机作为打印设备。但微型热敏打印头对打印时序和温度要求较高,一旦控制不当极易造成打印头烧毁。因此,在有合理的硬件设计的基础上,软件设计也十分重要。本文使用某些软件设计替代了部分硬件电路,使打印机的控制电路得到了简化。摘要:介绍了基于89S51单片机的微型热敏打印机的组成,分析了打印原理,详细给出了整体流程以及各个功能模块的软件设计。热敏打印头采用I/O口模拟串行数据传输实现数据加载。设计的微型热敏打印机运用于实际,取得了良好的效果。关键词:热敏打印机过热保护步进电机数据加载2打印原理选用的FTP-628作为热敏打印头。该热敏打印头点结构384点/行,水平方向点密度:8点/mm,垂直方向行间距:8点/mm。有效打印宽度48mm。打印速度最大为60mm/秒[1]。要打印的数据在时钟CLK的配合下,经由数据输入脚DI移到热敏机芯内部的移位寄存器中。经384个时钟周期,一行384位数据全部移到移位寄存器后,锁存端的锁存信号/LAT由CPU置低,移位寄存器的数据被锁存到锁存器。然后热敏头加热控制信号STB产生高电平,此时根据384点输入的DI数据是1或者是0决定发热元件是否发热,由此在热敏纸上产生要打印的点行。3系统整体框图本文介绍的微型热敏打印机由主控芯片、步进电机驱动模块、热敏打印头过热保护模块、热敏打印头缺纸检测模块、RS-232通信模块、供电模块等部分组成。其中步进电机驱动模块负责控制打印纸走纸及走纸速度;热敏打印头过热保护模块防止热敏打印头温度过高损坏;热敏打印头缺纸检测电路完成热敏打印头是否有纸检测;RS-232通信模块实现打印机与上位机之间的通信;供电模块给控制电路及热敏打印头供电。根据实际需要,考虑成本,选择89S51单片机作为主控芯片[2]。如图1,给出了主控芯片与各个模块之间的接口功能设计。图1主控芯片与功能模块的接口设计4系统软件设计4.1整体流程如图2,给出了整个系统工作的软件流程图。本热敏打印机的软件设计主要是通过RS-232通信模块接收由主机传来的数据。当接收到数据时,首先要判断是命令字还是字符数据。如果是命令字,则打印机按照命令动作;如果判断为字符数据,则从字库中提取字符点阵,按行打印,走纸。图2系统工作流程图4.2数据加载与印字将内存缓冲区的数据输出到热敏打印头的移位寄存器中,可以通过硬件方式和软件移位的方式实现[3]。本打印机实现方案采用的是后者。一般情况下,软件移位是由I/O口模拟串行数据传输时序。图3为I/O口实现数据移位流程图。P1.0口模拟时钟CLOCK,P1.1口在CLOCK的配合下输出数据DATA,输出数据到热敏打印头内部的移位寄存器中。P2[0:5]分别与打印头内部的加热选通信号STB[0:5]相连接。当数据全部移入到移位寄存器后,对STB[0:5]操作,加热印字。由于热敏打印机是通过打印头加热后在热敏打印纸上灼烧印字,所以,加热时间的长短决定了印字的清晰与快慢。因此,根据实际情况,合理的设计加热时间对于实现热敏打印机的高质量打印十分重要。图3I/O口实现数据移位流程图4.3步进电机走纸及驱动图4I/O口模拟输出PWM的时序图设计的热敏打印机内部的二相四拍步进电机控制打印头的走纸及走纸速度。由2路I/O口模拟2路PWM输出,再经过两个非门,将输出的2路模拟PWM波形转换为4路,输入步进电机驱动器,驱动步进电机[4]。图4为P1.2与P1.3口模拟输出PWM的时序图。在一个周期内,P1.2较P1.3延时3/4个周期。4.4保护与中断热敏打印头加热时间一般为1ms,连续加热超过1s后,很容易烧毁、损坏热敏头,所以实际的热敏打印机必须对热敏打印头添加过热保护电路。当热敏打印头温度过高时,过热保护模块输出一个低电平到/INT0脚,使打印机进入中断[3]。图5为过热保护中断流程图。进入中断后,主控芯片断开热敏打印头加热供电控制继电器,停止热敏打印头的加热供电,并暂停其他动作。当热敏打印头温度降低后,则过热保护模块输出一个高电平到/INT0脚,此时,打印机延时一段时间后出中断。热敏打印头内部用光电继电器作为传感器,检测打印头是否有纸。当热敏打印头无纸时,传感器中的发光二极管发出的光束无法经由打印纸反射到光敏三极管上,光敏三极管由此而无法导通,经过外部电路后,/INT1为低电平,进入中断。反之,/INT1为高电平,工作正常。其中断流程与过热保护中断类似。图5过热保护中断流程图4.5字符库的构造与提取由于本打印机是应用于汽车行驶记录仪的专用打印机,按照汽车行驶记录仪的要求,约需使用100个左右的汉字以及26个大写英文字母以及10个阿拉伯数字,为降低字库对硬件存储空间的要求,采用自定义的字符库。另外,自定义的字符库灵活性较强,在自定义字库中,这样既可以在同等打印宽度的情况下实现灵活打印,也可以使打印出来的字符效果美观。提取字符点阵时,首先判断字符类型,再寻得要打印字符的首地址,按照该字符的点阵规范,从字库中取出打印点阵放入缓冲区,进而加载,并打印。5结束语本文使用软件实现了热敏打印机的运行控制。实验证明,微型热敏打印机在实时性要求不高的诸多场合能正常运行,验证了设计方案的合理性。而对于实时性要求高、成本并不敏感的打印环境,则应该引入实时操作系统,实现对打印机的实时操作。本文创新点:为简化硬件电路,采用软件移位实现数据加载,通过软件产生步进电机所需的PWM驱动信号;为减小打印机对存储空间的需求,针对汽车行驶记录仪使用字符少的特点,设计了自定义的字符库。下面还介绍一个摘要:在分析M-164微型打印机控打原理的基础上,设计了以89C52为核心的汉字微型打印机,介绍了主要的硬件构成及主要的控打软件。这种微型打印机是仪器仪表的重要输出设备。关键词:单片机;打印控制;并行接口;存贮器1引言由于单片机具有简单实用、高可靠性、良好的性能价格比以及体积小等优点,已经在各个技术领域得到了迅猛发展。本文着重介绍89C52对并行接口的微型打印机的控制,以便更好地了解和掌握单片机对外部接口的一般和一些特殊功能的应用。2控制打印原理89C52单片机执行程序存贮器中的程序,控制电机带动滑槽轮及蜗杆转动[1],使打印机的机头滑架左右移动,从而不断改变同一点行上的打点位置。蜗杆的转动一方面通过凸轮带动走纸机构实行走纸,另一方面驱动色带移动。电机转动时感应线圈有一个3V的正弦信号,经过整形电路后成为方波,此方波输入到89C52,经过89C52相应的指令检测此方波的变化时刻(从上升沿变到下降沿或者从下降沿变到上升沿时刻),在方波变化时刻使打印机的相应打针进行冲打,完成打印任务,同时由这个方波的变化确保各打印点之间的距离相等。当机头滑架到达最左边时,磁铁使干簧管闭合,这时单片机送出一负脉冲作为行同步信号,使每行打印时在最左端对齐。3硬件组成3.1驱动电路用89C52的P1口的P10~P14分别控制打印机的电机及打印针头,P3.3控制干簧继电开关,当滑架到达最左端时,电机每转一圈,干簧继电开关闭合一次,P3.3就接地一次发出一负脉冲作为同步信号,以保证打印时每行在最左端对齐。在以前众多微型打印机中,由于应用三极管的拉电流,当单片机上电复位时P1口的初始状态为输入方式,所以P10~P17均为高电平,如果没有一个非门[2],则单片机上电复位时就会使组成功率放大器(由2个NPN管构成)的三极管导通,从而使电机转动和4个打针同时通电,这是不允许的。在这里使用灌电流足以驱动电机和打针,故不需非门,如图1所示。电机转动时,感应线圈输出幅值为3V的正弦波,经10,11两端子送出到晶体管整形为方波后送入P3.4,P3.4检测此方波作为打印同步信号,以确保打印点之间距离相等。4只打针循环同步情况如图2所示。由图2可知:A,C打针是在方波下降到来时刻冲打,B,D打针在方波上升到来时冲打。4只打针A,B,C,D在滑架上从左到右水平安装,间隔24个点位。在打印每行96个点时,他们同时移动。次序依次通电激励,每打1点,滑架右移1/4点位,4只打针打完正好移动1个点位。冲打1点行,滑架连续移动24点位。冲打顺序如图3所示。打印机工作时的程序如下:3.2基本系统由于微型打印机的打印缓冲区一次可快速装入240个代码,如全部为汉字,则要占用RAM为240×32=7650个字节,显然89C52内的256B[3]RAM明显不够,所以要外挂1片数据存贮器(这里用的是6116)才能满足要求。基于这些,他的基本系统由89C52芯片,27C040(27C040并不是作为程序存贮器使用,而是用来存放字库、字符),数据存贮器(6116)构成,如图4所示。由于27C040只有1片,所以其片选线与地址锁存器(74LS373)的片选线均直接接地。同时外接的27C040的地址线A0~A7由P0口通过地址锁存器提供,A8~A15由P2口提供,A16~A18由P1.5~P1.7提供。而数据存贮器(6116)片选端CE是由89C52的P2.7控制的,当P2.7=0时则选中6116,此时89C52的P2.0~P2.2输出6116所需的高位地址,P0口输出6116的低8位地址锁存在锁存器74LS373中。若是读6116,则P0口变为输入方式,在RD为低电平时,选通6116,此时6116中相应的数据出现在P0口,再由CPU读入累加器A中。若是写,则P0口为输出,当为低电平时,将累加器A中出现在P0口上的数据写入6116。3.389C52对打印机联络信号的控制3.3.1打印机的联络信号打印机的联络信号有,,BUSY。:数据选通触发脉冲,输入。此信号上升沿时数据线上8位数据被打印机读入机内锁存。:回答脉冲,输出。当其为“低”电平时表示数据已被接收而且打印机准备好接收下一个数据。BUSY:“忙”信号,为状态输出线,当打印机在打印字符、执行命令期间BUSY=1,表示打印机处于“忙”状态,这时打印机通知主机,他处于“忙”之中而不能接收数据,此时主机不能使用信号向打印机送入新的数据字节。当打印机打完一个字符后,BUSY=0,同时他产生信号通知主机,准备接收下一个数据,当主机接收到BUSY=0时,主机向打印接口输出1B到D0~D7,并发出低电平信号,当打印机收到STB低电平信号后,单片机在其上升沿时读入数据。其时序图[4]如图5所示。3.3.289C52对联络信号实施控制的电路电路图如图6所示。上电复位时D触发器(U1)的Q输出端为1,无论P3.0为何值,经过“或”门(6)后,BUSY=1,不接收数据。当89C52的P2.7=0时,即有6116(数据存贮器)的CE为低电平,表示选中了6116,由图3可知当P2.7=0时,经过反相器(3)再经过“或”门(8),此时无论P3.7为何值74ALS374的片选端CE总为高电平,即没有选中,这样就保证了外部的数据与数据存贮器的数据分别进行传输与接收而不至发生混乱。从上面的分析,当P2.7=0时,表示选中了6116,而没有选中74ALS374,此时主机不应有数据送入打印机,即有BUSY=`,=1,下面来看是否满足这点:当P2.7=0时,经过反相器(3)一路经D触发器(U2)的Q输出为1即=1,另一路经过“或”门(8),这时无论P3.7为何值,输出总为1,再经D触发器(U1)的Q输出也为1,经“或”门(6)后,BUSY=1,显然满足要求。当P2.7=1时,通过“非”门(3)后变为0,若此时单片机准备读取数据(即P3.7=0),他们经过“或”门(8)后,一路到74ALS374的片选端(CE),一路到D触发器(U1)的清除端,使D触发器的Q输出端为0,即有74ALS374(CLK)为0,表示74ALS374的D0-D7端已有数据(同时,即P3.5=1,,这样通过检测单片机的P3.5就可知道是否有数据输入),