丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

關(guān)于消防熱敏打印機(jī)怎么設(shè)置,你需要知道這些熱敏打印機(jī)驅(qū)動(dòng)

熱敏打印機(jī)是一種電子機(jī)械設(shè)備,通常用于打印小表格。從編程的角度來(lái)看,它主要有兩個(gè)電控單元,步進(jìn)電機(jī)和熱打印頭。

步進(jìn)電機(jī):是用來(lái)拖動(dòng)打印紙走動(dòng)的,一般我們用步進(jìn)電機(jī)的H橋的驅(qū)動(dòng)即可。 熱打印頭:熱打印頭上是很多并排成一條線的加熱點(diǎn),當(dāng)通電時(shí),該加熱點(diǎn)發(fā)熱,從而使熱敏紙顯示出顏色。電子驅(qū)動(dòng)部如下圖所示:



操作流程是: 通過(guò)數(shù)據(jù)口寫入數(shù)據(jù) -> 鎖存數(shù)據(jù) -> STROBE控制為高 ->延遲一段時(shí)間 -> STROBE控制為低。 這里的延遲時(shí)間就是加熱時(shí)間。

熱敏打印機(jī)驅(qū)動(dòng)的要點(diǎn):

  1. 打印要流暢,速度快,不卡頓,噪音小;
  2. 打出的字顏色要均勻,字體要?jiǎng)蚍Q;
  3. 要有保護(hù)措施:缺紙檢測(cè),不會(huì)出現(xiàn)長(zhǎng)時(shí)間對(duì)一個(gè)點(diǎn)的加熱,對(duì)供電要求低。

難點(diǎn)

一. 防止加熱電流過(guò)大 ??由于一行的加熱點(diǎn)通常有三四百個(gè),為了打印速度快,每個(gè)點(diǎn)的電流都較大,如果這一行的點(diǎn)都要打印加熱,會(huì)導(dǎo)致電流會(huì)很大,所以策略是一行的點(diǎn)要分批次加熱打印,函數(shù)如下:

/* brief: 函數(shù)功能:data_buff為要打印的數(shù)據(jù),從中可以順序取出打印的數(shù)據(jù),并統(tǒng)計(jì)出數(shù)據(jù)中累計(jì)bit ‘1’的個(gè)數(shù),即是加熱的點(diǎn)數(shù),當(dāng)點(diǎn)數(shù)累計(jì)到一定數(shù)量后,即停止取出數(shù)據(jù),這些數(shù)據(jù)則為本次可以加熱打印的數(shù)據(jù)。 return: 打印數(shù)據(jù)的個(gè)數(shù) pdot_num 打印數(shù)據(jù)的總點(diǎn)數(shù); */ int Printer_GetData(uint8_t *data_buff, int buff_len, uint32_t *pdot_num) { int len; int dot_num; //0 ~ 255, 每個(gè)數(shù)據(jù)中 ‘1’ 的個(gè)數(shù),如 0x03 中有2個(gè)‘1’ const unsigned char bit_num_table[256] ={ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, }; len = 0; dot_num = 0; while(dot_num < PRT_HEAT_MAX_POINT){ dot_num += bit_num_table[data_buff[len]]; len ++; if(len >= buff_len){ break; } } *pdot_num = dot_num; return len; }

二. 馬達(dá)的速度控制 ??為了加快打印速度,我們都希望馬達(dá)以最高的速度運(yùn)轉(zhuǎn),但是由于慣性原因,如果一上來(lái)就是最大的速度,這會(huì)導(dǎo)致步進(jìn)馬達(dá)失步,從而影響打印效果,所以控制馬達(dá)需要有一個(gè)加速的過(guò)程。

//馬達(dá)加速表 //由于慣性原因,馬達(dá)一上來(lái),不可能就達(dá)到最大速度,需要一個(gè)加速過(guò)程 //加速表由打印機(jī)廠商提供 const uint32_t add_speed_table[] = { 4300, 2600, 2500, 2420, 2270, 2140, 2030, 1940, 1860, 1780, 1720, 1660, 1610, 1560, 1510, 1470, 1439, 1402, 1372, 1342, 1313, 1287, 1261, 1238, 1213, 1194, 1174, 1155, 1136, 1119, 1102, 1086, 1071, 1056, 1042, 1029, 1012, 1003, 991 , 979, 968, 957, 947, 936, 927, 917, 908 }; //para: speed 當(dāng)前馬達(dá)速度, //return: 返回下一步馬達(dá)的速度 uint32_t Printer_MotorSpeed(uint32_t speed) { uint32_t next_speed; uint32_t max_speed; int i; next_speed = add_speed_table[0]; //最小速度 if((speed == 0) || (speed > add_speed_table[0])){ next_speed = add_speed_table[0]; goto Label; } //最大速度 max_speed = add_speed_table[sizeof(add_speed_table) / 4 - 1]; if(speed <= max_speed) { next_speed = max_speed; goto Label; } //表中查下一個(gè)速度 for(i = 0; i < sizeof(add_speed_table) / 4 - 1; i ++) { if((speed <= add_speed_table[i]) && (speed > add_speed_table[i + 1])) { next_speed = add_speed_table[i + 1]; } } Label: return next_speed; }

整個(gè)程序控制流程:

typedef struct _Printer_Work_t { uint8_t work; //打印機(jī)是否開始工作, 系統(tǒng)上電 uint32_t step; //步進(jìn)電機(jī), 電機(jī)停止后,從0開始 uint32_t speed; //電機(jī)當(dāng)前速度 } Printer_Work_t; Printer_Work_t prt_work; //printer data buffer, 參數(shù)我的文章circle buffer的實(shí)現(xiàn) CBuff_t prt_buff; //初始化 int Printer_Init(void) { static uint8_t buff[24000]; CBuff_Init(&prt_buff, buff, sizeof(buff)); //硬件初始化 Printer_HwInit(); Printer_PowerOn(0); Printer_Strobe(0); Printer_MotorStop(); return 0; } int Printer_Task(void *arg) { int ret; uint8_t data_buff[PRT_LINE_BYTES_MAX]; static uint32_t s_time = 0; int len; uint32_t heat_time; i == 1) { //一段時(shí)間沒(méi)開始工作,斷電, 停止工作 //由于需要打印的數(shù)據(jù),是連續(xù)下發(fā)下來(lái)的 if(IS_TIME_OUT(s_time, 1200)) { //停止 CBuff_Clean(&prt_buff); = 0; Printer_PowerOn(0); Printer_Strobe(0); Printer_MotorStop(); = 0; //馬達(dá)位置 = 0; //馬達(dá)速度為 0 } } //是否有數(shù)據(jù) if(Printer_HasData() < 0){ return 0; } //收到數(shù)據(jù),開始打印 i == 0){ Printer_PowerOn(1); //開電源 Timer_DelayMs(50); //保證電源穩(wěn)定下來(lái) = 1; } //檢測(cè)紙張 if(Printer_PaperDetect(0) == 0) { CBuff_Clean(&prt_buff); return -1; } s_time = Timer_Ticks(); //加熱時(shí)間 heat_time = Printer_HeatTime(0, 0); while(Printer_HasData() > 0){ uint32_t point; uint32_t dot_num; uint32_t motor_start_time; uint32_t heat_start_time; uint8_t *pdata; //讀出一行數(shù)據(jù) ret = CBuff_Read(&prt_buff, data_buff, PRT_LINE_BYTES_MAX); if(ret != PRT_LINE_BYTES_MAX){ break; } //打印一行 point = 0; Printer_Strobe(1); while(point < PRT_LINE_BYTES_MAX){ //取數(shù)據(jù) len = Printer_GetData(&data_buff[point], PRT_LINE_BYTES_MAX - point, &dot_num); if(len <= 0){ break; } //寫數(shù)據(jù) ret = Printer_WriteDot(point, &data_buff[point], len); if(ret < 0){ break; } point += len; if(dot_num > 0) { //有點(diǎn),加熱 Timer_DelayUs(heat_time); } } //馬達(dá) 4步一行點(diǎn)陣? = Printer_MotorSpeed(, heat_time); = Printer_MotorStep(); Timer_DelayUs(); = Printer_MotorSpeed(, heat_time); = Printer_MotorStep(); Timer_DelayUs(); Printer_Strobe(0); = Printer_MotorSpeed(, heat_time); = Printer_MotorStep(); Timer_DelayUs(); = Printer_MotorSpeed(, heat_time); = Printer_MotorStep(); Timer_DelayUs(); } //Printer_PowerOn(0); // = 0; //防止電源來(lái)回并關(guān) Printer_Strobe(0); //停止加熱 //Printer_MotorStop(); //馬達(dá)停止 return 0; }

以上的代碼經(jīng)過(guò)測(cè)試,可以基本滿足要求。但由于馬達(dá)步進(jìn)時(shí)間與加熱時(shí)間不是固定的,而我們的策略是邊熱,邊打印,如何實(shí)現(xiàn)加熱與馬達(dá)步進(jìn)之間的同步,是最大的問(wèn)題,以上的代碼雖然寫成固定的,但在實(shí)際中的測(cè)試結(jié)果還能達(dá)到我們的要求。



1.《關(guān)于消防熱敏打印機(jī)怎么設(shè)置,你需要知道這些熱敏打印機(jī)驅(qū)動(dòng)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《關(guān)于消防熱敏打印機(jī)怎么設(shè)置,你需要知道這些熱敏打印機(jī)驅(qū)動(dòng)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/why/3219824.html

上一篇

芯燁usb口打印機(jī)怎么看這里!無(wú)線網(wǎng)絡(luò)中如何共享USB接口打印機(jī)

消防熱敏打印機(jī)怎么設(shè)置看這里!“咕咕機(jī)”到底是什么打印機(jī)?熱敏打印機(jī)入門級(jí)常識(shí)要知道

消防熱敏打印機(jī)怎么設(shè)置相關(guān)介紹,點(diǎn)擊上面關(guān)注“繪圖打印”。這是我們的專業(yè)。很舒服!隨著社會(huì)經(jīng)濟(jì)和科學(xué)技術(shù)的發(fā)展,孩子們的學(xué)習(xí)工具越來(lái)越豐富。比如電橡皮,喵喵,喵喵,喵喵,喵喵,喵喵,喵喵,喵喵,喵喵。 那么孩子們口中的“咕咕機(jī)”、“...

消防熱敏打印機(jī)怎么設(shè)置?終于找到答案了教你“玩轉(zhuǎn)”熱敏標(biāo)簽打印機(jī)

消防熱敏打印機(jī)怎么設(shè)置相關(guān)介紹,現(xiàn)在很多商場(chǎng)和奶茶店等都廣泛使用標(biāo)簽打印機(jī),主要是讓人們?cè)阡N售時(shí)更快、更方便地在所有商品中找到這個(gè)商品。 但是人們?cè)谑褂眠^(guò)程中會(huì)遇到各種各樣的問(wèn)題,沒(méi)有時(shí)間找技術(shù),自己又不會(huì)設(shè)置怎么辦呢? 下面我教大...

關(guān)于消防熱敏打印機(jī)怎么設(shè)置,你需要知道這些無(wú)線wifi熱敏打印機(jī)設(shè)置教程

消防熱敏打印機(jī)怎么設(shè)置相關(guān)介紹,以GABO GP-l 80160 L打印機(jī)為例,發(fā)送無(wú)線打印機(jī)station模式設(shè)置流程。 第一步是使用計(jì)算機(jī)連接打印機(jī),在無(wú)線網(wǎng)絡(luò)中找到Printer-AP并連接 第二步打開網(wǎng)頁(yè),輸入打印機(jī)網(wǎng)頁(yè)設(shè)置...