嵌入式培訓(xùn)-北航課程系統(tǒng)experiment book_第1頁
嵌入式培訓(xùn)-北航課程系統(tǒng)experiment book_第2頁
嵌入式培訓(xùn)-北航課程系統(tǒng)experiment book_第3頁
嵌入式培訓(xùn)-北航課程系統(tǒng)experiment book_第4頁
嵌入式培訓(xùn)-北航課程系統(tǒng)experiment book_第5頁
已閱讀5頁,還剩397頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一章嵌入式LINUX開發(fā)基礎(chǔ)知 嵌入式LINUX簡 嵌入式LINUX開發(fā)平臺簡 嵌入式LINUX開發(fā)流 嵌入式LINUX開發(fā)環(huán)境的建 第二章基礎(chǔ)實(shí) 熟悉LINUX開發(fā)環(huán) A/D接口實(shí) D/A接口實(shí) CAN總線通訊實(shí) 簡單嵌入式WEB服務(wù)器實(shí) 第三章圖形界面應(yīng)用程序設(shè) 安裝與建立QT桌面運(yùn)行環(huán) QTDESIGNER簡介以及QT/E的交叉編 第四章內(nèi)核實(shí) 第五章驅(qū)動模塊實(shí) IC卡讀寫實(shí) SD卡使用實(shí) IDE_CF卡模塊讀寫實(shí) 第六章無線通訊實(shí) GPS通訊實(shí) GPRS通訊實(shí) 第七章附 VI簡 GCC與 GNU通用公共證(GPL1991.6第二版 PC時代的到來,嵌入式系統(tǒng)技術(shù)已經(jīng)成為了一個萬眾矚目的焦點(diǎn)。目前已廣WindowsCE等嵌入式操作系統(tǒng)引領(lǐng)下,也出現(xiàn)了空前繁榮的局面,但這些操作系統(tǒng)的微型Linux腕表、手持設(shè)備(PDA和蜂窩)、因特網(wǎng)裝置、客戶機(jī)、、工業(yè)機(jī)器人和基礎(chǔ)設(shè)施設(shè)備,甚至還包括了基于集群的超級計(jì)算機(jī)。Linux在高端服務(wù)器的可攜帶設(shè)備等使用嵌入式Linux感的人都可以從因特網(wǎng)上免費(fèi)其內(nèi)核和應(yīng)用程LinuxRTLinux(實(shí)LinuxLinuxPPCLinux、ARM-Linux(ARMLinux)Linux嵌入式Linux的發(fā)展比較迅速。NEC、索尼已經(jīng)在銷售個人機(jī)等基于Linux的消費(fèi)類電子產(chǎn)品摩托羅拉則計(jì)劃在其未來的大多數(shù)上使用Linux,IBM也制定了在手持機(jī)上運(yùn)行Linux的計(jì)劃。數(shù)年來,“Linux標(biāo)準(zhǔn)庫”組織一直在從事對在服務(wù)器上運(yùn)行的Linux進(jìn)行標(biāo)準(zhǔn)化的工作,現(xiàn)在,嵌入式計(jì)算領(lǐng)域也開始了這一工作。嵌入式Linux標(biāo)準(zhǔn)吸引了“Linux標(biāo)準(zhǔn)庫”以及Unix組織中有益的元素。LinuxLinuxPCLinuxLinuxUNIXUNIXLinuxUNIXWINDOWSLinuxPC要這么高的配置。一個功能完備的Linux1MBLinux占用其中很小一部分內(nèi)存,包括虛擬內(nèi)存和所有的操作系統(tǒng)功能在內(nèi),只需占用系統(tǒng)100K500KLinux統(tǒng)就可以在一臺8位總線(SX)的In386微處理器上運(yùn)行的很好了。由于內(nèi)存要求常常是需要的應(yīng)用所決定的,比如Web服務(wù)器或者SNMP,Linux系統(tǒng)甚至可以僅使256KBROM512KBRAM進(jìn)行工作。因此它是一個瞄準(zhǔn)嵌入式市場的輕量級操作系(RTOSLinuxRTOSIP的程序和驅(qū)動程序,它們可以用于公共外設(shè)和應(yīng)用。LinuxLinux用于嵌入式的因特網(wǎng)設(shè)備也是很合適的,原因是它支持多處理器系統(tǒng),該特性使在嵌入式系統(tǒng)上運(yùn)行Linux的一個缺點(diǎn)是Linux體系提供實(shí)時性能需要添加實(shí)時軟件模由博創(chuàng)科技開發(fā)的UP-NetARM3000和UP-NetARM2410-S實(shí)驗(yàn)儀器。中的針對有MMU和無MMU的不同開發(fā)過程。UP-NetARM3000及相關(guān)產(chǎn)品的資料可以博創(chuàng)公司的獲得。本書以UP-NetARM2410-S為例,詳細(xì)介紹嵌入式Linux的開發(fā)過程。UP-NetARM2410- 實(shí)驗(yàn)儀器介SAMSUNG64M816bitUSB4HOST12RS232,1RS485,144.1KHz音168Pin筆記本硬盤,CFICDC由控制,STEP由74HC573控CANMCP2510TJA1050構(gòu)Double1.2.1UP-NetARM2410-S3c2410介 集成了大量的功能單元,包括內(nèi)部1.8V,器3.3V,外部IO3.3V,16KB數(shù)據(jù)CACH,16KB指令內(nèi)置外部器控制器(SDRAM控制和選擇邏輯TFT三個通用異步串行端口(IrDA1.0,16-ByteTxFIFOand16-ByteRxFIFO),2SPI;2USBHOSTUSBDEVICE(VER1.1;15.16.內(nèi)置(cacheARM920TCPUARM內(nèi)部先進(jìn)的位控制器總線(AMBA2.0,AHB/APB).2S3c2410X全部安裝,通過網(wǎng)絡(luò)相應(yīng)的GCC交叉編譯器進(jìn)行安裝(比如arm-linux-gcc、gcc配置開發(fā)主機(jī)。配置,一般參數(shù)為波特115200,數(shù)據(jù)8,停止1,無奇偶校驗(yàn),軟硬件控制流設(shè)為無WINDOWS的超級終端的配置也是這樣。軟件的置NFS網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉,簡化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過程。BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據(jù)自己具體進(jìn)行移植修改。有些別人已經(jīng)移植好LINUX操作系統(tǒng)UCLINUX、ARM-LINUX、PPC-LINUX等,如果有專門針對你所使用的CPU移植好的LINUX操作系統(tǒng)那是再好不過,后再添加自己的特定硬件的驅(qū)動程序,進(jìn)行調(diào)試修改,對于MMUCPU可以使用模塊方式調(diào)試驅(qū)動,對于UCLINUX這樣的系統(tǒng)好像只能編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。 件b,具體情況會隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,mkcramfs、gnromfs開發(fā)應(yīng)用程序,可以到根文件系統(tǒng)中,也可以放入YAFFS、JFFS2文件系統(tǒng)中,有的應(yīng)用3、直接安裝LINUX基于WINDOWS的環(huán)境要么有兼容性問題,要么速度有影響,所以我推薦大家使用純LINUX操作系統(tǒng)開發(fā)環(huán)境。我們實(shí)際的開發(fā)環(huán)境為REDHAT9,它已經(jīng)支持中文,并且包含了絕大部分的開發(fā)工具,不用擔(dān)心裝了LINUX就不能使用WINDOWS的問題。一般的情況都是用戶已經(jīng)有了WINDOWS操作系統(tǒng),再安裝LINUX,LINUX會自動安裝一個叫作GRUB的啟動引導(dǎo)軟件,Linuxnative(HOST)開發(fā)、調(diào)試,本機(jī)可執(zhí)行文件到目標(biāo)機(jī)上運(yùn)行。調(diào)試時的方法很多,可以使用串口,以太網(wǎng)口等,具體一般不相同,宿主機(jī)為In處理器,而目標(biāo)板如UP-NetARM2410-S開發(fā)板為三星作系統(tǒng)的PC機(jī)作宿于嵌入式LINUX,宿主機(jī)上的操作系統(tǒng)一般要求為REDHATLINUX。嵌入式開發(fā)通常要求宿主機(jī)配置有網(wǎng)絡(luò),支持NFS(為交叉開發(fā)時mount所用。然內(nèi)存:大于128M,推薦256M;REDHATLINUX9.0的安800M。 mount/dev/cdrommount–tiso9660/dev/hdb注意:安裝完成后看一下主編譯器Armv4l-unknown-linux- 是否注意:安裝完成后看一下主編譯器Armv4l-unknown-linux- 是否/opt/host/armv4l/bin/,如果不是這個路徑,請使用vi修改/root/.bash_profile文件中變量為PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin//root/.bash_profile,則以后armv4l-unknown-linux- 會自動搜索到,可以在終端上輸armv,然后按tab鍵,會自動顯示armv4l-unknown-的局域網(wǎng)環(huán)境使用此開發(fā)設(shè)備,IP地址可以根據(jù)具體情況設(shè)置。如圖1.4.1所示:.21.4.3對于REDHAT9.0,它默認(rèn)的是打開了,因此對于外來的IP它全部,這樣其它網(wǎng)絡(luò)設(shè)備根本無法它,即無法用NFSmount它,許多網(wǎng)絡(luò)功能都將無法使用。因此網(wǎng)絡(luò)安裝完畢后,應(yīng)立即關(guān)閉。操作如下:點(diǎn)擊紅帽子開始菜單,選擇安全級別設(shè)置,選中無。如圖1.4.4所示:1.4.4確保nfs選項(xiàng)選中。SERVICE->NFS,點(diǎn)擊增加出現(xiàn)如下在界面,在(Drictory):中填入需要共享的路徑,在主機(jī)(Hosts):IP地址。并選擇允許客戶對共享的操作為只讀(Read-only)或讀寫(Read/write)。如圖1.4.5所示:圖1.4.6NFS用戶設(shè)成NFS配置。配置好后,界面應(yīng)顯示如圖1.4.7所示:圖1.4.7根用戶當(dāng)作本地根用 共享可以連接的主機(jī) 機(jī),可以和寫入。mount0:/arm2410s看是否成功就可以判斷NFS是否配好了。例如在宿主機(jī)/ mount0:/arm2410s mount,NFS配 .linuxXwindow界面下建立終端(在桌面上點(diǎn)擊右鍵——>新建終端),在終端令行提示符后輸入,回車,你就會看到的啟動畫面(見圖1.4.9。若沒有啟動Xwindow則在命令行提示符后直接輸入即可。圖 進(jìn)入主配置界面(見圖1.4.10。.11Serialportsetup,進(jìn)入端口設(shè)置界面,這里有幾個重要選項(xiàng)改為如下值(見1.4.12:A————SerialDevice:/dev/ttyS0 F,ENOPC21做監(jiān)控,改為:/dev/ttyS1即可。選好后按ESC鍵退出到圖1.4.11所示畫面,選擇Savesetupasdf1保存退出,以后只要 配置完成后,用串口線連接好pc機(jī)和2410-S,啟動2410-S,即可在 1.4.12 1.4.1arm2410s名 MOUNTU 1.4.2實(shí)Linux開發(fā)環(huán)S3C2410Linux開發(fā)環(huán)境的配置和使Linuxarmv4l-unknown-linux-gcc編譯,使用基于NFS方式的調(diào)試,了解嵌入式開發(fā)的基本過學(xué)一個新,并在其中編寫o.c和Makefile文件。Linux下的編程和編譯過程,學(xué)四、實(shí)驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境[root@zxt ]# [root@zxt ]# Linux的文本編輯器有許多,常用的vimXwindowgedit等,我們在開Kdevelope、anjutavc6.0windows{ oworld} o]# 我們可以是用下面令來編寫o.c的源代碼,進(jìn)入o使用vi命令來編輯代 o]# 用命令“:wq”保存并退出。這樣我們便在當(dāng)前下建立了一個名為o.c的文件。用到的Makefile文件。EXEC= OBJS= CFLAGS+=LDFLAGS+=all:$(EXEC):$(CC)$(LDFLAGS)-o$@-rm-f$(EXEC)*.elf*.gdbCC clean--個Tab制表符生成,不能單純由空格來代替 o]#vi o]#make o]#在上面的步驟完成后,我們就可以在o o]#make o]# [root@zxt[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s成功掛接宿主機(jī)的 后,在開發(fā)板上進(jìn)入[root@zxt[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s成功掛接宿主機(jī)的 后,在開發(fā)板上進(jìn)入 ,我們已經(jīng)給出了編輯好 o.c和Makefile文件,它們在 下。用戶可以直接在宿主PC上編譯生成可執(zhí)行文件,并通過上面令掛載到開發(fā)板上,運(yùn)行程序察看結(jié)果。 o]#cp o/root/share [/mnt/yaffs]mount-tnfs-onolock6:/root/share o]#cp o/root/share [/mnt/yaffs]mount-tnfs-onolock6:/root/share [/mnt/yaffs]cd/host[/host]./ o 1.Makefile C128M。 將耗時長的操作(timeconsuming)置于一個新的線程,可以避免這種尷尬的情況。不同的CPU上。不斷地從共享的循環(huán)緩沖區(qū)數(shù)據(jù)。流程圖如圖2.2.1所示:Theclassicproducer-consumerIllustratesmutexesandbyZoujianguo 2003-12-#include<stdio.h>#include<stdlibh>#include<timeh>#include"pthread.h"/**/structprodcons{intbuffer[BUFFER_SIZE]; /*緩沖區(qū)數(shù)組*/pthread_mutex_tlock; /*互斥鎖*/intreadpos, /*讀寫的位置pthread_cond_tnotempty; /*緩沖區(qū)非空信號*/pthread_cond_tnotfull; /*緩沖區(qū)非滿信號*/ voidinit(structprodcons*{pthread_mutex_init(&b->lock,NULL);pthread_cond_init(&b->notfull,NULL);b->readpos=0;b->writepos=} /*向緩沖區(qū)中寫入一個整數(shù)*/voidput(structprodcons*b,intdata){/*等待緩沖區(qū)非滿while((b->writepos+1)%BUFFER_SIZE==b-{printf("waitfornotfull\n");}} intget(structprodcons*b){intdata;/*等待緩沖區(qū)非空while(b->writepos==b-{printf("waitfornotempty\n");}/*讀數(shù)據(jù)并且指針前移*//*設(shè)置緩沖區(qū)非滿信號*/pthread_cond_signal(&b-returndata;} #defineOVER(-1) void*producer(void*{intfor(n=0;n<1000;{printf("put-->%d\n",n);put(&buffer,n);}put(&buffer,OVER);returnNULL;} void*consumer(void*{intd;d=if(d==OVER) %d-->get\n",}returnNULL;} int{void*retval;pthread_create(&th_a,NULL,producer,0);pthread_create(&th_b,NULL,consumer,/**/pthread_join(th_a,&retval);pthread_join(th_b,&retval);return0;}主要函數(shù)分析2.2.2voidput(structprodcons*b,int{ while((b->writepos+1)%BUFFER_SIZE==b->readpos){//等待狀態(tài)變量b->notfull}b->buffer[b->writepos]=data; if(b->writepos>=BUFFER_SIZE)b->writepos=0; }intget(structprodcons*{int while(b->writepos==b->readpos){ pthread_cond_wait(&b->notempty,&b->lock);等待狀態(tài)變量}datab->buffer[b- if(b->readpos>=BUFFER_SIZE)b->readpos=0;pthread_cond_signal(&b- //設(shè)置狀態(tài) return}主要的多線程在本程序的代碼中大量的使用了線程函數(shù),如pthread_cond_signal、intpthread_create(pthread_t* constpthread_attr_t void*(*start_routine)(void*),void* pthread_tpthread_selfintpthread_equal thread1, voidpthread_exit(void*intpthread_join th,void**pthread_mutex_init(pthread_mutex_t*,constpthread_mutexattr_tintpthread_mutex_destroy(pthread_mutex_t*再試一次獲得對互斥量的鎖定(非阻塞intpthread_mutex_trylock(pthread_mutex_t*鎖定互斥量(阻塞intpthread_mutex_lock(pthread_mutex_t*intpthread_mutex_unlock(pthread_mutex_t*intpthread_cond_init(pthread_cond_t* constpthread_condattr_t* intpthread_cond_destroy(pthread_cond_t*intpthread_cond_signal(pthread_cond_t*等待條件變量(阻塞intpthread_cond_wait(pthread_cond_t* cond,pthread_mutex_t* intpthread_cond_timedwait(pthread_cond_t* pthread_mutex_t* conststructtimespec* intpthread_create(pthread_t*thread_id,constpthread_attr_t void*(*start_routine)(void*),void* 見的錯誤返回代碼為EAGAIN和EINVAL。前者表示系統(tǒng)限制創(chuàng)建新的線程,例如線程數(shù)目過多了;后者表示第二個參數(shù)代表的線程屬性值。創(chuàng)建線程成功后,新創(chuàng)建的線程pthread_join函 intpthread_join th,void**pthread_exitvoidpthread_exit(void*也就結(jié)束了;另式是通過函數(shù)pthread_exit來實(shí)現(xiàn)。它的函voidpthread_exit(void*唯一的參數(shù)是函數(shù)的返回代碼,只要pthread_join中的第二個參數(shù)thread_return不是否則第一個接收到信號的線程成功返回,其余調(diào)用pthread_join的線程則返回錯誤代碼intpthread_cond_init(pthread_cond_tintpthread_cond_init(pthread_cond_t*cond,constpthread_condattr_t*condpthread_cond_t,cond_attrPTHREAD_condexternintpthread_cond_wait(pthread_cond_t*restrictcond,pthread_mutex_t* 說來線程應(yīng)該仍阻塞在這里,被等待被下一次喚醒。這個過程一般用while語句實(shí)現(xiàn)。texternint P((pthread_cond_t*pthread_mutex_t* conststructtimespec*它比函數(shù)pthread_cond_wait()多了一個時間參數(shù),經(jīng)歷abstime段時間后,即使條件pthread_cond_signal函數(shù)它的函數(shù)原型為:externintpthread_cond_signal(pthread_cond_t*被發(fā)出,從而造成的等待。進(jìn)入exp/basic/02_pthread使vi輯器或其他編輯器閱讀理解源代make產(chǎn)生pthread可執(zhí)行文件。2、和調(diào) 終端窗口,使用NFSmount開發(fā)主機(jī)的/arm2410s到 waitfornotemptyput--producer999--consumer waitfornotemptyput--producer999--consumerC軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O方式,110,150,300,600,1200,2400,4800,9600等。MODEM連接電纜,其連接方式2.3.2實(shí)用RS-232CLinux#include<termiosh>#include<stdio.h>#include<unistdh>#include<fcntl.h>#include<pthreadh>#defineCOM2#defineENDMINITERM27 /*ESCtoquitminiterm*/#defineFALSE0#defineTRUEvolatileintfd;voidchild_handler(int{} void*keyboard(void*{for(;;){if(break}}return} /*modeminputhandler*/void*receive(void*{intwhile{write(1,&c,1);/*stdout*/}returnNULL;} void*send(void*{intc='0';while(STOP==FALSE)/*modeminputhandler{c%=}returnNULL; intmain(intargc,char**{structsigactionsa;intvoid*retval;if(argc>fd=open(COM2,O_RDWR);fd=open(COM1,O_RDWR);//|O_NOCTTYif(fd<0)} /*savecurrentmodemsettings*/ /*getworkingstdtio*/newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD; newtio.c_iflag=IGNPAR; /*inputflag*/newtio.c_oflag=0; newtio.c_lflag=0;/*nowcleanthemodemlineandactivatethesettingsformodem*/tcflush(fd,TCIFLUSH); /*setsa.sa_flags=0; /*handledyingchild*/pthread_create(&th_a,NULL,keyboard,0);pthread_create(&th_c,NULL,send,0);pthread_join(th_a,&retval);pthread_join(th_b,&retval);pthread_join(th_c,&retval); /*restoreoldmodemsetings*/ /*restoreoldttysetings*/} <stdioh> <stdlibh> <unistdh> <sys/typesh> <sys/stat <fcntlh> <termiosh> /*PPSIX終端控制定義*/ <errnoh> <pthread [/mnt/yaffs]cd[/dev]ln–sf/dev/tts/0Linux/dev/dev/ttyS0[/mnt/yaffs]cd[/dev]ln–sf/dev/tts/0intfd=open("/dev/ttyS0",O_RDWR); if(-1== /*不能打開串口一perror("}termios結(jié)構(gòu)體的各成員值,關(guān)于該結(jié)構(gòu)體的定義可以查看struct{unsignedshortc_iflag; /*輸入模式標(biāo)志*/unsignedshortc_oflag; /*輸出模式標(biāo)志*/unsignedshortc_cflag; /*控制模式標(biāo)志*/unsignedshort /*localmodeflagsunsignedchar /*linediscipline*/unsignedchar structtermiosOpt;tcgetattr(fd, Option.c_cflag&=Option.c_cflag&=~PARENB;Option.c_cflag&=~CSTOPB;Option.c_cflag&=~CSIZE;Option.c_cflag|=驗(yàn)(Odd)7Option.c_cflag|=~PARENB;Option.c_cflag&=~CSTOPB;Option.c_cflag&=~CSIZE;Option.c_cflag|=偶效驗(yàn)(Even7Option.c_cflag|=~PARODD;Option.c_cflag&=~CSIZE;Option.c_cflag|=Space效驗(yàn)7Option.c_cflag&=~PARENB;Option.c_cflag&=~CSTOPB;Option.c_cflag&=&~CSIZE;Option.c_cflag|=options.c_cflag&=options.c_cflag|=options.c_lflag&=~(ICANON|ECHO|ECHOE| options.c_oflag&= charbuffer[1024]; nByte=write(fd,buffercharbuff[1024]; intreadByte=read(fd,buff,charbuff[1024]; intreadByte=read(fd,buff, [root@zxt03_tty]#make -c-oterm.oarmv4l-unknown-linux-gcc-o../bin/termterm.o armv4l-unknown-linux-gcc-otermterm.o [root@zxt03_tty]#lsMakefileMakefile.baktermterm.cterm.o [root@zxt[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s/host[/mnt/yaffs]cd/host/exp/basic/03_tty/readmodemsend1term發(fā)出的數(shù)據(jù),卻無法看到開發(fā)主機(jī)發(fā)來的數(shù)據(jù),可以使用另外一臺主機(jī)連接串口2進(jìn)行收發(fā)測試。/dev/ttyS0:Nosuchfileor[/mnt/yaffs]cd[/devln–sf/dev/tts/0 A/D學(xué)習(xí)A/D接口原理,了解實(shí)現(xiàn)A/D系統(tǒng)對于系統(tǒng)的軟件和硬件要求。閱讀ARM文檔,掌握ARM的A/D相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的A/D相關(guān)接口。利用外部模擬信號編程實(shí)現(xiàn)ARM循環(huán)全部前4路通道,并且在超級終端上顯示。C軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境A/D轉(zhuǎn)換器是模擬信號源和CPU之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、、控制和顯示。在工業(yè)控制和及許多其他領(lǐng)域中,A/D轉(zhuǎn)換是不可缺少的。積分的時間T0,此時間往往是固定的;另一個是以充電后的電壓為初值,對參考電源Vref反向積分,積分電容被放電至零所需的時間T1。模擬輸入電壓Vi與參考電壓VRef之比,等于上述兩個時間之比。由于VRef、T0固定,而放電時間T1可以測出,因而可計(jì)算出模擬輸入電壓的大小(VRef與Vi符號相反)。由于T0、VRef為已知的固定常數(shù),因此反向積分時間T1與輸入模擬電壓Vi在T0時間內(nèi)的平均值成正比。輸入電Vi愈高,VA愈大,T1就愈長。T1開始時刻,控制邏輯同時打開計(jì)數(shù)正比于輸入電壓Vi在T0時間內(nèi)的平均值,于是完成了一次A/D轉(zhuǎn)換。由于雙積分型A/D轉(zhuǎn)換是測量輸入電壓Vi在T0時間內(nèi)的平均值,所以對常態(tài)干擾(串摸干其轉(zhuǎn)換時間為。因此適用于模擬信號變化緩慢,采樣速率要求較低,而對精度要求較較。如果Vx≥Vc,說明SAR最的“1”應(yīng)予保留;如果Vx<Vc,說明SAR該位應(yīng)予清零。近過程。轉(zhuǎn)換結(jié)果能否準(zhǔn)確近模擬信號,主要取決于SAR和D/A的位數(shù)。位數(shù)越多,越圖2.4.1逐次近式A/D轉(zhuǎn)換分辨率模擬輸入的電平值表示。n位A/D1/2n滿量程的模擬輸入電平。由于分辨率直接與精度精度有絕對精度(AbsoluteAccuracy)和相對精度(RelativeAccuracy)換速率為40KHz。電源靈敏度(powersupply源電壓變化1%時相當(dāng)?shù)哪M量變化的百分?jǐn)?shù)來表示。例如,單極性量程為0~+5V,0~+10V,0~+20V;雙極性量程為-5~+5V,-10~+10V保證額定精度指標(biāo)。一般A/D轉(zhuǎn)換器的工作溫度范圍為(0~700C),品的工作溫度范圍為(-55~C)ARMS3C2410自帶一個8路10位A/D轉(zhuǎn)換器,并且支持觸摸屏功能。ARM2410開發(fā)板只用作3路A/D轉(zhuǎn)換器,其最大轉(zhuǎn)換率為500K,非線性度為正負(fù)1.5位,其轉(zhuǎn)換時間可以通過下式計(jì)算:如果系統(tǒng)時鐘為50MHz,比例值為49,則為A/D=50MHz/(49+1)1轉(zhuǎn)換時間=1/(1MHz5cycles)1/200kHz(5us)5讀/ADC位Endofconversionflag(read0=A/Dconversionin1=EndofA/D0A/Dconverterprescaler0=1=0Datavalue:1~255Notethatdivisionfactoris(N+1)whentheprescalervalueoginputchannelselect.000=AIN0001=AIN1010=AIN011=AIN100=AIN101=AIN110=AIN111=AIN70Standbymode0=Normaloperation1=Standby1A/Dconversionstartby0=Disablestartbyread1=Enablestartbyread0A/DconversionstartsbysettingthisIfREAD_STARTisenabled,thisvalueisnot0=Nooperation1=A/Dconversionstartsandthisbitisclearedafterthestart-up.0該寄存器0位是轉(zhuǎn)換使能位1表示轉(zhuǎn)換開始。1位是讀操作使能轉(zhuǎn)換,寫1表示轉(zhuǎn)換在讀操作時開始。3、4、5是通道號。[13:6]AD轉(zhuǎn)換比例因子。14位為比例因子有效位,15位為轉(zhuǎn)換標(biāo)志位(只讀。表2.4.3A/D轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器的讀/ RADC轉(zhuǎn)換數(shù)據(jù)寄-staticstructfile_operationsstaticstructfile_operationss3c2410_fops{owner: open:s3c2410_adc_open,read:s3c2410_adc_read, staticints3c2410_adc_open(structinode*inode,structfilestaticints3c2410_adc_open(structinode*inode,structfile{return0; staticssize_ts3c2410_adc_write(structfile*file,constchar*buffer,size_tcount,loff_t*{intdata;//errorinputdataDPRINTK("thesizeofinputdatamustbe%d\n",sizeof(data));return0;}copy_from_user(&data,buffer,count);returncount; do{\ADCCON=PRESCALE_EN|PRSCVL(prescale)|ADC_INPUT((ch));\ADCCON|=ADC_START;\//PRESCALE_EN左移14使位比例因子有效;PRSCVL左移6位設(shè)置比例因子//ADC_INPUT左移3位選擇通道 loff_t{intret=return-ERESTARTSYS;ret=ret&=0x3ff; //把數(shù)據(jù)寄存器內(nèi)容放入變量retDPRINTK("AIN[%d]0x%04x,d\nadcdev.channel,ret,ADCCON&0x801:0);copy_to_user(buffer,(char*)&ret,sizeof(ret));//把retreturnsizeof(ret); by #include<stdio.h>#include<unistdh>#include<sys/typesh>#include<sys/ipch>#include<sys/ioctlh>#include<pthreadh>#include<fcntl.h>#defineADC_DEV staticintadc_fd=-1;staticint{if((adc_fd=open(ADC_DEV,printf("Erroropening%sadcdevice\n",ADC_DEV);return-1;}}staticintGetADresult(int{intwrite(adc_fd,&data,sizeof(data));read(adc_fd,&data,sizeof(data));return}staticintstaticvoid*comMonitor(void*{}int{inti; void*//sets3c44b0ADregisterandstartADreturn-/*Createthethreads printf("\nPressEnterkeyexit!\n");while(stop==0for(i=0;i<=2;i++){//采樣0~2路A/D值}}/*Waituntilproducerandconsumerfinish.*/ ,&retval);return0;} [root@zxt04_ad]#make -c-omain.omain.carmv4l-unknown-linux-gcc-o../bin/admain.o-lpthreadarmv4l-unknown-linux-gcc-oadmain.o-[root@zxt04_ad]# hardwarehmain.o Makefile.baks3c2410-adchbinmain.c Makefilereadme.txt [root@zxt[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s/host[/mnt/yaffs]cd/host/exp/basic/04_ad/PressEnterkeya0= a1= a2=D/A掌握MAX504D/A轉(zhuǎn)換的使用方C軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境行分類。大D/A轉(zhuǎn)換器由電阻陣n個電流開關(guān)(或電壓開關(guān))構(gòu)成。按數(shù)字輸入值切電壓輸出型(為高速D/A轉(zhuǎn)換器使用。電流輸出型D/A轉(zhuǎn)換器很少直接利用電流輸出,大多外接電流—電壓轉(zhuǎn)換電路得到電壓輸乘算型(如到數(shù)字輸入和基準(zhǔn)電壓輸入相乘的結(jié)果而輸因而稱為乘算型D/A轉(zhuǎn)換器D/A轉(zhuǎn)分辯率建立時間(Setting是將一個數(shù)字量轉(zhuǎn)換為穩(wěn)定模擬信號所需的時間,也可以認(rèn)為是轉(zhuǎn)換時間。D/A中常用建立時間來描述其速度,而A/D中常用的轉(zhuǎn)換速率。一般地,電流輸D/A建立時間較短,電壓輸出D/A則較長。3、 10位D/A轉(zhuǎn)換器的特2 121Bipolaroffset/gain2Serialdata3Clear.AsynchronouslysetsDACregistertoall4Serialclock5Chipselect,active6Serialdataoutputfordaisy-78og9ReferenceReferenceoutput,2.048V.ConnecttoVDDifnotPositivepowerFeedback4、MAX504在開發(fā)板上2.5.1Max50412WriteSDIO(data8由MAX504_CLEAR()和MAX504_ENABLE()、MAX504_DISABLE()函數(shù)(Max504.c)控制。byzoujian 2004.9.27*thedriveriss3c2410_da_max504.cin#include<stdio.h>#include<fcntl.h>#include<string.h>#define #define #define #defineMax504_FULL staticintda_fd=-1;charvoidDelay(int{inti;}intmain(intargc,char**argv){floatunsignedint char if(argc<3){printf("Errorparameter\n");printf("Inputas:\n"); da_id:selectbetween0and1\n"); num:range0.0~4.096\n");return}sscanf(argv[2],"%f",&v);printf("DAoutmustbetween:0to%f\n",Max504_FULL);return1;}if((da_fd=open(DA_DEV,O_WRONLY))<0){return1;}if(strcmp(argv[1],"0")==ioctl(da_fd,DA_IOCTRL_CLR,0); ioctl(da_fd,DA0_IOCTRL_WRITE,&value);}elseif(strcmp(argv[1],"1")==ioctl(da_fd,DA_IOCTRL_CLR,1); ioctl(da_fd,DA1_IOCTRL_WRITE,&value);}#ifioctl(da_fd,DA_IOCTRL_CLR,0); {}return0;} [root@zxt05_da]#make armv4l-unknown-linux-gccda_main.o-oda_main[root@zxt05_da]#lsda_mainda_main.cda_main.odocdriversMakefiles3c44b0-spi [/mnt/yaffs]cd/host/exp/basic/05_da/[/host/exp/basic/05_da]cddrivers/Usingexio.o SizeUsed Not 0 0[/host/exp/basic/05_da]rmmodInputas:[~]./ad_mainda_idda_id:selectbetween0andnum:range0.0~ Inputas:[~]./ad_mainda_idda_id:selectbetween0andnum:range0.0~[/host/exp/basic/05_da]./da_main0CurrentVoltageis1.000000da_main[daid號][數(shù)字],我們可以通過選01來決定輸出到開發(fā)板上的哪個D/A還需要在0.0~4.096V之間來選擇一個輸出電壓下面的例子是用了開發(fā)板上DA0且輸出1V[/host/exp/basic/05_da]./da_main0CurrentVoltageis1.000000CAN掌握CAN學(xué)習(xí)CAN總線通訊原理,了解CAN總線的結(jié)構(gòu),閱讀CAN控制器MCP2510的文檔,掌握MCP2510的相關(guān)寄存器的功能和使用方法。編程實(shí)現(xiàn)兩臺CAN總線控制器之間的通訊。ARM接收CAN總線的數(shù)據(jù)后會在于終端顯示,同時使用CAN控制器發(fā)送的數(shù)據(jù)也會在終端反顯。MCP2510設(shè)置成自回環(huán)的模式,CAN總線數(shù)據(jù)自發(fā)自收。CCAN總軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境總線之一。最初CAN總線被設(shè)計(jì)作為汽車環(huán)境中的微控制器通訊,在車載各電子控制裝置裝備、電子主干系統(tǒng)中均嵌入CAN控制裝置。同一網(wǎng)絡(luò)中允許掛接110個節(jié)點(diǎn)。誤檢定特性也增強(qiáng)了CAN的抗電磁干擾能力。CAN_H=3.5V和CAN_L=1.5V。當(dāng)“顯性”位和“隱性”線數(shù)值將為“顯性”。這種特性,為CAN總線的奠定了基礎(chǔ)。間份額的數(shù)目都是可以通過CAN總線控制器(MCP2510)編程控制的,而時間份額3、CAN總線的MAC同時支持下面兩種CAN總線的幀格式。4、UP-NETARM2410-S上的CAN總線控制器兩個支持過濾器(Fliter、Mask)的接收緩沖區(qū),三個發(fā)送緩支持回環(huán)(LoopBack)3V5.5V#defineEXIOADDR (*(volatileunsignedshort*)0xa000000)//bank5externunsignedshortintEXIOReg;#define #defineCLREXIOBIT(bit)系統(tǒng)中,S3C2410SPI同步MCP2510連。MCP2510的片選信號,通過接在S3C2410的Bank5上的鎖存器(74HC753)來控#defineEXIOADDR (*(volatileunsignedshort*)0xa000000)//bank5externunsignedshortintEXIOReg;#define #defineCLREXIOBIT(bit)#defineMCP2510_Enable() #defineMCP2510_Disable() //向同步串口發(fā)送數(shù)據(jù)(Uhalh)ReadSIOData 表2.6.1MCP2510中110000000000100010100000圖2.6.4命2.6.5圖2.6.8狀態(tài)命通過設(shè)MCP2510中的、、F3個寄存器,實(shí)現(xiàn)不同時鐘下,CAN線通訊的波特率的設(shè)UP-NETARM2410-SMCP2510的輸入時鐘為16MHz可以按照如表2.6.2所示方式定義CAN總線通訊的波特率。2.6.2MCP25101744174417441322MCP2510中有兩Mask過濾器,6Filter濾器??蒀AN點(diǎn)收到指定的一個(或者一組)ID的數(shù)據(jù)。Mask和Filter來控制是否接收數(shù)據(jù),遵循如表2.6.3所示的2.6.3Mask和Filter的控制規(guī)0xx是100是101否110否111是設(shè)置CAN總線波特開啟接收緩沖區(qū),開啟中斷(可選MCP2510中有3個發(fā)送緩沖區(qū),可以循環(huán)使用。也可以只使用一個發(fā)送緩沖區(qū),但是,必MCP2510中有2個接收緩沖區(qū),可以循環(huán)使用。數(shù)據(jù)的發(fā)送和接收均可使用查詢或者中斷模式,這里,為編程簡單,收發(fā)數(shù)據(jù)都采用查詢模式。通過狀態(tài)命令(ReadStatus#ifndefUP_CAN_H#define#ifndefUP_CAN_H#define#defineUPCAN_IOCTRL_SETBAND //setcanbusbandrate#defineUPCAN_IOCTRL_SETID //setcanframeiddata#defineUPCAN_IOCTRL_SETLPBK //setcandeviceinloopbackmodeornormal#define //setafilterforcan#defineUPCAN_IOCTRL_PRINTRIGISTER //printregisterinformationofspiandportE#defineUPCAN_EXCAN //externcanflagtypedeftypedefstructunsignedint //CAN總線unsignedchar //CAN總線unsignedchardlc; intIsExt; int }CanData,CAN設(shè)備設(shè)置接收過濾器結(jié)構(gòu)體參數(shù) 是否接收數(shù)據(jù)按如下規(guī)律 Filter typedefstruct{unsignedintint by #include<stdio.h>#include<fcntl.h>#include<timeh>//#include<sys/types//#include<sys/ipch>#include<sys/ioctlh>#include<pthreadh>#include"up-canh"#defineCAN_DEV staticintcan_fd=-1;#ifdefDEBUG#defineDPRINTF(x...) staticvoid*canRev(void*{inti;}return}#define staticvoidCanSendString(char{CanDataintlen=strlen(pstr);for(;len>MAX_CANDATALEN;len-memcpy(data.data,pstr,write(can_fd,&data,sizeof(data));}write(can_fd,&data,}intmain(intargc,char**{intpthread_tth_can;void*retval;intcharusrname[100]={0,};printf("Erroropening%scandevice\n",CAN_DEV);return1;}ioctl(can_fd,UPCAN_IOCTRL_SETID,id);#ifdefioctl(can_fd,UPCAN_IOCTRL_SETLPBK,/*Createthethreads*/printf("\nPress\"%s\"toquit!\n",quitcmd);printf("\nPressEntertosend!\n"); //Sendusernamesprintf(usrname,"%s:",}intlen;scanf("%s",str);str)==0){} //Sendusername}/*Waituntilproducerandconsumerfinish. return0;}1、編譯CAN[root@zxt/]#cd/arm2410s/kernel-[root@zxtkernel-2410s]# make/arm2410s/kernel-2410s/drivers/char/s3c2410-can-[root@zxt06_can]#make -c-omain.oarmv4l-unknown-linux-gcc-ocanchatmain.o [root@zxt06_can]#lscanchatdriverhardwarehmain.cmain.oMakefileup-can 終端窗口,使用NFSmount開發(fā)主機(jī)的/arm2410s到/host 入CAN驅(qū)動模塊。[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s/host[/mnt/yaffs]cd/host/exp/basic/06_can/driver/[/host/exp/basic/06_can/driver]insmodcan.oUsingWarning:loadingcanwilltaintthekernel:noSeehtsp:// 10-mcp2510initializedcanchatDebug:canrecievethreadPress"\q!"toPressEntertosend!通過CAN總線在終端上收到同樣的字符串。軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境獲取服務(wù)器當(dāng) 文件列獲獲取指定文件獲取HTML類型文客戶獲取純文本文獲取JPG圖像文獲取GIF圖像文解析用戶請求2.7.1獲取服務(wù)器當(dāng) 文件列 獲取指定文獲取HTML類型文獲取純文本文獲取JPG圖像文獲取GIF圖像文解析用戶請請求令、請求的文件名、請求的文件類型。3、數(shù)據(jù)流圖 2.7.21HTTP/1.02002Content-type:3Server:ARMLinux-httpd4Expires:11發(fā)送GIF發(fā)送JPG發(fā)送HTTP解析客戶請求HTTP發(fā)送HTML發(fā)送當(dāng) 信

2.7.3送給連接處理模塊處理。并繼續(xù)進(jìn)行。 2.7.4 HTML發(fā)送HTTP函數(shù)名:intHandleConnect(int函數(shù)名:intParseReq(FILE*f,char函數(shù)名:intPrintHeader(FILE*f,int 函數(shù)名:intDoDir(FILE*f,char參數(shù):參數(shù)1:文件流FILE結(jié)構(gòu)指針,用于表示客戶連接的文件流指針。用于寫入 參數(shù) 13、發(fā)送HTML函數(shù)名:intDoHTML(FILE*f,char14、發(fā)送純文本(TXT)文件內(nèi)函數(shù)名:intDoText(FILE*f,char15、發(fā)送JPEG函數(shù)名:intDoJpeg(FILE*f,char16、發(fā)送GIF函數(shù)名:intDoGif(FILE*f,char設(shè)置信號處理設(shè)置信號處理進(jìn)入根命令行處理建立TCP流綁端口設(shè)置允許客戶連接數(shù)量偵聽客戶連接客戶連接請求

2.7.5打打開文件描述字,并建立文件描述連接信息獲取Refferer字段信息賦值給Refferer全局變量獲取content_length字段信息調(diào)用客戶請求解析模塊關(guān)閉文件流2.7.6 ?[是下 信發(fā)送協(xié)議頭發(fā)送協(xié)議頭Content-type:發(fā)送協(xié)議頭2.7.74、發(fā)送HTTP協(xié)議數(shù)據(jù)頭模塊設(shè)函數(shù)定義為:intPrintHeader(FILE*f,int發(fā)送請求成功信息:HTTP/1.0200OKswitch{casecasecasecase}fprintf(f,"Server:AMRLinux-httpdfprintf(f,"Expires: [root@zxt09_httpd]#makearmv4l-unknown-linux-gcc-DHTTPD_ armv4l-unknown-linux-gcc-DHTTPD_ -c-ocopy.carmv4l-unknown-linux-gcc-o../bin/httpdhttpd.ocopy.o-lpthreadarmv4l-unknown-linux-gcc-ohttpdhttpd.ocopy.o-lpthread[root@zxt09_httpd]#lscopy.c httpd.cindex.htmlstartinghttpd...pressqtowaitforhttp1,觀察在客戶機(jī)的瀏覽器中的連接請求結(jié)果(如圖2.7.8)和在開發(fā)板上的服務(wù)器的打印信2.7.8IERS-485掌握ARM學(xué)習(xí)RS485通信原理,閱讀MAX485文檔,掌握其使用方法,熟練ARM系統(tǒng)硬件的UART使用方法編程實(shí)現(xiàn)RS485通信的基本收發(fā)功能利用示波器觀測MAX485的輸入和輸出波形,將兩個平臺連接起來利用PC鍵盤發(fā)送數(shù)據(jù),超級終端觀察收到的數(shù)據(jù)。CARM軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARM-LINUX開發(fā)環(huán)境RS-485是串行數(shù)據(jù)接口標(biāo)準(zhǔn),最初是由電子工業(yè)(EIA)制訂并發(fā)布的.RS-485標(biāo)準(zhǔn)自己的通信協(xié)議。ABA、B2~+6V,是一個邏輯狀態(tài),負(fù)電平在-2~6VCRS-485“使能”“使能”端是用于控制發(fā)送驅(qū)動器與傳輸線的切斷與連接。當(dāng)“使能”端起作用時,RS-485電氣規(guī)大傳輸速率僅為1Mb/s.RS-4852.8.1,2.8.2全雙工通信的有SN75179、SN75180、MAX488~MAX491、MAX1482等。3、本實(shí)驗(yàn)RS-485

33

8

RS485TXD

121234512345

1-2RS4852-32.8.3RS-485能,GPH1為0時是接收使能.MAX485的管腳功能如表2.8.1:13ReceiverOutput:IfA>Bby200mV,ROwillbehigh;If<Bby200mV,ROwillbe24ReceiverOutputEnable.ROisenabledwhenREislow;ROishighimpedancewhenREishigh.35DriverOutputEnable.Thedriveroutputs,YandZ,areenabledbybringingDEhigh.TheyarehighimpedancewhenDEislow.Ifthedriveroutputsareenabled,thepartsfunctionaslinedrivers.Whiletheyarehighimpedance,theyfunctionaslinereceiversifREis46DriverInput.AlowonDIforcesoutputYlowandoutputhigh.Similarly,ahighonDIforcesoutputYhighandoutputZlow.57——YNoninvertingDriver——ZInvertingDriver68ANoninvertingReceiverInputandNoninverting——ANoninvertingReceiver71BInvertingReceiverInputandInvertingDriver——BInvertingReceiver82PositiveSupply:4.75V≤VCC≤——NoConnect—notinternallyauthor:wb< 2005-6-13#include<stdio.h>#include<stdlibh>#include<fcntl.h>#include<termiosh>#define_485_IOCTRL_RE2DE //sendorreceive#define_485_RE #define //#defineBAUDRATEB115200#defineCOM2"/dev/tts/2"staticvoidhelp_ { S3c2410485uarttestprogram.\n"); arg0:485-test\n"); arg1:baudrate,defaultforinput115200\n"); arg2:select485mode:\n"); rev:receivedata. send:senddata,accessdatafromconsole.\n"); -hor--help: }intmain(intargc,char{int charbuf[1024]={0},c='\n',*d;intif((argc>3)||(argc== }fd485=if(fd485<return(-1);}if( 2<0){}printf("####s3c2410485devicebaudrateset}tcgetattr(2,&oldtio); /*savecurrentmodemsettings*/tcgetattr(2,&newstdtio); /*getworkingstdtio*/newtio.c_cflag=baud|CRTSCTS|CS8|CLOCAL|CREAD;newtio.c_iflag=IGNPAR;/*inputnewtio.c_oflag&=~(ICANON|ECHO|ECHOE|/*output/*nowcleanthemodemlineandactivatethesettingsformodem*/ 2,TCIFLUSH); 2,TCSANOW,&newtio);/*setattrib if(strncmp(argv[2],"send")==0){ioctl(fd485,_485_IOCTRL_RE2DE,_485_DE//set485mode:printf("####s3c2410485devicereadytosend####\n");#if1{intfor(i='0';i<='z';i++)printf("%c",i); if(i==i='0'-}}#if0while(1)d=buf;while(*d!='\0') } 2,&c,}}elseif(strncmp(argv[2],"rev")==0)ioctl(fd485,_485_IOCTRL_RE2DE,_485_RE//set485mode:do{ 2,&c,1);/*comport*/printf("%c",c);}while(c!=} return0;}{casecase9600:case19200:case38400:case57600:case115200:returnreturn-}}1、編譯RS-485[root@zxt/]#cd/arm2410s/kernel-[root@zxtkernel-2410s]# 進(jìn)入Main/Characterdevices菜單,選擇485為模塊加載2.8.4Characterdevicesmake/arm2410s/kernel-2410s/drivers/char/s3c2410-[root@zxt12_485]#make[root@zxt12_485]#485.IAB485.IMB485.PFI 485-test.c 485.IAD485.IMD 485.PRI485-test485-test.o3、調(diào) 終端窗口,使用NFSmount開發(fā)主機(jī)的/arm2410s到/host 里里的驅(qū)動模塊是為了使用方便從/host/kernel-2410s/drivers/char/2.8.5 ARM的生成方法。使用RedhatLinux9.0操作系統(tǒng)環(huán)境及ARM編譯器,編譯直流電機(jī)的驅(qū)動模C語言的基礎(chǔ)知識、程序調(diào)試的基礎(chǔ)知識和方法,Linux的基本操作。Linux軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+ +ARMLINUX開發(fā)環(huán)境1、直流電動機(jī) а,若改變調(diào)制晶體管的開與關(guān)的時間,也就是說通過改變導(dǎo)通角а的大小,如圖2.9.1所示,來改變加在負(fù)載上的平均電壓的大小,以實(shí)現(xiàn)對電()變速控制。在變速控制中,系統(tǒng)采用直流電 的功率轉(zhuǎn)換電路或者采用"H"橋式驅(qū)動,或者采用"T"式驅(qū)動。由于"T"式電路圖2.9.1脈寬調(diào)制 2、直流電動機(jī) 傳送到負(fù)載(電動機(jī))上的功率值決定于開關(guān)頻率、導(dǎo)通角度及負(fù)載電感的大小。5kHz,小功率時(100W,5A以下)可以取高些,這決定于晶體管的特性。對于絕緣柵雙圖2.9.2(a)等效電 圖2.9.2 電路中電流和電壓波討電感所儲的能量通過續(xù)流二極管VD繼續(xù)流動,而儲藏的能量呈下降的趨勢。3、直流電動 功率電路。電路中各點(diǎn)波形如圖2.9.4所示。其中信號延遲電路是為了防止"共態(tài)直通"而=·在t1’—t2期間,Ub1>0Ub40,V1V4導(dǎo)通,V2V3截止,電樞電流沿回路l流通。·t2T+t1’期間,Ub1<0Ub40,V1V4截止,Ub20Ub3>0V2V3VD4、VD5。受二極管正向壓降的限制,V2V3不能·反向運(yùn)轉(zhuǎn)時,具有相似圖 制部分省去了三角波產(chǎn)生電路、脈沖調(diào)制電路和信號延遲及信號分配電路,取而代之的是S3C2410的定時器0、1組成的雙極性發(fā)生器。Configuresthetwo8-bit位DeadThese8bitsdeterminethedeadzonelength.The1timeofthedeadzonelengthisequaltothatoftimerPrescalerThese8bitsdetermineprescalervalueforTimer2,3PrescalerThese8bitsdeterminepr

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論