linux實驗報告2 4和2 5 AD與DA介面實驗

2021-08-13 20:16:26 字數 3867 閱讀 7846

班級: 082班座號: 姓名成績:

課程名稱:嵌入式linux應用程式開發標準教程

實驗專案:a/d介面實驗

一、實驗目的

了解在linux 環境下對s3c2410 晶元的8 通道10 位a/d 的操作與控制。

二、實驗內容

學習a/d 介面原理,了解實現a/d 系統對於系統的軟體和硬體要求。閱讀arm 晶元文件,

掌握arm 的a/d 相關暫存器的功能,熟悉arm 系統硬體的a/d 相關介面。利用外部模擬信

號程式設計實現arm 迴圈採集全部前4 路通道,並且在超級終端上顯示。

三、預備知識

1、有c 語言基礎。

2、掌握在linux 下常用編輯器的使用。

3、掌握makefile 的編寫和使用。

4、掌握linux 下的程式編譯與交叉編譯過程。

四、實驗裝置及工具

硬體:up-tech s2410/p270 dvp 嵌入式實驗平台、pc 機pentium 500 以上, 硬碟10g 以上。

軟體:pc 機作業系統redhat linux 9.0+minicom+arm-linux 開發環境

五、實驗原理

a/d 轉換器

a/d 轉換器是模擬訊號源和cpu 之間聯絡的介面,它的任務是將連續變化的模擬訊號轉換

為數碼訊號,以便計算機和數字系統進行處理、儲存、控制和顯示。在工業控制和資料採

集及許多其他領域中,a/d 轉換是不可缺少的。

a/d 轉換器有以下型別:逐位比較型、積分型、計數型、並行比較型、電壓-頻率型,主

要應根據使用場合的具體要求,按照轉換速度、精度、**、功能以及介面條件等因素來

決定選擇何種型別。常用的有以下兩種:

1、雙積分型的a/d 轉換器

雙積分式也稱二重積分式,其實質是測量和比較兩個積分的時間,乙個是對模擬輸入電壓

積分的時間t0,此時間往往是固定的;另乙個是以充電後的電壓為初值,對參考電源vref

反向積分,積分電容被放電至零所需的時間t1。模擬輸入電壓vi 與參考電壓vref 之比,等

於上述兩個時間之比。由於vref 、t0 固定,而放電時間t1 可以測出,因而可計算出模擬輸

入電壓的大小(vref 與vi 符號相反)。

由於t0、vref 為已知的固定常數,因此反向積分時間t1 與輸入模擬電壓vi 在t0 時間內的平

均值成正比。輸入電壓vi 愈高,va 愈大,t1 就愈長。在t1 開始時刻,控制邏輯同時開啟計

數器的控制門開始計數,直到積分器恢復到零電平時,計數停止。則計數器所計出的數字

即正比於輸入電壓vi 在t0 時間內的平均值,於是完成了一次a/d 轉換。

由於雙積分型a/d 轉換是測量輸入電壓vi 在t0 時間內的平均值,所以對常態干擾(串摸幹

擾)有很強的抑制作用,尤其對正負波形對稱的干擾訊號,抑制效果更好。

雙積分型的a/d 轉換器電路簡單,抗干擾能力強,精度高,這是突出的優點。但轉換速度

比較慢,常用的a/d 轉換晶元的轉換時間為毫秒級。例如12 位的積分型a/d 晶元adcetl2bc,

其轉換時間為lms。因此適用於模擬訊號變化緩慢,取樣速率要求較低,而對精度要求較

高,或現場干擾較嚴重的場合。例如在數字電壓表中常被採用。

2、逐次逼近型的a/d 轉換器

逐次逼近型(也稱逐位比較式)的a/d 轉換器,應用比積分型更為廣泛,其原理框圖如圖

2.4.1 所示,主要由逐次逼近暫存器sar、d/a 轉換器、比較器以及時序和控制邏輯等部分

組成。它的實質是逐次把設定的sar 暫存器中的數字量經d/a 轉換後得到電壓vc 與待轉換

模擬電壓v。進行比較。比較時,先從sar 的最高位開始,逐次確定各位的數碼應是「1」還

是「0」,其工作過程如下:

轉換前,先將sar 暫存器各位清零。轉換開始時,控制邏輯電路先設定sar 暫存器的最高

位為「1」,其餘位為「0」,此試探值經d/a 轉換成電壓vc,然後將vc 與模擬輸入電壓vx 比

較。如果vx≥vc,說明sar 最高位的「1」應予保留;如果vx然後再對sar 暫存器的次高位置「1」,依上述方法進行d/a 轉換和比較。如此重複上述過程,

直至確定sar 暫存器的最低位為止。過程結束後,狀態線改變狀態,表明已完成一次轉換。

最後,逐次逼近暫存器sar 中的內容就是與輸入模擬量v 相對應的二進位制數字量。顯然a/d

轉換器的位數n 決定於sar 的位數和d/a 的位數。圖2.4.1(b)表示四位a/d 轉換器的逐次

逼近過程。轉換結果能否準確逼近模擬訊號,主要取決於sar 和d/a 的位數。位數越多,

越能準確逼近模擬量,但轉換所需的時間也越長。

逐次逼近式的a/d 轉換器的主要特點是:

轉換速度較快,在1—100/μs 以內,解析度可以達18 位,特別適用於工業控制系統。轉

換時間固定,不隨輸入訊號的變化而變化。抗干擾能力相對積分型的差。例如,對模擬輸

入訊號取樣過程中,若在取樣時刻有乙個干擾脈衝迭加在模擬訊號上,則取樣時,包括幹

擾訊號在內,都被取樣和轉換為數字量,這就會造成較大的誤差,所以有必要採取適當的

濾波措施。

逐次逼近式a/d 轉換器

a/d 轉換器在擴充套件板的連線

a/d 轉換器在擴充套件板的接法如圖所示,前三路通過電位器接到3.3v 電源上。

a/d 轉換器在擴充套件板上的接法

六、程式分析(關鍵**分析)

ad 驅動對使用者來說只是下面的乙個檔案結構。在使用者程式裡只需要用到open、 read、

write、 release 等核心函式即可。本實驗採用的是模組方式載入,可以在實驗箱的

/mnt/yaffs/ad/ 中找到ad 的驅動程式。

static struct file_operations s3c2410_fops = ;

下面我們對驅動部分重要函式進行說明。ad 驅動在核心裡的**我們放到了本次實驗的

src 檔案下,s3c2410.h_chip.h 裡為arm2410 標頭檔案s3c2410.h 初始化adc 的部分。所有

**也可以到核心裡面去閱讀。

static int s3c2410_adc_open(struct inode *inode, struct file *file)

//ad 通道和比例因子初始化

static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)

copy_from_user(&data, buffer, count);

adcdev.channel=adc_write_getch(data);

adcdev.prescale=adc_write_getpre(data);

dprintk("set adc channel=%d, prescale=0x%x\n", adcdev.channel, adcdev.prescale);

return count;

} //告訴核心驅動讀哪乙個通道的資料和設定比例因子

#define start_adc_ain(ch, prescale) \

dowhile(0)

//prescale_en 左移14使位比例因子有效;prscvl 左移6位設定比例因子;

//adc_input 左移3 位選擇通道;

//adccon |= adc_start; adccon 0 為置1,準備採集資料

static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)

//由核心採集通道資料後把資料放回使用者區

main.c 的**如下:

#include

#include

#include

linux實驗報告

linux作業系統實驗報告 院 系 電腦科學與工程學院 專業軟體工程 班級 130607 姓名學號 2015年 6月 15 日 實驗報告內容要求 實驗報告應包含以下內容 一 linux基本操作。二 linux系統shell程式設計。三 linux網路伺服器配置,linux資料庫應用。四 gcc的除錯...

重大linux實驗報告

linux作業系統 實驗報告 備註 1 教師在布置需撰寫實驗報告的實驗前,應先將報告書上的 實驗題目 實驗性質 實驗目的 實驗專案內容 等專案填寫完成,然後再下發給學生。2 教師在布置需撰寫報告的實驗專案時,應告知學生提交實驗報告的最後期限。3 學生應按照要求正確地撰寫實驗報告 1 在實驗報告上正確...

linux程式設計實驗報告

篇一 linux程式設計實驗報告 實驗報告 課程名稱 linux程式設計 學院 資訊科學與工程學院 專業 13計算機班級 姓名 學號 20xx年6月28日 山東科技大學教務處制 1 實驗報告 2 3 4 5 篇二 linux實驗報告六6 洛陽理工學院實驗報告 篇三 linux程式設計實驗報告 實驗一...