周六上午_蘇上程實驗一_第1頁
周六上午_蘇上程實驗一_第2頁
周六上午_蘇上程實驗一_第3頁
周六上午_蘇上程實驗一_第4頁
周六上午_蘇上程實驗一_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、2.4 A/D 接口實驗一、實驗?zāi)康牧私庠?linux 環(huán)境下對S3C2410的8 通道10 位A/D 的操作與控制。二、實驗內(nèi)容學(xué)習(xí) A/D 接口原理,了解實現(xiàn)A/D 系統(tǒng)對于系統(tǒng)的硬件要求。閱讀ARM文檔,掌握ARM 的A/D 相關(guān)寄存器的功能,熟悉ARM 系統(tǒng)硬件的A/D 相關(guān)接口。利用外部模擬信號編程實現(xiàn)ARM 循環(huán)全部前4 路通道,并且在超級終端上顯示。三、預(yù)備知識有 C 語言基礎(chǔ)。掌握在 Linux 下常用編輯器的使用。掌握 Makefile 的編寫和使用。掌握 Linux 下的程序編譯與交叉編譯過程。四、實驗設(shè)備及工具硬件:UP-NETARM2410-S:PC 機操作系統(tǒng)REDH

2、實驗、PC 機Pentium 500 以上, 硬盤10G 以上。INUX 9.0ARM-LINUX 開發(fā)環(huán)境五、實驗原理1、A/D 轉(zhuǎn)換器A/D 轉(zhuǎn)換器是模擬信號源和CPU 之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計算機和數(shù)字系統(tǒng)進行處理、許多其他領(lǐng)域中,A/D 轉(zhuǎn)換是不可缺少的。、控制和顯示。在工業(yè)控制和及A/D 轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計數(shù)型、并行比較型、電壓頻率型,主要應(yīng)根據(jù)使用場合的具體要求,按照轉(zhuǎn)換速度、精度、價格、功能以及接口條件等選擇何種類型。常用的有以下兩種:雙積分型的 A/D 轉(zhuǎn)換器來決定雙積分式也稱二重積分式,其實質(zhì)是測量和比較兩個積

3、分的時間,一個是對模擬輸入電壓積分的時間T0,此時間往往是固定的;另一個是以充電后的電壓為初值,對參考電源Vref反向積分,積分電容被放電至零所需的時間T1。模擬輸入電壓Vi 與參考電壓VRef 之比,等于上述兩個時間之比。由于VRef 、T0 固定,而放電時間T1 可以測出,因而可計算出模擬輸入電壓的大小(VRef 與Vi 符號相反)。由于T0、VRef 為已知的固定常數(shù),因此反向積分時間T1 與輸入模擬電壓Vi 在T0 時間內(nèi)的平均值成正比。輸入電壓Vi 愈高,VA 愈大,T1 就愈長。在T1 開始時刻,控制邏輯同時打開計數(shù)器的控制門開始計數(shù),直到積分器恢復(fù)到零電平時,計數(shù)停止。則計數(shù)器所

4、計出的數(shù)字即正比于輸入電壓Vi 在T0 時間內(nèi)的平均值,于是完成了一次A/D 轉(zhuǎn)換。由于雙積分型A/D 轉(zhuǎn)換是測量輸入電壓Vi 在T0 時間內(nèi)的平均值,所以對常態(tài)干擾(串摸干擾)有很強的抑制作用,尤其對正負波形對稱的干擾信號,抑制效果更好。雙積分型的A/D 轉(zhuǎn)換器電路簡單,能力強,精度高,這是突出的優(yōu)點。但轉(zhuǎn)換速度比較慢,常用的A/D 轉(zhuǎn)換的轉(zhuǎn)換時間為毫秒級。例如12 位的積分型A/DADCETl2BC,其轉(zhuǎn)換時間為。因此適用于模擬信號變化緩慢,采樣速率要求較低,而對精度要求較高,或現(xiàn)場干擾較嚴重的場合。例如在數(shù)字電壓表中常被采用。逐次近型的 A/D 轉(zhuǎn)換器逐次 近型(也稱逐位比較式)的 A/

5、D 轉(zhuǎn)換器,應(yīng)用比積分型更為廣泛,主要由逐次 近寄存器SAR、D/A 轉(zhuǎn)換器、比較器以及時序和控制邏輯等部分組成。它的實質(zhì)是逐次把設(shè)定的SAR寄存器中的數(shù)字量經(jīng)D/A 轉(zhuǎn)換后得到電壓Vc 與待轉(zhuǎn)換模擬電壓V。進行比較。比較時,先從SAR 的最開始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過程如下:轉(zhuǎn)換前,先將SAR 寄存器各位清零。轉(zhuǎn)換開始時,控制邏輯電路先設(shè)定SAR 寄存器的最為“1”,其余位為“0”,此試探值經(jīng)D/A 轉(zhuǎn)換成電壓Vc,然后將Vc 與模擬輸入電壓Vx 比較。如果VxVc,說明SAR 最的“1”應(yīng)予保留;如果VxVc,說明SAR 該位應(yīng)予清零。然后再對SAR 寄存器的次置

6、“1”,依上述方法進行D/A 轉(zhuǎn)換和比較。如此重復(fù)上述過程,直至確定SAR 寄存器的最低位為止。過程結(jié)束后,狀態(tài)線改變狀態(tài),表明已完成一次轉(zhuǎn)換。最后,逐次 近寄存器SAR 中的內(nèi)容就是與輸入模擬量V 相對應(yīng)的二進制數(shù)字量。顯然 A/D轉(zhuǎn)換器的位數(shù)N 決定于SAR 的位數(shù)和D/A 的位數(shù)。圖2.4.1(b)表示四位A/D 轉(zhuǎn)換器的逐次 近過程。轉(zhuǎn)換結(jié)果能否準確 近模擬信號,主要取決于SAR 和D/A 的位數(shù)。位數(shù)越多,越能準確 近模擬量,但轉(zhuǎn)換所需的時間也越長。逐次 近式的 A/D 轉(zhuǎn)換器的主要特點是:轉(zhuǎn)換速度較快,在1100/s 以內(nèi),分辨率可以達18 位,特別適用于工業(yè)控制系統(tǒng)。轉(zhuǎn)換時間固定

7、,不隨輸入信號的變化而變化。能力相對積分型的差。例如,對模擬輸入信號采樣過程中,若在采樣時刻有一個干擾脈沖迭加在模擬信號上,則采樣時,包括干擾信號在內(nèi),都被采樣和轉(zhuǎn)換為數(shù)字量,這就會造成較大的誤差,所以有必要采取適當?shù)臑V波措施。2、A/D 轉(zhuǎn)換的重要指標分辨率(Resolution)分辨率反映A/D 轉(zhuǎn)換器對輸入微小變化響應(yīng)的能力,通常用數(shù)字輸出最低位(LSB)所對應(yīng)的模擬輸入的電平值表示。n 位A/D 能反應(yīng)1/2n 滿量程的模擬輸入電平。由于分辨率直接與轉(zhuǎn)換器的位數(shù)有關(guān),所以一般也可簡單地用數(shù)字量的位數(shù)來表示分辨率,即n 位二進制數(shù),最低位所具有的權(quán)值,就是它的分辨率。值得注意的是,分辨率

8、與精度是兩個不同的概念,不要把兩者相高。即使分辨率很高,也可能由于溫度漂移、線性度等原因,而使其精度不夠精度(Accuracy)精度有絕對精度(Absolute Accuracy)和相對精度(Relative Accuracy)兩種表示方法。絕對誤差:在一個轉(zhuǎn)換器中,對應(yīng)于一個數(shù)字量的實際模擬輸入電壓和理想的模擬輸入電壓之差并非是一個常數(shù)。把它們之間的差的最大值,定義為“絕對誤差”。通常以數(shù)字量的最小有效位(LSB)的分數(shù)值來表示絕對誤差,例如: 1LSB 等。絕對誤差包括量化誤差和其它所有誤差。相對誤差是指整個轉(zhuǎn)換范圍內(nèi),任一數(shù)字量所對應(yīng)的模擬輸入量的實際值與理論值之差,用模擬電壓滿量程的百

9、分比表示。例如,滿量程為10V,10 位A/D,若其絕對精度為 1/2LSB,則其最小有效位的量化其相對精度為0.048%。:9.77mV,其絕對精度為4.88mV,轉(zhuǎn)換時間(ConverTime)轉(zhuǎn)換時間是指完成一次A/D 轉(zhuǎn)換所需的時間,即由發(fā)出啟動轉(zhuǎn)換命令信號到轉(zhuǎn)換結(jié)束信號開始有效的時間間隔。轉(zhuǎn)換時間的倒數(shù)稱為轉(zhuǎn)換速率。例如AD570 的轉(zhuǎn)換時間為25us,其轉(zhuǎn)換速率為40KHz。電源靈敏度(er supply sensitivity)電源靈敏度是指A/D 轉(zhuǎn)換的供電電源的電壓發(fā)生變化時,產(chǎn)生的轉(zhuǎn)換誤差。一般用電源電壓變化1時相當?shù)哪M量變化的百分數(shù)來表示。量程量程是指所能轉(zhuǎn)換的模擬輸入

10、電壓范圍,分單極性、雙極性兩種類型。例如,單極性 量程為0+5V,0+10V,0+20V;雙極性 量程為-5+5V,-10+10V。輸出邏輯電平多數(shù)A/D 轉(zhuǎn)換器的輸出邏輯電平與TTL 電平兼容。在考慮數(shù)字量輸出與微處理的數(shù)據(jù)總線接口時,應(yīng)注意是否要三態(tài)邏輯輸出,是否要對數(shù)據(jù)進行鎖存等。工作溫度范圍由于溫度會對比較器、運算放大器、電阻網(wǎng)絡(luò)等產(chǎn)生影響,故只在一定的溫度范圍內(nèi)才能保證額定精度指標。一般A/D 轉(zhuǎn)換器的工作溫度范圍為(0700C),品的工作溫度范圍為(-55C)ARM 自帶的十位A/D 轉(zhuǎn)換器ARM S3C2410自帶一個路10 位A/D 轉(zhuǎn)換器,并且支持觸摸屏功能。ARM2410

11、開發(fā)板只用作3 路A/D 轉(zhuǎn)換器,其最大轉(zhuǎn)換率為500K,非線性度為正負.5 位,其轉(zhuǎn)換時間可以通過下式計算:如果系統(tǒng)時鐘為50MHz,比例值為49,則為A/D 轉(zhuǎn)換器頻率50 MHz/(49+1)= 1 MHz轉(zhuǎn)換時間1/(1 MHz / 5cycles) = 1/200 kHz(相當于5us)= 5 us表2.4.1 采樣控制寄存器的設(shè)置ADCCON位描述初始設(shè)置EC15End of converflag (read only). 0 = A/D converin pros1 = End of A/D conver0PRSCEN14A/D convertrescaler enable. 0

12、 = Disable1 = Enable0PRSCVL13:6A/D convertrescaler value. Data value: 1 255Notet divifactor is (N+1) when the prescaler value isN.0 xFFSEL_MUX5:3og inphannel select. 000 = AIN 0 001 = AIN 1010 = AIN 2011 = AIN 3100 = AIN 4101 = AIN 5110 = AIN 6111 = AIN 7 (XP)0STDBM2Standby mode select.0 = Normal op

13、eration mode 1 = Standby mode1READ_1 START1A/D converstart by read.0寄存器地址讀/寫描述復(fù)位值A(chǔ)DCCON0 x58000000R/WADC 控制寄存器0 x3FC4該寄存器的0 位是轉(zhuǎn)換使能位,寫1 表示轉(zhuǎn)換開始。1 位是讀操作使能轉(zhuǎn)換,寫表示轉(zhuǎn)換在讀操作時開始。3、4、5 位是通道號。13:6位為AD 轉(zhuǎn)換比例因子。14 位為比例因子有效位,15 位為轉(zhuǎn)換標志位(只讀)。ADCDAT0:轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器。該寄存器的十位表示轉(zhuǎn)換后的結(jié)果,全為1 時為滿量程3.3 伏。A/D 轉(zhuǎn)換器在擴展板的連接A/D 轉(zhuǎn)換器在擴展板的接法

14、如圖2.4.2 所示,前三路通過電位器接到3.3v 電源上。六、程序分析1、關(guān)鍵代碼分析由于編譯開發(fā)板內(nèi)核時直接把ad 驅(qū)動加入到內(nèi)核里面,對用戶的只是下面的一個文件結(jié)構(gòu)。在用戶程序里只需要用到open、 read、 write、 release 等內(nèi)核函數(shù)即可。s file_operations s3c2410_fops = owner: THIS_MODULE, open: s3c2410_adc_open, read: s3c2410_adc_read, write:s3c2410_adc_write,release: s3c2410_adc_release,;ic struct下面對驅(qū)

15、動部分重要函數(shù)進行說明。ad 驅(qū)動在內(nèi)核里的代碼放到了本次實驗的src文件下,s3c2410.h_chip.h 里為arm2410 頭文件s3c2410.h 初始化ADC 的部分。所有代碼也可以到內(nèi)核里面去閱讀。關(guān)于驅(qū)動知識的基本介紹請見第4 章第一小節(jié),本節(jié)只作為應(yīng)用實驗的簡單例子。sics3c2410_adc_open(struct inode *inode, struct file *file)init_MUTEX(&adcdev.lock); init_waitqueue_head(&(adcdev.wait); adcdev.channel=0; adcdev.prescale=0

16、xff;MOD_INC_USE_COUNT;DPRK( adc openedn);return 0; /AD 通道和比例因子初始化寄存器地址讀/寫描述復(fù)位值A(chǔ)DCDAT00 x5800000CRADC轉(zhuǎn)換數(shù)據(jù)寄存器-0 = Disable start by read operation1 = Enable start by read operationENABLE_START0A/D conver starts by setting this bit. If READ_START is enabled, this value is not valid.0 = No operation 1 =

17、A/D conver starts and this bit iscleared after the start-up.0s pic ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t *)data; if(count!=sizeof(data)/error input data sizeDPRK(the size of input data must be %dn, sizeof(data);return 0;copy_from_user(&data, buffer, co

18、unt); adcdev.channel=ADC_WRITE_GETCH(data); adcdev.prescale=ADC_WRITE_GETPRE(data);DPRK(set adc channel=%d, prescale=0 x%xn, adcdev.channel, adcdev.prescale);return count; /告訴內(nèi)核驅(qū)動讀哪一個通道的數(shù)據(jù)和設(shè)置比例因子 #define START_ADC_AIN(ch, prescale) do ADCCON = PRESCALE_EN | PRSCVL(prescale) | ADC_INPUT(ch) ; ADCCON

19、|= ADC_START; while(0)/PRESCALE_EN/ADC_INPUT14 使位比例因子有效;PRSCVL6 位設(shè)置比例因子;3 位選擇通道;/ADCCON |= ADC_START; ADCCON 0 為置1,準備數(shù)據(jù)sic ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *pret = 0;)if (down_erruptible(&adcdev.lock)return -ERESTARTSYS; START_ADC_AIN(adcdev.channel, adc

20、dev.prescale);erruptible_sleep_on(&adcdev.wait); ret = ADCDAT0;ret &= 0 x3ff; /把數(shù)據(jù)寄存器內(nèi)容放入變量retDPRK(AIN%d = 0 x%04x, %dn, adcdev.channel, ret, ADCCON & 0 x80 ? 1:0);copy_to_user(buffer, (char *)&ret, sizeof(ret);/把ret 變量的內(nèi)容傳給用戶緩沖區(qū)up(&adcdev.lock); return sizeof(ret); /由內(nèi)核通道數(shù)據(jù)后把數(shù)據(jù)放回用戶區(qū)main.c 的代碼如下:/*

21、by threewater */#include #include #include #include #include #include #include #include s3c2410-adc.h#define ADC_DEV /dev/adc/0raws sicicadc_fd = -1;init_ADdevice(void)if(adc_fd=open(ADC_DEV, O_RDWR)0)prf(Error opening %s adc devicen, ADC_DEV);return -1;sicGetADresult(channel)PRESCALE=0XFF;data=ADC_

22、WRITE(channel, PRESCALE); write(adc_fd, &data, sizeof(data); read(adc_fd, &data, sizeof(data); return data;s sicstop=0;ic void* comMonitor(void* data)getchar(); stop=1; return NULL;main(void)i; float d; pthread_tvoid * retval;/set s3c44b0 AD register and start AD if(init_ADdevice()0)return -1;/* Cre

23、ate the threads */pthread_create(, NULL, comMonitor, 0);prf(nPress Enter key exit!n);while( stop=0 )for(i=0; i=2; i+)/采樣02 路A/D 值d=(float)GetADresult(i)*3.3)/1024.0;prf(a%d=%8.4ft,i,d);usleep(1);prf(r);/* Wait until producer and consumer finish. */pthread_join(, &retval);prf(n);return 0;七、實驗步驟1、閱讀理解

24、源碼進入/arm2410s/exp/basic/04_ad 目錄,使用vi 編輯器或其他編輯器閱讀理解源代碼。2、編譯應(yīng)用程序運行make 產(chǎn)生ad 可執(zhí)行文件rootzxt /# cd /arm2410s/exp/basic/04_ad/rootzxt 04_ad# makearmv4 armv4armv4known-linux-gcc -c -o main.o main.cknown-linux-gcc -o ./bin/ad main.o -lpthread known-linux-gcc -o ad main.o -lpthreadrootzxt 04_ad# lsad hardwar

25、e.h main.o Makefiak s3c2410-adc.hbain.c Makefile readme.txt src3、換到調(diào)試終端窗口,使用NFS mount 開發(fā)主機的/arm2410s 到/host 目錄。rootzxt root#/mnt/yaffs mount -t nfs -o nolock 192.168.0.56:/arm2410s /host /mnt/yaffscd /host/exp/basic/04_ad/ /host/exp/basic/04_ad./adPress Enter key exit!a0= 0.0032 a1= 3.2968 a2= 3.2968可以通過調(diào)節(jié)開發(fā)板上的三個黃色的電位器,來查看a0、a1

溫馨提示

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

評論

0/150

提交評論