2017年9月14日 星期四

技術筆記熱感應印表機



印表玩具
   STM32技術

熱感應印表機(thermal printer),已經大量使用於日常生活,舉凡購物時的發票,醫院排隊掛號號碼條或是手搖杯上的標籤貼紙,都是它的應用。使用一種化學原料塗抹在紙上,使得紙張可因受熱而改變顏色,不需要使用墨水或油墨。塗抹固態的染劑與合適的基質,像是熒烷類的隱色染料以及磷酸正十八酯。當基質加熱到其溶點時,染劑會與酸性物質反應,轉換成有色態;而基質很容易快速冷卻,則染劑的有色態會直接被儲存於亞穩定狀態。但一段時間後,顏色仍會逐漸消退,故僅適用於不需長期儲存的用途。

通常,該塗料在加熱時會轉為黑色,但有時會使用轉為藍色或紅色的塗料。開放的熱源,像是火焰,會改變紙張的顏色;而用指甲快速擦過紙張也可以給予足夠的熱能,產生有顏色的標記。另外就是Multicolored papers,最著名的就是寶麗來的ZINK,很美好,但也很貴。


最上面照片是我手邊熱感應印表模組和開發板合體的樣子,相關介紹連結 連結購買連結。實際拿到機器比想像的大且重,感覺可以整個拆開移調不需要元件。紙寬是5.7 cm(Paper width: 57mm Print width: 48mm)。一般熱感應紙太大捲,放不進盒子裡,得手動剪掉部分讓它瘦身才塞得進(在販售模組時也有搭配的客製化紙捲是10m)。

因為需要加熱,裝置對電源的要求也高,需要5-9V。實驗時,可以透過5V/2A電源供應器供電,移動時因為目前USB電池可提供5V,可透過轉接頭使用。一般遙控玩具鋰電池也可使用。

結構上,著色原理和加熱頭的關聯很大,加熱頭寬度為八個BIT,所以程式中一直會看到8BIT出現。bmpBlock[30][320] 大概的意思則是,紙張寬的這面可以印30組,每組8個點,共240點。長則為320個點。實際上,Resolution ration: 8dots/mm(384dots/line),也就是說若要全部都用上,就是48組資料(目前只佔了30個)。

從軟體角度看,有兩種連結方式,分別是TTL及直接連結。

TTL接口


TXRX部分則是透過轉板拉到開發板。使用上參考

CODE位置D:\stm\printsnap\Firmware\src ( CAMERA用SPI非DCMI,忽略 )
進行中CODE位置D:\stm\tm\printer,目前已經可以送入COMMAND,嘗試使用bit image.

腳位設定在C10 C11 , 使用UART4
TX RX
    /* Configure Printer UART */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    //GPIO_PinAFConfig(GPIOC, GPIO_PinSource10,GPIO_AF_UART4);
    //GPIO_PinAFConfig(GPIOC, GPIO_PinSource11,GPIO_AF_UART4);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    USART_InitTypeDef USART_InitStruct;
    USART_StructInit(&USART_InitStruct);
    USART_InitStruct.USART_BaudRate = 19200;
    USART_Init(UART4, &USART_InitStruct);
    USART_Cmd(UART4, ENABLE);

init function
void initThermalPrinter()
{
    //reset printer to default state
<10 i="" p="">    send(27);
    send(64);
}

//主要送出指令
send(bmpBlock[px][py]);

使用的基本功能
1 void send(uint8_t data) {
    //make sure the last byte made it out
    while(!USART_GetFlagStatus(UART4, USART_FLAG_TXE)){};
    USART_SendData(UART4, data);
}

換行
void feedPrinter(uint8_t x) {
    while(x--) send('\n');
}
<10 i="" p="">
<10 i="" p="">當初參考資料,原始資料
<10 i="" p="">
<10 i="" p="">印出品質部分,原始設計建議送出後等待系統回應,自己感覺反而有更多白色空隙
如果光度低,整張紙面黑色多時,加熱頭要持續加熱,使用很多時間,但MCU卻還是不斷將資料送進來,會造成亂碼。目前作法是,計算每一行中黑色數量,如果數量過多,就啟動wait機制。效果還不錯。

若考慮TTL控制板部分。熱感應部分,除FUJI、SEIKO外,中國大陸PRT 普瑞特 廈門專門生產熱感應廠商,以PT486F-H違例,包含有詳細說明文件,翻到最後甚至有DEMO電路。控制板編號是PF486F Control Board(網站上原有資料,現無法連結),也是以TTL控制,但有最小購買量拿不到成品。

TTL轉板

TaoBao有賣家販賣
選項1
富士 FTP-628MCL103
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 FTP-628+控制板 ¥125.00  已經購買等到貨過程
廈門 PF486F  零買
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 PT486 + 控制板 ¥115.00
整組下來,約600元( 模組價格1650 )
選單中,還標示可選RS232版本。但在過程中,原本628熱敏售完?改換成SK58TM,但這個零件電壓達12V,無法負荷(或許電壓夠,加熱較快)。下載兩種版本PDF文件。

選項2 選項3正廠控制板 選項4看起來是自製的,不確定TTL指令相同

直接連結


上面的盒子體積實在太大,拿在手上好像抱著120中片幅相機,自己都不好意思帶出門,而且整個模組價格不便宜。最直覺的想法是,能不能只使用噴頭本體呢。經過查詢,本體應該是FUJI FTP-628MCL103元件。也可能是Seiko LTP02-245(台灣找不到類似零件,先擱置)。

若能連結FUJI元件 可大幅減少體積和成本

先從台中代理商以賠本價取得成品機,就動手開始拆解( 可惜了一台機器 )。

RTP58801 12V 3A

開腸破肚中 軟體工程師做這種是總事不順手

排線下方就是FUJI熱感應模組
熱感應頭比TTL模組小許多,若紙張數量不多,整個玩具體積可大幅縮減。熱感應頭拉出來的是30PIN 1.0mm pitch的FPC軟排線,因為我對電子電路不熟悉,開始了一段摸索之旅。排線太密無法拉初電路,有幾種方式可以轉成可測試電路。

嘗試一:找適當connector(又分成上和下兩種,都可以,只是方向差異),將軟排線轉成許多針腳,接下來就沒有對應這麼細針腳的PCB板。

嘗試二:百年有賣下面特殊轉板,能夠把小connector連結到一般牛角轉出線路,當然銲接又是一門學問,結果如下。

軟排線的轉板
嘗試三:上圖是不能直接連結STM32的。包含了電流供給(因為軟排線太細,必須兩組提供等問題),還有其他設計,要達到上面範例,實在還有很長的路要走。
可能的電路圖( 未實現 )

網路範例在此 YOUTUBE影片位置  相關GIT位置 作者是 Romy Bompart
從程式看來,以STM32F107為主。

APP應用
main.c
Header_Init
印字 ThermalPrint("        TICKET          \0");
feed_pitch(150,BACKWARD);

中間層
fonts.c
ThermalPrint(char text[150])
將字型轉變成dot的形式在這邊送下去
PrintDots(LinePixels, character-start );

底層控制印表機硬體
header_hardware.c
原本以為是STM提供,看來不是
Header_Init
準備好所有的PIN設定

Control OUTPUT pins configuration Part1: Port E Group
LATCH_PIN | STB1_PIN | STB2_PIN | STB3_PIN | STB4_PIN | STB5_PIN  | STB6_PIN;
        23          12 13 14 18 19 20

Control OUTPUT pins configuration Part 2: Port D Group
PH12_PIN | PH21_PIN | PH22_PIN | ENABLE2_PIN;
27 28 29 30

Control OUTPUT pins configuration Part 2: Port C Group
ENABLE1_PIN | VH_PIN;

Control OUTPUT pins configuration Part 2: Port B Group
PH11_PIN;

Control OUTPUT pins configuration Part1: Port E Group
PEM_PIN;

Analogic pin configuration: PORTC
THERMISTORPIN;

SPI pins configuration which belows to port B
HEADER_PIN_MOSI | HEADER_PIN_SCK;

總共有18個,但是不知道這兩組資料中間是怎麼連接的。先前就是想要直接EMAIL,後來是在YOUTUBE下面留言。

PrintDots(uint16_t *Array, uint8_t characters)
會直接操作GPIO的動作
GPIO_SetBits(HEADER_PORT_GROUP_E,STBx[y]);
怎麼知道什麼指令會有什麼結果呢? 似乎有其他文件說明

在電路聯結部分
可能會需要馬達驅動電路  3相全波非線性馬達驅動系統IC 羅姆BA6849
還有GPIO擴展方式電路

其他


除熱感應著色,網路還有色帶型式微型引表機。不過打點速度太慢,過程中還會發出MODEM的聲音(噪音??),不太實用。

喵喵機
最近看到個新產品"喵喵機",是中國大陸廈門喵寶科技出品,看資料就是熱感應盒子加藍芽(或WIFI)功能。影像來源則是手機。使用標準57mm打印機蕊,電池容量1000mAh。網路上有些人討論,但感覺不很熱衷。

列印紙張
列印紙張配合機蕊有各種尺寸。目前手邊57mm算常見型號,紙捲也很容易購買(貫峻 03-5226900 03-5229009 地址:新竹市中山路296巷7號1樓),算非常便宜。除了尺寸外,感應紙上還有兩種特色,一是紙張有背景色,這種應用不多。第二是印出感應紙後有自黏貼紙,印出後可隨手貼在醒目處。

貼紙都是大量生產,所以只有幾種固定裁切版型。最接近57mm可能是55mmX30mm,可能也不是很合適。(熱感貼紙55mm*30mm/66米2000pcs 30捲一箱)。當然,網路上也有許多訂製生產的廠商。配合喵喵機通路,在網路上輕鬆訂購完全沒有裁切過的空白紙,六公尺50元左右,使用起來,沒有想像的有趣,還在觀察中。( 另外可能選項是這個 )

首次貼紙實驗 貼NB了

1 則留言: