EFD影象資料傳輸系統設計論文

EFD影象資料傳輸系統設計論文

  在此計以STM32系列處理器作為控制器,利用uCGUI進行圖形介面設計,利用迴圈移位演算法將黑白影象定製成符合TFT?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進行配合來實現動態顯示。

最近訪問