1. 前言
CRT(Cathode Rays Tube,陰極射線管)是最原始的電子顯示技術,在上世紀被廣泛運用于模擬電視(Analog television)系統中。本文將以模擬電視系統為背景,介紹CRT顯示技術的原理、特性以及一些關鍵術語。
眾所周知,CRT顯示已經逐步被數字顯示取代,已有退出歷史舞臺之勢,本文之所以介紹它,原因有三:
1)模擬電視是我們這一代人童年的記憶,美好又神秘。現在回頭去看,發覺其中的技術是那么的簡單、有趣,值得一說。
2)幫助理解顯示時序(video mode,or display timings)。對寫過顯示驅動的人來說,顯示屏的那長長一串的時序相關的參數(xres, yres, hsync len, vsync len, left margin, etc.),足以讓自己崩潰。追根溯源,它們產生于CRT技術,現在之所以還存在,很大程度上是CRT的延續,沒有太多實質的意義。
3)現在很多前沿的顯示技術,如PDP、FED等,都和CRT的工作機制類似(具體可以參考“顯示技術介紹(2)_電子顯示的前世今生”中的介紹)。理解CRT是理解這些新技術的基礎。
2. CRT簡介
CRT顯示技術的本質是:
1)電子槍發射電子束,并在加速電場的作用下加速。
2)電子束轟擊熒光物質發光。發光的亮度取決于電子束的速度,即加速電場的強度。
4)電子束可以產生直徑略小于1mm的光點,在偏轉系統的控制下,可以分時點亮屏幕上所有的區域,并利用人眼視覺暫留原理,產生一副完成的畫面(人眼看來)。
因此,CRT包含了電子束產生(電子槍)、加速系統、偏轉系統、涂有熒光物質的顯示屏等基本組件,它們組合在一起,再加一個管殼,就是常說的陰極射線管(CRT)。
3. 模擬電視系統簡介
模擬電視系統是一個包含視頻信號采集輸出、編碼、傳輸、解碼、還原顯示的系統,其框圖如下:
圖片1 模擬電視系統
模擬電視系統中的顯示終端(電視)基本上采用CRT顯示,因此也稱作CRT電視。一般情況下,CRT電視作為一個整體,包含了RF de-modulation、Analog decoding、CRT display三個部分。
4. 光電轉換和電光轉換
CRT是把電信號轉換為光信號的一種技術,但電信號是怎么來的呢?巧的很,也可以使用類似的技術,如下:
圖片2 光電&電光轉換
上圖描述了基于CRT的模擬電視系統的技術基礎:
電子束轟擊光電靶形成電回路,將光信號轉換為電信號,完成光電轉換;
加速后的電子束轟擊熒光物質發光,將電信號轉換回光信號,完成電光轉換。
光電轉換的目的是把圖像信號轉換為電信號,以便于傳輸、保存,轉換后的電信號就是電子顯示的源數據。上圖左邊部分介紹了基于陰極射線的光電轉換過程:
1)電子槍的陰極產生電子束,并打在一個導電的光電靶上。
2)光電靶通過一個電阻(RL)和電子槍的陽極連接,打在光電靶上的電子束流經電阻回到電子槍的陽極,從而形成一個電回路。
3)光電靶本身也有電阻,且隨光線強度的改變而改變(可以看做光敏電阻)。因此在光電靶和RL之間會產生隨光線變化而變化的電壓輸出,就是視頻信號輸出。
光信號轉換為電信號后,經過存儲、傳輸、轉換后,會以輸入信號的形式,控制CRT中加速電場的強度,進而控制熒光屏上熒光物質的發光強度,完成電光轉換(電子顯示)。
理解了上面光電轉換和電光轉換的過程之后,我們會產生如下疑問:
問題一:一個光電靶只能反映一個點的光線變化,但這顯然不夠,一個足夠大的平面上所有點的光線變化才是有意義的,要怎么做?
問題二:為什么一定需要電子束來形成電回路,一個簡單的導線不也可以達到目的嗎?
要回答上面兩個問題,我們要進一步理解電子掃描的原理。
5. 電子掃描
首先回答問題二,電子束當然不是必須的,現在普遍使用的數碼攝像、數字顯示等技術,都不需要電子束的參與,當然,它們不在本文的介紹范圍內,就不過多涉及了。因此,我們先分析基于電子束的場景。
對于問題一,怎么得到一個平面上多個點的光線變化呢?機智的工程師們想到了掃描(Scanning)。所謂的掃描,就是同一時刻只處理一個點,如果能夠在短時間內(足以欺騙人的眼睛的時間,如40ms)處理完所有的點,就萬事大吉了,如下圖所示:
圖片3 Raster scanning
上面圖片所描述的電子掃描(也稱作光柵掃描,Raster scanning[2]),在模擬電視系統中,既用于圖像的采集,也用于圖像的顯示。可以這樣理解:
我們可以使用多個光電靶(假設是MxN個)組成一個平面,然后在電子束經過的路徑上的水平和垂直方向分別加入合適的磁場,磁場的強度由一個由鋸齒波信號控制的線圈(偏轉線圈)決定,由于磁場會使電子束偏轉,因此就可以控制電子束以從左到右、從上到下的方式,分別打到每一個光電靶上。這個過程就叫做掃描。
掃描的結果,是將MxN個光電靶所代表的的光信號,分別轉換成電信號,并依次輸出。這樣的一個電信號序列,稱作一個圖像幀(Frame),接收端(CRT顯示器),按照同樣的規則,就可以將這樣的圖像幀還原顯示。
關于電子掃描,有很多重要的概念,會在顯示有關的驅動編寫中用到,下面結合上面圖片,一一解釋。
1)掃描線(Scan lines)和分辨率(Resolution)
對電子掃描而言(這里以圖像采集為例),一行中所有光電靶輸出的信號實際上是連續信號,這就意味著:
一行所包含的光電靶個數,對掃描(或者顯示)來說,是不重要的,它只影響光信號采集的精度,也即圖像的精細度。甚至,顯示端根本不關心采集端到底用了多少個光電靶采集信號(由于是模擬信號,它也無從得知)。這個特征決定在電子掃描的水平方向上,并沒有分辨率的概念,整個水平方向上的一行,稱作一個掃描線(Scan line)。
對模擬的CRT顯示來說,只需要根據顯示器的特性(水平方向有多長),將一行的模擬信號map過去即可。
當每一行掃描結束的時候,電子束需要在水平偏轉磁場和垂直偏轉磁場的偏轉作用下,回到下一行的起點(這個過程稱作回掃,下面會介紹),這中間不允許采集信號,因而每一個掃描線之間,是不連續的。也就是說,電子掃描在垂直方向上有分辨率的概念,即多少個掃描線(Scan lines)。
綜上所述,在電子掃描中,分辨率可以用Scan lines表示,例如576 lines。
2)回掃(Horizontal/Vertical retrace)
電子束從左向右掃描完一行后,需要在水平偏轉磁場的作用下快速移回到最左邊,并在垂直偏轉磁場的作用下,向下偏轉一個scan line,以便掃描下一行。同理,電子束從上向下掃描完一幀后,也需要在垂直偏轉磁場的作用下快速移回到最左邊。因此,水平和垂直兩個偏轉磁場,實際上是一個周期性的鋸齒波,如下:
圖片4 Scanning-pattern
斜率為正的上升期,稱作正掃描,電子束將會從左向右(或者從上向下)偏轉。斜率為負的下降期,稱作回掃(retrace),電子束將會從右向左(或者從下向上)偏轉。
由于回掃的過程中不能采集(或者輸出)信號,因此需要關閉電子束,稱作blank(Horizontal/Vertical balnk)。回掃結束后(回到了最左邊或者最右邊),需要重新打開電子束,稱作unblank。
注1:了解顯示驅動(如linux framebuffer)的同學,應該對blank/unblank不陌生,它們的來源正是此處。
3)前肩(front porch)和后肩(back porch)
由上面的描述可知,回掃開始的時候需要blank操作,即關閉電子束的發射。在模擬電子的世界里,關閉電子束的發射,其實就是將激發電子束發射的電壓從高電平降到一個較低的電平(接近零),但下降的過程是需要時間的(具體原因有多種,這里就不詳細分析了),因此:
在電平降到一個安全的值之前(電子束不再發射),不能開始回掃。
也就是說,有效的視頻信號必須要在回掃開始前結束(即上面圖片4中“t2”處),從有效視頻信號結束到回掃開始的那一段時間,稱作前肩(front porch),這一段時間也是blank操作所需的時間。
另外,回掃也是需要時間的(不用糾結原因,都是老歷史了),這一段時間可以用作同步信號。
同樣的道理,回掃完成后,unblank操作時,電平從接近零值上升到正常值(可以發射電子束,圖片4中的“t1”處)也需要一定的時間,稱作后肩(back porch)。在back porch的這一段時間內,視頻信號也是無效的。
綜上所述:視頻信號的有效范圍,是圖片4中t1到t2的范圍,一般稱作xres/yres;視頻信號的無效范圍,是圖片4中t2到t1的范圍,包括front porch、sync len和back porch(水平或者垂直方向上),一般稱作blanking interval(Horizontal/ Vertical blanking interval[3],[4])。
4)同步信號(sync pulse)
由“圖片1 模擬電視系統”的描述可知,視頻信號在發送之前,需要經過Analog encoding,而編碼的過程是不包括前后肩(front/back porch)信息的,因為前后肩的值和具體系統的電路有關,因而不應包含在傳輸系統中。
但是,從時間軸上看,視頻信號是不連續的,每一行的有效信號之后,會有一段horizontal blanking interval,每一幀的有效信號之后,會有一段vertical blanking interval。編碼器利用這些空隙時間,傳遞了一種特殊信號---同步信號(HSYNC和VSYNC,在模擬系統中,該信號以一個高于正常視頻電平的高電平脈沖),用于告知接收端每一行以及每一幀視頻信號的開始和結束。
6. 顯示時序(display timings)和視頻模式(videomode)
經過上面章節的介紹,我們對CRT顯示技術有了一個基本的了解,并引出了前后肩、同步信號等概念,此時,我們可以回到linux kernel中,看幾個數據結構的定義:
1: /* include/video/display_timing.h */
2:
3: struct display_timing {
4: struct timing_entry pixelclock;
5:
6: struct timing_entry hactive; /* hor. active video *
7: struct timing_entry hfront_porch; /* hor. front porch */
8: struct timing_entry hback_porch; /* hor. back porch */
9: struct timing_entry hsync_len; /* hor. sync len */
10:
11: struct timing_entry vactive; /* ver. active video *
12: struct timing_entry vfront_porch; /* ver. front porch */
13: struct timing_entry vback_porch; /* ver. back porch */
14: struct timing_entry vsync_len; /* ver. sync len */
15:
16: enum display_flags flags; /* display flags */
17: };
hactive, hfront_porch, hback_porch, hsync_len/vactive, vfront_porch, vback_porch, vsync_len,是不是已經不陌生了?
再看一下struct videmode和struct fb_videomode,以及linux下的fbset命令(就不貼代碼了,具體可參考include/video/videomode.h、include/linux/fb.h以及Documentation/fb/framebuffer.txt),也都類似,不再難以理解了。
7. 總結
最后,本文對CRT以及模擬電視系統的介紹,只是九牛一毛,很多較為細節的內容,如幀率、隔行掃描(Interlaced scan)、編碼、顯示制式(PAL/NTSC)等等,都沒有涉及。有礙于篇幅和個人精力,就不一一介紹了,如有興趣,可參考本文后面的一些鏈接。
8. 參考文獻
[1]https://en.wikipedia.org/wiki/Cathode_ray_tube
[2]https://en.wikipedia.org/wiki/Raster_scan
[3]https://en.wikipedia.org/wiki/Horizontal_blanking_interval
[4]https://en.wikipedia.org/wiki/Vertical_blanking_interval
[5]https://en.wikipedia.org/wiki/Analog_television#Structure_of_a_video_signal
[6]https://en.wikipedia.org/wiki/Overscan
-
crt
+關注
關注
2文章
80瀏覽量
35863 -
數字顯示
+關注
關注
0文章
31瀏覽量
19127 -
光電轉換
+關注
關注
1文章
97瀏覽量
23386 -
同步信號
+關注
關注
0文章
17瀏覽量
10106 -
電視系統
+關注
關注
0文章
15瀏覽量
8417
發布評論請先 登錄
相關推薦
評論