


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、利用紅外發(fā)射接收傳感器進(jìn)行距離檢測一、實驗要求對紅外的發(fā)射接收作進(jìn)一步的探討。紅外可以用來測距離,理解紅外測距的基本原理, 能夠掌握簡單的比例控制方法,以及編程。掌握定時/計數(shù)器的使用。對循跡效果作分析。二、實驗概要本實驗將探討紅外測距的內(nèi)容。 利用紅外檢測器的內(nèi)置電子濾波功能,調(diào)節(jié)發(fā)射紅外的載波頻率,而檢測器對不同頻率的信號有不同的“敏感度”,這樣,就能大概的知道距離。1 測試紅外的掃描頻率。記錄紅外發(fā)射接收的距離。2尾隨小車。讓一個小車跟著另一個小車前行。要將前后距離控制在一定的范圍內(nèi), 若前后距離較大,后面跟隨的小車應(yīng)該加速,跟上去;若距離小于預(yù)定值,則減速。3跟蹤黑色條紋帶。紅外測距的
2、另一種形式的應(yīng)用。也能讓小車實現(xiàn)循跡功能。三、實驗內(nèi)容紅外技術(shù)發(fā)展到現(xiàn)在,已經(jīng)為大家所熟知,這種技術(shù)已經(jīng)在現(xiàn)代科技、國防和工農(nóng)業(yè)等 領(lǐng)域獲得了廣泛的應(yīng)用。 紅外傳感系統(tǒng)是用紅外線為介質(zhì)的測量系統(tǒng),按照功能能夠分成五類:(1)輻射計,用于輻射和光譜測量;(2)搜索和跟蹤系統(tǒng),用于搜索和跟蹤紅外目標(biāo),確定其空間位置并對它的運動進(jìn)行跟蹤;(3)熱成像系統(tǒng),可產(chǎn)生整個目標(biāo)紅外輻射的分布圖像;(4)紅外測距和通信系統(tǒng);(5)混合系統(tǒng),是指以上各類系統(tǒng)中的兩個或者多個的組 合。紅外傳感器根據(jù)探測機理可分成為:光子探測器(基于光電效應(yīng))和熱探測器(基于熱 效應(yīng))。本次試驗將嘗試用紅外來測距。1 測試掃描頻率
3、下圖9-1顯示的是一個特殊品牌的紅外線探測器數(shù)據(jù)表(Panasonic PNA4602M )的部分摘錄。這個摘錄顯示了紅外線探測器在接收到頻率不同于38.5 kHz時紅外線信號時其敏感程度隨頻率變化的曲線圖。例如,當(dāng)你發(fā)送頻率為40 kHz的信號給探測器時,它的靈敏度是頻率為 38.5 kHz的50%。 如果紅外LED發(fā)送頻率為42 kHz,探測器的靈敏度是頻率為38.5 kHz的20%左右。尤其是對于讓探測器的靈敏度很底的頻率,為了讓探測器探測到紅外線的反射,物體必須離探測器更近讓反射的紅外光更強。另一個角度來考慮就是最高靈敏度的頻率可以探測最遠(yuǎn)距離的物體,較低靈敏度的頻率可以探測距離較近的
4、物體。這使得距離探測就簡單了。選擇5個不同頻率,然后從最高靈敏度到最低靈敏度進(jìn)行測試。首先嘗試最高靈敏度頻率,如果物體被探測到了,就讓僅次于它的高靈敏度頻率測試,觀察是否可以探測到。依賴于探測器不能再檢測到物體的紅外線頻率, 我們就可以推斷物體的大概位置。B+P.F frequencv characteristics(PNA4602M)'Spectral sensitivity characteristicsI (MJCarrier frequency (kHz)The peaks for PNA46111 Mh PNA4608M, ;ind PNA4510M are ill f0.0
5、LI-IJ1LnJ/J6DU 700 HUO 9001000 1IC0 1200Wjveenfth X (nm)804G圖9-1濾波器靈敏度由載波頻率決定圖9-2探測區(qū)域例程:TestLeftFreque ncySweep.c例程要做兩件事情:首先,測試IR LED/探測器(分別與P1_3和P1_2連接)以確認(rèn)它們的距離探測功能正常;然后,完成圖 9-2所示的頻率掃描。#in clude<BoeBot.h>#in clude<uart.h>#define LeftIRP1_2/左邊紅外接受連接到P1_2#define LeftLaunch P1 3/左邊紅外發(fā)射連接到P
6、1 3unsigned int time;/ 定時時間值int leftdistanee;/ 左邊的距離int dista nceLeft, irDetectLeft;un sig ned int freque ncy 5=29370,31230,33050,35700,38460; void timernit(void)IE=0x82;TMOD |= 0X01;void FreqOut( un sig ned int Freq)time = 256 - (500000/Freq); /TH0 = 0XFF;TL0 = time;TR0 = 1;delay_ nus(800);TR0 = 0;
7、void Timer。n terrupt(void) in terrupt 1 LeftLa unch = LeftLa un ch;TH0 = 0xFF;TL0 = time;/開總中斷EA允許定時器0中斷ET0 /定時器0工作在模式1: 16位定時器模式根據(jù)頻率計算初值/高八位設(shè)FF/低八位根據(jù)公式計算/啟動定時器/延時/停止定時器/定時器中斷/取反/重新設(shè)值void Get_lr_Dista nces()初始化左邊的距離un sig ned int count; leftdista nee = 0;/for(co unt = 0;co un t<5;co un t+)發(fā)射頻率Fre
8、qOut(freque ncycoun t); irDetectLeft = LeftIR;prin tf("irDetectLeft = %d",irDetectLeft); if(irDetectLeft = 1) leftdista nce+;int main( void)uart_I ni t(); timer_i nit(); pri ntf("Progam Runnin g!n"); pri ntf("FREQENCY ETECTED'n"); while(1)Get_lr_Dista nces();prin tf
9、("dista nceLeft = %dn",leftdista nee);printf(”n");delay_ nm s(1000);Tips : TestLeftFrequencySweep.c是如何工作的?還記得“數(shù)組”嗎?這里你將用整數(shù)型數(shù)組存儲五個頻率值:un sig ned int freque ncy5=29370,31230,33050,35700,38460;uart_I nit();串口的初始化,這個函數(shù)已多次用到。timernit();定時器的初始化。此例程使定時器0工作在模式1,16位定時模式,不具備自動重載功能。 注意,timernit(
10、)并沒有開啟定時器。Get_lr_Dista nces();機器人要發(fā)射某一頻率,該給定時器設(shè)定多大的值呢?頻率為f時,周期T=1/f,高低電平持續(xù)時間為t=1/(2T),根據(jù)公式TC=21-CC可算定時器初值time :time 2161 10 665536500000但實際上,time值并未占滿低八位,所以你可以這樣簡化計算:高八位設(shè)0xFF,低八位根據(jù) n=8時計算,即函數(shù) FreqOut(frequencycount)中用的 time = 256 - (500000/Freq)來計算。當(dāng)?shù)桶宋挥嫕M后,整個寄存器將溢出。根據(jù)圖6-2所示的描述原理,如果檢測結(jié)果irDetectLeft為1
11、,即沒有發(fā)現(xiàn)物體,則距離 leftdistanee 加1。循環(huán)描述,當(dāng)5個頻率描完后,可根據(jù)leftdistanee的值來判斷物體離機器人的大致距離。運行程序時,在機器人前端放一白紙,前后移動白紙,調(diào)試終端將會顯示白紙所在的區(qū)域,如圖9-3所示。A.冠串口逍試depush. cob串口選釋按收區(qū)irDslftctLft = 1 irDeltctLaft - 0 irDetectLeft 二 0 irDetectLeft = 0 irDetectLeft 二0 ilist4iiceL*f l " 1| irD«tactLaft = 1 irDetectLeft = 1 irD
12、etectLeft = 0 lrDatsctLeft - 0 irDelectLfI = 0 diituic4L«£l = 2發(fā)送圖9-3距離探測輸岀實例程序通過計算“1”出現(xiàn)的數(shù)量,就可以確定目標(biāo)在哪個區(qū)域。緊記,這種距離測量方法是相對的而非絕對地精確。然而,它為機器人跟隨,跟蹤和其他行為提供了一個足夠好的探測距離的能力。輸入、保存并運行程序 TestLeftFreque ncySweep.c用一張紙或卡片面對IR LED/探測器做距離探測改變紙片與機器人距離,記錄使dista nceLeft變化的位置該你了一一測試右邊的IR LED/探測器修改程序TestLeftFre
13、quencySweep.c ,對右邊的IR LED/探測器做距離探測測試運行該程序,檢驗這對IR LED/探測器能否測量同樣的距離。你可參考教材配套光盤對應(yīng)例程中的注釋部分。例程:DisplayBothDista nces.c修改程序TestLeftFrequencySweep.c ,添加右邊IR LED/探測器部分輸入、保存并運行程序 DisplayBothDista nces.c用紙片重復(fù)對每個IR LED進(jìn)行距離探測,然后對兩個IR LED同時進(jìn)行測試該你了一一更多的距離測試嘗試測量不同物體的距離,弄清物體的顏色和(或)材質(zhì)是否會造成距離測量的差異2.尾隨小車讓一個寶貝車跟隨另一個寶貝車
14、行走,跟隨的寶貝車,也叫尾隨車,必須知道距離引導(dǎo)車有多遠(yuǎn)。如果尾隨車落在后面,它必須能察覺并加速。如果尾隨車距離引導(dǎo)車太近,它也要能察覺并減速。如果當(dāng)前距離正好合適,它會等待直到測量距離變遠(yuǎn)或變近。距離僅僅是由機器人和其它自動化機器需要控制一種數(shù)值之一。當(dāng)一個機器被設(shè)計用來自動維持某一數(shù)值,比如距離、壓力或液位等,它一般都包含一個控制系統(tǒng)。這些系統(tǒng)有時由傳感器和閥門組成,或者由傳感器和電機組成。在寶貝車?yán)锩妫蓚鞲衅骱瓦B續(xù)旋轉(zhuǎn)電機組成。還必須有某些處理器可以接受傳感器的測量結(jié)果并把它們轉(zhuǎn)化為機械運動。必須對處理器編程來基于傳感器的輸入做出決定,從而控制機械輸出。閉環(huán)控制是一種常用的維持控制目標(biāo)
15、數(shù)據(jù)的方法,它很好地幫助寶貝車保持與一個物體之間的距離。閉環(huán)控制算法類型多種多樣,最常用的有滯后、比例、積分以及微分控制。所 有這些控制方法都將在過程控制教材中詳細(xì)介紹。事實上,圖9-4所示的方框圖描述了寶貝車用到的比例控制過程的步驟,即寶貝車用右邊的IR LED/探測器探測距離并用右邊的伺服電機調(diào)節(jié)機器人之間的位置以維持適當(dāng)?shù)木?離。Center pulse width圖9-4右邊的伺服電機及IR LED/探測器的比例控制方框圖讓我們仔細(xì)觀察一下圖9-4的數(shù)字,學(xué)習(xí)一下比例控制是如何工作的。這個特殊的例子是右邊的IR LED/探測器和右邊的伺服電機的比例控制方框圖。設(shè)定位置為2,說明我們想寶
16、貝車維持它和任何它探測到的物體之間的距離是2。測量的距離為 4,距離太遠(yuǎn)。誤差是設(shè)定值減去測量值的差,即2-4 = - 2,這在圓圈的左方以符號的形式指出,這個圓圈叫求和點。接著,誤差傳入一個操作框。這個操作框顯示,誤差將乘以一個比例常數(shù)Kp。Kp的值為70。該操作框的輸出顯示為-X 70 = -40,這叫輸出校正。這個輸出校正結(jié)果輸入到另一個求和點,這時它與電機的零點脈沖寬度1500相加。相加的結(jié)果是 1360,這個脈寬可以讓電機大約以 3/4全速順時針旋轉(zhuǎn)。這讓寶貝車右輪向前、朝著物體的方向旋轉(zhuǎn)。第二次經(jīng)過閉環(huán),測量距離可能發(fā)生變化,但是沒有問題,因為不管測量距離如何變,這個控制環(huán)路將會計
17、算出一個數(shù)值,讓電機旋轉(zhuǎn)來糾正任何誤差。修正值與誤差總是成比例關(guān)系,該誤差就是設(shè)定位置和測量位置的關(guān)系的偏差。控制環(huán)都有一組方程來主導(dǎo)系統(tǒng)行為。圖9-4中的方框圖是對該組方程的可視化描述方法。下面是從方框圖中歸納出來的方程關(guān)系及結(jié)果:Error = Right distanee set point -Measured right distanee=2 -4Output adjus = error Kp=- 70=-40Right servo output = Output adjust + Cen ter pulse width=-140 +1500=1360通過一些置換,上面三個等式可被簡化
18、為一個,提供你相同的結(jié)果:Right servo output = (Right dista nee set point -Measured right dista nee) Kp+ Cen ter pulsewidth代入數(shù)值,我們可以看到結(jié)果一致:=(2 -4) 70) + 1500=1360左邊的IR LED/探測器以及左邊的伺服電機的控制框圖如圖9-5所示,與右邊的運算法則類似。不同的是比例系數(shù)Kp的值由+70變?yōu)闉?70。假設(shè)與右邊的測量值一樣,輸出修正的脈沖寬度應(yīng)該為1640。下面是該框圖的計算等式:Left servo output = (Left dista nee set p
19、oint -Measured left dista nee) Kp + Cen ter pulse width=(2 -4) (70) +1500Center pulse width#defi ne LeftIR#defi ne RightIR#defi ne LeftLa unch#defi ne RightLa unchP1_2P3_5P1_3P3_6/左邊紅外接受連接到/右邊紅外接收連接到/左邊紅外發(fā)射連接到/右邊紅外發(fā)射連接到P1_2P3_5P1_3P3_6圖9-5機器人左伺服電機及IR Led/探測器的比例控制方框圖例程:Followi ngRobot.c該例程實現(xiàn)剛才討論過的各個伺
20、服脈沖比例控制。換句話說,在每個脈沖發(fā)送之前,需要測量距離,決定誤差信號,然后將誤差值乘以比例系數(shù)Kp,再將結(jié)果加上(或減去)發(fā)送到左(或右)伺服電機的脈沖寬度值。輸入、保存并運行程序 Followi ngRobot.c把大小為20 x 28cm的紙片置于機器人的前面,就像障礙物墻。機器人應(yīng)該維持它和紙片之間的距離為預(yù)定的距離嘗試輕輕旋轉(zhuǎn)一下紙片,機器人應(yīng)該跟隨之旋轉(zhuǎn) 嘗試用紙片引導(dǎo)機器人四處運動,機器人應(yīng)該跟隨它 移動紙片距離機器人特別近時,機器人應(yīng)該后退,遠(yuǎn)離紙片#inelude <BoeBot.h>#in elude <uart.h>#defi ne Kpl -7
21、0#defi ne Kpr 70#defi ne SetPoi nt 2#defi ne Cen terPulse 1500un sig ned int time;int leftdista nce,rightdista nee;/左邊和右邊的距離int delayCou nt,dista nceLeft,dista nceRight,irDetectLeft,irDetectRight;un sig ned int freque ncy 5=29370,31230,33050,35700,38460;void timernit(void)IE=0x82;/開總中斷EA允許定時器0中斷ET0T
22、MOD |= 0X01;/定時器0工作在模式1: 16位定時器模式void FreqOut( un sig ned int Freq)time = 256 - (50000/Freq);TH0 = 0XFF ;TL0 = time ;TR0 = 1;delay_ nus(800);TR0 = 0;void Timer。n terrupt(void) in terrupt 1LeftLa unch = LeftLa un ch;RightLa un ch= RightLa un ch;TH0 = 0XFF;TL0 = time;void Get_lr_Dista nces()un sig ned
23、 char count;leftdista nee = 0;/初始化左邊的距離rightdista nee = 0;/初始化右邊的距離for(co unt = 0;co un t<5;co un t+)FreqOut(freque ncycoun t);irDetectRight = RightIR;irDetectLeft = LeftIR;if (irDetectLeft = 1)leftdista nce+;if (irDetectRight = 1) rightdista nce+;void Sen d_Pulse( un sig ned int pulseLeft, un si
24、g ned int pulseRight)P1_1=1;delay_ nu s(pulseLeft);P1_ 仁0;P1_0=1;delay_ nu s(pulseRight);P1_0=0;delay_ nm s(18);int main( void)un sig ned int pulseLeft,pulseRight;uart_I ni t();timernit();while(1)Get_lr_Dista nces();pulseLeft=(SetPoi nt-leftdista nce)*Kpl+Ce nterPulse; pulseRight=(SetPoi nt-rightdis
25、ta nce)*Kp 葉Cen terPulse; Sen d_Pulse(pulseLeft,pulseRight);Tips : FollowingRobot.c是如何工作的?主程序做的第一件事是調(diào)用Get_lr_Distances 子函數(shù)。Get_lr_Distances函數(shù)運行完成之后,變量leftdistanee和rightdistanee分別包含一個與區(qū)域相對應(yīng)的數(shù)值,該區(qū)域里的目標(biāo)被左、右紅外線探測器探測到。隨后兩行代碼對每個電機執(zhí)行比例控制計算:pulseLeft =( SetPoint - leftdistanee)* Kpl + CenterPulsepulseRight
26、=(SetPo int - rightdista nee) * Kpr + Cen terPulse 最后調(diào)用子函數(shù)Send_Pulse對電機的速度進(jìn)行調(diào)節(jié)。因為你要做的實驗是尾隨,串口線的連接影響了機器人的運動,故可去掉。該你了圖9-6所示是引導(dǎo)車和尾隨車。引導(dǎo)車運行的程序是FastlrRoami ng.c修改后的版本,尾 隨車運行的程序是Follow in gRobot.c 。比例控制讓尾隨車成為忠實的追隨者。一個引導(dǎo)車可以引導(dǎo)一串大概6到7個尾隨車。只需要把導(dǎo)引車的側(cè)面板和后擋板加到其它的尾隨車上。圖9-6導(dǎo)引機器人(左)和尾隨機器人(右)如果你是班級成員之一,把紙板安裝在導(dǎo)引小車的兩側(cè)
27、和尾部,參考圖9-6如果你不屬于班級成員的一部分(并且只有一個機器人),可以讓尾隨車跟隨一張紙或你的手來運動,就和跟隨導(dǎo)引車一樣用阻值為1kQ或2k Q的電阻替換掉連接機器人紅外線發(fā)光二極管的470 Q電阻使用程序FastlrRoaming.c修改后的版本對導(dǎo)引機器人編程來做避障試驗,打開程序 FastlrRoaming.c 重命名為 SlowerlrRoamingForLeadRobot.c 對程序 SlowerIrRoamingForLeadRobot.c 做以下修改:把1300的增加為1420把1700的減少為1580尾隨車運行程序FollowingRobot.c,不用做任何修改機器人都
28、運行自己的程序,把尾隨車放在引導(dǎo)車的后面。尾隨車應(yīng)該跟隨一個固定的 距離,只要它不被其它的諸如手或附近墻壁等引開你可以通過調(diào)整SetPoint和比例常數(shù)來改變尾隨車的行為。用手或一張紙片來引導(dǎo)尾隨 車,做下面練習(xí):嘗試用30到100范圍內(nèi)的常量Kpr和Kpl來運行程序FollowingRobot.c ,注意機器人在 跟隨目標(biāo)運動的時候的響應(yīng)有何差異嘗試調(diào)節(jié)常量SetPoint的值,范圍從0到43 跟蹤條紋帶圖9-8是你可以搭建的一個路徑并編程使機器人跟它運動的例子。路徑中每個條紋帶是 由三條1/4英寸寬的聚乙烯絕緣帶邊對邊并行放置在白色招貼板上組成的,絕緣帶條紋之間 不能漏出白色板。1)搭建和
29、測試路線為了成功跟蹤該路徑,測試和調(diào)節(jié)機器人是必要的。需要的材料:(1) 一張招貼板一一大概尺寸 :22 X 28 英寸(56 X 71 cm)(2)1/4英寸(19 mm)寬黑色聚乙烯絕緣帶一卷 參考圖9-7用白色招貼板和絕緣帶搭建運行路徑圖9-8紅外探測器朝下掃描條紋帶2) 測試條紋帶調(diào)節(jié)IR LED/探測器的位置向下和向外,如圖6-8所示確保絕緣帶路徑不受熒光燈干擾用1k電阻代替與IR LED串聯(lián)的470Q電阻,使機器人更加近視 運行程序DisplayBothDistances.c 。機器人與串口電纜相連, 離如圖9-9所示,把機器人放在白色招貼板上 驗證你的區(qū)域讀數(shù)是否表示被探測的物體
30、 在很近的區(qū)域,兩個傳感器給你的讀數(shù)都是1或0放置機器人使兩個IR LED/檢測器都直接指 向三條絕緣帶的中心,如圖9-10和9-11所示,然后調(diào)整機器人的位置(靠近或遠(yuǎn)離 絕緣帶)直到兩個區(qū)域的值都達(dá)到4或者5,這表明要么發(fā)現(xiàn)一個很遠(yuǎn)的物體,要么沒 有發(fā)現(xiàn)物體以便你能看到顯示的距圖9-9低區(qū)域測試俯視圖如果在你的絕緣帶路徑上很難獲得比較高的讀數(shù)值,參考絕緣帶路徑排錯部分圖9-10高區(qū)域測試頂視圖圖9-11高區(qū)域測試(側(cè)視圖)3)絕緣帶路徑排錯如果當(dāng)IR LED/檢測器指向絕緣帶路徑的中心的時候你不能獲得比較高的讀數(shù)值,代替 原來三條絕緣帶用四條絕緣帶搭建路徑。如果區(qū)域讀數(shù)仍然低,確認(rèn)你是用1
31、k?電阻串聯(lián)在IR LED上。你可以試用 2k?電阻使機器人更加近視。如果都不行,試試不同的絕緣帶。 調(diào)整IR LED/探測器,使它們指向更靠近或更遠(yuǎn)離機器人的前部可能有幫助。如果當(dāng)讀白色表面時你的低區(qū)域測試有問題。試試將IR LED/探測器朝機器人的方向再向下調(diào)整,但是要注意不要讓底盤帶來干擾。你也可以試試一個更低阻值的電阻。如果你用老的縮小包裝的 IR LED代替帶套筒的IR LED,當(dāng)IR LED/探測器聚焦在白色 背景上時你要得到一個低區(qū)域的值可能有問題。這些IR LED可能需要串聯(lián)220?電阻。也要確保IR LED的腳沒有相互接觸。現(xiàn)在,將機器人放在絕緣帶路徑上,它的輪子正好跨在黑色
32、線上。IR探測器應(yīng)該稍稍向外,如圖9-12。驗證兩個距離讀數(shù)是否又是 0或者1。如果讀數(shù)較高,意味著IR探測 器需要再稍微朝遠(yuǎn)離絕緣帶邊緣的方向向外調(diào)整一下日口口 U JLU I口 Q C h nnn D C C OEC一"Kwtf .】di機器人借跨繪躲帶俯視圖2圖9-12 IR 檢測器朝向放大圖當(dāng)你把機器人沿圖中雙箭頭所示的任何一個方向移動,兩個IR中的一個會指向絕緣帶上。當(dāng)你做了這些后,這個指向絕緣帶上的IR的讀數(shù)應(yīng)該增加到4或5。記住如果你將機器人 向左移動,右邊檢測器的值會增加,如果你將機器人向右移動,左邊檢測器的值會升高。調(diào)整IR LED/檢測器直到機器人通過這個最后的測
33、試,然后你可以試驗下面的例程使機器人沿著條紋帶行走4) 編程跟蹤條紋帶你只需對程序Follow in gRobot.c 做一點小小的調(diào)整,就可以使機器人跟蹤條紋帶行走。首先,機器人應(yīng)當(dāng)向目標(biāo)靠近,以使到目標(biāo)的距離比 SetPoint要?。换蜻h(yuǎn)離目標(biāo),以使距離比SetPoi nt大,這同程序Follow in gRobot.c 的表現(xiàn)相反。當(dāng)機器人離物體的距離不在 SetPoint的范圍內(nèi)時,讓機器人向相反的方向運動。只需簡單地更改Kpl和Kpr的符號,換句話說,將Kpl由-70改為70;由Kpr由70改為-70。你應(yīng)該做試驗,當(dāng)SetPoint從2到4時,看哪 個值使系統(tǒng)工作穩(wěn)定。下面的例程將
34、SetPoint值改為3。例程:StripeFollow in gRobot.c打開程序 Follow in gRobot.c 另存為 StripeFollowi ngRobot.c將SetPoint的值由2改為3將Kpl由-70改為70將Kpr由70改為-70運行程序?qū)C器人放在圖9-7所示的“Start ”位置,機器人將靜止。如果你把手放在IR組前面, 然后它會向前移動,當(dāng)它走過了開始的條紋帶時,把手移開,它會沿著條紋帶行走。當(dāng)它看到“ Finish ”條紋帶時,它應(yīng)該停止不動假定你從絕緣帶獲得的距離讀數(shù)為5,從白色招貼板獲得的讀數(shù)為0, SetPoint的常量值為2、3以及4時都可以正常
35、工作。嘗試不同的SetPoint值,注意機器人在條紋帶上運行時的性能附錄:定時/計數(shù)器的運用實驗需要用到單片機更精確的定時功能,因此再回顧一下51單片機定時/計數(shù)器的使用方法。單片機的定時/計數(shù)器能夠提供更精確的時間。前面已經(jīng)介紹了幾種延時方法, 除了空操作函數(shù)_nop_()夕卜,定時/計數(shù)器能產(chǎn)生更精確 的延時,它的最小延時單位為 1個機器周期。前面講過:若晶振頻率為 12MHz則延時單位為 1us;若為11.0592MHz,則延時單位為1.08us。單片機P89V51RD2勺定時/計數(shù)器可以分為定時器模式和計數(shù)器模式。其實這兩種模式?jīng)]有本質(zhì)上的區(qū)別,均使用二進(jìn)制的加一計數(shù):當(dāng)計數(shù)器的值計滿
36、回零時能自動產(chǎn)生中斷的請求,以此來實現(xiàn)定時或者計數(shù)功能。它們的不同之處在于定時器使用單片機的時鐘來計數(shù), 而計數(shù)器使用的是外部信號。定時/計數(shù)器的控制單片機P89V51RD有3個定時/計數(shù)器,通過TCO!和TMO這兩個特殊功能寄存器控制。TCON 和TMO你都可以在頭文件uart.h中看到其應(yīng)用。TCOI為定時器控制寄存器,有 8位,每個位的含義為如表 9-1所示。TCO的低4位與定時 器無關(guān),它們用于檢測和觸發(fā)外部中斷。表9-1 TCON控制寄存器位符號描述TCON.7TF1定時器1溢岀標(biāo)志位。由硬件置位,由軟件清除TCON.6TR1定時器1運行控制位。由軟件置或清除:置 1為啟動;置0為停
37、止TCON.5TF0定時器0溢出標(biāo)志位TCON.4TR0定時器0運行控制位TCON.3IE1外部中斷1邊沿觸發(fā)標(biāo)志TCON.2IT1外部中斷1類型標(biāo)志位TCON.1IE0外部中斷0邊沿觸發(fā)標(biāo)志TCON.0IT0外部中斷0類型標(biāo)志位TMO為定時器模式寄存器,它也有 8位,但不能像TCO一樣可以一位一位的設(shè)置,只能 通過字節(jié)傳送指令來設(shè)定 TMO的各個狀態(tài)。TMO的各位定義如表9-2所示。表9-2 TMOD模式寄存器位名字定時器描述7GATE1門控制。當(dāng)被置為1時,只有INT為高電平時,定時器才開始工作6C/T1定時/計數(shù)器選擇位:仁計數(shù)器;0=定時器5M11模式位1 (見表6-3 )4M01模式
38、位0 (見表6-2 )3GATE0定時器0的門控制位2C/T0定時器0的定時/計數(shù)選擇位1M10定時器0的模式位10M00定時器0的模式位0表9-3定時器工作模式M1M0模式000011102113工作模式每個定時/計數(shù)器都有一個16位的寄存器Tn (n=0或1)來控制計數(shù)長度,由高 8位THn和 低8位TLn置初值。定時/計數(shù)器有四種工作模式。模式0:定時/計數(shù)器按13位自加1計數(shù)器工作。這13位由TH的全部8位和TL中的低5位組 成,TL中的高3位沒有用到。模式1:定時/計數(shù)器按16位自加1計數(shù)器工作。模式2:定時/計數(shù)器被拆成一個8位寄存器TH和一個8位計數(shù)器TL,以便實現(xiàn)自動重載。 這
39、種模式使用起來非常方便,一旦設(shè)置好TMO和 THn,定時器就可以按設(shè)定好的周期溢出。模式3: THC和TL0均作為兩個獨立的8位計數(shù)器工作。定時器1在模式3下不工作。定時/計數(shù)器初值的計算定時/計數(shù)器是在計數(shù)初值的基礎(chǔ)上加法記數(shù)的,假設(shè)Tn( TLn和THn)中寫入的值為TC,在該模式下最大計數(shù)值為 2:程序運行的計數(shù)值為CCtc=2-cc回顧一下,前面的實驗中已經(jīng)用LED來測試電路,通過延時函數(shù)使LED每隔一段時間閃爍 一次。在實驗中,你是否可以通過定時/計數(shù)器來實現(xiàn)LED測試電路呢?假設(shè)通過P1_0所接的燈每0.4ms閃動一次,即每過0.2ms滅一次,再過0.2ms亮一次。 模式2最大計數(shù)
40、值為256us( 28),滿足要求,因此用模式 2來顯示LED丁閃爍功能,計數(shù)的值C(為0.2ms/1us=200。利用公式計算得出 TC=256-200=59,換成十六進(jìn)制為 TC=0x3&例程:TimeApplicati on.c搭建LED的測試電路(具體請參照第二章內(nèi)容)接通教學(xué)板的電源 輸入、保存并運行程序 Time_Applicati on .c驗證與P1 0連接的LED是否每個0.4ms閃爍一次#in clude <reg51.H>子函數(shù)聲明#in clude <stdio.h>void in itial(void); / void main (vo
41、id) initial(); / while(1); /調(diào)用定時/計數(shù)器初始化函數(shù) 等待中斷/*=初始化定時/計數(shù)器函數(shù)*/void in itial(void) IE=0x82;/TC0N=0x00; TMOD=0x02;TH0=0x38; TL0=0x38;TR0=1;/開總中斷EA允許定時器0中斷ET0 停止定時器,清除標(biāo)志 工作在定時器0的模式2中設(shè)置重載值 設(shè)置定時器初值 啟動定時器0/中斷服務(wù)程序中斷服務(wù)程序,1是定時器0的中斷號void TIMER(void) in terrupt 1 /P1_0=P1_0; /P1_0 的值取反TimeApplicatio n.c是如何工作的?在程序開頭,你看到了兩個頭文件reg51.h和stdio.h ,它們有什么用呢?打開這兩個頭文件(reg51.h 在 “ C:Program FilesKeilC51INC ” 目錄下,stdio.h 在 “ C:Program FilesKeilC51INC”目錄下),你可以看到:在reg51.h中對一些標(biāo)識符進(jìn)行了聲明,如P1_0(可能沒有,要自己在程序中定義)、IE、TCO等;而stdio.h對常用的一些10函數(shù)進(jìn)行了聲明,如printf() 等。在C程序中,一個函數(shù)的定義可
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鷹潭青砂石欄桿施工方案
- 專利入股合同范本
- 卷閘門施工承包合同范例
- 公司小股東合同范本
- 公司投資簽約合同范本
- 加工制作手機殼合同范本
- 2025年四川省安全員-B證考試題庫及答案
- 公司設(shè)備訂貨合同范本
- 二年級口算題目練習(xí)冊100道
- 包裝物合同范本
- 阿爾茲海默病的家庭護(hù)理
- bim技術(shù)課件教學(xué)課件
- 腹水形成的原因及治療
- 單晶爐車間安全培訓(xùn)
- 高中地理必修第一冊期末試卷及答案-中圖版-2024-2025學(xué)年
- 護(hù)理核心制度測試題+參考答案
- 機械制造技術(shù)基礎(chǔ)(課程課件完整版)
- 《2023版CSCO卵巢癌診療指南》解讀課件
- 【醫(yī)院藥品管理系統(tǒng)探析與設(shè)計(論文)10000字】
- 螺旋體病梅毒課件
- 2024年咸寧市引進(jìn)人才44名歷年高頻難、易錯點500題模擬試題附帶答案詳解
評論
0/150
提交評論