新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于C8051F320 USB接口的數據采集存儲電路

        基于C8051F320 USB接口的數據采集存儲電路

        ——
        作者:北京工業大學電子信息與控制工程學院 王鐵流 吳丹丹 李成 時間:2007-01-02 來源:電子產品世界 收藏

        摘要: 介紹采用C8051F320 與AM45DB321構成存儲系統的設計方案。

        關鍵詞:  ;;;

        在一些特殊的工業場合,有時需要將傳感器的信號不斷的實時采集和存儲起來,并且到一定時間再把數據回放到PC機中進行分析和處理。在工作環境惡劣的情況下采用高性能的單片機和工業級大容量的FLASH的方案恐怕就是最適當的選擇了。CYGNAL公司的C8051F320 是一種具有8051內核的高性能單片機,運行速度為普通8051的12倍。該芯片內部528字節隨機RAM和2048字節XRAM為數據緩沖和程序運行提供了充足的空間。更受歡迎的是它的串行擴展功能為當前的各種串行芯片和外部設備接口的擴展提供了極大的方便。高速的SPI硬件接口與串行FLASH RAM的無縫連接大大簡化了電路板布線,而片內自帶的功能使數據的存儲和回放變得十分簡單和快捷。在協議的支持下,使這個采集的數據回放過程簡單到了極點。

        本文給出的是用于大型光伏系統運行狀態監測的,由于采用表面貼片工藝制作,整個電路板的寬度僅為18毫米,就像使用U盤一樣方便。

        采集電路硬件部分

        電路的硬件結構

        本系統采用了CYGNAL公司的C8051F320芯片和ATMEL公司的AT45DB321C存儲芯片作為控制和存儲的主要芯片。圖1是信號采集系統的采集及存儲系統框圖。

        圖1 基于USB數據采集及存儲系統框圖

        從圖1中可見,在采集過程中,傳感器的輸入模擬信號經可變增益放大器放大后送至C8051F320,經過ADC轉換為數字信號。單片機片外有8個45DB321C芯片組成了一個32MB的Data flash,采集到的數據不斷地通過SPI接口傳送到45DB321C芯片中存儲。

        與其他型號芯片相比,C8051F320帶有USB接口,片內的USB功能控制模塊符合USB2.0規范,可在全速或低速下運行,并具有1KB USB緩存、集成收發器,無需外部電阻。可以與PC機即插即用。當需要數據時,可將采集存儲電路從現場取回,通過USB接口回放到PC機中,在LabVEIW平臺上進行波形顯示和數據分析處理。

        8051F320與45DB321C的硬件接口

        系統中C8051F320與45DB321CI采用SPI單主多從機的方式通信。引腳NSS作為從機選擇線,選擇存儲芯片,低電平有效;SCK作為串行外設接口發送和接收數據的同步時鐘信號;RDY/BUZ作為判斷設備不忙或準備接收新的指令操作的信號線;SO、SI作為數據傳輸線。

        本系統設計上考慮使用8片45DB321C芯片,最大容量達32MB,通過片選CS1~CS8分別連到各45DB321C的CS端。時鐘SCK只對被選中的45DB321有效。本系統使用多片Flash芯片的設計除了提供充足的存儲空間之外,還解決了一個關鍵問題,就是借鑒硬盤領域RAID技術的思路,通過對4片一組的Flash順序操作實現一個基本的并行加速,解決了Flash寫入速度過慢的問題,大大提高了存儲性能。

        具體電路如圖2所示,其中8片的SPI采用級聯只畫出一片,各自的CS片選信號由74HC138譯碼給出。

        圖2 單片機與FLASH存儲器的接口電路
                  
        采集電路的程序軟件

        采集電路的程序是指固化在C8051F320 中的程序,采用c語言編寫,由主程序模塊、ADC數據采集、Flash數據存儲和USB通信四部分組成。

        主程序和ADC數據采集

        主程序主要完成系統初始化狀態指示操作控制和參數設置啟動A/D轉換等。

        ADC數據采集程序將來自傳感器的模擬信號轉換成數字信號的。本系統中,ADC的轉換是通過Timer2的自動溢出來觸發的,而采集的速率可以事先通過上位機設置。

        Flash數據存儲程序

        C8051F320芯片與Flash存儲器的通信采用SPI接口方式,數據傳輸率為12MHz(位/秒)。本設計中,C8051F320工作在SPI主機模式,SPI總線的數據傳輸都將由C8051F320發起。 首先對SPI相關SFR SPI0CFG寄存器和SPI0CN寄存器進行配置,使其工作在3線主模式12MHz。通信時首先用GPIO引腳來選擇相應的Flash從器件,隨后通過讀取SPIDAT來進行讀寫操作。在使用Flash芯片進行讀寫操作時,首先要確定Flash存儲器的狀態。可通過寫入D7H命令,讀取狀態寄存器判斷設備是否Ready或處于Busy狀態。確定狀態后,可根據數據手冊中的命令格式進行相關的讀寫以及擦除操作。

        USB通信程序

        固件編程是USB設備開發過程里的主要工作。固件的主要任務是初始化單片機和外設,發送USB請求,響應主機的標準設備請求。根據設備的功能分類完成各種數據交換請求。初始化編程主要完成USB控制器的初始化、端點初始化,交叉開關和I/O口初始化、系統時鐘設置,控制器使能。初始化后,USB設備可隨時插入主機中,主機將遵循USB協議對設備進行識別和初始化。主機識別到設備之后對設備進行配置,調用相應的驅動程序,配上上位機軟件進行相關通信操作。

        Silicon lab公司提供了USBXpress的開發套件。通過使用USBXpress庫,大大簡化了USB固件程序和PC端驅動程序的開發。 USBXpress通過一系列函數實現單片機端的應用程序接口(API)。這些函數封裝了USB協議的細節,使得程序開發人員不需要了解USB的過多細節即可使用USB進行數據通信(見圖3)。

        圖3 單片機與PC機的USB通信

        本系統中主要用到了初始化、讀、寫、中斷這四個函數:
        初始化USB_Init(0,0xEA61, NULL, NULL, Serial, 250,0x80,0x100)函數;塊寫函數Block_Write();塊讀函數Block_Read();USB中斷使能函數。

        USB的所有處理程序都是通過USB的中斷服務程序完成的。進入USB中斷后,程序調用Get_Interrupt_Source()函數獲得USB中斷的進入原因。然后根據不同的入口情況,來進行相應的處理。比如收到數據之后,讀取相應的緩沖區內容到內存中;收到初始化命令時,復位單片機內的各個狀態參數。USB通信流程圖示于圖4。

        圖4  USB通信流程圖

        PC機端軟件程序

        計算機端軟件程序包括兩部分:USB驅動程序和用戶應用程序。

        USB驅動程序

        USB驅動程序是一個軟件組件,封裝了應用程序存取硬件設備的功能函數。有些設備具有相同的屬性,把它們歸為一組標準類別,可以定義設備類規范作為該類設備的主機驅動框架。設備類驅動程序使用相似的函數,處理不同設備間的通信,這樣使設備類驅動程序的開發可以脫離設備制造商。

        USB驅動程序模型一般分為五層(見圖5)。

        圖5  USB驅動程序模型

        用戶端若要從設備讀取數據,將調用一個應用程序接口API,如OpenFile,SiUSBXp.dll實現這個API??偩€驅動程序控制對總線上所有設備的訪問。

        本系統中,開發USB設備驅動程序的工具使用了USBXpress Development Kit。主要函數如下:
        SI_Open()函數;SI_Close()函數;SI_Read函數;SI_Write()函數;SI_GetNumDevices()函數;SI_CheckRXQueue()函數。

        用戶應用程序

        本系統中,應用程序采用NI公司的LabVIEW軟件進行編寫,運用圖形化的C語言進行軟件開發,實現數據的顯示、滿足不同需要的分析功能以及對數據采集硬件的參數設定(見圖6)。

        圖6 回放數據波形顯示界面

        結語

        基于C8051F320 USB接口的采集存儲電路把計算機技術與傳統信號采集技術緊密結合起來,充分發揮PC機和單片機各自的優點,實現傳感器信號的采集、存儲、顯示和處理。而借助USB接口的通信功能,減小了數據傳輸系統的復雜性。
          
        參考文獻
        1.王鐵流, ‘采用ADUC812實現超大容量油井數據采集與存儲’,電子產品世界,  2002.8A
        2.潘琢金,’C8051F高速SOC單片機原理及應用’,北京航空航天大學出版社,2002年.
        3.馬喜順,’高速SOC單片機C8051F’,電子產品世界, 2002.5A.

        存儲器相關文章:存儲器原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 罗城| 沛县| 道真| 平泉县| 敦煌市| 辽阳市| 施秉县| 台安县| 崇左市| 保德县| 扎赉特旗| 广昌县| 临沂市| 南木林县| 克拉玛依市| 额敏县| 西吉县| 新疆| 莱芜市| 冕宁县| 荣成市| 扬中市| 景东| 华宁县| 荆门市| 睢宁县| 永登县| 资兴市| 松江区| 中超| 龙南县| 广平县| 信阳市| 科尔| 通榆县| 沙洋县| 乃东县| 隆林| 无为县| 新田县| 贵州省|