當前位置:文書都 >

實用範文 >論文 >

EFD圖像數據傳輸系統設計論文

EFD圖像數據傳輸系統設計論文

在此計以STM32系列處理器作為控制器,利用uCGUI進行圖形界面設計,利用循環移位算法將黑白圖像定製成符合TFT?EFD顯示的數據格式,實現了靜態EFD圖像的通信,可以根據實際要求傳輸不同靜態EFD圖像,後期如果需要可以升級成傳輸數據流來支持動態顯示。

EFD圖像數據傳輸系統設計論文

1 設計原理

本設計採用的單色TFT?EFD顯示屏的分辨率是320×240,行線連接着晶體管的柵極,控制着晶體管的打開與關閉,列線連接着晶體管的源極,控制着數據的傳輸,整體的結構如圖1所示。

圖1 EPD Panel

基於EFD的圖像顯示經歷了圖像採集,圖像傳輸,圖像顯示等步驟。EFD目前只支持黑白圖像顯示,因此圖像採集利用Processing軟件對圖片進行一次加工,轉換成黑白圖像。數據生成之後需要進行傳輸,傳遞給微控制器進行處理,這時需要對數據進行二次加工,變成滿足TFTEFD顯示屏驅動芯片要求的格式,之後通過DMA方式傳遞給外部的SRAM。FPGA讀取SRAM的數據,根據相應的時序控制驅動芯片輸出數據,從而實現圖像顯示。如果控制好時序,能在1 s內刷新25幀以上,那麼就可以實現圖像的動態顯示。

數據的傳輸是整個過程的中間階段,需要進行不斷的測試來找到最優的傳輸數據時序,構造出相對完善的波形序列來實現動態顯示。因此搭建數據傳輸系統來顯示不同的圖像,測試其顯示效果,對於實現穩定的動態顯示有積極的作用。本設計利用uCGUI構造圖形控制界面,可以傳輸不同的EFD圖像數據給SRAM,FPGA讀取其中的數據就可以進行圖像顯示,並且系統界面簡單直觀,操作起來也相對簡便。

2 系統設計

2.1 硬件設計

利用STM32F103ZET6微處理器作為主控芯片,SD卡作為存儲設備,SRAM作為轉換數據的輸送目的地,TFT?LCD用作顯示與觸摸控制,各個硬件相互配合構建起一個完整的數據傳輸系統。系統框圖如圖2所示。

圖2 系統結構

顯示模塊採用2.8寸ALIENTEK TFTLCD模塊,利用ILI9320控制器作為驅動芯片進行驅動。ILI9320液晶控制器自帶顯存,其顯存總大小為172 820 b(240×320×[1818])。並且ALIENTEK TFTLCD模塊自帶電阻式觸摸屏,可以實現觸控的功能。ALIENTEK TFTLCD模塊自帶的觸摸屏控制芯片為XPT2046,內部含有12位分辨率125 kHz轉換速率逐步逼近型A/D轉換器,是一款4導線制觸摸屏控制器。

由於數據量比較大,將大量數據儲存在SD卡中[1],SD卡的配置使用SPI驅動,最高通信速度可達18 Mb/s,每秒可傳輸數據2 MB以上,可以滿足一般的應用需求。SRAM採用的是IS62WV51216芯片,存儲容量為1 MB,採用STM32的FSMC接口對其進行配置。FSMC是靈活的靜態存儲控制器,能夠與同步或異步存儲器、16位PC存儲器卡接口,STM32的FSMC接口支持包括SRAM,NAND FLASH,NOR FLASH等存儲器。本設計使用FSMC的BANK1區域3來控制IS62WV51216芯片。

2.2 軟件設計

FATFS文件系統:FATFS是一個完全免費開源的FAT文件系統模塊,專門為小型的嵌入式系統而設計。它用標準C 語言編寫,一般只需要修改2個文件,即ffconf.h和diskio.c,之後進行簡單配置就可以移植到單片機上,進而可以對SD卡和FLASH進行文件的讀、寫操作。

uCGUI移植:uCGUI 是一種小型化的嵌入式圖形界面接口,該接口獨立於處理器和LCD 控制器種類,對系統的要求很低[2]。它設計用於為任何使用LCD圖形顯示的應用提供高效的獨立於處理器和LCD控制器的圖形用户接口[3],它適用單任務或是多任務系統環境,並且在任意LCD控制器和CPU下進行任何尺寸的真實顯示或虛擬顯示。

本設計依靠uCGUI進行界面設計,設計比較直觀的按鍵和列表來控制圖像傳輸和圖像顯示。使用uCGUI也需要做移植的工作,移植的工作包括顯示屏和觸摸屏兩個部分。

顯示屏:首先,TFT?LCD顯示屏的底層驅動函數需要事先寫好,保證單線程程序中正常顯示。

其次,向工程中加入uCGUI程序包。

再次,根據自己的顯示屏規格配置LcdConf.h GuiConf.h

GuiTouchConf.h文件

最後,修改LcdDriver使uCGUI與你的LCD驅動相互關聯。

觸摸屏:若要在uCGUI 中使用觸摸屏, 則必須將GUI_SUPPORT_TOUCH (Config 目錄下GUIConf.h中定義的宏)設置為1[4]。同時要編寫底層的觸摸屏源驅動函數,對gui_TouchConf.h文件中進行配置,然後在GUI_X_Touch.c文件中進行函數的改動。

具體的移植過程可以參考uCGUI使用手冊,這裏不再贅述。

數據轉換算法?循環移位:顯示屏裏每一個像素格里有一滴彩色油墨,油墨在加電時會收縮,在不加電時會平鋪。下極板是一層反光隔膜,裏邊每一個像素格里有一個TFT晶體管作為電壓開關,上極板是玻璃板,當在上下極板間加入適當電壓,像素格里的油墨就會打開,用光照射就顯示出明亮狀態,當不加電時就會平鋪顯示出的是油墨的顏色。EFD?Panel的微觀結構如圖3所示。

圖3 EPD Panel微結構

由於EFD是國內新型顯示技術,有着自身的圖像數據格式,需要定製符合其顯示格式的數據來實現圖像顯示。控制油墨打開與關閉的芯片要求一個像素格有兩位進行控制,即“01”代表打開,“10”代表關閉,因此需要對原始圖像數據進行二次加工來滿足要求。EPD Panel 的規格是320×240,即240行,320列,由於驅動芯片的數據輸出位數是8位,因此先定義一個字符型的二維數組data[240][80],然後利用內存管理單元開闢相應的區域來存放最終數據。利用FATFS模塊的f_read函數從文本文檔裏讀取數據,根據文檔中每一個數據的內容是‘1’還是‘0’,分別對二維數組內的元素進行0x01或0x02的賦值操作,如果移位次數沒有達到4次則進行左移兩位操作,否則讀取下一個數據重新進行判斷。這樣每4個數據構成二維數組裏的一個元素值。接下來的工作就是判斷列數與行數是否小於預先設定數值,如果列數超出設定值,則行數加1,從新的一行開始讀取數據,如果行數超出設定值,則循環結束,所有數據均被轉換完。

算法流程圖如圖4所示。

圖4 圖像轉換算法

在Keil集成開發環境下利用C語言編寫數據格式轉換代碼,實現圖像轉換的重要代碼片段如下:

if(*(num++)=='1')

{

if((x%4==0)&&(x!=0))j++;

data[i][j]|=0x01;

if(x!=(3+4*j))data[i][j]<<=2;

}

else

{

if(x==320||x==321)continue;

if((x%4==0)&&(x!=0))j++;

data[i][j]|=0x02;

if(x!=(3+4*j))data[i][j]<<=2;

}

界面設計部分:進行完所有的移植工作之後,就可以進行界面的設計,具體的界面程序流程圖如圖5所示。

圖5 主程序流程圖

整個系統分成了3個界面,界面之間可以實現相互的切換。第一個界面是進入界面,第二個界面是控制界面,第三個界面是數據列表界面。具體實現方法是建立了非模態對話框,以第一個界面為例,其對話框建立代碼為: GUI_CreateDialogBox(_aDialogCreate1,GUI_COUNTOF(_aDialogCreate1),

&_cbCallback1, 0, 0, 0);

構造的ENTER按鍵用來控制界面的交換。第二個界面構造了三個按鍵來實現不同的控制,包括Begin Button,Exit Button,List Button,利用掃描方式來檢測按鍵的觸摸,從而執行不同的功能函數,代碼片段如下:

switch(GUI_GetKey())

{

case GUI_ID_BUTTON0: datacopy(col); //控制數據傳送

break;

case GUI_ID_BUTTON1: LED0=1; //界面轉換標誌置位

break;

case GUI_ID_BUTTON2: GUI_Clear();

BUTTON_Delete(hButton[0]);

BUTTON_Delete(hButton[1]);

BUTTON_Delete(hButton[2]);

GUI_CreateDialogBox(ImagelistDialog, GUI_COUNTOF(ImagelistDialog), &listCallBack, 0, 0, 0); //界面轉換

break;

default:break;

}

第三個界面是圖像名稱的列表,是將對話框與列表結合顯示出存儲在SD卡中圖像名稱,進而來控制傳輸不同的圖像。三個界面的顯示效果如圖6所示。

3 結 語

本設計可以作為EFD圖像顯示的測試裝置來進行使用,通過顯示不同的圖像來找到合適的波形圖來輔助動態圖像顯示,同時實現了信息的可視化顯示[5],後期可以進行程序上的修改,對系統進行改進與升級,以數據流的形式傳輸數據,和終端的FPGA進行配合來實現動態顯示。

  • 文章版權屬於文章作者所有,轉載請註明 https://wenshudu.com/shiyongfanwen/lunwen/qegxnj.html
專題