項(xiàng)目4嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)_第1頁(yè)
項(xiàng)目4嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)_第2頁(yè)
項(xiàng)目4嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)_第3頁(yè)
項(xiàng)目4嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)_第4頁(yè)
項(xiàng)目4嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、項(xiàng)目四、嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)項(xiàng)目四、嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)一、項(xiàng)目概況一、項(xiàng)目概況o 項(xiàng)目說(shuō)明:項(xiàng)目說(shuō)明: o 本項(xiàng)目利用ARM嵌入式微處理器與接口知識(shí),在嵌入式系統(tǒng)的集成開發(fā)環(huán)境中采用基于Linux的應(yīng)用程序設(shè)計(jì)基礎(chǔ)上設(shè)計(jì)程序并在ARM板內(nèi)燒寫開發(fā)的可執(zhí)行文件實(shí)現(xiàn)仿真月球車的測(cè)溫測(cè)距避障控制。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 設(shè)備驅(qū)動(dòng)程序?qū)?fù)雜的硬件抽象成一個(gè)結(jié)構(gòu)良好的設(shè)備,并通過(guò)提供統(tǒng)一的程序接口為系統(tǒng)的其它部分提供使用設(shè)備的能力和方法。o 設(shè)備驅(qū)動(dòng)程序(應(yīng)該只是)為系統(tǒng)的其它部分提供各種使用設(shè)備的能力,使用設(shè)備的方法應(yīng)該由應(yīng)用程序決定。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1

2、設(shè)備驅(qū)動(dòng)o Linux下對(duì)外設(shè)的訪問只能通過(guò)驅(qū)動(dòng)程序o Linux對(duì)于驅(qū)動(dòng)程序有統(tǒng)一的接口,以文件的形式定義系統(tǒng)的驅(qū)動(dòng)程序:o Open、Release、read、write、ioctlo驅(qū)動(dòng)程序是內(nèi)核的一部分,可以使用中斷、DMA等操作o驅(qū)動(dòng)程序需要在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù)二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別o 應(yīng)用程序以main函數(shù)開始,驅(qū)動(dòng)程序則沒用main函數(shù)。它以特殊的模塊初始化函數(shù)為入口。o 應(yīng)用程序從頭至尾執(zhí)行一個(gè)任務(wù),驅(qū)動(dòng)程序在完成初始化后,等待系統(tǒng)調(diào)用。o 應(yīng)用程序可以使用GLIBC等標(biāo)準(zhǔn)C函數(shù)庫(kù),驅(qū)動(dòng)程序不能使用標(biāo)

3、準(zhǔn)C函數(shù)庫(kù)。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 設(shè)備驅(qū)動(dòng)程序的分類設(shè)備驅(qū)動(dòng)程序的分類o字符設(shè)備驅(qū)動(dòng)程序字符設(shè)備驅(qū)動(dòng)程序,如各種串行接口,并行接口等。o塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序,如磁盤設(shè)備等o網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序,如網(wǎng)卡等。o雜項(xiàng)設(shè)備驅(qū)動(dòng)程序雜項(xiàng)設(shè)備驅(qū)動(dòng)程序o不屬于上述三種設(shè)備之外的一些設(shè)備,如SCSI,時(shí)鐘等。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o2.1 設(shè)備驅(qū)動(dòng)o 驅(qū)動(dòng)程序在操作系統(tǒng)中的位置驅(qū)動(dòng)程序在操作系統(tǒng)中的位置o 設(shè)備驅(qū)動(dòng)程序是內(nèi)核代碼的一部分。o驅(qū)動(dòng)程序的地址空間是內(nèi)核的地址空間。o驅(qū)動(dòng)程序的代碼直接對(duì)設(shè)備硬件(實(shí)際是設(shè)備的各種寄存器)進(jìn)行控制(實(shí)際就是讀寫操作)。o應(yīng)用程序

4、通過(guò)操作系統(tǒng)的系統(tǒng)調(diào)用執(zhí)行相應(yīng)的驅(qū)動(dòng)程序函數(shù)。中斷則直接執(zhí)行相應(yīng)的中斷程序代碼。o設(shè)備驅(qū)動(dòng)程序的file_operations結(jié)構(gòu)體的地址被注冊(cè)到內(nèi)核中的設(shè)備鏈表中。o塊設(shè)備和字符設(shè)備以設(shè)備文件的方式建立在文件系統(tǒng)中的/dev目錄下,而且每個(gè)設(shè)備都有一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 主設(shè)備號(hào)和次設(shè)備號(hào)主設(shè)備號(hào)和次設(shè)備號(hào)o 主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序o一個(gè)驅(qū)動(dòng)程序可以控制若干個(gè)設(shè)備,次設(shè)備號(hào)提供了一種區(qū)分它們的方法o系統(tǒng)增加一個(gè)驅(qū)動(dòng)程序就要賦予它一個(gè)主設(shè)備號(hào)。這一賦值過(guò)程在驅(qū)動(dòng)程序的初始化過(guò)程中o int register_chrdev(unsigned

5、 int major, const char*name,struct file_operations *fops);二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 創(chuàng)建設(shè)備節(jié)點(diǎn)o 設(shè)備已經(jīng)注冊(cè)到內(nèi)核表中,對(duì)于設(shè)備的訪問通過(guò)設(shè)備文件(設(shè)備文件與設(shè)備驅(qū)動(dòng)程序的主設(shè)備號(hào)匹配),內(nèi)核會(huì)調(diào)用驅(qū)動(dòng)程序中的正確函數(shù)o給程序一個(gè)它們可以請(qǐng)求設(shè)備驅(qū)動(dòng)程序的名字。這個(gè)名字必須插入到/dev目錄中,并與驅(qū)動(dòng)程序的主設(shè)備號(hào)和次設(shè)備號(hào)相連o使用mknod在文件系統(tǒng)上創(chuàng)建一個(gè)設(shè)備節(jié)點(diǎn)二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 設(shè)備驅(qū)動(dòng)程序的接口設(shè)備驅(qū)動(dòng)程序的接口o file_operations結(jié)構(gòu)體o 主要包括:open,

6、close(或者release),read,write,ioctl,poll,mmap等o結(jié)構(gòu)體spioc_fops將作為一個(gè)參數(shù)在注冊(cè)一個(gè)設(shè)備驅(qū)動(dòng)程序時(shí)傳遞給內(nèi)核。o內(nèi)核使用設(shè)備鏈表維護(hù)各種注冊(cè)的設(shè)備。不同類型的設(shè)備使用不同的鏈表。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備2.1 設(shè)備驅(qū)動(dòng)struct file_operations demo_fops = o完成了將驅(qū)動(dòng)函數(shù)映射為標(biāo)準(zhǔn)接口。o例如:ostatic struct file_operations demo_fops = oowner:THIS_MODULE,owrite:demo_write,oread:demo_read,oioctl:demo_i

7、octl,oopen:demo_open,orelease:demo_release,o;o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.1 設(shè)備驅(qū)動(dòng)o 設(shè)備驅(qū)動(dòng)程序的使用方法設(shè)備驅(qū)動(dòng)程序的使用方法o 應(yīng)用層使用open、close、read、write系統(tǒng)調(diào)用需要編寫應(yīng)用程序二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))oLED 電路原理圖如下所示,由此我們可以看到5 個(gè)LED 燈分別連接到6410 處理器的GPQ26 管腳上,通過(guò)輸出低電平可使LED 燈亮,高電平LED 燈滅。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LE

8、D驅(qū)動(dòng))o 驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:o#include /*Dynamic loading of modules into the kernel */o#include /*與printk()等函數(shù)有關(guān)的頭文件*/o#include /* 與文件系統(tǒng)有關(guān)的頭文件,如file_operations */o#include /*初始化相關(guān)頭文件*/o#include o#include /*與延時(shí)相關(guān)*/o#include /*與cdev 結(jié)構(gòu)相關(guān)*/二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:o#include /*與自動(dòng)創(chuàng)建設(shè)備文件相關(guān)*/

9、o#include /*與中斷相關(guān)*/o#include /*與寄存器相關(guān)*/o#include /*與IO 配置相關(guān)*/o#include /*與IO 相關(guān)*/o#include o#include /*_copy_from_user*/oMODULE_LICENSE(GPL); /*表式開放源碼,在linux/module.h 中定義*/o#define DEVICE_NAME leds /*該驅(qū)動(dòng)的設(shè)備名*/o#define DEVICE_MAJOR 231 /*該驅(qū)動(dòng)的主設(shè)備號(hào)*/o#define DEVICE_MINOR 0 /*該驅(qū)動(dòng)的從設(shè)備號(hào)*/o/* IOCTL command

10、s */o#define LED_IOC_MAGIC二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:o#define LED_IOC_WR_ON _IOW(LED_IOC_MAGIC, 0 x80, unsigned int)/LED ioctl 命令命令o#define LED_IOC_WR_OFF _IOW(LED_IOC_MAGIC, 0 x81, unsigned int) /LED ioctl 命令命令ostruct cdev *mycdev; /*定義字符設(shè)備結(jié)構(gòu)體定義字符設(shè)備結(jié)構(gòu)體*/ostruct class *myclass; /

11、*定義定義class*/odev_t devno; /*定義設(shè)備號(hào)定義設(shè)備號(hào)*/ostatic unsigned long led_table = /io 列表列表oS3C64XX_GPQ(2),oS3C64XX_GPQ(3),oS3C64XX_GPQ(4),oS3C64XX_GPQ(5),oS3C64XX_GPQ(6),o;二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:ostatic long uptech_leds_ioctl(ostruct file *file,ounsigned int cmd,ounsigned long arg)oo

12、int ret;ounsigned long *buf;o/* Check type and command number */oif (_IOC_TYPE(cmd) != LED_IOC_MAGIC)/判斷是不是針對(duì)此驅(qū)動(dòng)的命令判斷是不是針對(duì)此驅(qū)動(dòng)的命令oreturn -ENOTTY;oif (arg 4) oreturn -EINVAL;oobuf = (unsigned long *)kmalloc(sizeof(*buf), GFP_KERNEL); /申請(qǐng)內(nèi)存申請(qǐng)內(nèi)存二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:oif (buf = NUL

13、L)oreturn -ENOMEM;oret = _copy_from_user(buf, &arg, sizeof(unsigned long);/從用戶空間將參數(shù)拷貝到從用戶空間將參數(shù)拷貝到o系統(tǒng)空間系統(tǒng)空間o/printk(ret = %xn, ret);oif(ret != 0)okfree(buf);oreturn -EFAULT;ooswitch(cmd) ocase LED_IOC_WR_ON:o/printk(kernel: set led on cmd num:%lxn, buf0);ogpio_set_value(led_table*buf, 0);/設(shè)置設(shè)置IO

14、輸出低電平輸出低電平obreak;ocase LED_IOC_WR_OFF:o/printk(kernel: set led off cmd num:%lxn, buf0);ogpio_set_value(led_table*buf, 1); /設(shè)置設(shè)置IO 輸出高電平輸出高電平obreak;odefault:oreturn -EINVAL;ooreturn 0;o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:ostatic struct file_operations uptech_leds_fops = o.owner = THIS_MODULE

15、,o.unlocked_ioctl = uptech_leds_ioctl,o;ostatic int _init uptech_leds_init(void)ooint i;oint err;odevno = MKDEV(DEVICE_MAJOR, DEVICE_MINOR);/獲得獲得dev_t 類型的設(shè)備類型的設(shè)備o號(hào)號(hào)oregister_chrdev_region(devno,1, DEVICE_NAME);/申請(qǐng)?jiān)O(shè)備號(hào)申請(qǐng)?jiān)O(shè)備號(hào)devnoomycdev = cdev_alloc();/動(dòng)態(tài)申請(qǐng)動(dòng)態(tài)申請(qǐng)cdev 內(nèi)存內(nèi)存omycdev-ops = &uptech_leds_fo

16、ps;/ops 初始化初始化omycdev-owner = THIS_MODULE;/ owner 初始化初始化oerr = cdev_add(mycdev, devno, 1);/注冊(cè)字符設(shè)備注冊(cè)字符設(shè)備oif (err != 0)oprintk(s3c6410 leds device register failed!n);omyclass = class_create(THIS_MODULE, DEVICE_NAME);/創(chuàng)建一個(gè)創(chuàng)建一個(gè)classoif(IS_ERR(myclass) oprintk(Err: failed in creating class.n);oreturn -1;

17、o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o驅(qū)動(dòng)程序分析:驅(qū)動(dòng)程序分析:odevice_create(myclass,NULL,MKDEV(DEVICE_MAJOR,DEVICE_MINOR),NULL,DEVICE_NAME); /創(chuàng)建設(shè)備文件創(chuàng)建設(shè)備文件ofor (i = 0; i 5; i+) os3c_gpio_cfgpin(led_tablei, S3C_GPIO_SFN(1);/初始化設(shè)置管腳為輸出方初始化設(shè)置管腳為輸出方o式式ogpio_set_value(led_tablei, 1);/設(shè)置輸出高電平設(shè)置輸出高電平ooprintk(DEVICE_NAME i

18、nitializedn);oreturn 0;oostatic void _exit uptech_leds_exit(void)oocdev_del(mycdev); /刪除字符設(shè)備刪除字符設(shè)備odevice_destroy(myclass,devno);/刪除設(shè)備文件刪除設(shè)備文件oclass_destroy(myclass);/刪除刪除classounregister_chrdev_region(devno,1);/釋放申請(qǐng)的設(shè)備號(hào)釋放申請(qǐng)的設(shè)備號(hào)o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 應(yīng)用程序分析:應(yīng)用程序分析:o#include o#include o#in

19、clude o#include /*ioctl 函數(shù)頭文件函數(shù)頭文件*/o/* IOCTL commands */o#define LED_IOC_MAGIC lo#define LED_IOC_WR_ON _IOW(LED_IOC_MAGIC, 0 x80, unsigned int)/ioctl 的命令的命令o#define LED_IOC_WR_OFF _IOW(LED_IOC_MAGIC, 0 x81, unsigned int) /ioctl 的命令的命令oint main(int argc, char *argv)ooint i;oint on;oint led_number;oi

20、nt fd;二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 應(yīng)用程序分析:應(yīng)用程序分析:oif (argc != 3 | sscanf(argv1, %d, &led_number) != 1 | sscanf(argv2,%d,o&on) != 1 |on 1 | led_number 5) ofprintf(stderr, Usage:n);ofprintf(stderr, t ./led led_number on|offn);ofprintf(stderr, Options:n);ofprintf(stderr, t led_number from 0

21、 to 4n);ofprintf(stderr, t on: 1 off: 0n);oexit(1);oofd = open(/dev/leds, 0);/打開/dev/led 設(shè)備文件oif (fd 0) operror(open device /dev/leds);oexit(1);o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.2 設(shè)備驅(qū)動(dòng)案例分析(LED驅(qū)動(dòng))o 應(yīng)用程序分析:應(yīng)用程序分析:oif(on = 0 x01)oioctl(fd, LED_IOC_WR_ON, led_number);/開燈操作ooelse if(on = 0 x00)oioctl(fd, LED_IOC_WR_OFF, le

22、d_number);/關(guān)燈操作oofor(i=0;i100;i+)ousleep(1000);oclose(fd);oreturn 0;o二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.3 紅外測(cè)溫技術(shù)o溫度測(cè)量分為接觸式和非接觸式兩大類。o 接觸式測(cè)溫接觸式測(cè)溫o 測(cè)溫元件直接與被測(cè)對(duì)象相接觸,兩者之間進(jìn)行充分的熱交換達(dá)到熱平衡,這時(shí)感溫元件的某一物理參數(shù)的量值就代表了被測(cè)對(duì)象的溫度值。o 優(yōu)點(diǎn):直觀可靠。o 缺點(diǎn): 感溫元件影響被測(cè)溫度場(chǎng)的分布;o 接觸不良等帶來(lái)測(cè)量誤差;o 高溫和腐蝕性介質(zhì)影響感溫元件的性能和壽命。o 非接觸式測(cè)溫非接觸式測(cè)溫 o感溫元件不與被測(cè)對(duì)象相接觸,而通過(guò)熱輻射進(jìn)行熱交換;o具有較

23、高的測(cè)溫上限;o熱慣性小,可達(dá)千分之一秒,故便于測(cè)量運(yùn)動(dòng)物體的溫度和快速變化的溫度。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.3 紅外測(cè)溫技術(shù)o 1800 年,赫胥爾首先發(fā)現(xiàn)了紅外輻射,經(jīng)過(guò)幾代科學(xué)家100 多年的探索、實(shí)驗(yàn)與研究,總結(jié)出了正確的輻射定律,為成功地研制紅外輻射測(cè)溫儀奠定了理論基礎(chǔ)。20 世紀(jì)60 年代以后,由于各種高靈敏度紅外探測(cè)器、干涉濾光片以及數(shù)字信號(hào)處理技術(shù)的發(fā)展,大大促進(jìn)了紅外技術(shù)應(yīng)用的進(jìn)程。近幾十年來(lái),比色測(cè)溫儀、光纖測(cè)溫儀、掃描測(cè)溫儀等滿足各種需要的紅外測(cè)溫儀相繼出現(xiàn)和不斷改進(jìn),使紅外技術(shù)的研究與應(yīng)用有了新的飛躍。雖然紅外測(cè)溫技術(shù)問世的時(shí)間并不很長(zhǎng),但是它安全、可靠、非接觸、快速

24、、準(zhǔn)確、方便、壽命長(zhǎng)等不可替代的優(yōu)勢(shì),已被越來(lái)越多的企業(yè)與廠家所認(rèn)識(shí)和接受,在冶金、石化、電力、交通、水泥、橡膠等行業(yè)得到了廣泛的應(yīng)用,成為企業(yè)故障檢測(cè)、產(chǎn)品質(zhì)量控制和提高經(jīng)濟(jì)效益的重要手段。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.3 紅外測(cè)溫技術(shù)o 紅外線傳感器是利用紅外線的物理性質(zhì)來(lái)進(jìn)行測(cè)量的傳感器。紅外線又稱紅外光,它具有反射、折射、散射、干涉、吸收等性質(zhì)。任何物質(zhì),只要它本身具有一定的溫度(高于絕對(duì)零度),都能輻射紅外線。紅外線傳感器測(cè)量時(shí)不與被測(cè)物體直接接觸,因而不存在摩擦,并且有靈敏度高,響應(yīng)快等優(yōu)點(diǎn)。 紅外線傳感器包括光學(xué)系統(tǒng)、檢測(cè)元件和轉(zhuǎn)換電路。光學(xué)系統(tǒng)按結(jié)構(gòu)不同可分為透射式和反射式兩類。

25、檢測(cè)元件按工作原理可分為熱敏檢測(cè)元件和光電檢測(cè)元件。熱敏元件應(yīng)用最多的是熱敏電阻。熱敏電阻受到紅外線輻射時(shí)溫度升高,電阻發(fā)生變化,通過(guò)轉(zhuǎn)換電路變成電信號(hào)輸出。光電檢測(cè)元件常用的是光敏元件,通常由硫化鉛、硒化鉛、砷化銦、砷化銻、碲鎘汞三元合金、鍺及硅摻雜等材料制成。 二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.3 紅外測(cè)溫技術(shù)o 紅外線傳感器常用于無(wú)接觸溫度測(cè)量,氣體成分分析和無(wú)損探傷,在醫(yī)學(xué)、軍事、空間技術(shù)和環(huán)境工程等領(lǐng)域得到廣泛應(yīng)用。例如采用紅外線傳感器遠(yuǎn)距離測(cè)量人體表面溫度的熱像圖,可以發(fā)現(xiàn)溫度異常的部位,及時(shí)對(duì)疾病進(jìn)行診斷治療(見熱像儀);利用人造衛(wèi)星上的紅外線傳感器對(duì)地球云層進(jìn)行監(jiān)視,可實(shí)現(xiàn)大范圍的天

26、氣預(yù)報(bào);采用紅外線傳感器可檢測(cè)飛機(jī)上正在運(yùn)行的發(fā)動(dòng)機(jī) 的過(guò)熱情況等。 二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o2.3 紅外測(cè)溫技術(shù)o紅外溫度傳感器:二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.4 紅外測(cè)距技術(shù)o 利用的是紅外線傳播時(shí)的不擴(kuò)散原理,因?yàn)榧t外線在穿越其它物質(zhì)時(shí)折射率很小,所以長(zhǎng)距離的測(cè)距儀都會(huì)考慮紅外線,而紅外線的傳播是需要時(shí)間的,當(dāng)紅外線從測(cè)距儀發(fā)出碰到反射物被反射回來(lái)被測(cè)距儀接受到,再根據(jù)紅外線從發(fā)出到被接受到的時(shí)間及紅外線的傳播速度就可以算出距離。o 利用高頻調(diào)制的紅外線在待測(cè)距離上往返產(chǎn)生的相位移推算出光束度越時(shí)間t,從而根據(jù)D=Ct/2得到距離D。二、知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備o 2.4 紅外測(cè)距技術(shù)o 集成紅外測(cè)

27、距傳感器三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)3.1硬件原理圖 紅外測(cè)溫原理圖三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)o 3.2 程序流程圖開始初始化設(shè)置等待啟動(dòng)命令小車避障尋跡測(cè)溫測(cè)距 判斷有要避障?停車,關(guān)閉設(shè)備是否結(jié)束三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)o3.3 源程序分析源程序分析o#defineNUM_EXTRAIO 4o#defineS3C2440_GPIO_OUTPUT 1o#defineS3C2410_GPIO_INPUT 0o/ 擴(kuò)展接口上的數(shù)字口文件描述符oint extraio_fd = 0;oenum EXTRAIOPUTooEINT11=0,oEINT13,oEINT6,oEINT3,o;ostatic unsig

28、ned char extraio_table = oEINT11 ,/ EINT11oEINT13,/ EINT13oEINT6,/ EINT6oEINT3,/ EINT3o;三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)o3.3 源程序分析源程序分析ostatic unsigned int extraio_cfg_table = oS3C2440_GPIO_OUTPUT,oS3C2440_GPIO_OUTPUT,oS3C2440_GPIO_OUTPUT,oS3C2440_GPIO_OUTPUT,o;o/ 讀取擴(kuò)展板上的數(shù)字口ounsigned char extraioRead()ooif(extraio_fd =

29、0)ooextraio_fd = open(/dev/extraio, O_RDWR);oif (extraio_fd 0)ooprintf(cannot open extraio device, line:%dn, _LINE_);oreturn -1;ooounsigned char but=0;oread(extraio_fd, &but, sizeof(but);oreturn but;o三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)o 3.3 源程序分析源程序分析o/ 對(duì)擴(kuò)展板上的數(shù)字口進(jìn)行寫操作ovoid extraioWrite(unsigned char but)ooif(extraio_fd

30、 = 0)ooextraio_fd = open(/dev/extraio, O_RDWR);oif (extraio_fd 0)ooprintf(cannot open extraio device, line:%dn, _LINE_);oreturn;ooowrite(extraio_fd, &but, sizeof(but);o三、 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)o3.3 源程序分析源程序分析o/ 配置擴(kuò)展板上的數(shù)字口ovoid extraioConfig()ooif(extraio_fd = 0)ooextraio_fd = open(/dev/extraio, O_RDWR);oif (extraio_fd 0)ooprintf(cannot open extraio device, line:%dn, _LINE_);oreturn;oooint i, cfg=0;ofor(i=0; iNUM_EXTRAIO; i+)ocfg += (extraio_cfg_table

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論