博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
热敏打印机直驱开发
阅读量:5836 次
发布时间:2019-06-18

本文共 3508 字,大约阅读时间需要 11 分钟。

hot3.png

    应公司要求,最近的工作内容是做热敏打印机直接用GPIO驱动,添加字库字符调用功能实现图形打印,并兼容ESC/POS指令集。特此记录一下,以备将来查阅和整理。首先,开始驱动打印机,让打印机跑起来。

    先来一段拷贝,说明一下要开发的产品微型热敏打印机芯特点:

    微型热敏打印机打印更均匀、运行更平稳;机芯具有体积小,工作电压宽(3.5~8.5 DC V),高效等特点。独特的设计使得热敏打印机机芯具有易装纸,高可靠性特点;该机芯在与我公司的热敏打印机机芯仅为与整机连接的FPC 的长度为加长型(120mm)外,其它性能、结构均为相同,因热敏打印机机芯配置的其与整机PCB 连接的FPC 长度为足够的长,因此便于直接与整机的PCB 连接,可以省去通常的转接板,也便于生产装配和维修之操作性。热敏打印机在安装结构及电器插口与日本富士通公司的FTP-628MCL101 机芯相兼容,适用于微型热敏票据打印机以及热敏票据打印电子收款机等.

153922_yhZX_1425390.png

上图中,PHEPHK为光传感器发射级和阴级,VSEN(LPT_VDD)为光传感器电源。光传感器在进纸口下部,它们的作用是检测是否有纸。VH为打印机电源。DICLK为打印机数据和时钟输入口。STB1STB6为选通脉冲。由于打印机加热对电量需求较大,所以开发者可以根据自身的设备调节选通信号的选通顺序,以达到分散加热,以防电流过大,设备无法运行的目的。LAT是数据锁存控制,DO是打印数据输出。在启动加热之前,需要先通过DICLK输入点阵数据,然后拉低LAT100ns以上将数据锁存。

打印机每行有384个点,点距为0.125mm。每个点1bite数据表示,所以每行48byte。以下是输入数据代码:

static int jx_write_line(unsigned char *p){ int i, j; int ret = 0; unsigned char data; int *tmp = (int *)p; for(j=0; j<48; j++){     data = p[j];     for(i=0; i<8; i++)     {         if((data&0x80) == 0)  gpio_set_value(IUNIN_GPIO_LPT_DIN, 0);         else gpio_set_value(IUNIN_GPIO_LPT_DIN, 1);                          data = data << 1;          ndelay(twCLK_DELAY);         gpio_set_value(IUNIN_GPIO_LPT_CLK, 1);         ndelay(twCLK_DELAY);         gpio_set_value(IUNIN_GPIO_LPT_CLK, 0);     } } gpio_set_value(IUNIN_GPIO_LPT_LAT, 0); ndelay(twLAT_DELAY); gpio_set_value(IUNIN_GPIO_LPT_LAT, 1); ndelay(setup_LAT_DELAY);   return 0;}

接下来是打印机的步进机了。以下是步进机原理图:

153959_XD8J_1425390.jpg

由图可知,步进机由定子和转子组成。通过给四个位置上电驱动里边的转子移动,步进机有两相三相四相等等。热敏打印机 的步进电机采用1-2 相驱动方式,有4 个位置。MT/A(正),MT/A(负),MT/B(正),MT/B(负)。以下是热敏打印机采用的步进机控制时序图:

154017_yFJZ_1425390.png

由上图可知,步进机行进一点行的上电时序为:从A(正)单独加电到A(负)单独上电,由步进机原理图可知,行进一点行相应的步进机跑了半圈。由此我们的行进方式应该为前后半圈交替的顺序。以下是步进机驱动代码:

 if (line == 0) {     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 1); //STEP1     gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 1);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 0); //STEP2      gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 0);     gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 1);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 0); //STEP3     gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 1);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 0); //STEP4      gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 0);  } else {     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 0); //STEP1     gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 0);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 0); //STEP2      gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 0);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 1); //STEP3      gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 1);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 0);      MOTOR_DELAY;     gpio_set_value(IUNIN_GPIO_LPT_MOT_AP, 1); //STEP4      gpio_set_value(IUNIN_GPIO_LPT_MOT_BP, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_AN, 0);      gpio_set_value(IUNIN_GPIO_LPT_MOT_BN, 0);  }

代码中, MOTOR_DELAY 为步进机行进等待时间,在此时间内,我们可以驱动 STB1 STB6 的选通脉冲。驱动方式根据设备供电能力分时段分别对 STB1 STB6 进行加热,也可以调节加热时长和频率,以达到调节灰度级的效果。

此, 热敏打印机能打点了,基本驱动实现。接下来是优化的过程了。。。

转载于:https://my.oschina.net/u/1425390/blog/186911

你可能感兴趣的文章
aspx页面执行顺序
查看>>
Linux安装Java JDK 1.7
查看>>
7月11日我国垃圾邮件报告:广东湖北河南再居前三
查看>>
JSON辅助格式化
查看>>
widows8消费者预览版发布啦
查看>>
三天熟练掌握HTML5和CSS3
查看>>
[复习] grep、sed、awk练习题(二)
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
ES6 系列之 Babel 将 Generator 编译成了什么样子
查看>>
Apache错误日志详解
查看>>
动态查看对Memcache的使用
查看>>
整理时下流行的浏览器User-Agent大全
查看>>
linux下设置最大文件打开数nofile及nr_open、file-max说明
查看>>
Oracle中的Sql语句
查看>>
把Nginx注册成Windows的系统服
查看>>
每天一个linux命令(2):cd命令
查看>>
Python网页抓取urllib,urllib2,httplib
查看>>
Kubernetes删除资源后持续terminating状态
查看>>
【资料整理】下载和分析cdn节点汇总日志
查看>>
委托与事件(个人的一点理解)
查看>>