Как сделать ESC-POS принтер самому

В качестве подопытного выбран принтер Fujitsu FTP-628MCL101. Просто по тому , что это один из популярных принтеров в контрольно кассовой технике.

Подключается плоским шлейфом , который имеет 30pin и шаг 1мм (переходник заказываем на али) .

Fujitsu FTP-628MCL101 - как бы своего рода стандарт. Используется этот принтер очень массово в чековых принтерах, кассовых аппаратах . И у его клонов в описании можно увидеть совместимо Fujitsu FTP-628MCL101.

Упрощаем задачу до минимума

Упростим для начала задачу : двигать ленту пока не будем, т.к. пропечатаную точку мы увидим и так , если она напечатается.

Распиновка контактов принтера:

фотка 1

Какие линии нам нужно задействовать видно из диаграммы:

фотка 2

На самом деле не очевидно в какой последовательности посылать , особенно LAT и STB. Выяснили экспериментальным путем (см. ниже).

фотка 3

Что мы поняли из картинок и путем экспериментов:

Сначала нужен CLK частотой до 8MHz и не надо беспокоится , чтобы частота была стабильная, все работает по фронтам 0 в 1 и 1 в 0:

Важно : не используйте цифровые выводы 0 и 1 , т.к. их будет использовать Serial для отладки!

Управление двигателем делаем через аналоговые выводы (ШИМ). Также можно будем регулировать крутящий момент обмоток.

Обязательно сначала обеспечиваем начальные значения линий , чтобы ничего не сжечь:

LAT =1 (потягиваем к питанию +5В)
STB1..6 = 0 (лучше подтянуть резисторами к земле, но можно и в скетче при старте притянуть к LOW)
DATA IN - не важно
DATA OUT - не важно
DRVER OUT - это не внешний вывод , а внутри ТПГ непонятно что.

Посылаем данные в ТПГ:

Не забываем запитать принтер от напряжения 7.4В.

1. устанавливаем CLK в 0
2. ждем 1мкс
3. в DATA IN устанавливаем значение первой точки (HIGH - это жжечь)
4. ждем 1мкс
5. поднимаем CLK в 1
6. ждем 1мкс
7. тут можно считать записанное значение из DATA OUT (но это не обязательно)

... повторяем 1..7 64 раза (для первых 64 точек, тут происходит запись значения в SHIFT REGISTER)

8. устанавливаем LAT в 0 , CLK еще в 1
9. ждем 1мкс
10. поднимаем LAT в 1 (тут происходит запись 64 точек в LATCH REGISTER)
11. ждем 1мкс

... повторяем 1..11 6 раз (для 6 частей термоголовки)

12 . устанавливаем нужный STB в 1, остальные естественно в 0
13. ждем 3 миллисекунды (нормальное время для прожига точек)
14. скидываем STB в 0.

... повторяем пп 12..14 для оставшихся 5 STB

Вот и все. Проблем тут не особых не возникло. Линия напечаталась, идем дальше.

Самое главное не сжечь термоголовку

Стоит принтер примерно всего 1000р., но тоже жалко , да и НЕ вандалы мы все-таки.
Сразу скажу мне удалось не сжеть, хотя пару раз был близок к этому.

Собираем все на брэдборде с платой ардуино UNO R3

STB 1..6 на 0
STB 1 подтягиваем к 0
GND все 4шт. на 0 (т.к. они отдельные и между собой внутри тпг не соединяются)
VH все 4шт. на +5В (между собой внутри тпг они не соединяются)
Vdd +5В с ардуино

PHK,VSEN,PHE - это встроенные в ТПГ датчики наличия бумаги выдают информацию о наличии бумаги (нам пока не нужны)
TM - это для контроля перегрева ТПГ (нам пока не надо)
MT - обмотки двигателя (нам пока не надо)

Нам понадобится вот такая платка переходник с шлейфа принтера 30 пин (1мм) на обычные пины ардуины :

фотка 4

Собираем макет на ардуино , выглядит это примерно так:

фотка 5

Переходим к двигателю принтера Fujitsu FTP-628MCL101

Фазами двигателя по даташиту надо управлять так :

фотка 6

Методом прозвонки поняли , что выводы A,NA,B,NB тупо идут на двигатель (питание к движку отдельно ни откуда не подается). Т.е. 7,4В = VH - это только для термоговки, а двигателем надо управлять отдельно.

Кстати такая плата с али НЕ ПОДОЙДЕТ :

Тут ULN2003 просто закорачивает на землю выводы обмоток двигателя. Питание в двигатель подается отдельным пятым проводом.

фотка 7

Подойдет примерно такая плата на драйвере двигателя DRV8833:

Тут в плате для двигателя 2 выхода на одну фазу (всего четыре). На один из выводов обмотки двигателя подается питание , на другой земля. Делается это мосфетами внутри микросхемы. Платку покупали в робошопе (на удивление недорогой магазин):

фотка 8
фотка 9

В результате после довольно не продолжительного времени (3-4 часа) наш двигатель принтера закрутился как надо.

Работает протяжка кстати в двух вариантах на выбор : 4 шага на 360 градусов или 8 шагов на 360 градусов !

Время подачи напряжения на обмотки для одного шага было установлено экспериментально : 1 мс вполне достаточно!

Экспериментально было установлено , что для нормального прожига точек delay(3) нормально, delay(1) - слабо видно.

Далее переходим к реализации печати символов через COM порт

В Ардуино среде изначально предусмотрено отладка и управление по COM порту через объект Serial. Просто воспользуемся им.

Для этого в Ардуина будет ждать прихода символов (завершение символ ENTER) и печать строку на принтере. Для печати будем использовать кодовую таблицу CP866 8*5 точек (просто потому,что первой нашли и скачали в интернете). В скетче можно изменением одного параметра увеличивать ширину в 2 и 4 раза.

В результате можно уже напечатать примерно такое:

фотка 10

Данный проект является полностью открытым для скачивания со всеми исходниками

Изучайте принтеры , изобретайте, делитесь знаниями, пользуйтесь на здоровье результатами!

Если понравилась идея делайте ссылку на страницу , делитесь с другими.

А мы в дальнейшем еще кое-чем сможем удивить.

Скачать проект Адруино UNO проект ПЕЧАТЬ СТРОКИ ИЗ COM порта на принтер Fujitsu 628 можно ниже :

Файлы для скачивания