嵌入式系統(tǒng)概論第十一章_第1頁
嵌入式系統(tǒng)概論第十一章_第2頁
嵌入式系統(tǒng)概論第十一章_第3頁
嵌入式系統(tǒng)概論第十一章_第4頁
嵌入式系統(tǒng)概論第十一章_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第11章基礎(chǔ)實(shí)驗(yàn)本章首先通過實(shí)驗(yàn)讓學(xué)生熟悉Linux系統(tǒng)下嵌入式開發(fā)的過程,進(jìn)而掌握多線程程序設(shè)計(jì)的基礎(chǔ),然后介紹了嵌入式開發(fā)所涉及的串口、A/D及D/A接口、CAN總線、RS-485通信、直流電機(jī)和LED的工作原理及編程方法,每個(gè)實(shí)驗(yàn)的設(shè)計(jì)都有不同的針對性,以便讀者掌握嵌入式開發(fā)的基礎(chǔ)知識(shí)。目錄11.1熟悉Linux開發(fā)環(huán)境11.2多線程應(yīng)用程序設(shè)計(jì)11.3串行端口程序設(shè)計(jì)11.4A/D接口實(shí)驗(yàn)11.5D/A接口實(shí)驗(yàn)11.6CAN總線通訊實(shí)驗(yàn)11.7RS-485通訊實(shí)驗(yàn)11.8直流電動(dòng)機(jī)實(shí)驗(yàn)11.97段LED和點(diǎn)陣式LED實(shí)驗(yàn)

11.1.1實(shí)驗(yàn)?zāi)康氖煜inux開發(fā)環(huán)境,掌握Linux下的編程方法和編譯過程,以及ARM開發(fā)板的使用和開發(fā)環(huán)境的設(shè)置,使用NFS將上位機(jī)上編譯好的文件下載到下位機(jī)上運(yùn)行,了解嵌入式開發(fā)的基本過程。

11.1.2實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))。11.1熟悉Linux開發(fā)環(huán)境11.1.3實(shí)驗(yàn)內(nèi)容

本次實(shí)驗(yàn)使用RedhatLinux9.0操作系統(tǒng),學(xué)習(xí)Linux下的C語言編程、編譯及運(yùn)行過程,在上位機(jī)的“/labs”目錄下,創(chuàng)建一個(gè)新目錄,如Lab01,然后在該目錄下編寫以下三個(gè)C語言程序及相應(yīng)的Makefile文件。

1.使用輸出函數(shù)printf顯示一串提示信息“Hello,welcometoembeddedworld!”,源文件可命名為“hello.c”;

2.使用包含在time.h中的三個(gè)函數(shù)gmtime、time、asctime顯示當(dāng)前的日期和時(shí)間,可將源文件命名為“showtime.c”;

3.使用C語言中的流文件操作函數(shù),編程顯示一個(gè)文本文件的內(nèi)容,可將源文件命名為“cat_txt.c”;在上位機(jī)上使用“make”編譯調(diào)試源程序,然后使用NFS方式連接上位機(jī)和下位機(jī),在下位機(jī)上運(yùn)行程序查看結(jié)果。11.1.4實(shí)驗(yàn)步驟

三個(gè)C語言程序的編輯、編譯及運(yùn)行過程類似,故本次實(shí)驗(yàn)以“hello.c”為例,介紹相關(guān)步驟:

1.編輯源程序

2.編寫Makefile文件

3.編譯應(yīng)用程序

4.下載調(diào)試11.1.5習(xí)題

1.Makefile是如何工作的?其中的宏定義分別是什么意思?

2.嵌入式開發(fā)的基本過程有哪幾步?11.2多線程應(yīng)用程序設(shè)計(jì)

11.2.1實(shí)驗(yàn)?zāi)康恼莆誏inux系統(tǒng)下多線程程序設(shè)計(jì)的基本原理和API,分析求解生產(chǎn)者-消費(fèi)者問題的實(shí)例程序“pthread.c”的源代碼,理解多線程間的資源競爭、共享和同步,學(xué)習(xí)pthread庫函數(shù)的使用。11.2.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))。11.2.3實(shí)驗(yàn)內(nèi)容1.分析“pthread.c”的源代碼,掌握幾個(gè)重要的pthread庫函數(shù)的使用;2.掌握互斥鎖、條件變量和信號量的使用方法;3.運(yùn)行“make”產(chǎn)生可執(zhí)行文件“pthread”,使用NFS方式連接上位機(jī)和下位機(jī),運(yùn)行程序查看結(jié)果。11.2.4多線程程序設(shè)計(jì)

學(xué)習(xí)多線程程序設(shè)計(jì)相關(guān)的知識(shí),了解生產(chǎn)者-消費(fèi)者問題。

11.2.5實(shí)驗(yàn)步驟

1.使用命令“cd/labs/Lab_2”進(jìn)入上位機(jī)多線程實(shí)驗(yàn)?zāi)夸?,使用vi編輯器閱讀理解源代碼,運(yùn)行“make”產(chǎn)生“pthread”可執(zhí)行文件。

2.切換到下位機(jī)的minicom

終端窗口,使用NFSmount上位機(jī)的“/labs”目錄到下位機(jī)“/host”目錄。進(jìn)入下位機(jī)的“/host/Lab_2”目錄,運(yùn)行“./pthread”,查看運(yùn)行結(jié)果。11.2.6習(xí)題1.在生產(chǎn)者-消費(fèi)中實(shí)例中,加入一個(gè)新的線程用于處理鍵盤的輸入,并在按鍵為ESC時(shí)鐘指所有線程。2.使用信號量控制方式編寫多線程程序,設(shè)4個(gè)線程,其中兩個(gè)線程負(fù)責(zé)從文件中讀取數(shù)據(jù)到公共的緩沖區(qū),另兩個(gè)線程從緩沖區(qū)讀取數(shù)據(jù)做不同的處理(加和乘運(yùn)算)。3.線程的優(yōu)先級的控制。11.3串行端口程序設(shè)計(jì)

11.3.1實(shí)驗(yàn)?zāi)康恼莆誂RM的串口工作原理,學(xué)習(xí)串口的主要屬性及設(shè)置方法,熟悉I/O函數(shù)的使用,學(xué)習(xí)使用多線程來完成串口的收發(fā)處理,學(xué)習(xí)編程實(shí)現(xiàn)ARM的UART通信及利用串口通信的方法。11.3.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.3.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)串行通信原理,了解串行通信控制器;2.讀懂串口編程實(shí)例的源代碼,學(xué)習(xí)終端I/O函數(shù)的使用方法;3.學(xué)習(xí)將多線程編程應(yīng)用到串口的接收和發(fā)送程序設(shè)計(jì)中,利用串口,將宿主機(jī)上某個(gè)文本文件內(nèi)容傳輸給開發(fā)板,輸出顯示。1.異步串行通信學(xué)習(xí)異步串行通信的基本概念,掌握串行接口標(biāo)準(zhǔn);2.串行接口及其編程技術(shù)了解S3C2410的串行接口,學(xué)習(xí)串口編程技術(shù),通過實(shí)例掌握串口編程方法。11.3.4實(shí)驗(yàn)原理1.使用命令“cd/labs/Lab_3”進(jìn)入實(shí)驗(yàn)?zāi)夸洠褂胿i編輯器閱讀理解源代碼“term.c”。2.運(yùn)行“make”命令產(chǎn)生“term”可執(zhí)行文件。3.切換到下位機(jī)的minicom窗口,使用NFS掛載命令將上位機(jī)的“/labs”掛載到下位機(jī)的“/host”目錄。4.進(jìn)入“/host/Lab_3”目錄,運(yùn)行“./term”命令,查看運(yùn)行結(jié)果。11.3.5實(shí)驗(yàn)步驟11.4A/D接口實(shí)驗(yàn)

11.4.1實(shí)驗(yàn)?zāi)康氖煜3C2410芯片的8通道10位A/D控制器及相應(yīng)寄存器,了解Linux環(huán)境下對A/D操作與控制方法,編程實(shí)現(xiàn)ARM系統(tǒng)的A/D功能。11.4.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.4.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)A/D轉(zhuǎn)換接口原理,了解實(shí)現(xiàn)A/D轉(zhuǎn)換所需的系統(tǒng)軟、硬件要求。2.閱讀ARM芯片文檔,掌握ARM的A/D相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的A/D相關(guān)接口。3.利用外部模擬信號編程實(shí)現(xiàn)ARM循環(huán)采集0~2路通道,并且在超級終端上顯示。1.A/D轉(zhuǎn)換器

A/D轉(zhuǎn)換器是模擬信號源和CPU之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲(chǔ)、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D轉(zhuǎn)換是不可缺少的。

(1)雙積分型的A/D轉(zhuǎn)換器11.4.4實(shí)驗(yàn)原理

(a)電路工作原理圖

(b)雙積分圖示圖11-9雙積分型的A/D轉(zhuǎn)換器(2)逐次逼近型的A/D轉(zhuǎn)換器逐次逼近型A/D轉(zhuǎn)換器工作原理是:將被測電壓和由D/A轉(zhuǎn)換生成的電壓進(jìn)行比較,用對分搜索的方法來逐次逼近被測電壓。

原理框圖如11-10(a)所示,電路內(nèi)部由4個(gè)部分組成:逐次逼近寄存器SAR、D/A轉(zhuǎn)換器、電壓比較器和控制邏輯電路。它的實(shí)質(zhì)是逐次把設(shè)定的SAR寄存器中的數(shù)字量經(jīng)D/A轉(zhuǎn)換后得到電壓Vc

與待轉(zhuǎn)換模擬電壓V,進(jìn)行比較。

(a)逐次逼近式A/D轉(zhuǎn)換器原理框圖(b)逐次逼近式A/D轉(zhuǎn)換過程圖11-10逐次逼近式A/D轉(zhuǎn)換器

比較時(shí),先從SAR的最高位開始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過程如下:轉(zhuǎn)換前,先將SAR寄存器各位清零。轉(zhuǎn)換開始時(shí),控制邏輯電路先設(shè)定SAR寄存器的最高位為“1”,其余位為“0”,此試探值經(jīng)D/A轉(zhuǎn)換成電壓Vc,然后將Vc

與模擬輸入電壓Vx

比較。

如果Vx≥Vc,說明SAR最高位的“1”應(yīng)予保留;如果Vx<Vc,說明SAR該位應(yīng)予清零。然后再對SAR寄存器的次高位置“1”,依上述方法進(jìn)行D/A轉(zhuǎn)換和比較。如此重復(fù)上述過程,直至確定SAR寄存器的最低位為止。過程結(jié)束后,狀態(tài)線改變狀態(tài),表明已完成一次轉(zhuǎn)換。

最后,逐次逼近寄存器SAR中的內(nèi)容就是與輸入模擬量V相對應(yīng)的二進(jìn)制數(shù)字量。顯然A/D轉(zhuǎn)換器的位數(shù)N決定于SAR的位數(shù)和D/A的位數(shù)。圖11-10(b)表示四位A/D轉(zhuǎn)換器的逐次逼近過程。轉(zhuǎn)換結(jié)果能否準(zhǔn)確逼近模擬信號,主要取決于SAR和D/A的位數(shù)。位數(shù)越多,越能準(zhǔn)確逼近模擬量,但轉(zhuǎn)換所需的時(shí)間也越長。2.A/D轉(zhuǎn)換的重要指標(biāo)

(1)分辨率(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位二進(jìn)制數(shù),最低位所具有的權(quán)值,就是它的分辨率。

(2)精度(Accuracy)

精度有絕對精度(AbsoluteAccuracy)和相對精度(RelativeAccuracy)兩種表示方法。絕對誤差:在一個(gè)轉(zhuǎn)換器中,對應(yīng)于一個(gè)數(shù)字量的實(shí)際模擬輸入電壓和理想的模擬輸入電壓之差并非是一個(gè)常數(shù)。我們把它們之間的差的最大值,定義為“絕對誤差”。通常以數(shù)字量的最小有效位(LSB)的分?jǐn)?shù)值來表示絕對誤差,例如:±1LSB等。絕對誤差包括量化誤差和其它所有誤差。相對誤差:是指整個(gè)轉(zhuǎn)換范圍內(nèi),任一數(shù)字量所對應(yīng)的模擬輸入量的實(shí)際值與理論值之差,用模擬電壓滿量程的百分比表示。例如,滿量程為10V,10位A/D芯片,若其絕對精度為±1/2LSB,則其最小有效位的量化單位:9.77mV,其絕對精度為=4.88mV,其相對精度為0.048%。

(3)轉(zhuǎn)換時(shí)間(ConversionTime)

轉(zhuǎn)換時(shí)間是指完成一次A/D轉(zhuǎn)換所需的時(shí)間,即由發(fā)出啟動(dòng)轉(zhuǎn)換命令信號到轉(zhuǎn)換結(jié)束信號開始有效的時(shí)間間隔。轉(zhuǎn)換時(shí)間的倒數(shù)稱為轉(zhuǎn)換速率。例如AD570的轉(zhuǎn)換時(shí)間為25us,其轉(zhuǎn)換速率為40KHz。(4)電源靈敏度(powersupplysensitivity)

電源靈敏度是指A/D轉(zhuǎn)換芯片的供電電源的電壓發(fā)生變化時(shí),產(chǎn)生的轉(zhuǎn)換誤差。一般用電源電壓變化1%時(shí)相當(dāng)?shù)哪M量變化的百分?jǐn)?shù)來表示。

(5)量程量程是指所能轉(zhuǎn)換的模擬輸入電壓范圍,分單極性、雙極性兩種類型。例如,單極性量程為0~+5V,0~+10V,0~+20V;雙極性量程為-5~+5V,-10~+10V。(6)輸出邏輯電平多數(shù)A/D轉(zhuǎn)換器的輸出邏輯電平與TTL電平兼容。在考慮數(shù)字量輸出與微處理的數(shù)據(jù)總線接口時(shí),應(yīng)注意是否要三態(tài)邏輯輸出,是否要對數(shù)據(jù)進(jìn)行鎖存等。

(7)工作溫度范圍由于溫度會(huì)對比較器、運(yùn)算放大器、電阻網(wǎng)絡(luò)等產(chǎn)生影響,故只在一定的溫度范圍內(nèi)才能保證額定精度指標(biāo)。一般A/D轉(zhuǎn)換器的工作溫度范圍為(0~700C),軍用品的工作溫度范圍為(-55~+1250C)。3.ARM自帶的10位A/D轉(zhuǎn)換器(1)ARMS3C2410的A/D轉(zhuǎn)換器

ARMS3C2410芯片自帶一個(gè)8路10位A/D轉(zhuǎn)換器,并且支持觸摸屏功能。ARM2410開發(fā)板只用作3路A/D轉(zhuǎn)換器,其最大轉(zhuǎn)換率為500K,非線性度為正負(fù)1.5位,其轉(zhuǎn)換時(shí)間可以通過下式計(jì)算:如果系統(tǒng)時(shí)鐘為50MHz,比例值為49,則:A/D轉(zhuǎn)換器頻率=50MHz/(49+1)=1MHz

轉(zhuǎn)換時(shí)間=1/(1MHz/5cycles)=1/200kHz(相當(dāng)于5us)=5usA/D轉(zhuǎn)換的數(shù)據(jù)可以通過中斷或查詢的方式來訪問,如果使用中斷方式,全部的轉(zhuǎn)換時(shí)間(從A/D轉(zhuǎn)換的開始到數(shù)據(jù)讀出)要更長。如果是查詢方式,則要檢測ADCCON[15](轉(zhuǎn)換結(jié)束標(biāo)志位)來確定從ADCDAT寄存器讀取的數(shù)據(jù)是否是最新的轉(zhuǎn)換數(shù)據(jù)。A/D轉(zhuǎn)換開始的另一種方式是將ADCCON[1]置為1,這時(shí)只要有讀轉(zhuǎn)換數(shù)據(jù)的信號,A/D轉(zhuǎn)換才會(huì)同步開始。(2)A/D的相關(guān)寄存器與A/D相關(guān)的寄存器主要有A/D轉(zhuǎn)換控制寄存器(ADCCON)和A/D轉(zhuǎn)換數(shù)據(jù)寄存器ADCDAT0。A/D轉(zhuǎn)換控制寄存器ADCCON的地址和意義如下表11-5、表11-6所示。表11-5A/D轉(zhuǎn)換控制寄存器的地址寄存器地址讀/寫描述復(fù)位值A(chǔ)DCCON0x58000000R/WADC控制寄存器0x3FC4表11-6A/D轉(zhuǎn)換控制寄存器的位描述ADCCON位描述復(fù)位值ECFLG[15]轉(zhuǎn)換標(biāo)志位(只讀)0=A/D轉(zhuǎn)換1=A/D轉(zhuǎn)換結(jié)束0PRSCEN[14]A/D轉(zhuǎn)換預(yù)分頻使能0=禁止1=允許0PRSCVL[13:6]A/D轉(zhuǎn)換預(yù)分頻值數(shù)據(jù)值:1-2550xFFSEL_MUX[5:3]通道號選擇000=AIN0001=AIN1010=AIN2011=AIN3100=AIN4101=AIN5110=AIN6111=AIN7(XP)0STDBM[2]Standby模式選擇0=正常操作模式1=Standby模式1READ_START[1]讀操作使能轉(zhuǎn)換0=禁止1=使能0ENABLE_START[0]轉(zhuǎn)換使能位如果READ_START開啟,則此位失效0=無操作1=A/D轉(zhuǎn)換開始,在開始后此位自動(dòng)清零0ADCCON寄存器的第15位是轉(zhuǎn)換結(jié)束標(biāo)志位,為1時(shí)表示轉(zhuǎn)換結(jié)束。第14位表示A/D轉(zhuǎn)換預(yù)定標(biāo)器使能位,1表示該預(yù)定標(biāo)器開啟。第13-6位表示預(yù)定標(biāo)器的數(shù)值,需要注意的是如果這里的值為N,則除數(shù)因子是(N+1)。第5-3位表示模擬輸入通道選擇位。第2位表示待用模式選擇位。第1位是讀使能A/D轉(zhuǎn)換開始位,第0位置1則A/D轉(zhuǎn)換開始(如果第1位置1,則此位是無效的)。

寄存器地址讀/寫描述復(fù)位值A(chǔ)DCDAT00x5800000CRA/D轉(zhuǎn)換數(shù)據(jù)寄存器-表11-7A/D轉(zhuǎn)換數(shù)據(jù)寄存器ADCDAT0是A/D轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器,其地址如表11-7所示。該寄存器的前10位([9:0])表示轉(zhuǎn)換后的結(jié)果,全為1(0xFF)時(shí)為滿量程3.3V。(3)A/D轉(zhuǎn)換器在擴(kuò)展板的連接

A/D轉(zhuǎn)換器在擴(kuò)展板的接法如圖11-11所示,前三路通過電位器接到3.3v電源上。圖11-11A/D轉(zhuǎn)換器在擴(kuò)展板上的接法4.A/D轉(zhuǎn)換器編程

(1)A/D轉(zhuǎn)換器驅(qū)動(dòng)程序結(jié)構(gòu)在Linux操作系統(tǒng)中,用戶程序不能直接對上述寄存器端口進(jìn)行操作,而需調(diào)用操作系統(tǒng)原語來完成讀取A/D轉(zhuǎn)換結(jié)果的操作。A/D轉(zhuǎn)換器被作為一個(gè)設(shè)備文件供應(yīng)用程序訪問,相應(yīng)的驅(qū)動(dòng)程序提供了4個(gè)操作函數(shù):open():打開A/D轉(zhuǎn)換器,并初始設(shè)置通道號和轉(zhuǎn)換因子。write():設(shè)置A/D轉(zhuǎn)換通道號和轉(zhuǎn)換因子。read():讀取A/D轉(zhuǎn)換結(jié)果。close():關(guān)閉A/D轉(zhuǎn)換器。用戶程序讀A/D轉(zhuǎn)換器驅(qū)動(dòng)程序的總體結(jié)構(gòu)如圖11-12所示。圖11-12A/D轉(zhuǎn)換器的總體結(jié)構(gòu)在上述模塊中,初始化函數(shù)用于加載整個(gè)設(shè)備驅(qū)動(dòng)程序,中斷處理程序用于處理由A/D轉(zhuǎn)換引起的中斷,open、read和write等則提供了Linux標(biāo)準(zhǔn)文件訪問的功能。對于A/D轉(zhuǎn)換器,通過write調(diào)用可以配置A/D轉(zhuǎn)換器的參數(shù),通過read操作可以讀取A/D轉(zhuǎn)換器的結(jié)果。(2)A/D轉(zhuǎn)換驅(qū)動(dòng)程序系統(tǒng)提供了A/D轉(zhuǎn)換器驅(qū)動(dòng)程序“s3c2410-adc.o”,將A/D轉(zhuǎn)換器作為一個(gè)字符設(shè)備文件,用戶只需在自己的程序里使用open、read、write、release等內(nèi)核函數(shù)即可對其進(jìn)行操作。本實(shí)驗(yàn)采用模塊方式加載,可在下位機(jī)的“/mnt/yaffs/ad/”中找到A/D的驅(qū)動(dòng)程序s3c2410-adc.o,使用命令“insmods3c2410-adc.o”加載即可。(3)用戶程序用戶程序只需要調(diào)用A/D轉(zhuǎn)換驅(qū)動(dòng)程序提供的open、write、read、close等函數(shù),就可將A/D轉(zhuǎn)換器當(dāng)作一個(gè)設(shè)備文件進(jìn)行訪問,讀取A/D轉(zhuǎn)換結(jié)果。詳細(xì)代碼放在本次實(shí)驗(yàn)?zāi)夸浿小?.使用命令“cd/labs/Lab_4”進(jìn)入本次實(shí)驗(yàn)?zāi)夸洠褂胿i編輯器閱讀理解源代碼。2.編譯用戶程序,運(yùn)行“make”命令產(chǎn)生可執(zhí)行文件“ad”。3.下載調(diào)試,切換到下位機(jī)的minicom窗口,使用命令“mount–tnfs192.168.0.252:/labs/host”命令,將上位機(jī)的“/labs”目錄掛載到下位機(jī)的“/host”目錄。4.使用命令“cd/labs/Lab_4/drivers”進(jìn)入相應(yīng)目錄,查看是否存在A/D轉(zhuǎn)換驅(qū)動(dòng)程序“s3c2410-adc.o”,若存在則使用命令“insmods3c2410-adc.o”以模塊方式加載該驅(qū)動(dòng)程序。5.進(jìn)入“/host/Lab_4/”目錄,執(zhí)行“./ad”程序,可以通過調(diào)節(jié)開發(fā)板上的三個(gè)黃色的電位器,來查看a0、a1、a2的變化。11.4.5實(shí)驗(yàn)步驟1.修改用戶程序,將三個(gè)電位器的多次轉(zhuǎn)換的結(jié)果寫入一個(gè)文件中。2.逐次逼近型的A/D轉(zhuǎn)換器原理是什么?3.A/D轉(zhuǎn)換的重要指標(biāo)包括哪些?4.ARM的A/D功能的相關(guān)寄存器有哪幾個(gè),對應(yīng)的地址是什么?5.如何啟動(dòng)ARM開始轉(zhuǎn)換A/D,有幾種方式?轉(zhuǎn)換開始時(shí)ARM是如何知道轉(zhuǎn)換哪路通道的?如何判斷轉(zhuǎn)換結(jié)束?11.4.6習(xí)題11.5D/A接口實(shí)驗(yàn)

11.5.1實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)D/A轉(zhuǎn)換原理,掌握MAX504D/A轉(zhuǎn)換芯片的使用方法,了解D/A驅(qū)動(dòng)程序加入內(nèi)核的方法。11.5.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.5.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)D/A接口原理。2.了解實(shí)現(xiàn)D/A系統(tǒng)對于系統(tǒng)的軟件和硬件要求。3.閱讀MAX504芯片文檔,掌握其使用方法。4.編程實(shí)現(xiàn)正弦波信號的輸出,利用示波器試驗(yàn)輸出。1.D/A轉(zhuǎn)換器原理

D/A轉(zhuǎn)換器的內(nèi)部電路構(gòu)成無太大差異,一般按輸出是電流還是電壓、能否作乘法運(yùn)算等進(jìn)行分類。大多數(shù)D/A轉(zhuǎn)換器由電阻陣列和n個(gè)電流開關(guān)(或電壓開關(guān))構(gòu)成。按數(shù)字輸入值切換開關(guān),產(chǎn)生比例于輸入的電流(或電壓)。(1)電壓輸出型(如TLC5620)一般采用內(nèi)置輸出放大器以低阻抗輸出。直接輸出電壓的器件僅用于高阻抗負(fù)載,由于無輸出放大器部分的延遲,故常作為高速D/A轉(zhuǎn)換器使用。(2)電流輸出型(如THS5661A)電流輸出型D/A轉(zhuǎn)換器很少直接利用電流輸出,大多外接電流—電壓轉(zhuǎn)換電路得到電壓輸出。(3)乘算型(如AD7533)D/A轉(zhuǎn)換器中有使用恒定基準(zhǔn)電壓的,也有在基準(zhǔn)電壓輸入上加交流信號的,后者能得到數(shù)字輸入和基準(zhǔn)電壓輸入相乘的結(jié)果而輸出,因而稱為乘算型D/A轉(zhuǎn)換器。(4)一位D/A轉(zhuǎn)換器一位D/A轉(zhuǎn)換器將數(shù)字值轉(zhuǎn)換為脈沖寬度調(diào)制或頻率調(diào)制的輸出,然后用數(shù)字濾波器作平均化而得到一般的電壓輸出(又稱位流方式),用于音頻等場合。11.5.4實(shí)驗(yàn)原理2.D/A轉(zhuǎn)換器的主要技術(shù)指標(biāo)

(1)分辯率(Resolution)

分辨率用輸入二進(jìn)制數(shù)的有效位數(shù)表示。在分辨率為n位的D/A轉(zhuǎn)換器中,輸出電壓能區(qū)分2n個(gè)不同的輸入二進(jìn)制代碼狀態(tài),能給出2n個(gè)不同等級的輸出模擬電壓。分辨率也可以用D/A轉(zhuǎn)換器的最小模擬輸出量(對應(yīng)數(shù)字量僅最低位為“1”)與最大量(對應(yīng)數(shù)字量所有有效位為“1”)之比來表示。(2)建立時(shí)間(SettingTime)

這是D/A的一個(gè)重要性能參數(shù),通常定義為:在數(shù)字輸入端發(fā)生滿量程碼的變化以后,D/A的模擬輸出穩(wěn)定到最終值1/2LSB時(shí),所需要的時(shí)間。其他指標(biāo)還有線性度(Linearity),轉(zhuǎn)換精度,溫度系數(shù)/漂移。

3.MAX50410位D/A轉(zhuǎn)換器的特點(diǎn)本開發(fā)板上使用的MAX504是10位D/A轉(zhuǎn)換器,其特點(diǎn)如下:由單個(gè)5V電源供電電壓輸出緩沖內(nèi)部2.048V參考電壓電壓不隨溫度變化可變的輸出范圍:0V~VDD,VSS~VDD

上電復(fù)位串行輸出MAX504D/A轉(zhuǎn)換器各個(gè)管腳的功能如表11-8所示。表11-8MAX50410位D/A轉(zhuǎn)換器的管腳定義管腳名稱功能1BIPOFF雙級性偏移/增益寄存器2DIN串行數(shù)據(jù)輸入3CLR清零。異步使DAC寄存器所有位數(shù)設(shè)置為04SCLK串行時(shí)鐘輸入5CS片選,低電平有效6DOUT菊花鏈串行數(shù)據(jù)輸出7DGND數(shù)字地8AGND模擬地9REFIN參考輸入10REFOUT參考輸出,2.048V,不使用時(shí)連接到VDD11VSS負(fù)電源供電12VOUTDA輸出DAC13VDD正電源供電14RFB反饋電阻4.MAX504在開發(fā)板上的連接MAX504在開發(fā)板中的連接如圖11-14所示。圖11-14MAX504在開發(fā)板中的連接

RFB連接VOUT、BIPOFF連接AGND,使得輸出電壓范圍為0~2VREFIN,即0~4.069V。時(shí)鐘和輸入、輸出信號分別與同步串口的時(shí)鐘、發(fā)送和接收端相連。MAX504可接收12位的數(shù)據(jù),但低兩位不起作用。所以發(fā)送數(shù)據(jù)時(shí)應(yīng)先將數(shù)據(jù)左移兩位,然后先發(fā)送高八位,再發(fā)送低八位數(shù)據(jù)。5.MAX504(10位D/A)轉(zhuǎn)換器編程(1)D/A轉(zhuǎn)換器驅(qū)動(dòng)程序在上位機(jī)的“/labs/Lab_5/drivers”目錄下提供了D/A轉(zhuǎn)換器驅(qū)動(dòng)程序“s3c2410-exio.o”,用戶可以使用該驅(qū)動(dòng)程序提供的open、ioctl、release等函數(shù)操作D/A轉(zhuǎn)換器。用戶還可在該目錄下找到其源程序“s3c2410-exio.c”進(jìn)行分析。之間采樣40個(gè)點(diǎn)生成正弦波信號輸出。參考代碼見“/labs/Lab_5”下的程序“da_sin.c”。(2)用戶程序本實(shí)驗(yàn)編寫用戶程序,在1.閱讀理解源碼,進(jìn)入上位機(jī)的“/labs/Lab_5”目錄,使用vi編輯器閱讀理解源代碼。2.運(yùn)行“make”命令,產(chǎn)生可執(zhí)行文件“da_sin”。3.切換到下位機(jī)的minicom窗口,使用NFSmount上位機(jī)的“/labs”到下位機(jī)的“/host”目錄,然后進(jìn)入“/host/Lab_5/drivers”目錄,用“insmods3c2410-exio.o”命令加載D/A驅(qū)動(dòng),并用“l(fā)smod”命令查看是否已經(jīng)插入。4.進(jìn)入“/host/Lab_5”目錄,運(yùn)行“./da_sin”,部分運(yùn)行結(jié)果如圖11-15所示,并使用示波器觀察輸出波形是否正弦波。11.5.5實(shí)驗(yàn)步驟1.修改用戶程序,產(chǎn)生余弦波形信號,并使用示波器觀察輸出波形。2.修改用戶程序,產(chǎn)生方波信號,并使用示波器觀察輸出波形(參考代碼為“da_fang.c”)。3.D/A轉(zhuǎn)換器的分類。4.D/A轉(zhuǎn)換器的主要技術(shù)指標(biāo)。5.MAX504的特點(diǎn)及使用方法。11.5.6習(xí)題11.6CAN總線通訊實(shí)驗(yàn)

11.6.1實(shí)驗(yàn)?zāi)康恼莆誄AN總線通訊原理,學(xué)習(xí)MCP2510的CAN總線通訊的驅(qū)動(dòng)開發(fā),掌握Linux系統(tǒng)中斷在CAN總線通訊程序中使用。11.6.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.6.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)CAN總線通訊原理,了解CAN總線的結(jié)構(gòu);2.閱讀CAN控制器MCP2510的芯片文檔,掌握MCP2510的相關(guān)寄存器的功能和使用方法;3.編程實(shí)現(xiàn)兩臺(tái)CAN總線控制器之間的通訊;4.ARM接收到CAN總線的數(shù)據(jù)后會(huì)在終端顯示,同時(shí)使用CAN控制器發(fā)送的數(shù)據(jù)也會(huì)在終端反顯。5.MCP2510設(shè)置成自回環(huán)的模式,CAN總線數(shù)據(jù)自發(fā)自收。1.CAN總線

CAN,全稱為“ControllerAreaNetwork”,即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN總線被設(shè)計(jì)作為汽車環(huán)境中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備、電子主干系統(tǒng)中均嵌入CAN控制裝置。一個(gè)由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個(gè)節(jié)點(diǎn)。但是,實(shí)際應(yīng)用中節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。例如,當(dāng)使用PhilipsP82C250作為CAN收發(fā)器時(shí),同一網(wǎng)絡(luò)中允許掛接110個(gè)節(jié)點(diǎn)。CAN可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實(shí)時(shí)控制變得非常容易。另外,硬件的錯(cuò)誤檢定特性也增強(qiáng)了CAN的抗電磁干擾能力。11.6.4實(shí)驗(yàn)原理2.CAN總線的電氣特征

CAN能夠使用多種物理介質(zhì)進(jìn)行傳輸,例如:雙絞線、光纖等。最常用的就是雙絞線。信號使用差分電壓傳送,兩條信號線被稱為CAN_H

和CAN_L,靜態(tài)時(shí)均是2.5V左右,此時(shí)狀態(tài)表示為邏輯1也可以叫做“隱性”。用CAN_H比CAN_L高表示邏輯0,稱為“顯性”。此時(shí),通常電壓值為CAN_H=3.5V和CAN_L=1.5V。當(dāng)“顯性”位和“隱性”位同時(shí)發(fā)送的時(shí)候,最后總線數(shù)值將為“顯性”。這種特性,為CAN總線的仲裁奠定了基礎(chǔ)。

3.CAN總線的MAC幀結(jié)構(gòu)

CAN總線的幀數(shù)據(jù)有兩種格式:標(biāo)準(zhǔn)格式和擴(kuò)展格式,如圖11-17所示。在MCP2510中,同時(shí)支持下面兩種CAN總線的幀格式。圖11-17CAN總線的幀數(shù)據(jù)4.S2410的CAN總線控制器MCP2510UP-TECHS2410/P270DVP上采用MicroChip

公司的MCP2510CAN總線控制器,采用RJ11標(biāo)準(zhǔn)接口作為CAN總線接口,接口如圖11-18所示。系統(tǒng)中,S3C2410通過SPI同步串行接口和MCP2510相連。MCP2510的片選信號,通過接在S3C2410的Bank5上的鎖存器(74HC753)來控制。圖11-18CAN總線接口與MCP2510芯片5.MCP2510的初始化

MCP2510的初始化如下步驟:(1)軟件復(fù)位,進(jìn)入配置模式(2)設(shè)置CAN總線波特率(3)關(guān)閉中斷(4)設(shè)置ID過濾器(5)切換MCP2510到正常狀態(tài)(Normal)(6)清空接受和發(fā)送緩沖區(qū)(7)開啟接收緩沖區(qū),開啟中斷(可選)6.MCP2510發(fā)送和接收數(shù)據(jù)

MCP2510中有3個(gè)發(fā)送緩沖區(qū),可以循環(huán)使用。也可以只使用一個(gè)發(fā)送緩沖區(qū),但是,必須保證在發(fā)送的時(shí)候,前一次的數(shù)據(jù)已經(jīng)發(fā)送結(jié)束。

MCP2510中有2個(gè)接收緩沖區(qū),可以循環(huán)使用。數(shù)據(jù)的發(fā)送和接收均可使用查詢或者中斷模式,這里,為編程簡單,收發(fā)數(shù)據(jù)都采用查詢模式。通過狀態(tài)讀取命令(ReadStatusInstruction)來判斷是否接收到(或者發(fā)送出)數(shù)據(jù)。本實(shí)驗(yàn)中,CAN總線以模塊的形式編譯在內(nèi)核源碼中,進(jìn)行CAN總線實(shí)驗(yàn)的步驟如下:1.編譯CAN總線模塊首先切換到“/arm2410cl/kernel/linux-2.4.18-2410cl”目錄,然后使用命令“makemenuconfig”,進(jìn)入MainMenu/Characterdevices菜單,選擇CANBUS為模塊加載,如圖11-24所示。11.6.5實(shí)驗(yàn)步驟圖11-24選擇CANBUS模塊加載其次,使用下列命令編譯內(nèi)核模塊:

makedepmakemakemodules編譯結(jié)果為:“/arm2410cl/kernel/linux-2.4.18-2410cl/drivers/char/s3c2410-can-mcp2510.o”

注意:本次試驗(yàn)已經(jīng)在目錄“/labs/Lab_6/drivers”下,放置了編譯后的驅(qū)動(dòng)模塊,將其改名為“can.o”,用戶可以直接使用該驅(qū)動(dòng)模塊。2.編譯應(yīng)用程序在上位機(jī)的“/labs/Lab_6”目錄下,執(zhí)行“make”命令編譯應(yīng)用程序。3.下載調(diào)試切換到minicom終端窗口,使用NFSmount開發(fā)主機(jī)的“/labs”到“/host”目錄,然后切換到“drivers”目錄,使用命令“insmod

can.o”插入CAN驅(qū)動(dòng)模塊。4.運(yùn)行應(yīng)用程序在目錄“Lab_6”下運(yùn)行應(yīng)用程序canchat,查看結(jié)果。

1.CAN總線通訊最少需要幾根線?如果多個(gè)節(jié)點(diǎn)應(yīng)該如何連接?2.為什么CAN總線的可靠性高,傳輸數(shù)率卻可以速度比串口快(可達(dá)到1Mbps)?3.如果要在現(xiàn)有的系統(tǒng)上構(gòu)建復(fù)雜的CAN總線通信協(xié)議需要進(jìn)行怎樣的擴(kuò)展?11.6.6習(xí)題11.7RS-485通訊實(shí)驗(yàn)

11.7.1實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)RS-485通信原理,掌握MAX485芯片的使用方法,掌握ARM的串行口工作原理。11.7.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.7.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)RS-485通信原理,閱讀MAX485芯片文檔,掌握其使用方法。2.熟練ARM系統(tǒng)硬件的UART使用方法,編程實(shí)現(xiàn)RS-485通信的基本收發(fā)功能。3.利用示波器觀測MAX485芯片的輸入和輸出波形。4.將兩個(gè)平臺(tái)連接起來利用PC鍵盤發(fā)送數(shù)據(jù),超級終端觀察收到的數(shù)據(jù)。1.串行接口標(biāo)準(zhǔn)

RS-485是串行數(shù)據(jù)接口標(biāo)準(zhǔn),最初是由電子工業(yè)協(xié)會(huì)(EIA)制訂并發(fā)布的。RS-485標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定,而不涉及接插件、電纜或協(xié)議,在此基礎(chǔ)上用戶可以建立自己的高層通信協(xié)議。(1)平衡傳輸

RS-485數(shù)據(jù)信號采用差分傳輸方式,使用一對雙絞線,將其中一線定義為A,另一線定義為B。通常,發(fā)送驅(qū)動(dòng)器A、B之間的正電平在+2~+6V,是一個(gè)邏輯狀態(tài),負(fù)電平在-6V~-2V,是另一個(gè)邏輯狀態(tài)。另有一個(gè)信號地C,在RS-485中還有一“使能”端。當(dāng)“使能”端起作用時(shí),發(fā)送驅(qū)動(dòng)器處于高阻狀態(tài),稱作“第三態(tài)”,即它是有別于邏輯“1”與“0”的第三態(tài)。(2)RS-485電氣規(guī)定

RS-485需要在傳輸線上接終接電阻??梢圆捎枚€與四線方式,二線制可實(shí)現(xiàn)真正的多點(diǎn)雙向通信。而采用四線連接時(shí),只能實(shí)現(xiàn)點(diǎn)對多的通信,即只能有一個(gè)主(Master)設(shè)備,其余為從設(shè)備,無論四線還是二線連接方式總線上可多接到32個(gè)設(shè)備。

RS-485的共模輸出電壓是是-7V至+12V之間,其最大傳輸距離約為1219米,最大傳輸速率為10Mb/s。11.7.4實(shí)驗(yàn)原理2.通信方式

RS-485接口可連接成半雙工和全雙工兩種通信方式。半雙工通信的芯片有SN75176、MAX485、MAX1487、MAX3082、MAX1483等;全雙工通信的芯片有SN75179、MAX488~MAX491、MAX1482等。本實(shí)驗(yàn)采用的是MAX485的半雙工通信方式。3.MAX485接口芯片

MAX485是Maxim公司的一種RS-485芯片。采用單一電源+5V工作,額定電流為300μA,采用半雙工通訊方式。它完成將TTL電平轉(zhuǎn)換為RS-485電平的功能。MAX485芯片的結(jié)構(gòu)和引腳都非常簡單,內(nèi)部含有一個(gè)驅(qū)動(dòng)器和接收器,其引腳結(jié)構(gòu)圖如圖11-28所示。

MAX485是半雙工通信器件,8腳為電源VCC,5腳接地GND。有一個(gè)總線接收/驅(qū)動(dòng)器,6腳為A,7腳為B。發(fā)送、接收均有使能端,1腳為接收RO,4腳為發(fā)送DI;2腳為接收使能RE,0有效,3腳為發(fā)送使能DE,1有效;通常將2、3腳連在一起,控制其收發(fā)。圖11-28MAX485接口芯片引腳4.本實(shí)驗(yàn)RS-485原理圖本次實(shí)驗(yàn)RS-485原理圖如圖11-29所示。其中TXD2和RXD2為S3C2410XUART的第二個(gè)通道的發(fā)送和接收端,GPH1為1時(shí)是發(fā)送使能,GPH1為0時(shí)是接收使能。圖11-29RS-485原理圖5.RS-485編程

(1)RS-485驅(qū)動(dòng)程序在上位機(jī)的“/labs/Lab_7/drivers”目錄下提供了RS-485驅(qū)動(dòng)程序“s3c2410-485.o”,用戶可以使用該驅(qū)動(dòng)程序提供的open、ioctl、release等函數(shù)操作RS-485,控制MAX485以半雙工方式通信。用戶可在該目錄下找到其源程序“s3c2410-485.c”進(jìn)行分析。(2)用戶程序因?yàn)镽S-485是半雙工的,比起RS-232,需要多加一個(gè)I/O口來控制RS-485的方向,該I/O口在發(fā)送數(shù)據(jù)時(shí)置高,接收數(shù)據(jù)時(shí)置低。發(fā)送數(shù)據(jù)時(shí):ioctl(fd485,_485_IOCTRL_RE2DE,_485_DE);/*fd485:方向控制I/O口驅(qū)動(dòng)設(shè)備文件的fd*/write(fdcom2,&buf,1);

/*fdcom2:串口驅(qū)動(dòng)設(shè)備文件的fd*/接收數(shù)據(jù):ioctl(fd485,_485_IOCTRL_RE2DE,_485_RE);/*設(shè)置RS-485工作模式為接收*/ read(fdcom2,&c,1);/*通過串口2讀取接收數(shù)據(jù)*/

本次實(shí)驗(yàn)用戶程序“485_test.c”實(shí)現(xiàn)的功能是:上位機(jī)通過RS-485向下位機(jī)傳送一個(gè)文件文件的內(nèi)容。

1.使用命令“cd/labs/Lab_7”進(jìn)入本實(shí)驗(yàn)?zāi)夸?,運(yùn)行“make”編譯生成可執(zhí)行文件“485_test”。2.切換到下位機(jī)的minicom窗口,使用NFSmount上位機(jī)的“/labs”到下位機(jī)的“/host”目錄,然后進(jìn)入“/host/Lab_7/drivers”目錄,用“insmods3c2410-485.o”命令加載RS-485驅(qū)動(dòng),并用“l(fā)smod”命令查看是否已經(jīng)插入。3.使用命令“./485_test1.txt”執(zhí)行測試程序,將上位機(jī)當(dāng)前目錄下的“1.txt”文件內(nèi)容傳遞給下位機(jī),實(shí)現(xiàn)兩臺(tái)設(shè)備之間的通訊。11.7.5實(shí)驗(yàn)步驟1.修改用戶程序,將上位機(jī)上的若干個(gè)字符串傳遞給下位機(jī)。2.RS-485通信特點(diǎn)。3.建立自己的高層通信協(xié)議,完成設(shè)備間的多機(jī)通信。11.7.6習(xí)題11.8直流電動(dòng)機(jī)實(shí)驗(yàn)

11.8.1實(shí)驗(yàn)?zāi)康氖煜RM本身自帶的PWM,掌握相應(yīng)寄存器的配置及Linux下編程實(shí)現(xiàn)ARM系統(tǒng)的PWM輸出,從而控制直流電機(jī)。了解直流電機(jī)的工作原理,學(xué)會(huì)用軟件的方法實(shí)現(xiàn)步進(jìn)電機(jī)的脈沖分配,掌握帶有PWM的CPU編程實(shí)現(xiàn)其相應(yīng)功能的主要函數(shù)。11.8.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.8.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)直流電機(jī)的工作原理,了解實(shí)現(xiàn)電機(jī)轉(zhuǎn)動(dòng)對于系統(tǒng)的軟件和硬件要求。2.學(xué)習(xí)ARMPWM的生成方法。3.編程實(shí)現(xiàn)直流電機(jī)的調(diào)速轉(zhuǎn)動(dòng)。1.直流電機(jī)的PWM電路原理

PWM(Pulse-WidthModulation)是脈寬調(diào)制技術(shù)的簡稱,可用于控制高性能的直流電機(jī)調(diào)速系統(tǒng)。其原理為:晶體管的導(dǎo)通時(shí)間也被稱為導(dǎo)通角,通過控制晶體管的開通與斷開時(shí)間來改變導(dǎo)通角的大小,就可以調(diào)節(jié)加在負(fù)載上的平均電壓的大小,以實(shí)現(xiàn)對電動(dòng)機(jī)的變速控制,這就是PWM變速控制技術(shù)的基本原理,如圖11-32所示。在PWM變速控制中,系統(tǒng)采用直流電源,放大器的頻率是固定,變速控制通過調(diào)節(jié)脈寬來實(shí)現(xiàn)。11.8.4實(shí)驗(yàn)原理圖11-32PWM調(diào)速原理由上圖可知,電動(dòng)機(jī)兩端得到的電壓平均值可用下式表示為:式中:為開關(guān)每次接通的時(shí)間,為開關(guān)斷開的時(shí)間周期,為占空比,由公式可見,改變脈沖的占空比,電動(dòng)機(jī)兩端的電壓平均值也隨之改變,從而控制電機(jī)的變速。2.S3C2410的PWM發(fā)生器(1)S3C2410的PWM發(fā)生器的結(jié)構(gòu)用分立器件組成PWM電路一般需要如下幾個(gè)部分:三角波產(chǎn)生電路、脈沖調(diào)制電路、PWM信號延遲及分配電路。本實(shí)驗(yàn)所用的目標(biāo)板上的S3C2410處理器,其內(nèi)部已經(jīng)集成了包含上述三個(gè)部分的PWM發(fā)生器,只要對相關(guān)寄存器進(jìn)行簡單的設(shè)置,就可以產(chǎn)生需要的PWM信號。經(jīng)典開發(fā)平臺(tái)將S3C2410的定時(shí)器輸出都引到了擴(kuò)展槽,并分別用定時(shí)器0和1組成了雙極性PWM發(fā)生器。(2)PWM發(fā)生器的原理

(以定時(shí)器0為例)

時(shí)鐘信號PCLK經(jīng)過可編程的8位預(yù)分頻器和時(shí)鐘除法器分頻后,驅(qū)動(dòng)定時(shí)器內(nèi)的邏輯控制器進(jìn)行工作。邏輯控制器的核心,是一個(gè)16位的減法計(jì)數(shù)器??梢再x于計(jì)數(shù)緩沖寄存器(TCNTB0)

和比較緩沖寄存器(TCMPB0)不同的初始值,當(dāng)定時(shí)器使能時(shí),這兩個(gè)寄存器中的數(shù)據(jù)將被分別載入到減法計(jì)數(shù)器(TCNT0)和比較寄存器(TCMP0)。計(jì)時(shí)過程為:

從PCLK過來的時(shí)鐘信號到達(dá)邏輯控制器時(shí),減法計(jì)數(shù)器的值自動(dòng)減1,當(dāng)減法計(jì)數(shù)器的值為0時(shí),定時(shí)器會(huì)向CPU發(fā)送中斷請求,一輪計(jì)時(shí)操作完成。在自動(dòng)裝載模式下,計(jì)數(shù)緩沖寄存器中的初始值會(huì)由硬件控制自動(dòng)載入減法計(jì)數(shù)器,進(jìn)行下一輪的計(jì)時(shí)操作。PWM發(fā)生器的原理比較緩沖寄存器(TCMPB0)中設(shè)定的初值用來產(chǎn)生PWM信號。信號的產(chǎn)生規(guī)則是:每當(dāng)TCNT0的值和TCMP0的值相等時(shí),定時(shí)器的輸出邏輯電平翻轉(zhuǎn)。PWM脈沖頻率由TCNT0決定,而脈沖寬度由TCMP0決定。TCMP0的值越大,PWM脈沖的占空比越大,也即平均輸出電壓越大,反之亦然。

(3)PWM發(fā)生器相關(guān)的寄存器

PWM發(fā)生器用到的寄存器主要有:TCFG0(定時(shí)器配置寄存器0)、TCFG1(定時(shí)器配置寄存器1)、TCON(定時(shí)器控制寄存器)、TCNTB0&TCMPB0(定時(shí)器0計(jì)數(shù)緩沖區(qū)寄存器和比較緩沖區(qū)寄存器)、CNTO0(定時(shí)器0觀察寄存器),它們各自的地址和位描述參見教材。3.直流電機(jī)調(diào)速編程

直流電機(jī)的轉(zhuǎn)速取決于脈沖寬度,而脈沖由定時(shí)器0產(chǎn)生,因此只需初始化定時(shí)器,并給定時(shí)器0計(jì)數(shù)緩沖賦不同的值,便可調(diào)節(jié)轉(zhuǎn)速。本次實(shí)驗(yàn)中,Linux下的直流電機(jī)程序包括“模塊驅(qū)動(dòng)程序”和“應(yīng)用程序”兩部分。在上位機(jī)的“/arm2410cl/kernel/drivers/char”目錄下提供了直流電機(jī)驅(qū)動(dòng)程序“s3c2410-dc-motor.o”,用戶可以使用該驅(qū)動(dòng)程序提供的open、ioctl、release等函數(shù)控制直流電機(jī)便速轉(zhuǎn)動(dòng)。用戶可在該目錄下找到其源程序“s3c2410-dc-motor.c”進(jìn)行分析。1.使用命令“cd/labs/Lab_8/”進(jìn)入本實(shí)驗(yàn)?zāi)夸洠褂眠\(yùn)行“make”編譯生成可執(zhí)行文件“dcm_main”。2.切換到下位機(jī)的minicom窗口,使用NFSmount上位機(jī)的“/labs”到下位機(jī)的“/host”目錄,然后進(jìn)入“/host/Lab_8/drivers”目錄,用“insmods3c2410-dc-motor.o”命令加載直流電機(jī)驅(qū)動(dòng),并用“l(fā)smod”命令查看是否已經(jīng)插入。3.使用命令“./dcm_main”執(zhí)行用戶程序,控制直流電機(jī)變速轉(zhuǎn)動(dòng),查看程序運(yùn)行結(jié)果。11.8.5實(shí)驗(yàn)步驟1.修改測試程序,控制直流電機(jī)以恒定速度或變速轉(zhuǎn)動(dòng)。(參考代碼為dcm_c_v.c)2.簡述PWM的基本原理,思考其基本參數(shù)的變化對電機(jī)轉(zhuǎn)動(dòng)的影響。3.嘗試使用實(shí)驗(yàn)箱上的電位器旋鈕控制直流電機(jī)的轉(zhuǎn)向和轉(zhuǎn)速。11.8.6習(xí)題11.97段LED和點(diǎn)陣式LED實(shí)驗(yàn)

11.9.1實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)LED的相關(guān)知識(shí),掌握74HC273芯片的工作原理,了解SPI接口的相關(guān)知識(shí)。11.9.2

實(shí)驗(yàn)設(shè)備

1臺(tái)已安裝Linux的PC機(jī)作為宿主機(jī)(上位機(jī)),1臺(tái)已燒寫ARMLinux的博創(chuàng)經(jīng)典UP-TECH-S2410/P270-DVP實(shí)驗(yàn)箱作為目標(biāo)板(下位機(jī))11.9.3實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)LED相關(guān)知識(shí),掌握7段LED和點(diǎn)陣式LED的顯示原理。2.了解74HC273芯片對LED電量的工作機(jī)制,熟練閱讀74HC273芯片資料,掌握對它的使用。3.編程控制7段LED顯示數(shù)字,編程控制點(diǎn)陣式LED顯示字符或簡單漢字。11.9.4實(shí)驗(yàn)原理1.LED顯示控制原理(1)7段(或8段)LEDLED的7個(gè)字段分別稱為a、b、c、d、e、f、g,有時(shí)還有一個(gè)小數(shù)點(diǎn)段h,圖11-34(a)所示。通過7個(gè)(或8個(gè))發(fā)光段的不同組合,顯示0~9和A~F共16個(gè)字母數(shù)字,從而實(shí)現(xiàn)十六進(jìn)制的顯示。為使7段顯示器顯示數(shù)字或字符,就需點(diǎn)亮相應(yīng)的段,每個(gè)段分別由數(shù)據(jù)線進(jìn)行控制,通常數(shù)據(jù)線D0~D7順序控制a~h段,如圖11-34(b)所示,所需的控制信號稱為段碼。由于數(shù)字與段碼之間沒有規(guī)律性,因此必須進(jìn)行數(shù)字與段碼之間的轉(zhuǎn)換以便顯示數(shù)字。常用的轉(zhuǎn)換方法是將要顯示字形的段碼列成一個(gè)表,稱為段碼表。顯示時(shí),根據(jù)字符查段碼表,取出其對應(yīng)的段碼送到數(shù)據(jù)線上來控制顯示。圖11-348段LED顯示器外形及各段對應(yīng)的數(shù)據(jù)線

LED有兩種不同的形式一種是8個(gè)發(fā)光二極管的陽極都連在一起,稱為共陽極,如圖11-35(a)所示;另一種是8個(gè)發(fā)光二極管的陰極都連在一起,稱為共陰極,如圖11-35(b)所示。圖11-358段LED顯示器原理圖(2)點(diǎn)陣式LED

點(diǎn)陣式LED的顯示單元一般由8行8列LED組成,其外形及內(nèi)部連接如圖11-30所示,可以再由這8行8列的LED拼成更大的LED陣列。點(diǎn)陣式LED顯示器能顯示各種字符、漢字及圖形、

溫馨提示

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

評論

0/150

提交評論