基于ARM的簡(jiǎn)易數(shù)據(jù)采集方案
在計(jì)算機(jī)測(cè)量、控制及信號(hào)處理中,數(shù)據(jù)采集發(fā)揮著至關(guān)重要的作用。數(shù)據(jù)采集是獲取數(shù)據(jù)的重要手段,它是從傳感器或其他待測(cè)設(shè)備等模擬或數(shù)字被測(cè)單元中自動(dòng)采集信息的過程。而采用ARM內(nèi)部的A/D轉(zhuǎn)換資源,具有轉(zhuǎn)換速度較高、工作可靠、設(shè)計(jì)的復(fù)雜度較低等優(yōu)點(diǎn)。同時(shí), ARM還具有體積小、運(yùn)算速度高,A/D轉(zhuǎn)換分辨率較高的特性,使ARM得到了廣泛的應(yīng)用。本文利用ATMEL公司ARM7系列中的 AT91M55800A設(shè)計(jì)了一個(gè)簡(jiǎn)易的數(shù)據(jù)采集方案。該方案具有結(jié)構(gòu)簡(jiǎn)單、開發(fā)容易,可靠性強(qiáng)、價(jià)格低廉等特點(diǎn),有一定的實(shí)用價(jià)值。
1 數(shù)據(jù)采集方案的結(jié)構(gòu)和功能
方案結(jié)構(gòu)如圖1所示。
該方案是由接收、A/D轉(zhuǎn)換和處理、輸出3部分組成。本方案以AT91M55800A為核心,該芯片是一個(gè)高性能的32位處理芯片,內(nèi)部有一個(gè)8選1的模擬通道,一個(gè)10位的A/D轉(zhuǎn)換通道。預(yù)處理電路將傳感器拾取的信號(hào)進(jìn)行隔離放大和濾波至A/D轉(zhuǎn)換所需0~3 V,處理過的模擬信號(hào)通過AT91M55800A中的A/D轉(zhuǎn)換通道變成數(shù)字信號(hào),并根據(jù)要求進(jìn)行相應(yīng)的處理,最后由液晶顯示器輸出。同時(shí),本方案使用 Flash存儲(chǔ)器作為程序存儲(chǔ)器用于保存數(shù)據(jù)。
2 硬件組成
AT91M55800A是ATMEL公司基于ARM7TDMI核的AT91的 16/32位微控制器家族成員。它通過完全可編程的外部總線接口直接連到片外存儲(chǔ)器,使讀或?qū)懖僮髯羁炜梢赃_(dá)到一個(gè)時(shí)鐘周期,通過將帶有片內(nèi)SRAM的 ARM7TDMI處理器核、多種外圍功能模塊、模擬接口和低功耗振蕩器集成于單一硅片。AT91M55800A為低功耗應(yīng)用提供了一個(gè)高度靈活和高性價(jià)比的解決方案。其主要特點(diǎn)如下:
a)集成了ARM7TDMI ARM Thumb處理器核,高性能的32位RISC體系結(jié)構(gòu),高代碼密度的16位指令集,嵌入式ICE;
b)8 kB片內(nèi)SRAM,32位數(shù)據(jù)總線寬度,單時(shí)鐘周期訪問,方案可最大擴(kuò)展64 MB存儲(chǔ)器,軟件可編程的8位或16位外部數(shù)據(jù)總線;
c)主/從式SPI接口,8位~16位可編程數(shù)據(jù)長(zhǎng)度,4個(gè)外部從芯片選擇;
d)可編程的看門狗電路,提高方案的安全可靠性;
e)58個(gè)可編程I/O口線,擴(kuò)展了輸入輸出口線;
f)先進(jìn)電源管理控制器,具有正常、等待、慢速、待機(jī)和掉電方式;
g)8優(yōu)先級(jí)、可單獨(dú)屏蔽的向量中斷控制器,6通道16位定時(shí)器/計(jì)數(shù)器,3個(gè)USART,每個(gè)USART有2個(gè)專用的PDC通道;
h)8通道10位A/D轉(zhuǎn)換器,2通道10位D/A轉(zhuǎn)換器;
i) 采用片內(nèi)主振蕩器和PLL倍頻的時(shí)鐘產(chǎn)生器,采用片內(nèi)32 kHz振蕩器的實(shí)時(shí)時(shí)鐘。
圖2為方案的實(shí)際應(yīng)用電路。
該芯片中含有兩個(gè)完全相同的4通道10位A/D轉(zhuǎn)換器,可組成一個(gè)8通道10位A/D轉(zhuǎn)換器。每個(gè)A/D轉(zhuǎn)換器具有 4個(gè)模擬輸入引腳和數(shù)字觸發(fā)輸入引腳,并提供一個(gè)AIC的中斷信號(hào)。兩個(gè)A/D轉(zhuǎn)換器共享模擬電源引腳和參考電壓輸入引腳。每一個(gè)通道可被單獨(dú)地使能或禁止,并具有自己的數(shù)據(jù)寄存器。A/D轉(zhuǎn)換器可以配置為在轉(zhuǎn)換序列后自動(dòng)進(jìn)入睡眠
模式,并可由軟件、T/D或外部信號(hào)來(lái)觸發(fā)。
由于AT91M55800A內(nèi)部不帶片內(nèi)程序存儲(chǔ)器,需要對(duì)方案外擴(kuò)[1] Flash存儲(chǔ)器作為程序存儲(chǔ)器用于存放程序代碼、常量表及掉電后需要保存的數(shù)據(jù)。AT91M55800A的總線讀寫周期最長(zhǎng)可以有8個(gè)周期的延時(shí),要求 Flash存儲(chǔ)器的最低讀速度不低于該速度。考慮到方案的執(zhí)行速度和程序大小,選用訪問速度為70 ns的HY29LV160(芯片容量是1 M×16 bit共2 MB),基本上能夠滿足方案要求。
該系統(tǒng)中接入AD590[2]作為溫度傳感器,該器件以電流作為輸出量來(lái)指示溫度,并且將得到的信號(hào)經(jīng)過放大器的緩沖隔離得到一個(gè)與溫度成正比的電壓,從而實(shí)現(xiàn)對(duì)溫度的測(cè)量。
3 A/D轉(zhuǎn)換編程
在AT91M55800A中,兩個(gè)A/D轉(zhuǎn)換器獨(dú)立工作,每個(gè)A/D轉(zhuǎn)換器只能讀取一個(gè)通道的A/D轉(zhuǎn)換器值。此程序讓用戶指定哪一個(gè)通道工作,然后讀取指定通道的值,并顯示出來(lái)。由于A/D轉(zhuǎn)換器的精度有10位和8位,這里設(shè)置為10位,因此獲得的數(shù)據(jù)范圍在0~3FF之間。
A/D轉(zhuǎn)換器的工作過程不同于一般的外圍設(shè)備。初始化后,必須有一個(gè)觸發(fā)命令高速A/D轉(zhuǎn)換器進(jìn)行采集,此時(shí)A/D轉(zhuǎn)換器對(duì)其激活的某一個(gè)通道上的模擬信號(hào)進(jìn)行采樣、保持,然后轉(zhuǎn)換成數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)寄存器中。用戶可以從狀態(tài)寄存器中了解到A/D轉(zhuǎn)換器是否已經(jīng)轉(zhuǎn)換完成,然后通過讀取數(shù)據(jù)寄存器得到A/D 轉(zhuǎn)換后的數(shù)值。
A/D轉(zhuǎn)換程序流程圖見圖3。
對(duì)A/D轉(zhuǎn)換器進(jìn)行編程,使用AT91庫(kù)(在/pe-riph/adc目錄下),與A/D轉(zhuǎn)換器相關(guān)的代碼部分[3]如下:
a)adc.h:A/D轉(zhuǎn)換器用戶接口結(jié)構(gòu)定義StructADC、控制寄存器ADC-CR、模式寄存器ADC-MR和其他一些重要寄存器的各個(gè)重要位的定義、A/D轉(zhuǎn)換器中斷服務(wù)程序函數(shù)定義。
b)Lid_adc.h:A/D轉(zhuǎn)換器描述符定義、庫(kù)函數(shù)的定義。
e)Lid_adc.c:庫(kù)函數(shù)的詳細(xì)代碼。包括:初始化ADC at91_adc_open、關(guān)閉ADC at91_adc_close、獲得狀態(tài)寄存器的值at91_adc_get_status、設(shè)置控制寄存器的值at91_adc_trig_cmd、讀取A/D轉(zhuǎn)換的值at91_adc_read、打開指定的A/D轉(zhuǎn)換通道at91_adc_channel_open、關(guān)閉指定的A/D轉(zhuǎn)換通道 at91_adc_channel_close、獲取通道開和關(guān)的狀態(tài)at91_adc_channel_geI_status等。
4 結(jié)束語(yǔ)
本文介紹了一個(gè)基于ARM7的數(shù)據(jù)采集方案。該方案通過硬件的具體設(shè)計(jì)和軟件編程實(shí)現(xiàn)了預(yù)期的目標(biāo)。利用ARM進(jìn)行數(shù)據(jù)采集可以使方案更穩(wěn)定,而且可以達(dá)到功耗小、性能高的效果,適合在多種工業(yè)場(chǎng)合中應(yīng)用。
評(píng)論