一般而言,攝像頭可分為CCD與CMOS兩種類型。都是現(xiàn)在被廣泛用到的兩種圖像傳感器,兩者的共同之處就是都通過(guò)感光二極管將光信號(hào)轉(zhuǎn)換為電信號(hào),將模擬電壓值轉(zhuǎn)化為具體的數(shù)字值,而二者的主要差異在于數(shù)字值的傳送方式不同。 CCD傳感器中每一行的每一個(gè)象素的電荷數(shù)據(jù)都會(huì)依次傳送到下一個(gè)象素中,由最底端部分輸出,再經(jīng)由傳感器邊緣的放大器進(jìn)行放大輸出;而在CMOS傳感器中,每個(gè)象素都會(huì)鄰接一個(gè)放大器及A/D轉(zhuǎn)換電路,用類似內(nèi)存電路的方式將數(shù)據(jù)輸出。造成這種差異的原因在于:CCD的特殊工藝可保證數(shù)據(jù)在傳送時(shí)不會(huì)失真,因此各個(gè)象素的數(shù)據(jù)可匯聚至邊緣再進(jìn)行放大處理;而CMOS工藝的數(shù)據(jù)在傳送距離較長(zhǎng)時(shí)會(huì)產(chǎn)生噪聲,因此,必須先放大,再整合各個(gè)象素的數(shù)據(jù)。本著攝像頭優(yōu)越性與可用性的原則,這里采用了SONY CCD模擬攝像頭。
這是我前幾天做的智能小車的穩(wěn)壓電路,在科學(xué)技術(shù)發(fā)達(dá)的今天,電子電路設(shè)計(jì)已經(jīng)非常普遍與常見(jiàn),種類更是五花八門(mén),各式各樣。但是有句話叫“萬(wàn)變不離其宗”因此不管何種電路,它是為哪個(gè)特定的系統(tǒng)而設(shè)計(jì),在設(shè)計(jì)的過(guò)程中大體都要遵從以下幾個(gè)大的設(shè)計(jì)原則:
a:可靠性。從大到宇宙飛船、人造衛(wèi)星,小到在用電器、數(shù)碼設(shè)備。任何電路的設(shè)計(jì)都要保證其可靠性,就是要經(jīng)得起時(shí)間檢驗(yàn),讓用戶、使用者完全信賴。不能出任何大的故障,造成生命財(cái)產(chǎn)的損失。影響電路可靠性的因素有很多,比如各元器件間的電磁干擾、電感耦合等等。
b:穩(wěn)定性。與可靠性同樣重要,穩(wěn)定性要求所設(shè)計(jì)電路在較長(zhǎng)時(shí)間段里要穩(wěn)定的按照預(yù)設(shè)流程去工作,達(dá)到本該達(dá)到的目的或完成本該完成的任務(wù)而不出現(xiàn)任何故障,不需要經(jīng)常去檢查與維修,不給用戶或使用者帶來(lái)不必要的麻煩與不便。
c:邏輯性。我們知道,任何一個(gè)大的電路系統(tǒng)都可以拆分成若干個(gè)小的子電路系統(tǒng)。所以一一設(shè)計(jì)子電路系統(tǒng),然后合理的把這些子電路系統(tǒng)連接起來(lái)組成一個(gè)大的電路系統(tǒng),這有利于電路的檢修與調(diào)試。
d:優(yōu)化性。任何產(chǎn)品,物美價(jià)廉一直是人們所追求的。所以美觀漂亮、低價(jià)格、簡(jiǎn)潔高效、低功耗等都是電路設(shè)計(jì)時(shí)不得不考慮的原則。
OV5116攝像頭程序采集步驟
本采集程序基于k60芯片與拉普蘭德開(kāi)源函數(shù)驅(qū)動(dòng)庫(kù),利用DMA功能直接采集ov5116二值化圖像,利用pwm模擬pclk信號(hào)作為DMA觸發(fā)源,可根據(jù)實(shí)際比賽需求在不縮小攝像頭視野的前提下修改圖像寬度,利用dma方式采集圖像可實(shí)現(xiàn)程序的并行處理,極大的提高程序處理效率。例程中圖像大小為80*120。注:修改圖像寬度時(shí)應(yīng)同時(shí)修改pwm頻率。
接口說(shuō)明:VS-------pta5 HS-------ptb3 D1-------ptd0 注:?jiǎn)纹瑱C(jī) pte6口與單片機(jī)ptb18口相連接(pwm模擬pclk信號(hào)觸發(fā)dma采集) 串口波特率:256000 rx---ptc15 tx---ptc14
下圖為80*120大小時(shí)采集到的二值化圖像: 


 
下圖為60*160大小時(shí)采集到的二值化圖像:    
單片機(jī)源程序如下:
- #include <hidef.h>
- #include <MC9S12XS128.h>
- #pragma LINK_INFO DERIVATIVE "mc9s12xs128"
-
- int ii,jj;
- unsigned int t,t1;
- unsigned char sdata;
- //------------------------------------------------
-
- #define lie_end 260
- #define hang_end 91
- #define lie 52
- unsigned char ab[lie+1];
-
- #define delay(num) \
- { \
- unsigned int i,j; \
- for(i=0;i<num;i++) \
- for(j=0;j<58;j++); \
- }
- unsigned char c_lie=0,g_lie=0;
- unsigned int lie_count=0,hang_count=0,am;
-
- unsigned char ta[lie][hang_end];
-
- unsigned int get_n[]={ 16,29,41,52,62,71,79,86,92,98, //圖像定距采集對(duì)應(yīng)的攝像頭行數(shù)
- 103,108,112,116,120,124,128,132,135,138,
- 141,144,147,150,153,156,159,162,165,168,
- 170,172,174,176,178,180,182,184,186,188,
- 190,192,194,196,198,200,202,204,206,208,
- 210,211,212,242,243,245,246,247,248,249,250};
- unsigned char ts1,ts2, ge,shi;
- void SciTx(unsigned char text);
-
-
- void chuankou(){
-
- delay(1700);
- ge=37%10;
- shi=37/10;
-
- //sdata=shi*16+ge;
- //SciTx(sdata);
-
- for(ii=1;ii<40;ii++){///第一次的調(diào)試的時(shí)候把40修改為2,校對(duì)調(diào)試助手的屏幕大小,當(dāng)出現(xiàn)的數(shù)據(jù)剛剛一行時(shí),說(shuō)明串口調(diào)試助手的屏幕大小適合。
- //當(dāng)完成上面的操作后,把2修改為40,這時(shí)候就能夠看到一幅圖像的數(shù)據(jù)了。
- for(jj=1;jj<90;jj++){
-
- ts1=0;ts2=0;
-
- if(ta[ii][jj]==1&&ta[ii][jj+1]==1) ts1=16;//&&ta[ii][jj]>20
- jj++;
- if(ta[ii][jj]==1&&ta[ii][jj+1]==1) ts2=1;//&&ta[ii][jj]>20
-
- sdata=ts1+ts2;
- SciTx(sdata);
- }
- } for(;;) {}
-
- }
- void SciInit()
- {
- DDRM=0x01;
- SCI0BDH=0x00|0x01;
- SCI0BDL =0xA0;
- SCI0CR2=0X2C;
- SCI0CR1=0;
- }
- /*-------發(fā)射端程序----------------------*/
- void SciTx(unsigned char text)
- {
-
- while (!(SCI0SR1&0x80));
- SCI0DRH=0;
- SCI0DRL=text;
-
- }
- void chaopin(void)
- {
- CLKSEL=0X00;
- PLLCTL_PLLON=1;
- SYNR =0xc0 | 0x07;
- REFDV=0xc0 | 0x01;
- POSTDIV=0x00;
- _asm(nop);
- _asm(nop);
- _asm(nop);
- _asm(nop);
- while(!(CRGFLG_LOCK==1));
- CLKSEL_PLLSEL =1;
- }
- void TIM_init(void)
- {
- PACTL=0X50;
- PACNT=0X0000;
-
- TIOS =0x00;
- TSCR1=0x80;
- TCTL4=0x18;
- TIE=0x06;
- TFLG1=0xFF;
-
- }
- void shijian(void) {
- PITCFLMT_PITE=0;
- PITCE_PCE0=1;
- PITLD0=9999;
- PITMTLD0=5;
- PITMUX=0X00;
- PITINTE_PINTE0=1;
- PITCFLMT_PITE=1;
-
-
- }
-
- //===========================================================================================
- void main(void)
- {
-
- DDRA=0Xff;
- DDRJ=0X02;
- DDRK=0X30;
-
- DisableInterrupts;
- {
-
- DDRB=0X01;
-
- DDRM=0X00;
-
- DDRJ=0XBF;
- PTJ_PTJ6=1;
-
- DDRS=0XEE;
- PPSS=0X11;
- PPSJ=0XFF;
-
- }
-
- chaopin();
-
- TIM_init();
- shijian();
-
- SciInit();
- EnableInterrupts;
-
- {
- unsigned int e,w;
- for(e=1;e<6;e++)
- for(w=0;w<10;w++);
-
-
- }
-
- DDRS=0XFF;
- PPSS=0X11;
- PPSJ=0XFF;
- DDRB=0XFF;
- DDRJ=0XfF;
-
- DDRA=0Xf0;
-
- for(;;)
- {
-
- chuankou();
- /*這個(gè)函數(shù)一定要開(kāi)啟,串口調(diào)試方法
- 首先鏈接好線:通過(guò)USB轉(zhuǎn)串口或者是MAX232,把芯片的S0與TXD接通,S1與RXD接通,共地線。
- 接著把接通芯片的電源,和攝像頭的電源,同時(shí)保證攝像頭和芯片的線連接正確,并保證攝像頭看到完整的賽道。
- 把本程序拷入芯片里。打開(kāi)串口調(diào)試助手,校對(duì)對(duì)應(yīng)的串口端口,并選擇十六進(jìn)制顯示。接下來(lái)的操作看上面的注釋。
- */
- }
- }
-
-
- //---------------------------------
- #pragma CODE_SEG NON_BANKED
- void interrupt 10 IC2ISR(void) {
-
- TFLG1_C2F=1;
- if(lie_count==get_n[c_lie]) {
- delay(1);
-
-
- for(hang_count=0;hang_count<=hang_end;hang_count++){
-
-
- ta[c_lie][hang_count]=PORTA_PA0;//ATD0DR0L;
-
-
- }
- c_lie++;
- }
- lie_count++;
-
- }
-
- void interrupt 9 IC1ISR(void){
- TFLG1_C1F=1;
- hang_count=0;
- lie_count=0;
- c_lie=0;
- }
- void interrupt 66 PIT0Interrupt(void)
- {
- //chesudu=PACNT;
-
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
- </font></font>
復(fù)制代碼
0.png (45.44 KB, 下載次數(shù): 56)
下載附件
2018-5-31 02:50 上傳
全部資料51hei下載地址:
手創(chuàng)科技OV5116采集和串口調(diào)試程序.rar
(1.36 MB, 下載次數(shù): 14)
2018-5-31 02:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
ov5116圖像采集程序說(shuō)明.docx
(54.14 KB, 下載次數(shù): 6)
2018-5-30 21:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|