首頁 > 硬體

熱敏印表機心電圖形怎麼快速列印 【列印方法】

2020-10-22 06:58:55

  隨著電子技術的發展,印表機已經廣泛應用到各個領域,成為各種智慧數位化儀器儀表的重要資料輸出手段。而其中熱敏印表機憑其體積小、重量輕、可靠性高、列印字元清晰、無噪聲、走紙均勻等獨特能而越來越受到青睞,更是成為小型醫療儀器如心電圖機的首先。

  下面以筆者課題組開發的12導同步心電圖機為例,介紹以普通52微控制器為主控晶片應用序列熱敏印表機實現多種方式的心電圖形列印,並重點描述了12導聯同步列印方式的程式實現方案。

  1 系統硬體設計

  系統設定了一個內建式數位印表機,它主要由熱敏列印頭(W216-QS)和步進電機組成。W126-QS點陣式熱敏列印頭列印資料採用序列輸入,其內部不僅包含有由C-MOS整合晶片構成的1728位元移位暫存器,還包含藉助高密度厚膜工藝製成的加熱元件。這些加熱元件通過鎖存和切換電晶體驅動,可在熱敏列印紙上產生1728個點,對應的列印寬度為216mm,解析度為8dot/mm。熱敏列印頭所需的列印資料為序列資料,資料傳輸遵循SPI口的通訊協定。系統採用了口線模擬SPI的工作方式與列印頭通訊,電路如圖1所示。

  考慮到52微控制器內部令有256位元組的內部RAM,系統還外擴1片HM628128儲存12導心電資料和中間轉換結果。

  2 系統軟體編寫

  數位列印實現的兩個關鍵問題:①如何將心電資料轉換成列印資料;②如果將資料輸出到數位印表機。通常採用的方法是轉換資料同時將其輸出到印表機列印。這樣節省了記憶體空間;缺點是程式實現複雜,通用性差(不同列印方式的資料輸出程式不同),系統功能不易擴充套件,資料轉換和輸出都要考慮列印點位置,並且每輸出一點的資料都要呼叫一次程式,加大了系統開銷。系統軟體中沒有采有這種方式,而是在記憶體中開闢216位元組列印緩衝區,將熱敏列印頭1728個點與216×8位元資料相對應,每次將要列印的一線資料都轉換完再輸出。這樣只需在資料轉換時考慮列印位置和方式,輸出程式只需將216位元組的資料按位元輸出即可,並且每列印一線資料只需呼叫一次輸出子程式,位元組了系統開銷。缺點是佔用系統資源,這一點在12導同步列印表現得尤為明顯。

  系統程式實現三種列印方式:分兩次列印12導聯資料,每次列印6導、12導同步列印、縱向列印(列印效果如圖2)。在每一種列印程式中實現模擬SPI口將列印資料送至數位印表機的子程式共用,不同處在於如何將心電資料轉換成列印資料。

  2.1 I/O口線模擬SPI口

  SPI(Serial Peripheral InteRFace)匯流排串列埠是由Motorola公司提出的一種同步序列外設介面,通過四根線進行通訊:時鐘線(SPKCLK)、資料輸出線(SPIMISO)、資料輸出線(SPIMOSI)、片選線(CS),內部通過SPIDAT暫存器完成串-並/並-串轉換。它主要工作在主從式系統中,一個主器件可以帶多個從器件,主器件通過片選線控制匯流排衝突,使同一時刻只有一個從器件與從器件交換資料。

  系統應用的序列熱陣式印表機資料傳輸採用SPI時序,但普通52微控制器無SPI口,所以採用I/O口線模擬SPI時序。考慮到系統中MCU作為主器件總是傳送資料,而數位印表機作為唯一從器件又總是接收資料,所以只需用口線模擬SPI口的時鐘線(SPIKCLK)、資料輸出線(SPIMOSI),程式模擬SPIDAT完成並-串轉換即可。如前所提到列印頭列印的資料點數為1728點,解析度為8mm/mV,對應216位元組的資料,為此從內部RAM中分配出216位元組的空間作為列印緩衝區,程式從緩衝區依次讀資料,在模擬時鐘線的控制下將並行資料轉換成的序列資料按位元依次送至印表機的移位暫存器中,結束後送LATCH鎖存訊號和列印頭加熱脈衝STROBE,從而在熱敏列印紙列印出一線心電圖形,驅動步進電機向前走紙即可以連續列印。SPI口模擬程式如下:

  OUTPUT:

  現場保護

  LCALL INTRAM ;初始化內部列印緩衝區

  MOV R0,#Dat_Buff ;初始化R0為緩衝區末位地址

  DAT_OUT:

  MOV A,@R0 ;從緩衝區讀資料

  MOV R7,#08H ;初始化R7控制並/串資料轉換

  CONT_CHG:

  RRC A ;對ACC迴圈右移實現並-串轉換

  MOV P1.3,C 將序列資料送至印表機

  SETB P1.1 ;模擬SPI時鐘

  NOP

  CLR P1.1

  DJNZ R7,CONT_CHG ;判斷1位元組資料是否轉換完

  DEC R0 ;定址下一位元組

  CJNE R0,#15H,DAT_OUT;判斷資料是否全部轉換完

  CLR P1.2 ;產生資料鎖存訊號

  NOP

  SETB P1.2

  NOP

  CLR P1.0 ;產生加熱脈衝

  LCALL HEATDLY ;呼叫加熱延時程式

  SETB P1.1

  LCALL MOTOR_RUN ;步進電機走紙

  恢復現場

  RET

  2.2 列印演演算法

  數位印表機實質上實現了資料與列印點的對應,也就是說8位元心電資料數值範圍為0~255,對應於熱敏列印紙上的256點,通過加熱敏單元使紙上某點變黑顯示資料的大小。這就需要將表徵實際心電大小的資料(以下稱為原始資料)轉換成能夠指示加熱點位置的資料(以下稱為位置資料),通過位置資料的控制將心電資料對應的點依次列印出來,就可獲得心電圖。但是由於系統模數轉換器獲得的心電資料是離散的,如果僅將它們對應的點列印出來,得到只是一些離散的點,要想獲得連續的心電圖形,需要將相鄰的離散點按照一定的演演算法將它們連線起來,對於縱向列印方式和橫向列印方式,離散點連線演演算法是不同的。限於篇幅,在下面介紹列印方式的實現中,僅對橫向12導同步列印和縱向列印進行詳細闡述,而對6導聯列印僅介紹其實現思想。

  2.2.1 橫向6導聯列印

  心電圖紙長度為216mm,為每一導聯心電訊號分配32mm,對應於列印緩衝區中連續的32位元組,列印資料轉換後的位置資料儲存於這32個位元組中。12導聯的心電資料被分為兩大組,當一組列印完成再列印剩下的6導聯的資料。具體的實現過程可參考橫向12導聯列印方式。

  2.2.2 橫向12導聯同步列印

  在6導聯列印方式實現過程中,注意到在大多情況下一個完事心電波形中僅QRS波主峰較高可以點滿整個空間外,其他波段幅值都較小佔用空間很少,而這些波段可以提供更多的資訊,此外將12導聯分開列印,不利於醫生對比同一時刻不同導聯的心電波形。而採用12導聯同步列印,雖然會出現波形部分重疊,但是在一些心臟疾病診斷中影響不大,且可以得取更直觀的效果。

  12導聯同步列印程式實現的基本思想與6導聯同步列印相同,不同在於將12導聯的資料同時在216mm寬的列印紙上列印出來,不可避免地出現不同導聯心電圖形重疊的現象,對應的記憶體單元也會出現複用的情況。如果簡單地套用6導聯列印程式,那麼前一導聯的資料會被相鄰導聯資料沖掉,從而使圖形無法正確顯示。圖3列出了為各個導聯分配的熱敏列印紙空間與緩衝記憶體單元(這裡假定快取地址為0x1DH~0xEDH)。從圖3中可以看出除了I導聯前16mm空間和V6導聯的後16mm空間沒有被複用,列印紙的其它空間都是被兩個導聯共用。內部RAM使用情況也與之類似。為此在外部RAM開闢一個內部列印緩衝區的影像區(大小為216位元組,單元地址的低8位元與記憶體相應單元相同,如內部RAM 0x1DH單元與外部RAM 0xXX1DH相對應),將12導聯分為兩組:一組(I,III,aVL,V1,V3,V5)仍然儲存於內部記憶體,而另一組(II,aVF,V2,V4,V6)儲存於外部影像區,在12導聯一線資料轉換完要列印時,將兩部分按照對應單元相與即可。這樣做不但可以解決上述問題,而且節省了內部資源、降低程式編寫的難度。

  如前所述不同導聯所佔的列印空間不同,所以,對於某導聯心電訊號,先要確定其列印區間,然後再確定列印資料在該區間的相對位置。

  假定某導聯所佔列印空間的起始位元組為第n個位元組,而要列印的心電資料為m,將m除以8,得商k,餘數為1,則此心電資料對應點對數(n-k)位元組的第1位。即該心電資料對應的位置資料為第(n-k)位元組(該位元組的1位置1,其它位清零)。因此,列印此心電資料時,該導聯所要傳送的32位元組列印資料中只有第(n-k)位元組的第1位為1,其他都為0。

  與液晶顯示相類似,對於一個導聯的心電訊號,要實現心電圖列印,必須將盯連兩個心電資料用線連線。即對於一條心電曲線,起始顯示資料點在起始列只顯示1點;從第二個資料點開始,要在下一列顯示上一資料點到此次資料點之間的線段。在熱敏列印紙上表現為將兩資料點之間的點都加熱,對應於記憶體則是將兩點之間的資料都置1。

  對於—導聯的心電訊號,先讀出第一個心電資料,將其轉換成32位元組位置資料直接列印。從第二個心電資料開始,除了要轉換成位置資料外,還要與上一個資料相比較,用大數對應的位置資料減去小數對應的,然後結果與大數的位置資料相加,結果即為此心電資料應送打的32位元組資料,也即完成了與上一心電資料連線的操作。分析發現連線演演算法隻影響相連兩個位置資料中非零位元組之間的資料,為了簡化計算,只需對這些位元組進行減法操作,而不必計算所有的32個位元組。對於加法,也只需將大數對應位置資料中的非零位元組進行加法,即進行單位元組加法。

  舉例說明,對於導聯V6心電訊號,前一個資料37H,下一個資料為55H,導聯V6分配的列印區間為1DH~3DH,按照位置資料轉換演演算法,37H的位置資料為第37H位元組,該位元組內容為80H,其他位元組都為00H;55H的位置資料為第33H位元組,該位元組內容為20H,其他位元組為00H。由於37H〈55H,因此應是心電資料55H的位置資料減去33H的位置資料,計算如圖4所示。

  2.3 縱向列印程式

  縱向列印能夠實現將12導聯資料無重疊同步顯示。這樣醫生可以參考比較同一時刻的各個波形的變化趨勢,為疾病的診斷提供方便。

  熱敏列印紙寬度為216mm,解析度為8dot/mm,這樣最多能夠列印1728點,將這些點與某一導聯連續的1728個心電資料相對應,也就是說導聯順序第n個資料對應於一線圖形中的第n個點。與模向列印相比縱向列印仍然要解決將離散的點連線起來的問題;但與橫向順序列印方式,即列印點按時間順序列印相比,其難點在於需要將不同時刻同一幅值的多個點同時列印出來,即列印點按空間順序列印。

  首先定義一個記憶體單元儲存掃描值,使其從當前通道資料最大值變化到0,依次與通道的每一個資料進行比較:相同則對應點被描記;小則不被描記;大則需要將當前心電資料相鄰的兩點與掃描值相比較,只要其中一個比掃描值大,則對應點被描記,要描記的噗將其記憶體對應的資料位置1。

  舉例說明,如果列印記憶體緩衝區的首位元組為n,大小為216位元組,而當前某一導聯順序第m個心電資料是v,而此時的掃描值為w:①v>w,則繼續比較第m+1個資料;②v=w,則對應點需要被描記;③v。

 


IT145.com E-mail:sddin#qq.com