Назад

Термопринтер с использованием термопечатающей головки LTP3445

(2001-2003 гг) Этот проект позволяет печатать на термобумаге шириной 104 мм со скоростью до 50 мм/с с использованием термопечатающей головки LTP3445 графические изображения, специально подготовленные на компьютере. Для работы (подготовки картинок на ходу) вполне достаточно встраиваемой 386й машины (одноплатного PC).

Весь проект (вместе с этим описанием) можно взять в виде одного zip.

Сначала проект был рассчитан на использование EPP, но потом его пришлось переделать для возможности работы с SPP.

Проект состоит из двух частей: аппаратной (схема и firmware) и программной (фукция для посылки данных в термоголовку).

Аппаратная часть

В схеме использованы: термоголовка LTP3445, контроллер Atmel AVR AT90S8515, несколько мощных полевых транзисторов IRF9540 (потом для экономии места и денег их заменили на сборки IRF7309) и мелкой логики. Сама схема лежит или в архиве, или здесь (110 К) (процессорная часть) и здесь (180 К) (обвязка, защита от перегрева и питание).
Основные характеристики:
Напряжения питания: +3,3 В 0,1 А; +5 В, 0,2 А; +8 В 3,6 А (пиковое, сильно зависит от скорости и черноты изображения. В принципе, можно печатать и от батарей).
Скорость печати: до 50 мм/с
Разрешение: 8 точек/мм (определяется головкой)

Программа (firmware) для этого термопринтера писалась на бесплатном C с добавлением ассемблерных вставок. Потом, увидев, насколько хорошо компилятор оптимизировал код (отличие по быстродействию от ассемблера менее 5 процентов!), я от большинства этих вставок отказался, чтобы было проще жить, модифицировать и отлаживаться. (Правда, при этом надо писать на С так, чтобы было удобно оптимизировать, правильно и аккуратно используя модификаторы register, volatile и прочие. О том, как правильно работать с GNU C для AVR, написано на дружественном сайте моего коллеги Миши Клокова)
Вкратце: в RAM контроллера организован буфер FIFO примерно на две-три строки. Данные передаются через LPT с подтверждением приема от контроллера по прерыванию (чтобы не срывать процесс печати, надо передавать данные длинными массивами). Из контроллера в LPT передается информация о состоянии термоголовки (нет бумаги, открыт механизм, перегрев и т.д., можно передавать температуру головки) и количестве данных в FIFO контроллера. Шаговый двигатель подачи бумаги работает с плавным разгоном, иначе его заклинивает и он начинает дребезжать на месте (впрочем, об этом написано в LTP3445 datasheet (600 K)). В зависимости от температуры термоголовки изменяется длительность импульса нагрева для печати, чтобы по всей длине была одинаковая контрастность. Таблицу для конкретной головки можно при желании залить в EEPROM контроллера, если ее нет, то используются значения по умолчанию.
Кое-какие комментарии по установке и компиляции можно найти внутри проекта в файле howto.txt. Проект компиляется из среды Visual C++ 6 (очень удобно!) или прямо из DOS при установленном WinAVR C. Возможны грабли с порядком аргументов портовых операций, если что-то не работает, первым делом смотрите туда. (Начиная с какой-то версии GCC изменился способ вызова outp() ).

В июле 2004 года я проапгрейдил исходники, чтобы они могли компиляться с помощью последнего релиза WinAVR. Проверено на WinAVR 20040404. На 22 июля 2004 года скачивается отсюда.

Программная часть

Программная часть PC-шной стороны писалась в Borland C 3.1. Основная идея - сформировать битовый массив размером (104*8)*n байт с растровым изображением, которое хочется напечатать, и послать его в FIFO контроллера. Естественно, так можно печатать и текст, и графику. Здесь лежит программа для печати монохромных файлов *.bmp шириной (кажется) 832 пиксел. Ее можно использовать как заготовку для собственной подпрограммы печати. Она хорошо отлаживается и там все должно быть понятно.
Из непонятного: в принтер можно и нужно посылать команды, например, изменения максимальной скорости печати, сброса и др. Они посылаются так же, как и данные, в том же массиве.

Весь проект был сделан за пару месяцев по вечерам и затем около года периодически отлаживался и дополнялся. Возможно, выложенная программа для компа уже не работает с этим принтером (с момента ее написания для тестирования что-то могло измениться), но надо попробовать.

Поскольку этот проект делался за деньги, то по отношению к заказчику было бы нечестно выкладывать release-версию. Но работоспособный пререлиз, как мне кажется, вполне нормально - и обязательства не нарушаю, и всем полезно. Желающие могут использовать прямо так, кто-то может и доработать. Например, можно прикрутить более узкую термопечатающую головку или просто головку другого типа.

Этот проект можно бесплатно использовать, распространять и изменять, единственная просьба - вколачивать в исходники строку, по которой меня можно найти. Вдруг кто-то халтурку подкинет :) Строка может выглядеть так: "Разработчик оригинальной версии ПО - Д. Коробков, dkorobkov@mail.ru"


Для писем
Гостевая книга