嵌入式 電壓采集系統(tǒng)_第1頁
嵌入式 電壓采集系統(tǒng)_第2頁
嵌入式 電壓采集系統(tǒng)_第3頁
嵌入式 電壓采集系統(tǒng)_第4頁
嵌入式 電壓采集系統(tǒng)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、摘要針對傳統(tǒng)的有線方式檢測、采集、傳輸中節(jié)點分散需要大量布線等問題,本文介紹了一種基于CC2530和數(shù)字壓力傳感器的電壓數(shù)據(jù)采集系統(tǒng)。首先介紹了CC2530 結構及實現(xiàn)原理以及所使用電壓傳感器模塊結構和原理,然后在了解它們的基礎上找出相應的采集數(shù)據(jù)以及傳輸數(shù)據(jù)的所需的軟件,串口通信及AD轉換的原理和其實現(xiàn)方法,最后通過給出總的電壓采集的程序流程圖以及軟件子系統(tǒng)設計系統(tǒng)框圖和以上實驗設備完成基于CC2530和數(shù)字壓力傳感器的電壓數(shù)據(jù)采集系統(tǒng)。 關鍵詞: 電壓采集,嵌入式,CC2530,AD轉換,串口通信14目錄一、前言1二、基本原理22.1 CC2530 結構及實現(xiàn)原理22.2 電壓傳感器結構及

2、實現(xiàn)原理42.3 軟件方面5(1)串口通信5(2)AD轉換6三、系統(tǒng)分析93.1 程序流程圖93.2 軟件子系統(tǒng)設計9四、代碼清單104.1 核心代碼104.2 AD轉換代碼11總結14參考文獻15一、前言嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟硬件可定制,適用于不同應用場合,對功能,可靠性,成本,體積,功耗有嚴格要求的專用計算機系統(tǒng)1。隨著生活水平的提高和科學技術發(fā)展的需求,人類對環(huán)境信息的感知上有了更高的要求,在某些特殊工業(yè)生產領域和室內存儲場合對環(huán)境要求顯得特別苛刻;隨著嵌入式技術的發(fā)展,為環(huán)境檢測提供了更進一步的保障?;谇度胧降沫h(huán)境信息采集系統(tǒng)包含感知層、傳輸層、應用層三個層

3、面;傳輸層常見的有溫濕度、煙感、電壓、壓力等嵌入式傳感器模塊,傳輸層包括有線通信和無線通信兩部分,應用層包括各種終端。電壓是推動電荷定向移動形成電流的原因。電流之所以能夠在導線中流動,也是因為在電流中有著高電勢和低電勢之間的差別。這種差別叫電勢差,也叫電壓。換句話說,在電路中,任意兩點之間的電位差稱為這兩點的電壓。在很多應用場合,電壓是一個很重要的一個參數(shù)。電壓的自動監(jiān)測已經成為各行業(yè)進行安全生產和減少損失的重要措施之一。本課程設計就對嵌入式電壓數(shù)據(jù)采集系統(tǒng)進行詳細分析和設計。二、基本原理2.1 CC2530 結構及實現(xiàn)原理 CC2530 是基于2.4-GHz IEEE802.15.4、Zig

4、Bee 和RF4CE 上的一個片上系統(tǒng)解決方案。其特點是以極低的總材料成本建立較為強大的網絡節(jié)點。CC2530 芯片結合了RF 收發(fā)器,增強型8051 CPU,系統(tǒng)內可編程閃存,8-KB RAM 和許多其他模塊的強大的功能。如今CC2530 主要有四種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/256KB 的閃存。其具有多種運行模式,使得它能滿足超低功耗系統(tǒng)的要求。同時CC2530運行模式之間的轉換時間很短,使其進一步降低能源消耗。 CC2530包括了1個高性能的2.4 GHz DSSS(直接序列擴頻)射頻收發(fā)器核心和1個8051控制器,它具有32/6

5、4/128 kB可選擇的編程閃存和8 kB的RAM,還包括ADC、定時器、睡眠模式定時器、上電復位電路、掉電檢測電路和21個可編程I/O引腳,這樣很容易實現(xiàn)通信模塊的小型化。CC2530是一款功耗相當?shù)偷膯纹瑱C,功耗模式3下電流消耗僅0.2A,在32 k晶體時鐘下運行,電流消耗小于1A。CC2530芯片使用直接正交上變頻發(fā)送數(shù)據(jù)?;鶐盘柕耐喾至亢驼环至坑蒁AC轉換成模擬信號,經過低通濾波,變頻到所設定的信道上。當需要發(fā)送數(shù)據(jù)時,先將要發(fā)送的數(shù)據(jù)寫入128B的發(fā)送緩存中,包頭是通過硬件產生的。最后經過低通濾波器和上變頻的混頻后,將射頻信號被調制到2.4GHz,后經天線發(fā)送出去。CC2530

6、有兩個端口分別為TX/RX,RF端口不需要外部的收發(fā)開關,芯片內部已集成了收發(fā)開關。CC2530的存儲器ST-M25PE16是4線的SPI通信模式的FLASH,可以整塊擦除,最大可以存儲2M個字節(jié)。工作電壓為2.7v到3.6v。CC2530溫度傳感器模塊反向F型天線采用TI公司公布的2.4GHz倒F型天線設計。天線的最大增益為3.3dB,天線面積為25.7×7.5mm。該天線完全能夠滿足CC2530工作頻段的要求(CC2530工作頻段為2.400GHz2.480GHz)。 圖1.CC2530芯片引腳CC2530芯片引腳功能AVDD1 28 電源(模擬) 2-V3.6-V 模擬電源連接

7、AVDD2 27 電源(模擬) 2-V3.6-V 模擬電源連接AVDD3 24 電源(模擬) 2-V3.6-V 模擬電源連接AVDD4 29 電源(模擬) 2-V3.6-V 模擬電源連接AVDD5 21 電源(模擬) 2-V3.6-V 模擬電源連接AVDD6 31 電源(模擬) 2-V3.6-V 模擬電源連接DCOUPL 40 電源(數(shù)字) 1.8V 數(shù)字電源去耦。不使用外部電路供應。DVDD1 39 電源(數(shù)字) 2-V3.6-V 數(shù)字電源連接DVDD2 10 電源(數(shù)字) 2-V3.6-V 數(shù)字電源連接GND - 接地 接地襯墊必須連接到一個堅固的接地面。GND 1,2,3,4 未使用的連

8、接到GNDP0_0 19 數(shù)字I/O 端口0.0P0_1 18 數(shù)字I/O 端口0.1P0_2 17 數(shù)字I/O 端口0.2P0_3 16 數(shù)字I/O 端口0.3P0_4 15 數(shù)字I/O 端口0.4P0_5 14 數(shù)字I/O 端口0.5P0_6 13 數(shù)字I/O 端口0.6P0_7 12 數(shù)字I/O 端口0.7P1_0 11 數(shù)字I/O 端口1.0-20-mA 驅動能力P1_1 9 數(shù)字I/O 端口1.1-20-mA 驅動能力P1_2 8 數(shù)字I/O 端口1.2P1_3 7 數(shù)字I/O 端口1.3P1_4 6 數(shù)字I/O 端口1.4P1_5 5 數(shù)字I/O 端口1.5P1_6 38 數(shù)字I/

9、O 端口1.6P1_7 37 數(shù)字I/O 端口1.7P2_0 36 數(shù)字I/O 端口2.0P2_1 35 數(shù)字I/O 端口2.1P2_2 34 數(shù)字I/O 端口2.2P2_3 33 數(shù)字I/O 模擬端口2.3/32.768 kHz XOSCP2_4 32 數(shù)字I/O 模擬端口2.4/32.768 kHz XOSCRBIAS 30 模擬I/O 參考電流的外部精密偏置電阻RESET_N 20 數(shù)字輸入 復位,活動到低電平RF_N 26 RF I/O RX 期間負RF 輸入信號到LNARF_P 25 RF I/O RX 期間正RF 輸入信號到LNAXOSC_Q1 22 模擬I/O 32-MHz 晶振

10、引腳1或外部時鐘輸入XOSC_Q2 23 模擬I/O 32-MHz 晶振引腳22.2 電壓傳感器結構及實現(xiàn)原理電壓輸入使用大于 1M的等效輸入阻抗的輸入取樣,將輸入電壓進行 15 倍衰減,然后使用差分單端運放,將其變換到 03V 的范圍,經電壓二次緩沖后送到 AD 采集輸入端。 其電路原理圖,如下圖 2.10 所示:使用 1012bit 的 AD 采集器,一次采樣使用 2 字節(jié)描述,MSB 方式,電壓傳感器模塊輸出數(shù)據(jù)結構請參見“電流傳感器模塊上傳數(shù)據(jù)定義”。2.3 軟件方面(1)串口通信1、串行數(shù)據(jù)(DATA) DATA三態(tài)門用于數(shù)據(jù)的讀取。DATA在SCK時鐘下降沿之后改變狀態(tài),并僅在SC

11、K時鐘上升沿有效。數(shù)據(jù)傳輸期間,在SCK時鐘高電平時,DATA必須保持穩(wěn)定。為避免信號沖突,微處理器應驅動DATA在低電平。需要一個外部的上拉電阻(例如:10k)將信號提拉至高電平。上拉電阻通常已包含在微處理器的I/O 電路中。2、串行時鐘輸入(SCK) SCK用于微處理器與電壓傳感器之間的通訊同步。由于接口包含了完全靜態(tài)邏輯,因而不存在最小SCK頻率。3、測量時序(RH 和T) 發(fā)布一組測量命令(00000101表示電壓值)后,控制器要等待測量結束。這個過程需要大約11/55/210ms,分別對應8/12/14bit測量。確切的時間隨內部晶振速度,最多有±15%變化。電壓傳感器通過

12、下拉DATA至低電平并進入空閑模式,表示測量的結束??刂破髟谠俅斡|發(fā)SCK時鐘前,必須等待這個“數(shù)據(jù)備妥”信號來讀出數(shù)據(jù)。檢測數(shù)據(jù)可以先被存儲,這樣控制器可以繼續(xù)執(zhí)行其它任務在需要時再讀出數(shù)據(jù)。接著傳輸2個字節(jié)的測量數(shù)據(jù)和1個字節(jié)的CRC奇偶校驗。uC需要通過下拉DATA為低電平,以確認每個字節(jié)。所有的數(shù)據(jù)從MSB開始,右值有效(例如:對于12bit數(shù)據(jù),從第5個SCK時鐘起算作MSB;而對于8bit 數(shù)據(jù),首字節(jié)則無意義)。用CRC數(shù)據(jù)的確認位,表明通訊結束。如果不使用CRC-8校驗,控制器可以在測量值LSB后,通過保持確認位ack 高電平,來中止通訊。在測量和通訊結束后,電壓傳感器自動轉入

13、休眠模式。4、通訊復位時序如果與電壓傳感器通訊中斷,下列信號時序可以復位串口:當DATA保持高電平時,觸發(fā)SCK時鐘9次或更多。在下一次指令前,發(fā)送一個“傳輸啟動”時序。這些時序只復位串口,狀態(tài)寄存器內容仍然保留。圖4通訊復位時序圖(2)AD轉換CC2530 內部包含一個 ADC,它支持最高達 12 位的模擬到數(shù)字的轉換。該 ADC 包含一個模擬多路復用器支持最高達 8 路的獨立可配置通道、參考電壓產生器,轉換結果通過 DMA被寫入存儲器。支持多種運行模式。 1、ADC 輸入P0 端口引腳上的信號可被用來作為 ADC 輸入。在以下的描述中,我們將這些引腳記為AIN0-AIN7 引腳。輸入引腳

14、AIN0-AIN7 被連接到 ADC。ADC 可被設置為自動執(zhí)行一個轉換序列,當該序列被完成時可隨意地從任一通道執(zhí)行一個附加的轉換。輸入可被配置為單端或差分輸入。當使用差分輸入時,差分輸入由輸入組 AIN0-1、AIN2-3、AIN3-4、AIN4-5 和 AIN6-7 組成。注意:負電壓不能被連接到這些引腳,大于 VDD的電壓也不能被連接到這些引腳。 除了輸入引腳 AIN0-AIN7 外,一個片上溫度傳感器的輸出可被選擇作為 ADC 的一個輸入用來進行溫度測量。還可以選擇相當于 AVDD_SOC/3 的電壓作為 ADC 的一個輸入。2、ADC 轉換序列 ADC 可執(zhí)行一個轉換序列并將結果傳送

15、到存儲器(通過 DMA)而不需要與 CPU 進行任何互操作。轉換序列可被 ADCCFG 寄存器影響,因為來自于 IO 引腳的 ADC 的 8 個模擬輸入不必全部被編程作為模擬輸入。如果一個通道作為一個序列的一部分,但相應的模擬輸入在 ADCCFG中被禁止,那么該通道將被跳過。對于通道 8 到 12,輸入引腳必須被使能。 ADCCON2.SCH 寄存器位被用來定義一個來自 ADC 輸入的ADC 轉換序列。當 ADCCON2.SCH被設置為小于 8 的值時,一個轉換序列將包含從 0 到該值的所有通道。 單端輸入 AIN0 到 AIN7 由 ADCCON2.SCH 中的通道號 0 到 7 來表示。通

16、道號 8 到 11 分別表示差分輸入 AIN0-1、AIN2-3、AIN4-5 和 AIN6-7。通道號 12 到 15 分別表示 GND、內部參考電壓、溫度傳感器和 AVDD_SOC/3。 當 ADCCON2.SCH 被設置為一個 8 到 12 之間的值時,轉換序列將從通道 8 開始。對于更高的設置值,只進行單一的轉換。 3、ADC 運行模式 ADC 有 3 個控制寄存器:ADCCON1、ADCCON2 和 ADCCON3。這些寄存器被用來配置 ADC 和報告狀態(tài)。 ADCCON1.EOC 位是一個狀態(tài)位,當一個轉換結束時該位被設置為高,當 ADCH 被讀取時該位被清零。 ADCCON1.S

17、T 位被用來開始一個轉換序列。當該位被設置為高、ADCCON1.STSEL 為 11 并且當前沒有轉換在運行時,一個轉換序列將開始。當該轉換序列被完成時該位被自動清零。 ADCCON1.STSEL 位被用來選擇哪一個事件將開始一個新的轉換序列。 4、ADC 轉換結果 數(shù)字轉換結果由二進制補碼形式表示。對于單端輸入,結果將總為正的。當輸入振幅等于 VREF(選定的參考電壓)時轉換結果將達到最大值。對于差分輸入,兩引腳之間的差值被轉換,該值可以是負的。對于 12 位分辨率,當模擬輸入等于 VREF 時數(shù)字轉換結果為 2047;當模擬輸入等于-VREF 時數(shù)字轉換結果為-2048。 當 ADCCON

18、1.EOC 被設置為 1 時,數(shù)字轉換結果可從 ADCH 和 ADCL 中得到。 當 ADCCON2.SCH 位被讀取時,讀取值將指示通道號,在 ADCH 和 ADCL 中的轉換結果是該通道之前的那個通道的轉換結果。 5、ADC 參考電壓 模/數(shù)轉換的正參考電壓是可選擇的。內部產生的 1.25V 電壓、AVDD_SOC 引腳上的電壓、連接到 AIN7 引腳上的外部電壓或連接到 AIN6-7 輸入的差分電壓都可以作為正參考電壓。 為了進行校準,可以選擇參考電壓作為 ADC 的輸入進行參考電壓的轉換。類似的,可以選擇 GND 作為 ADC 的輸入。 6、ADC 轉換時間 當在 32MHz 系統(tǒng)時鐘

19、下,該時鐘被 8 分頻后產生一個 4MHz 的時鐘供 ADC 運行。三角積分調變器和抽取濾波器都是用 4MHz 時鐘進行計算。使用其他的頻率將會影響結果和轉換時間。以下描述我們假設使用 32MHz 系統(tǒng)時鐘。 執(zhí)行一次轉換所需要的時間取決于所選擇的抽取率。例如,當抽取率被設置為 128 時,抽取濾波器使用 128 個 4MHz 時鐘周期來計算結果。當一個轉換開始后,輸入多路復用器需要 16 個 4MHz 時鐘周期來穩(wěn)定。16 個 4MHz 時鐘周期的穩(wěn)定時間適用于所有抽取率。因此一般而言,轉換時間由下式給定:Tconv = (抽取率 +16) ×0.25us。 7、ADC 中斷 當一

20、個附加轉換完成時 ADC 將產生一個中斷。當來自轉換序列的一個轉換完成時將不會產生中斷。 8、ADC DMA 觸發(fā) 當來自一個轉換序列的每一個轉換完成時 ADC 將產生一個 DMA 觸發(fā)。當一個附加轉換完成時不產生 DMA 觸發(fā)。首次在 ADCCON2.SCH 中定義的 8 個通道的每一個都有一個 DMA 觸發(fā)。當一個新的采樣就緒時 DMA 觸發(fā)被激活。另外,還有一個 DMA 觸發(fā) ADC_CHALL,當 ADC 轉換序列中的任何通道有新數(shù)據(jù)就緒時該觸發(fā)被激活。三、系統(tǒng)分析3.1 程序流程圖開始系統(tǒng)時鐘初始化讀取電壓數(shù)據(jù)顯示電壓數(shù)據(jù)LCD初始化圖5 軟件流程圖3.2 軟件子系統(tǒng)設計 為了能夠進

21、行系統(tǒng)初始化采用一個匯編文件做肩動代碼,用它實現(xiàn)向量表的定義、堆棧初始化、系統(tǒng)變量初始化、中斷系統(tǒng)初始化、IO初始化、外同初始化、地址重映射等操作。系統(tǒng)的初始化流程如圖所示。圖6 系統(tǒng)的初始化流程 給智能主板供電(USB外接電源或2節(jié)干電池)。將一個無線節(jié)點模塊插入到帶LCD的智能主板的相應位置。將電壓傳感器模塊插入到智能主板的傳感及控制擴展口位置。將CC2530仿真器的一端通過USB線(A型轉B型)連接到 PC 機,另一端通過10Pin下載線連接到智能主板的CC2530 JTAG口(J203)。將智能主板上電源開關撥至開位置。按下仿真器上的按鈕,仿真器上的指示燈為綠色時,表示連接成功。四、代

22、碼清單4.1 核心代碼void main() int voltage; char s16;UINT8 adc0_value2; float num = 0; SET_MAIN_CLOCK_SOURCE(CRYSTAL); / 設置系統(tǒng)時鐘源為 32MHz 晶體振蕩器 GUI_Init(); / GUI 初始化 GUI_SetColor(1,0); / 顯示色為亮點,背景色為暗點 GUI_PutString5_7(25,6,"OURS-CC2530"); /顯示 OURS-CC2530GUI_PutString5_7(10,22,"voltage:");

23、LCM_Refresh(); while(1) th_read(&voltage); /讀取電壓 sprintf(s, (char*)"%d%d C", (INT16)(int) voltage / 10), (INT16)(int) voltage % 10); /將電壓結果轉換為字符串 GUI_PutString5_7(48,22,(char *)s); /顯示結果 LCM_Refresh(); ADC_ENABLE_CHANNEL(ADC_AIN0); / 使能 AIN0 為 ADC 輸入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSE

24、L = 11(復位默認值)且 ADCCON1.ST = 1 時進行單一轉換 */ /* 參考電壓:AVDD_SOC 引腳上的電壓 */ /* 抽取率:512 */ /* ADC 輸入通道:AIN0 */ ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_14_BIT | ADC_AIN0); ADC_SAMPLE_SINGLE(); / 啟動一個單一轉換 while(!ADC_SAMPLE_READY(); / 等待轉換完成ADC_ENABLE_CHANNEL(ADC_AIN0); / 禁止 AIN0adc0_value0 = ADCL; / 讀取 ADC 值a

25、dc0_value1 = ADCH; / 讀取 ADC 值adc0_value0 = adc0_value0>>2;num = (adc0_value1*256+adc0_value0)*3.3/8192; /有一位符號位,取213; num /= 4; num=num*913; /轉換為 Lx 4.2 AD轉換代碼void main(void) INT8 adc0_value; UINT8 pot0Voltage = 0; INT8 adc1_value; UINT8 pot1Voltage = 0; char s16;SET_MAIN_CLOCK_SOURCE(CRYSTAL)

26、; / 設置系統(tǒng)時鐘源為32MHz 晶體振蕩器 GUI_Init(); / GUI 初始化 GUI_SetColor(1,0); / 顯示色為亮點,背景色為暗點 GUI_PutString5_7(25,6,"OURS-CC2530"); /顯示 OURS-CC2530 GUI_PutString5_7(42,22,"ADC LIB"); GUI_PutString5_7(10,35,"adc0_value"); GUI_PutString5_7(10,48,"adc1_value"); LCM_Refresh();

27、 while(1) /* AIN0 通道采樣 */ ADC_ENABLE_CHANNEL(ADC_AIN0); / 使能 AIN0 為 ADC 輸入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSEL = 11(復位默認值)且 ADCCON1.ST = 1時進行單一轉換 */ /* 參考電壓:AVDD_SOC 引腳上的電壓 */ /* 抽取率:64 */ /* ADC 輸入通道:AIN0 */ ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN0);ADC_SAMPLE_SINGLE(); / 啟動一個單一轉換

28、 while(!ADC_SAMPLE_READY(); / 等待轉換完成 ADC_ENABLE_CHANNEL(ADC_AIN0); / 禁止 AIN0 adc0_value = ADCH; / 讀取 ADC 值 /* 根據(jù)新計算出的電壓值是否與之前的電壓值相等來決定是否更新顯示 */ if(pot0Voltage != scaleValue(adc0_value) pot0Voltage = scaleValue(adc0_value); sprintf(s, (char*)"%d.%d V", (INT16)(pot0Voltage / 10), (INT16)(pot0Voltage % 10); GUI_PutString5_7(72,35,(char *)s); LCM_Refresh(); halWait(100); /* AIN1 通道采樣 */ ADC_ENABLE_CHANNEL(ADC_AIN1); / 使能 AIN1 為 ADC輸入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSEL = 11(復位默認值)且 ADCCON1.ST = 1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論