嵌入式ad接口試驗(yàn)_第1頁(yè)
嵌入式ad接口試驗(yàn)_第2頁(yè)
嵌入式ad接口試驗(yàn)_第3頁(yè)
嵌入式ad接口試驗(yàn)_第4頁(yè)
嵌入式ad接口試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、DV旅入式實(shí)驗(yàn)平臺(tái)、P(MPentium 500以上,硬盤(pán)105上。軟件: PCI操作系統(tǒng) REDHAT LINUX 9.0 + MINICOMb ARM-LINUXF發(fā)環(huán)境五、實(shí)驗(yàn)原理1、 A/D 轉(zhuǎn)換器A/D轉(zhuǎn)換器是模擬信號(hào)源和CPU間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲(chǔ)、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D轉(zhuǎn)換是不可缺少的。A/D轉(zhuǎn)換器有以下類(lèi)型:逐位比較型、積分型、計(jì)數(shù)型、并行比較型、電壓-頻率型,主要應(yīng)根據(jù)使用場(chǎng)合的具體要求,按照轉(zhuǎn)換速度、精度、價(jià)格、功能以及接口條件等因素來(lái)決定選擇何種類(lèi)型。常用的有以下兩種

3、:? 雙積分型的A/D 轉(zhuǎn)換器 雙積分式也稱(chēng)二重積分式,其實(shí)質(zhì)是測(cè)量和比較兩個(gè)積分的時(shí)間,一個(gè)是對(duì)模擬輸入電壓積分的時(shí)間T0, 此時(shí)間往往是固定的;另一個(gè)是以充電后的電壓為初值,對(duì)參考電源Vref 反向積分,積分電容被放電至零所需的時(shí)間T1。 模擬輸入電壓Vi與參考電壓VRe之比,等 于上述兩個(gè)時(shí)間之比。由于Mef、To固定,而放電時(shí)間可以測(cè)出,因而可計(jì)算出模擬輸入電壓的大?。╒ Ref 與 Vi 符 號(hào)相反 ) 。由于T0、VRef為已知的固定常數(shù),因此反向積分時(shí)間 與輸入模擬電壓Vi在To時(shí)間內(nèi)的平 均值成正比。輸入電壓 V愈高,VA愈大,就愈長(zhǎng)。在開(kāi)始時(shí)刻,控制邏輯同時(shí)打開(kāi)計(jì)數(shù)器的控制門(mén)

4、開(kāi)始計(jì)數(shù),直到積分器恢復(fù)到零電平時(shí),計(jì)數(shù)停止。則計(jì)數(shù)器所計(jì)出的數(shù)字即正比于輸入電壓Vi 在 To 時(shí) 間內(nèi)的平均值,于是完成了一次A/D 轉(zhuǎn) 換。由于雙積分型A/D轉(zhuǎn)換是測(cè)量車(chē)入電壓 Vi在To時(shí)間內(nèi)的平均值,所以對(duì)常態(tài)干擾(串摸干 擾)有很強(qiáng)的抑制作用,尤其對(duì)正負(fù)波形對(duì)稱(chēng)的干擾信號(hào),抑制效果更好。雙積分型的A/D 轉(zhuǎn) 換器電路簡(jiǎn)單,抗干擾能力強(qiáng),精度高,這是突出的優(yōu)點(diǎn)。但轉(zhuǎn)換速度比較慢 , 常 ? 逐次逼近型的A/D 轉(zhuǎn)換器用逐次的逼近型( 也稱(chēng)逐位比較式) 的 A/D 轉(zhuǎn) 換器,應(yīng)用比積分型更為廣泛,其原理框圖如圖2.4.1 所 示, 主要由逐次逼近寄存器SAR、 D/A 轉(zhuǎn) 換器、 比較

5、器以及時(shí)序和控制邏輯等部分組A它的實(shí)質(zhì)是逐次把設(shè)定的 SAFW存器中的數(shù)字量經(jīng)DA轉(zhuǎn)換后得到電壓Vc與待轉(zhuǎn)換 /模擬電壓V。進(jìn)行比較。比較時(shí),先從 SAR勺最高位開(kāi)始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過(guò)程如下:轉(zhuǎn)換前,先將SAR?存器各位清零。轉(zhuǎn)換開(kāi)始時(shí),控制邏輯電路先設(shè)定SAR?存器的最高 位為“1”,其余位為“ 0”,此試探值經(jīng)DA轉(zhuǎn)換成電壓Vc,然后將Vc與模擬輸入電壓V比較。 如果VxVc,說(shuō)明SARt高位的“ 1”應(yīng)予保留;如果 Vx<Vc,說(shuō)明SAR亥位應(yīng)予清零。 然后 再對(duì)SAR?存器的次高位置“ 1”依上述方法進(jìn)行D/A轉(zhuǎn)換和比較。如此重復(fù)上述過(guò)程, 直至確

6、 定SAR?存器的最低位為止。過(guò)程結(jié)束后,狀態(tài)線(xiàn)改變狀態(tài),表明已完成一次轉(zhuǎn)換。最后,逐次逼近寄存器SA珅的內(nèi)容就是與輸入模擬量 V1對(duì)應(yīng)的二進(jìn)制數(shù)字量。顯然AD轉(zhuǎn)換器的位數(shù)N 決定于SAR勺位數(shù)和D/A的位數(shù)。圖2.4.1(b)表示四位A/D轉(zhuǎn)換器的逐次 逼近過(guò)程。轉(zhuǎn)換結(jié)果 能否準(zhǔn)確逼近模擬信號(hào),主要取決于SA林口 DA的位數(shù)。位數(shù)越多,越能準(zhǔn)確逼近模擬量,但轉(zhuǎn)換所需的時(shí)間也越長(zhǎng)。z 逐次逼近式的A/D轉(zhuǎn)換器的主要特點(diǎn)是:轉(zhuǎn)換速度較快,在1100/因以?xún)?nèi),分辨率可以達(dá)18位,特別適用于工業(yè)控制系統(tǒng)。轉(zhuǎn) 換 時(shí)間固定,不隨輸入信號(hào)的變化而變化。抗干擾能力相對(duì)積分型的差。例如,對(duì)模擬輸入信號(hào)采樣過(guò)

7、程中,若在采樣時(shí)刻有一個(gè)干擾脈沖迭加在模擬信號(hào)上,則采樣時(shí),包括干擾信號(hào)在內(nèi),都被采樣和轉(zhuǎn)換為數(shù)字量,這就會(huì)造成較大的誤差,所以有必要采取適當(dāng)?shù)臑V波措施。瓶M近式A/W寰裁,擊山)逐次遇近這例芟及房圖2.4.1逐次逼近式A/D轉(zhuǎn)換器2、A/D轉(zhuǎn)換的重要指標(biāo)?分辨率(Resolution)分辨率反映A/D轉(zhuǎn)換器對(duì)輸入微小變化響應(yīng)的能力,通常用數(shù)字輸出最低位(LSB)所對(duì)應(yīng)的模擬輸入的電平值表示。n位A/D能反應(yīng)1/2 n滿(mǎn)量程的模擬輸入電平。由于分辨率直接與轉(zhuǎn)換器的位數(shù)有關(guān),所以一般也可簡(jiǎn)單地用數(shù)字量的位數(shù)來(lái)表示分辨率,即n位二進(jìn)制數(shù), 最低位所具有的權(quán)值,就是它的分辨率。值得注意的是,分辨率與

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

9、與理論值之差,用模擬電壓滿(mǎn)量程的百分比表示。例如, 滿(mǎn)量程為10V, 10 位 A/D 芯 片, 若其絕對(duì)精度為± 1/2LSB, 則其最小有效位的量化單位:9.77mV,其絕對(duì)精度為=4.88mV,其相對(duì)精度為0.048%。z 轉(zhuǎn)換時(shí)間(Conversion Time)轉(zhuǎn)換時(shí)間是指完成一次A/D 轉(zhuǎn)換所需的時(shí)間,即由發(fā)出啟動(dòng)轉(zhuǎn)換命令信號(hào)到轉(zhuǎn)換結(jié)束信號(hào)開(kāi)始有效的時(shí)間間隔。轉(zhuǎn)換時(shí)間的倒數(shù)稱(chēng)為轉(zhuǎn)換速率。例如AD570的轉(zhuǎn)換時(shí)間為25us,其 轉(zhuǎn)換速率為40KHz。z 電源靈敏度(power supply sensitivity)電源靈敏度是指A/D 轉(zhuǎn) 換芯片的供電電源的電壓發(fā)生變化時(shí),

10、產(chǎn)生的轉(zhuǎn)換誤差。一般用電源電壓變化1 時(shí)相當(dāng)?shù)哪M量變化的百分?jǐn)?shù)來(lái)表示。z 量程量程是指所能轉(zhuǎn)換的模擬輸入電壓范圍,分單極性、雙極性?xún)煞N類(lèi)型。例如,單極性量程為0+5V, 0+10V, 0+20V;雙極性 量程為-5+5V, -10+10V。z 輸出邏輯電平多數(shù)A/D轉(zhuǎn)換器的輸出邏輯電平與TTL電平兼容。在考慮數(shù)字量輸出與微處理的數(shù)據(jù)總線(xiàn)接口時(shí),應(yīng)注意是否要三態(tài)邏輯輸出,是否要對(duì)數(shù)據(jù)進(jìn)行鎖存等。z 工作溫度范圍由于溫度會(huì)對(duì)比較器、運(yùn)算放大器、電阻網(wǎng)絡(luò)等產(chǎn)生影響,故只在一定的溫度范圍內(nèi)才能 保證額定精度指標(biāo)。 一般A/D轉(zhuǎn)換器的工作溫度范圍為(0700C)軍用品的工作溫度范圍為(-55+1250

11、C)? ARM自帶的十位A/D 轉(zhuǎn)換ARM S3c241芯片自帶一個(gè)8路10位A/D轉(zhuǎn)換器,并且支持觸摸屏功能。 ARM241葉發(fā)板 只 用作3路A/D轉(zhuǎn)換器,其最大轉(zhuǎn)換率為500K,非線(xiàn)性度為正負(fù)1 .5位,其轉(zhuǎn)換時(shí)間可以 通過(guò)下 式計(jì)算:如果系統(tǒng)時(shí)鐘為 50MHz比例值為49,則為A/D 轉(zhuǎn)換器頻率=50 MHz/(49+1) = 1 MHz轉(zhuǎn)換時(shí)間=1/(1 MHz / 5cycles) = 1/200 kHz (相當(dāng)于 5us) = 5 us表2.4.1采樣控制寄存器的設(shè)置寄存器地址讀/寫(xiě)描述復(fù)位值A(chǔ)DCCON0x58000000R/WADC 控制寄存器0X3FC4表2.4.2采樣控制

12、寄存器的位描述ADCCON位描述初始設(shè)置ECFLG15End of conversion flag (read only).0 = A/D conversion in process0PRSCEN141 = End of A/D conversion A/D converter prescaler enable.0 = Disable0PRSCVL13:61 = EnableA/D converter prescaler value.Data value: 1 255Note that division factor is (N+1) when the prescaler value is0x

13、FFSEL_MUX5:3Analog input channel select. 000 = AIN 0001 = AIN 1010 = AIN 2011 = AIN 3100 = AIN 4101 = AIN 50STDBM2Standby mode select.0 = Normal operation mode1READ_START11 = Standby mode A/D conversion start by read.0 = Disable start by read operation0ENABLE_START01 = Enable start by read operation

14、 A/D conversion starts by setting this bit.If READ_START is enabled, this value is not valid.0 = No operation 1 = A/D conversion starts and this bit is0該寄存器的0位是轉(zhuǎn)換使能位,寫(xiě)1表示轉(zhuǎn)換開(kāi)始。1位是讀操作使能轉(zhuǎn)換,寫(xiě)1表示轉(zhuǎn)換在讀操作時(shí)開(kāi)始。3、4、5位是通道號(hào)。13:6位為AD專(zhuān)換比例因子。14位為比例因子有效位,15位為轉(zhuǎn)換標(biāo)志位(只讀)表2.4.3A/D轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器的設(shè)置寄存器地址讀/寫(xiě)描述復(fù)位值A(chǔ)DCDAT00x580000

15、0cRADC轉(zhuǎn)換數(shù)據(jù)寄存器-ADCDAT-0轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器。該寄存器的十位表示轉(zhuǎn)換后的結(jié)果,全為1時(shí)為滿(mǎn)量程3.3 伏。? A/D轉(zhuǎn)換器在擴(kuò)展板的連接A/D轉(zhuǎn)換器在擴(kuò)展板的接法如圖 2.4.2所示,前三路通過(guò)電位器接到3.3v電源上。圖2.4.2 A/D轉(zhuǎn)換器在擴(kuò)展板上的接法六、程序分析(關(guān)鍵代碼分析)ad驅(qū)動(dòng)對(duì)用戶(hù)來(lái)說(shuō)只是下面的一個(gè)文件結(jié)構(gòu)。在用戶(hù)程序里只需要用到open、read、write、release等內(nèi)核函數(shù)即可。本實(shí)驗(yàn)采用的是模塊方式加載,可以在實(shí)驗(yàn)箱的 /mnt/yaffs/ad/ 中找到AD的驅(qū)動(dòng)程序。static struct file_operations s3c24

16、10_fops = owner:THIS_MODULE,open: s3c2410_adc_open, read:s3c2410_adc_read,write:s3c2410_adc_write,release: s3c2410_adc_release,下面我們對(duì)驅(qū)動(dòng)部分重要函數(shù)進(jìn)行說(shuō)明。ad驅(qū)動(dòng)在內(nèi)核里的代碼我們放到了本次實(shí)驗(yàn)的src文件下,s3c2410.h_chip.h 里為arm2410頭文件s3c2410.h初始化ADC勺部分。所有 代碼 也可以到內(nèi)核里面去閱讀。關(guān)于驅(qū)動(dòng)知識(shí)的基本介紹請(qǐng)見(jiàn)第4章第一小節(jié),本節(jié)只作 為應(yīng)用實(shí)驗(yàn)的簡(jiǎn)單例子。-static int s3c2410_adc_

17、open(struct inode *inode, struct file *file)-init_MUTEX(&adcdev.lock);init_waitqueue_head(&(adcdev.wait);adcdev.channel=0; adcdev.prescale=0xff;MOD_INC_USE_COUNT;DPRINTK( "adc opened'n");return 0; /AD 通道和比例因子初始化static ssize_t s3c2410_adc_write(struct file *file, const char *buf

18、fer, size_t count, loff_t * ppos)int data;if(count!=sizeof(data)/error input data sizeDPRINTK("the size of input data must be %dn", sizeof(data);return 0;copy_from_user(&data, buffer, count);adcdev.channel=ADC_WRITE_GETCH(data);adcdev.prescale=ADC_WRITE_GETPRE(data);DPRINTK("set a

19、dc channel=%d, prescale=0x%xn", adcdev.channel, adcdev.prescale);return count;/告訴內(nèi)核驅(qū)動(dòng)讀哪一個(gè)通道的數(shù)據(jù)和設(shè)置比例因子#define START_ADC_AIN(ch, prescale) ADCCON = PRESCALE_EN | PRSCVL(prescale) | ADC_INPUT(ch) ; ADCCON |= ADC_START; while(0)/PRESCALE_EN 左移14使位比例因子有效;PRSCVL左移6位設(shè)置比例因子;ADC_INPUT_左移3 選擇通道;/ADCCON |

20、= ADC_START; ADCCON 0 為置 1,準(zhǔn)備采集數(shù)據(jù)static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos) int ret = 0;if (down_interruptible(&adcdev.lock)return -ERESTARTSYS;START_ADC_AIN(adcdev.channel, adcdev.prescale);interruptible_sleep_on(&adcdev.wait);ret = ADCDAT0;

21、ret &= 0x3ff;把數(shù)據(jù)寄存器內(nèi)容放入變量 retDPRINTK("AIN%d = 0x%04x, %dn", adcdev.channel, ret, ADCCON & 0x80 ? 1:0);copy_to_user(buffer, (char *)&ret, sizeof(ret);/把ret變量的內(nèi)容傳給用戶(hù)緩沖區(qū) up(&adcdev.lock);return sizeof(ret);/由內(nèi)核采集通道數(shù)據(jù)后把數(shù)據(jù)放回用戶(hù)區(qū)main.c的代碼如下:/*、by threewater<threewaterup->200

22、4.06.18*/#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include <fcntl.h>#include "s3c2410-adc.h"#define ADC_DEV"/dev/adc/0raw"static int adc_fd = -1;static int in

23、it_ADdevice(void)if(adc_fd=open(ADC_DEV , O_RDWR)<0)printf("Error opening %s adc devicen", ADC_DEV);return -1;static int GetADresult(int channel)int PRESCALE=0XFF;int data=ADC_WRITE(channel, PRESCALE);write(adc_fd, &data, sizeof(data);read(adc_fd, &data, sizeof(data);return data

24、;static int stop=0;static void* comMonitor(void* data)getchar();stop=1;return NULL;int main(void)int i;float d;pthread_t th_com;void * retval;/set s3c44b0 AD register and start ADif(init_ADdevice()<0) return -1;/* Create the threads */pthread_create(&th_com, NULL, comMonitor, 0);printf("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;printf("a%d=%8.4ft",i,d); usleep(1);printf("r");/* Wait until producer and consumer finish. */pthread_join(th_com, &retval);printf("n");return 0

溫馨提示

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

評(píng)論

0/150

提交評(píng)論