印表玩具
STM32技術
熱感應印表機(thermal printer),已經大量使用於日常生活,舉凡購物時的發票,醫院排隊掛號號碼條或是手搖杯上的標籤貼紙,都是它的應用。使用一種化學原料塗抹在紙上,使得紙張可因受熱而改變顏色,不需要使用墨水或油墨。塗抹固態的染劑與合適的基質,像是熒烷類的隱色染料以及磷酸正十八酯。當基質加熱到其溶點時,染劑會與酸性物質反應,轉換成有色態;而基質很容易快速冷卻,則染劑的有色態會直接被儲存於亞穩定狀態。但一段時間後,顏色仍會逐漸消退,故僅適用於不需長期儲存的用途。
通常,該塗料在加熱時會轉為黑色,但有時會使用轉為藍色或紅色的塗料。開放的熱源,像是火焰,會改變紙張的顏色;而用指甲快速擦過紙張也可以給予足夠的熱能,產生有顏色的標記。另外就是Multicolored papers,最著名的就是寶麗來的ZINK,很美好,但也很貴。
最上面照片是我手邊熱感應印表模組和開發板合體的樣子,相關介紹連結 連結,購買連結。實際拿到機器比想像的大且重,感覺可以整個拆開移調不需要元件。紙寬是5.7 cm(Paper width: 57mm Print width: 48mm)。一般熱感應紙太大捲,放不進盒子裡,得手動剪掉部分讓它瘦身才塞得進(在販售模組時也有搭配的客製化紙捲是10m)。
結構上,著色原理和加熱頭的關聯很大,加熱頭寬度為八個BIT,所以程式中一直會看到8BIT出現。bmpBlock[30][320] 大概的意思則是,紙張寬的這面可以印30組,每組8個點,共240點。長則為320個點。實際上,Resolution ration: 8dots/mm(384dots/line),也就是說若要全部都用上,就是48組資料(目前只佔了30個)。
從軟體角度看,有兩種連結方式,分別是TTL及直接連結。
TTL接口
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>
<10 i="" p="">
10> <10 i="" p="">當初參考資料,原始資料。10>
<10 i="" p="">
10> <10 i="" p="">印出品質部分,原始設計建議送出後等待系統回應,自己感覺反而有更多白色空隙10>。
如果光度低,整張紙面黑色多時,加熱頭要持續加熱,使用很多時間,但MCU卻還是不斷將資料送進來,會造成亂碼。目前作法是,計算每一行中黑色數量,如果數量過多,就啟動wait機制。效果還不錯。
若考慮TTL控制板部分。熱感應部分,除FUJI、SEIKO外,中國大陸PRT 普瑞特 廈門專門生產熱感應廠商,以PT486F-H違例,包含有詳細說明文件,翻到最後甚至有DEMO電路。控制板編號是PF486F Control Board(網站上原有資料,現無法連結),也是以TTL控制,但有最小購買量拿不到成品。
TTL轉板 |
TaoBao有賣家販賣
選項1
富士 FTP-628MCL103選項1
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 FTP-628+控制板 ¥125.00 已經購買等到貨過程
廈門 PF486F 零買
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 PT486 + 控制板 ¥115.00
整組下來,約600元( 模組價格1650 )
選單中,還標示可選RS232版本。但在過程中,原本628熱敏售完?改換成SK58TM,但這個零件電壓達12V,無法負荷(或許電壓夠,加熱較快)。下載兩種版本PDF文件。
選項2 選項3正廠控制板 選項4看起來是自製的,不確定TTL指令相同
選項2 選項3正廠控制板 選項4看起來是自製的,不確定TTL指令相同
直接連結
上面的盒子體積實在太大,拿在手上好像抱著120中片幅相機,自己都不好意思帶出門,而且整個模組價格不便宜。最直覺的想法是,能不能只使用噴頭本體呢。經過查詢,本體應該是FUJI FTP-628MCL103元件。也可能是Seiko LTP02-245(台灣找不到類似零件,先擱置)。
若能連結FUJI元件 可大幅減少體積和成本 |
先從台中代理商以賠本價取得成品機,就動手開始拆解( 可惜了一台機器 )。
RTP58801 12V 3A |
開腸破肚中 軟體工程師做這種是總事不順手 |
排線下方就是FUJI熱感應模組 |
嘗試一:找適當connector(又分成上和下兩種,都可以,只是方向差異),將軟排線轉成許多針腳,接下來就沒有對應這麼細針腳的PCB板。
嘗試二:百年有賣下面特殊轉板,能夠把小connector連結到一般牛角轉出線路,當然銲接又是一門學問,結果如下。
軟排線的轉板 |
可能的電路圖( 未實現 ) |
網路範例在此 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了 |
很好的文章
回覆刪除