基于C语言的压电式喷墨打印机驱动程序设计
2011-02-08马玉春
马玉春,陆 华
(琼州学院海南省嵌入式系统重点实验室,海南三亚572022)
0 引言
喷墨打印机采用非击打的工作方式,突出的优点是体积小、操作简单方便、打印噪音小、使用专用纸张时可以打印出与照片相媲美的图片。所以,研发喷墨打印机驱动程序,是制造自主知识产权的喷墨打印机的基础,也是制造以喷墨打印机作为输出部件的设备的重要基础。
对市面上比较流行的压电式喷墨打印机进行了分析,测试并绘制出压电式喷墨打印机的工作时序图,剖析其逻辑关系,在此基础之上,使用STM32F105开发板作为硬件平台,以IAR Embedded Workbench For ARM 5.40作为软件开发工具,开发出压电式喷墨打印机的驱动程序,实现了对压电式喷墨打印机喷墨头喷墨进行控制的功能,并通过了测试,表明达到了预期的效果。
1 压电式喷墨打印机工作原理
压电式喷墨打印机准备进行打印工作时,首先通过上位机控制蠕动泵,将墨盒中的墨水按照打印的需求,以不同的比例,经过过滤器后抽到打印喷头中,同时再通过上位机控制压电陶瓷驱动电源的工作,使其能够根据用户的需要控制打印头的运动和喷射行为,然后打印机喷头将不同颜色的墨水喷射到一个尽可能小的点上,最后大量这样的点便形成了不同的图案和图像。压电式喷墨打印机工作的基本原理如图1所示。
图1 压电式喷墨打印机工作原理图
图2 喷墨打印机喷墨示意图
压电式喷墨具体的工作过程是将许多小的压电陶瓷放置到压电式喷墨打印机的打印头喷嘴附近,利用它在电压的作用下会发生形变的原理,适时地加上电压,压电陶瓷随之产生伸缩使喷嘴中的墨汁喷出,在输出介质表面形成图案。压电式喷墨打印机喷墨头喷墨的过程如图2所示。
2 压电式喷墨打印机的测试
2.1 时序图的绘制由于打印机内部的工作流程对于用户来说是透明的,用户只能通过测试打印机,才能了解打印机内部的工作流程。本文绘制时序图采用的方法如图3所示。首先将逻辑分析仪与打印机主板上的测试点连接起来,再用逻辑分析仪上的USB数据线与PC机连接,然后在PC机上安装逻辑分析仪软件,最后起动打印机,在PC机上运行软件并进行数据采样。
2.2 逻辑关系分析图4所示为测试出来的压电式喷墨打印机工作时序图,其中PC0-9对应C端口数据寄存器的第0位到第9位,打印机喷墨头的控制数据由这10位表示,PB0为PC0-9的同步信号,每隔一个下降沿,就将控制数据写入到C端口数据寄存器中,PB0又做为PE0的同步信号,每隔两个下降沿,PE0信号发生一次变化,同时PE0又做为PD8-15的同步信号,PD8-15对应D端口数据寄存器的第8位到第15位,PD8-15为辅助控制信号,辅助喷墨头喷墨。
图3 测试压电式喷墨打印机工作的方法示意图
图4 压电式喷墨打印机工作时序图
3 开发环境
3.1 硬件开发平台使用的硬件开发平台为STM32F105开发板,它是STM32系列中的增强版本。STM32F105开发板是基于ARM Cortex-M3内核,专为要求高性能、低成本、低功耗的嵌入式应用开发而设计的。该系统主要由四个驱动单元和四个被动单元组成。四个驱动单元分别为:ARM Cortex(TM)-M3内核、DCode总线、系统总线、通用DMA;四个被动单元分别为:内部SRAM、内部闪存存储器、FSMC、AHB到APB的桥。STM32F105开发板的系统结构框架如图5所示。
图5 STM32F105开发板的系统结构图
动单元分别为:ARM Cortex(TM)-M3内核、DCode总线、系统总线、通用DMA;四个被动单元分别为:内部SRAM、内部闪存存储器、FSMC、AHB到APB的桥。STM32F105开发板的系统结构框架如图5所示。
3.2 开发板I/O端口I/O端口结构体定义中的GPIO_Pin成员对应的是I/O端口的针脚,GPIO_Speed成员对应的是I/O端口的输出速率,GPIO_Mode成员对应的是I/O端口输出模式。其源代码如下所示。
与这个结构体密切相关的是GPIO_Configuration函数,该函数首先定义一个GPIO_InitTypeDef类型的GPIO_InitStructure结构体,接着调用RCC_APB2PeriphClockCmd函数使能I/O端口的时钟,然后是结构体成员的赋值,最后调用GPIO_Init函数初始化I/O端口。
3.3 开发板定时器定时器结构体定义中的TIM_Prescaler成员对应的是定时器的预分频值,TIM_CounterMode成员对应的是定时器的计数方式,TIM_Period成员对应的是定时器计数最大值,TIM_ClockDivision成员对应的是定时器的时钟分割值,TIM_RepetitionCounter成员对应的是定时器的重复计数值。其源代码如下所示。
与这个结构体密切相关的是TIM_Configuration函数,该函数首先定义一个TIM_TimeBaseInitTypeDef类型的TIM_TimeBaseStructure结构体,接着调用TIM_DeInit函数复位定时器TIM2,然后是结构体成员的赋值,再调用TIM_TimeBaseInit函数初始化定时器,最后调用TIM_ClearFlag函数清除定时器溢出中断标志,调用TIM_ITConfig函数允许定时器2产生溢出中断,调用TIM_Cmd函数允许定时器2计数。
3.4 软件开发平台采用了IAR Embedded Workbench For ARM 5.40 软件开发平台,该软件是由IAR Systems公司提供,IAR Systems公司是全球领先的嵌入式系统开发工具和服务的供应商。它最著名的产品是C编译器-IAR Embedded Workbench,支持众多知名半导体公司的微处理器。许多全球著名的公司都在使用IAR SYSTEMS提供的开发工具,用以开发他们的前沿产品,从消费电子、工业控制、汽车应用、医疗、航空航天到手机应用系统,应用十分广泛,功能非常强大。此软件的5.40版本是比较新的版本,功能比较全,而且支持众多知名半导体公司的微处理器,其中就包括ARM,开发板STM32F105的内核是ARM,所以选择IAR Embedded Workbench For ARM 5.40软件开发平台,是比较好的选择。
4 压电式喷墨打印机驱动程序的实现
图6 压电式喷墨打印机驱动程序流程图
图6为压电式喷墨打印机驱动程序流程图,此程序以Main函数为入口,然后调用Wait函数等待上微机发送启动命令,启动命令接收之后,分别调用RCC_Configuration函数、GPIO_Configuration函数、NVIC_Configuration函数和TIM_Configuration函数,进行系统初始化、I/O端口的配置、中断初始化设置和定时器配置。各种配置完成之后,定时器使用向上重复计数模式计数,当计数值TIM_Period达到定时器设置的最大值71时,定时器产生中断,接着调用中断处理函数,如果中断处理函数中所有要发送的数据已经全部发送到喷墨头控制芯片中,则将全局变量flag赋值为1,中断处理完之后,判断全局变量flag是否为1,如果为0,则定时器重新计数,否则程序运行结束,最后压电式喷墨打印机停止工作。
5 测试
程序设计完成之后,运行程序,测试自主研发的压电式喷墨打印机。测试方法如图3所示。将逻辑分析仪软件采样得到的数据导入到Excel中,通过分析导入到Excel中的数据,这些数据与程序中发送的数据是一致的。图7为从STM32F105开发板测试出来的数据的折线图。
启动自主研发出来的压电式喷墨打印机,同时运行本驱动程序。从打印机的打印结果中分析,该驱动程序设计达到了预期的效果。
图7 测试数据的折线图
6 结论
通过分析压电式喷墨打印机的工作原理,接着测试压电式喷墨打印机,并绘制出其工作时序图,剖析其逻辑关系,在此基础之上利用 STM32F105开发板和 IAR Embedded Workbench For ARM 5.40开发工具搭建开发环境,完成了压电式喷墨打印机的驱动程序的研发,实现了对压电式喷墨打印机喷墨头的控制。
本文的研究成果有助于那些没有自主知识产权的支持自己品牌的中小型打印机制造公司,在没有核心技术支持的情况下,通过此种方法研究打印机的驱动程序,大大地减少了打印机的制造成本,并在一定程度上打破了一些公司在打印机技术上的垄断。
[1]马玉春.基于bioscom的嵌入式模块仿真开发平台研究[J].电脑编程技巧与维护,2009,(19):49-51.
[2]张伟.Windows XP下打印机驱动程序的分析与设计[D].西安市:西安电子科技大学,2008.
[3]胡晓明,吴非,刘刚利.压电式喷墨打印机驱动电源设计[J].信息化纵横,2009,(15):8-12.
[4]王贝.压电式喷墨的建模与分析[D].西安市:西安电子科技大学,2009.
[5]STM32(ARM Cortex M3) - 32-bit Microcontrollers - Technical Literature and Support Files[EB/OL].http://www.st.com/mcu/familiesdocs-110.html,2010 -03 -19.