<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 設計應用 > 基于飛思卡爾單片機的微型熱敏打印機的設計

          基于飛思卡爾單片機的微型熱敏打印機的設計

          作者: 時間:2008-02-16 來源: 收藏

            1 引言

          本文引用地址:http://www.ex-cimer.com/article/78870.htm

            常用的微型針式打印機速度慢、噪聲大,無法滿足某些場合的需要。微型熱敏打印機具有打印速度快、噪音低、可靠性高、字跡清晰、機頭小而輕等優(yōu)點,可滿足各種場合的打印要求,因此得到廣泛應用。筆者在汽車行駛記錄儀的開發(fā)過程中,根據(jù)要求,選用較為先進的熱敏打印機作為打印設備。但微型熱敏打印頭對打印時序和溫度要求較高,一旦控制不當極易造成打印頭燒毀,其控制系統(tǒng)的軟硬件設計較復雜。本文選用FTP-628系列熱敏打印頭開展以下研發(fā)工作。

            2 系統(tǒng)組成

            本文介紹的微型熱敏打印機主要由主控器件、步進電機驅(qū)動模塊、熱敏打印頭過熱保護模塊、熱敏打印頭缺紙檢測模塊、RS-232通信模塊和供電模塊等部分組成。系統(tǒng)的結構框圖如圖l所示。其中步進電機驅(qū)動模塊負責控制打印紙走紙及走紙速度;熱敏打印頭過熱保護模塊防止熱敏打印頭溫度過高損壞;熱敏打印頭缺紙檢測電路完成熱敏打印頭是否有紙檢測;RS-232通信模塊實現(xiàn)打印機與汽車行駛記錄儀之間的通信;供電模塊給控制電路及熱敏打印頭供電。

            

           

            3 熱敏打印工作原理

            熱敏打印頭FTP-628的框圖如圖2所示。該熱敏打印頭點結構為384點/行,水平方向點密度為8點/mm,垂直方向行間距:8點/mm。有效打印寬度48 mm。打印速度最大為60 mm/s。

            

           

            當接通熱敏打印機電源(+12 V),供電模塊輸出+5 V用于所有控制電路,還輸出用于熱敏頭加熱印字的+7.2 V電壓,將其與打印頭VH相連。在時鐘CLK的配合下,打印數(shù)據(jù)經(jīng)數(shù)據(jù)輸入DI引腳移入熱敏打印頭內(nèi)部的移位寄存器中。當CPU將一行384位數(shù)據(jù)全部移入移位寄存器后,CPU將熱敏打印頭內(nèi)部鎖存端LAT置為低電平,移位寄存器的數(shù)據(jù)被鎖存到鎖存器;然后CPU將熱敏頭加熱控制信號STB置為高電平,此時根據(jù)384點輸入的數(shù)據(jù)是l或0決定發(fā)熱元件是否發(fā)熱,由此在熱敏紙上產(chǎn)生要打印的點行。

            4 硬件設計

            4.1 主控器件

            采用Freescale公司S12系列單片機中的MC9S12D64作為主控器件。該器件是一款性能優(yōu)良的單片機,包含一個16位中央處理單元、64 KBFlash、4 KB RAM、1 KB EEPROM、兩個異步串行通信接口和一個同步串行接口等豐富資源,能夠滿足本設計的需求。該器件具有良好的穩(wěn)定性,使得打印機能夠在惡劣的工業(yè)現(xiàn)場使用。

            4.2 熱敏打印頭過熱保護模塊

            熱敏打印頭加熱時間一般為1 mS,連續(xù)加熱超過1 s后,很容易燒毀熱敏頭,所以必須對熱敏打印頭添加過熱保護電路。過熱保護電路圖如圖3所示。圖中VH為7.2V熱敏打印頭驅(qū)動電壓,VH的供給與否由常開繼電器控制。由CPU的一個I/O口輸出控制加熱電壓源控制端TCl,參見圖2與圖3。TH為外部電阻與熱敏打印頭內(nèi)部熱敏電阻的分壓值。熱敏打印頭溫度升高,則TH電壓降低。當熱敏打印頭溫度上升到一定值時,TH電壓低于比較器U1B的引腳6參考電壓,則引腳7輸出一個低電平,此時無論ICI為何值,與門U6的引腳3都為低電平,進而Ql截止,繼電器斷開,熱敏打印頭加熱電源被切斷。同時主控器件檢測到比較器U1B的引腳7輸出低電平信號,進入中斷,暫停打印工作。當檢測到U1B的引腳7為高電平后,延時一段時間,出中斷。此時若熱敏打印頭溫度降低,TH電壓高于U1B的引腳6參考電壓后,CPU恢復到正常工作情況;反之,比較器U1B的引腳7輸出依然是低電平,繼電器保持斷開;主控器件再次進入中斷模式。這樣就可以起到保護熱敏打印頭的作用。

            

           

            4.3 步進電機驅(qū)動模塊

            步進電機是將輸入的電脈沖信號轉(zhuǎn)換成角位移或直線位移的伺服電動機。FTP-628熱敏打印頭中使用的是二相四拍步進電機控制打印紙走紙及走紙速度。本系統(tǒng)采用LB1836M進行驅(qū)動。LB1836M是低飽和、雙通道雙向電機驅(qū)動器件,常用于微型打印機、相機等便攜設備。圖4給出步進電機的驅(qū)動電路。引腳INl、IN2、IN3和IN4是步進脈沖的輸入端。OUT1、OUT2、OUT3、OUT4為步進脈沖的輸出端,分別與熱敏打印頭中電機對應的A、NA、B、NB相連接。OUT[1:4]與IN[1:4]的邏輯關系為OUT=IN。輸出驅(qū)動電壓由引腳VS控制,其電壓高低決定了步進電機工作電流的大小,影響步進電機運行的快慢,決定走紙快慢。LBl836M輸入端的四個步進脈沖可由單片機的PWM0、PWMl、PWM2、PWM3四路PWM通道產(chǎn)生。四路PWM的相位關系為PWM0與PWM2反相,PWMl與PWM3反相,PWM0與PWMl相差π/2。

            

           

            4.4 數(shù)據(jù)加載

            數(shù)據(jù)加載即將內(nèi)存緩沖區(qū)的數(shù)據(jù)輸出到熱敏打印頭的移位寄存器中,然后進行打印。由于本設計采用的主控器件帶有串行外圍接口(SPI),所以將SPI用于數(shù)據(jù)加載。使用SPI加載數(shù)據(jù),不但電路比硬件方式數(shù)據(jù)移位簡化,而且較I/O口模擬串行數(shù)據(jù)傳輸?shù)臅r序移位速度更快,從而整體提高了打印機性能。

            如圖5所示,將主控器件設為主機,熱敏打印頭內(nèi)部移位寄存器設為從機。主控器件MC9S12D64將打印的數(shù)據(jù)存入SPI數(shù)據(jù)寄存器。當數(shù)據(jù)寄存器寫入數(shù)據(jù)后,數(shù)據(jù)開始傳輸。數(shù)據(jù)通過串行時鐘線的同步信號循環(huán)移位8位,移入熱敏打印頭內(nèi)部的移位寄存器中,實現(xiàn)了數(shù)據(jù)的加載。

            

          將主控器件設為主機

           

            5 軟件設計

            本熱敏打印機的軟件設計主要是通過RS-232通信模塊接收由汽車行使記錄儀傳來的數(shù)據(jù),并判斷數(shù)據(jù)類型。當接收到數(shù)據(jù)時,首先要判斷是命令字還是字符數(shù)據(jù)。如果是命令字,則打印機按照命令動作,如果是字符數(shù)據(jù),則進入打印狀態(tài)。進入打印狀態(tài)后,尋找要打印字符的首地址,按照該字符的規(guī)范,從字庫中取出打印點陣放入SPI數(shù)據(jù)寄存器,并傳輸?shù)綗崦舸蛴☆^的移位寄存器,按行打印,走紙。具體打印流程如圖6所示。

            

          具體打印流程

           

            6 結束語

            本文對熱敏打印機的控制部分作了介紹。文中介紹的設計方案實現(xiàn)了微型熱敏打印機正常運行。根據(jù)實際情況,可選擇不同的熱敏打印頭與微控制器,以滿足需求。設計的熱敏打印機取得了良好的打印效果,驗證了設計方案的合理性。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();