飛思卡爾那些事之離散型光電管路徑識別

2020-12-27 電子產品世界
光電管路徑識別算法

資源:
1、紅外光電發射接收管
2、電壓比較器
3、HCS12的IO口
4、HCS12的ATD模塊
5、HCS12的ECT模塊
原理:
1、紅外發射管,將紅外線信號發射出去,當遇到遮擋物是,會反射回來。如果當部分為黑色時,則不會發射回來(黑色能吸收光線,紅外線在遇到黑色遮擋物時,被吸收)。接收管在接收到反射的紅外線時,其兩端的電阻發生變化,從而可以輸出不同的電壓值,最後根據這些電壓值來識別路徑。
2、電壓比較器能將連續量轉變成開關量,在大於設定的閾值時,輸出高電平,小於設定的閾值時,則輸出低電平。
3、ADC能將模擬量轉換成計算機可以識別的數字量,可是自己對這些數位訊號進行處理,對路徑信息進行識別。
方案:
1、離散型路徑識別算法。
將紅外接收管輸出的電壓信號通過電壓比較器進行電壓比較,輸出一個開關量,HCS12的IO讀取電壓比較器輸出的開關量。安裝若干個光電管排成一排,並且同時讀取信息,當與發射管連接的IO口輸入一個0值時,則判斷黑色軌道在該光電接收管下,通過一定的算法即可求出黑色軌道和小車的偏移角度。
優點:簡單易行。
缺點:
a.存在檢測盲區,即在接收管之間的區域。
b.道路信息為離散值,通過道路信息經過控制算法得到的控制信息為階躍的而非連續的控制量,這對小車的穩定影響。
2、連續型路徑識別算法。
將紅外接收管輸出的電壓信號經過AD轉換,等到數字量的的電壓信號。通過對這些數字亮的處理可以得到近似於連續的道路信息。
優點:路徑信息為連續,路徑信息更加精確。
缺點:
a.數據處理算法實現較為困難。
b.因為光電接收管本身參數的不同,在同樣條件下,輸出的電壓可能有所不同,這對數位訊號的處理帶來難度。
方案選擇:因為是初次接觸路徑識別算法,為了小車能穩定的行駛,於是選擇了較為容易實現的離散路徑識別算法。
說明:
1、光電接收管為16個,在離前輪Hmm的距離排成一排,同時檢測道路信息,每個光電管之間的距離為15mm。
2、16個光電管分別和HCS12的PORTB口和PORTE口連接。
3、檢測時間間隔為10MS。
車輪和接收管的車子垂直距離為500mm。
4、變量iRoutPlace存放路徑信息。
5、數組iPLace存放路徑位置。
6、數組iplaceAngle存放方向角度。
7、位置信息數據:
當某位紅外接收管檢測到黑線時,則通過比較器,該位輸出為0,未檢測到的則為1。
iPLace[28]={0x7fff,0x3fff,0xbfff,0x9fff,0xdfff,0xcfff,0xefff,
0xf7ff,0xf3ff,0xfbff,0xf9ff,0xfdff,0xfcff,0xfeff,
0xff7f,0xff3f,0xffbf,0xff9f,0xffdf,0xffcf,0xffef,
0xfff7,0xfff3,0xfffb,0xfff9,0xfffd,0xfffc,0xfffe}
8、位置與偏移角的關係。
通過C程序計算出來。程序如下:
#include
#include
void main()
{
int i;
long double h,n;
n=0.0;
h=500.0;
for(i=0;i<16;i++)
{
printf("%d--%lf--",i,atan((15.0*n)/h));
printf("%lfn",((atan((15.0*n)/h))*180.0)/3.14);
n++;
}
}
運行結果:
位置-弧度角--角度
0--0.000000--0.000000
1--0.029991--1.719230
2--0.059928--3.435372
3--0.089758--5.145373
4--0.119429--6.846244
5--0.148890--8.535093
6--0.178093--10.209149
7--0.206992--11.865795
8--0.235545--13.502579
9--0.263712--15.117239
10--0.291457--16.707714
11--0.318748--18.272153
12--0.345556--19.808919
13--0.371856--21.316590
14--0.397628--22.793961
15--0.422854--24.240034
通過上表可以近似為,每偏移一個位置,角度增加1°。
9、角度信息:
iplaceAngle[]={-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,5,5,6,7,8,9,10,11,12,13}

CODE:
#include
#include
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
//===========================================================//
//光電管離散路徑識別算法
//PORTB和PORTE接電壓比較器的輸出端
//16位模數遞減計數器進行計數
//author: Yangtze
//time:2009/4/19/15:15:45
//===========================================================//
#define iSampling 10//路徑採樣時間設置
int iRoutPlace; //路徑位置臨時變量
int Angle; //角度
int iPLace[28]={0x7fff,0x3fff,0xbfff,0x9fff,0xdfff,0xcfff,0xefff, //路徑位置數組
0xf7ff,0xf3ff,0xfbff,0xf9ff,0xfdff,0xfcff,0xfeff,
0xff7f,0xff3f,0xffbf,0xff9f,0xffdf,0xffcf,0xffef,
0xfff7,0xfff3,0xfffb,0xfff9,0xfffd,0xfffc,0xfffe};

int iplaceAngle[]={-13,-12,-11,-10,-9,-8,//軌道偏移角度
-7,-6,-5,-4,-3,-2,
-1,0,1,2,3,5,5,6,
7,8,9,10,11,12,13};
void Init_MDC(void)
{
MCCTL=0xDF;//設定模數計數器工作方式,中斷使能,計數器使能
//分頻係數為16
MCCNT=1000;//定時器賦初值 (1/16M)*16*1000= 1ms
}
void pllclk(void) //16MHz
{
SYNR=0x01;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
REFDV=0x01;
CLKSEL=0x80;//選定PLL時鐘
}
void IO_Init()//PORTB和PORTE設置為輸入口
{
DDRB=0X00;
DDRE=0X00;
}
void main(void)
{
pllclk();
Init_PT0_ICapture();
IO_Init();
EnableInterrupts;
for(;;) {}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 26 MDC_ISR(void)
{
static unsigned int count=0;
count++;
if(count==iSampling)//100MS讀取一次
{
iRoutPlace=PORTB; //將IO口讀取到的信息存入變量iRoutPlace中,B口在高8為,E口在底8位
iRoutPlace=iRoutPlace<<8;
iRoutPlace|=PORTE;

for(i=0;i<28;i++)//通過循環比較,取得黑色軌道與中軸的偏移角度
{
if(iPLace==iRoutPlace)
{
Angle=iplaceAngle;
}
}
}
MCFLG = 0x80;//清中斷標誌位
}

後記:
該程序僅僅為黑色軌道的路徑識別程序,通過紅外接收管檢測黑色路徑,然後,輸出位置偏移的角度,並沒有控制程序。不過如果得到了偏移角度,控制程序就很好處理了。直接將角度和相應的PWM佔空比進行比較,輸出對應角度的佔空比,以控制舵機。
如果加上舵機控制程序,就能形成了以個開環的自控控制系統,控制算法為模糊控制算法。很多人都說模糊控制算法很難理解,很不好用,可是從這個程序上看來,模糊控制算法還是挺簡單的.只要根據自己的經驗來設計一些控制量的表格,通過檢測到路徑信息然後和控制量的表格進行對比,輸出對應的控制量。這就是模糊控制算法的思路。當然這也僅僅只是模糊控制算法的一點思路,有很多不足。
以上程序僅僅只是一個前期的使用版本,還有很多缺陷有待改進。缺陷如下:
1、沒有發射管的驅動程序,默認為發射管一直在發射。這樣的結果紅外接收管在檢測信息的時候,會受到很大的幹擾,而且功耗很大,對整個系統的電流供應和功率輸出有很大影響。
改進方法:在用從一定方向逐個啟動的方式進行檢測。假如有4對紅外發射接收管ABCD。先將D管的發射管開啟,ABC發射管均關閉,讀取D接收管的信息。然後在開去C發射管,關閉ABD發射管,讀取C接收管的信息。依次讀取每一個接收管的信息。以ns級的速度讀取,可以近似的認為接收管是同時讀取信息的。
2、沒有進行濾波處理。在讀取道路信息的時候,可能會受到多方面的幹擾,為了取得更加接近真實值的信息,有必要進行濾波處理,將幹擾噪聲剔除。
改進方法:在用多次讀取,取平均值的方法可以在一定程度上減小噪聲幹擾。
3、位置處理和角度輸出的時候沒有按照經驗進行適當的處理,比如說,在偏移角度很小的時候,可以近似的認為是在直線上行駛,直接輸出0°角,讓小車能快速的行駛。
4、上述程序中的採樣周期是隨意設定的,沒有科學依據,在設定採樣周期的時候,一定要通過計算出最優的周期,這樣才能保證小車行駛的穩定性和前瞻性。
暫時找到這麼多缺陷,更多的缺陷以及改進還得在實際運用中去發現,去尋求解決的方法。
完成這個程序,讓我也學到了很多。現總結如下:
1、重視原始碼的保存。C語言具有很強的移植性,在不同的平臺上尚且能進行移植,在同一個平臺上就更容易移植了。我上邊寫的這寫程序,其實很大部分都是之前ECT_SPEED程序裡邊寫過,而我這次在編寫程序的時候,根本不用重新編寫,直接調用ECT_SPEED裡邊的程序就可以完成任務。
我這個程序調用ECT_SPEED文件裡的函數有:Init_MDC(), pllclk(),如果在大型的軟體開發項目中,這樣將會大大縮短程序的開發周期,降低程序的開發成本。
2、重視程序說明文檔的編寫。這幾天的編程練習中,在編程之前,認真思考,將整個程序的算法,流程都考慮清楚之後,然後將其通過說明文檔的形式寫出來。這樣的好處是,使我在程序的編寫的過程中,能一氣呵成,不再像以前那樣,一個稍微大一點的程序編寫下來,還沒編寫完畢,就已經原來的思路忘記了。他的另一個好處就是方便以後閱讀程序。
3、編寫程序的時候,一定要多想,而且從不同的角度去尋找解決問題的方法。在編寫這個程序之前,在我的意識當中,是知道用一排紅外檢測管是可以檢測出黑色軌道的,可是在處理軌道位置的時候,一直都不知道怎麼處理,怎麼才能讓單片機知道黑線在那個地方。想了好久,才從角度的這個方向去理解,最終找到了位置處理的方法。
4、一定要重視循環,儘可能多的使用循環。在上述程序的對比中,我第一感覺是用switch語句進行比較,當輸入和whitch中的某一個case吻合時,執行相應的語句。可是在這樣的情況下,得寫28個case語句,並寫與之對應輸出語句。這樣會大大增加程序的體積,這在單片機內存空間很少的情況下,造成的錯誤是致命的。
為了節省存儲空間,就開始尋求其他方法來解決這個問題。這樣我想到了冒泡程序中逐次對比的方法。我這個程序的問題也可以用多次個循環來實現次比較啊,如果比較結果為真,則執行相應的語句。
於是就得到了這個比較程序:
for(i=0;i<28;i++)//通過循環比較,取得黑色軌道與中軸的偏移角度
{
if(iPLace==iRoutPlace)
{
Angle=iplaceAngle;
}
}

相關焦點

  • 一項基於光電管路徑識別的智能車系統設計
    本文所述智能車尋跡系統採用紅外反射式光電管識別路徑上的黑線,並以最短的時間完成尋跡。通過加長轉臂的舵機驅動前輪轉向,使用符合PI算法的控制器實現直流電機的調速。為了使智能車快速、平穩地行駛,系統必須把路徑識別、相應的轉向伺服電機控制以及直流驅動電機控制準確地結合在一起。
  • 光電管原理
    光電管原理--簡介  光電管是一種基於外光電效應的基本光電轉換器件,它可使光信號轉換成電信號。它可以被用作光電陰極的金屬有鹼金屬、汞、金、銀等,可適合不同波段的需要,但是由於光電管靈敏度低、體積大以及易破損的特點,已被固體光電器件所代替。
  • 光電倍增管工作原理_光電倍增管的組成
    光電倍增管工作原理   光電倍增管(PMT)是一種高靈敏度和超快時間響應光探測器。典型的光電倍增管,如圖所示在真空管,包括光電發射陰極(光電陰極)和聚焦電極、電子倍增,電子收集極(陽極)裝置。   光電倍增管在可以檢測紫外、可見光和近紅外線光電探測器的輻射能量的高靈敏度和低噪聲。光電倍增管和快速響應,低背景、大面積陰極等。   根據光電效應,二次電子發射和電子光學的原理,透明真空內殼配備特殊電極的裝置。
  • 光電倍增管的工作過程
    因為採用了二次發射倍增系統,所以光電倍增管在探測紫外、可見和近紅外區的輻射能量的光電探測器中,具有極高的靈敏度和極低的噪聲。另外,光電倍增管還具有響應快速、成本低、陰極面積大等優點。   基於外光電效應和二次電子發射效應的電子真空器件。它利用二次電子發射使逸出的光電子倍增,獲得遠高於光電管的靈敏度,能測量微弱的光信號。
  • 光電倍增管的主要噪聲
    光電倍增管的噪聲來源   光電倍增管的噪聲來源可以粗略地分為兩類。第一類屬於來自於光電倍增管工作的基本過程所引起的噪聲;第二類屬於光電倍增管設計和製造的方式及使用條件所引起的噪聲。第一類是更基本的,它包括光電子發射和通過二次發射電子倍增管的統計過程;第二類包括光陰極的熱離子發射,管子裡殘留氣體電離,輸出極到光陰極的光反饋,以及由管子裡許多材料的自發發射所引起的隨機發射。
  • 淺談光電倍增管
    濱松公司的研發一直是從與光的對話開始的,從最初的光電管、攝像管的研發生產開始,逐步發展到擁有光探測器及光源、半導體光電產品、圖像分析與計測裝置、雷射以及相關技術等全系列光電產品的公司。在濱松公司發展過程中光電倍增管技術起到了不可磨滅的作用,也一次又一次地把濱松公司的探測器產品推向了世界的舞臺。
  • 光電管工作原理
    光電管結構與工作原理光電管主要性能1)光電管的伏安特性 在一定的光照射下,對光電器件的陰極所加電壓與陽極所產生的電流之間的關係稱為光電管的伏安特性。(2)光電管的光照特性當光電管的陰極和陽極之間所加的電壓一定時,光通量與光電流之間的關係。
  • 光電倍增管暗電流產生的原因_減少光電倍增管的暗電流方法
    打開APP 光電倍增管暗電流產生的原因_減少光電倍增管的暗電流方法 發表於 2019-06-28 09:42:53   光電倍增管的暗電流   電耦合器的輸出特性是指在一定的發光電流IF下,光敏管所加偏置電壓VCE與輸出電流IC之間的關係,當IF=0時,發光二極體不發光,此時的光敏電晶體集電極輸出電流稱為暗電流,一般很小。
  • 光電信息科學與工程專業與就業
    隨著國家發展光電技術和產業的一系列戰略的出臺,以及國內「光谷」的建設和投入,光通信、光傳感、光存儲、光顯示等一大批光電信息領域的技術和產業相繼出現。工信部2017年1月發布《軟體和信息技術服務業發展規劃(2016—2020年)》,將「十三五」期間軟體和信息技術服務產業年均增速定為13%以上,到2020年,產業業務收入突破8萬億元。各地也在不斷加大相關產業規模。
  • 光電倍增管的特點與用途
    打開APP 光電倍增管的特點與用途 陳翠 發表於 2019-07-02 14:36:38   光電倍增管的特點   1、放大倍數很高,用於探測微弱信號。
  • 光電倍增管探測範圍
    打開APP 光電倍增管探測範圍 陳翠 發表於 2019-07-02 14:51:24   光電倍增管探測範圍   從科學的角度來說,電磁波是能量的一種,凡是高於絕對零度的物體,都會釋放出電磁波,且溫度越高,釋放的電磁波波長就越短。
  • 概率論2:離散型隨機變量
    除此之外,儘管我們可以在邏輯中理解那些概率的算法,但那不是數學語言。在數學世界裡,你不能說硬幣是正面還是反面,這個需要一個轉換,而轉換則用到了函數。函數本身就是數學世界和真實世界的轉換器。2離散型隨機變量有些隨機變量,它全部可能取到的不相同的值是有限個或可列無限多個,也可以說概率1以一定的規律分布在各個可能值上。這種隨機變量稱為"離散型隨機變量"。
  • 我國自主研製光電倍增管成功 用於多項大科學工程
    過去人跡罕至的地方,一個方圓1.36平方公裡的探測陣列正在加緊安裝,近萬個探測器將一探世紀之謎——高能宇宙線起源。  6月19日,國家重大科技基礎設施高海拔宇宙線觀測站(LHAASO),進入集中安裝階段。我國自主研製的2270隻高時間解析度的光電倍增管將在該系統中發揮關鍵作用。
  • 爭議「高考爛題」:光電管可以等效為乾電池嗎?
    一文中,針對某道高考題要求計算光電管的「內阻」, 作者提出質疑:「該裝置有內阻這檔子事嗎?」這個曾讓愛因斯坦因光電效應而獲得諾貝爾獎的實驗裝置,可以簡單通過開路電壓除以閉路電流來計算電阻嗎?文章發表後引起了廣泛討論,其中一些爭執不下的討論似可以歸結為物理人和工程人看待問題的不同視角。
  • 光電探測器的性能參數及應用
    但對具體器件的光譜響應範圍的定義可能不同,例如對光電倍增管的定義為下降到峰值靈敏度的1% 或 0.1%的波長範圍。   量子效率是從光的量子特性出發來定義靈敏度,表示單位時間內流出探測器件的電子流與入射光子流之比。
  • 光電開關主要用途
    >   光電開關用途主要有哪些?   光電開關是利用被檢測物對光束的遮擋或反射,由同步迴路選通電路,從而檢測物體有無的。這種新型的光電開關已被用作物位檢測、液位控制、產品計數、寬度判別、速度檢測、定長剪切、孔洞識別、信號延時、自動門傳感、色標檢出、衝床和剪切機以及安全防護等諸多領域。此外,利用紅外線的隱蔽性,還可在銀行、倉庫、商店、辦公室以及其它需要的場合作為防盜警戒之用。
  • 飛思卡爾推出多核遠程通信處理器 MPC5121e
    五家業界領先的開發工具和實時作業系統(RTOS)廠商日前宣布支持飛思卡爾半導體推出的MPC5121e系統晶片處理器。這款多核MPC5121e處理器基於Power Architecture™技術,是飛思卡爾最強大的、高度集成的設備,適合遠程通信、以及需要複雜圖像、多媒體和實時聲音處理的工業和商業應用。
  • 【飛思卡爾FRDM-K64F開發板評測】做工精良 擴展豐富的開發板...
    丨整體印象對飛思卡爾最初的印象來自飛思卡爾主辦的全國大學生智能車競賽,年輕的時候經常留著口水看各種比賽視頻,當時的愛好是智能車,為此也買了一個基於stm 32的開發板和配件,飛思卡爾原屬於摩託羅拉的半導體部門,後獨立運行十多年,現如今已被恩智浦半導體
  • 雷射傳感器與光電傳感器的區別
    雷射傳感器與光電傳感器的區別   一、原理   光電傳感器是通過把光強度的變化轉換成電信號的變化來實現控制的。光電傳感器被用作物位檢測、液位控制、產品計數、寬度判別、速度檢測、定長剪切、孔洞識別、信號延時、自動門傳感、色標檢出、衝床和剪切機以及安全防護等諸多領域。此外,利用紅外線的隱蔽性,還可在銀行、倉庫、商店、辦公室以及其它需要的場合作為防盜警戒之用。
  • 歸類小助手——從光電倍增管的歸類談品目85.40的列目結構
    隨便翻了一下稅則,看到了子目8540.8900 10項下列目有「光電倍增管」,所以就答覆對方可考慮歸子目8540.8900 10。但事後仔細研究了一下品目85.40的列目結構與「光電倍增管」的工作原理後,發現這個商品的列目存在爭議。光電倍增管到底如何歸類?請看下面的分析:首先,對於非電專業的朋友們普及一下商品知識。