飛思卡爾C語言_第1頁
飛思卡爾C語言_第2頁
飛思卡爾C語言_第3頁
飛思卡爾C語言_第4頁
飛思卡爾C語言_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

1、2008-08-31 22:43求飛思卡爾智能車程序 懸賞分:80 - 解決時(shí)間:2008-3-5 12:53求飛思卡爾智能車的數(shù)據(jù)采集(CCD攝像頭)程序,舵機(jī),電機(jī)控制程序。 主控芯片為MC9S12DG128的匯編程序.硬件設(shè)計(jì)尚未完成,只要求實(shí)現(xiàn)基本功能即可.注釋越詳細(xì)越好.答案滿意會(huì)加分.-/* Test.c* Description: This file includes I/ O function for test, the PWM outputs function for test, function* testing sensors.* (c) Copyright 2006,Z

2、hao Cheng* All Rights Reserved* By : Zhao Cheng* Note : Don't change this file if possible.*/#include <hidef.h>#include <mc9s12dg128.h>#define HIGHSPEED 8000#define LOWSPEED 11000 /* 速度變量,0-24000 數(shù)值越大,速度越慢 */void PWMout(int, int);/* 24000-20000 */void IOtest(void)static unsigned char

3、 i=0,j=0x01,k;DDRB = DDRA = 0xFF;PORTB = 0xf0;for(;)k=(j)&0x7f;PORTA = PORTB = k;while (TCNT != 0x0000);while (TCNT = 0x0000)if(i>9)j=j<<1;i=0;i+;if(j>=0x80)j=0x01;void PWMtest(void)int counter=-4500;DDRB = 0xff;PORTB = 0xff;TSCR1 = 0x80; /* enable timer TCNT */TSCR2 = 0x00; /* TCNT

4、prescaler setup */for(;)while (TCNT != 0x0000);while (TCNT = 0x0000);counter=counter+30;if(counter >= 3000)counter = 0;PWMout(4500, LOWSPEED);if(counter = 1500)PWMout(-4500, LOWSPEED);PORTB = (char)(counter/100);void SignalTest(void)unsigned char signal;int Direction, Velocity;Direction = 0;Veloc

5、ity = LOWSPEED;DDRA = 0x00;DDRB = 0xff;signal = PORTA;PORTB = signal;switch(signal)case 0x08: /* 0001 1000 */case 0x10:Direction = 800;Velocity = HIGHSPEED;break;case 0x04: /* 0010 0100 */case 0x20:Direction = 1500;Velocity = HIGHSPEED;break;case 0x02: /* 0100 0010 */case 0x40:Direction = 2800;Veloc

6、ity = HIGHSPEED;break;case 0x01: /* 1000 0001 */case 0x80:Direction = 4000;Velocity = LOWSPEED;break;case 0x3c: /* 0011 1100 over start line */case 0xff: /* 1111 1111 over crossing line */case 0x00: /* 0000 0000 go straight not need changed state */default:break;if(signal > 0x0f)Direction = -Dire

7、ction;PWMout(Direction, LOWSPEED);/* LCD1620.c* ICC-AVR application builder : 2006-1-8 21:43:48* Target : M8* Crystal: 4.0000Mhz* Note : Don't change this file if possible.*/#define CMD_CLEAR 0x01#define CMD_RESET 0x02#include <iom8v.h>#include <macros.h>#define LCD_DATA 0xff#define

8、LCD_EN 0x01 /PORTC 0#define LCD_RS 0x02 /PORTC 1#define LCD_RW 0x04 /PORTC 2#define LCD_DATAPORT PORTB#define LCD_ENPORT PORTA#define LCD_RSPORT PORTA#define LCD_RWPORT PORTAvoid lcd_init(void);void lcd_write_cmd(unsigned cmd,unsigned data);void lcd_setxy(unsigned char x,unsigned char y);void lcd_wr

9、ite_string(unsigned char X,unsigned char Y,unsigned char *str);void delay_nus(unsigned int n);void delay_nms(unsigned int n);void lcd_init(void)DDRB |= LCD_DATA;DDRA |= LCD_EN | LCD_RS | LCD_RW;LCD_RWPORT&=LCD_RW;LCD_DATAPORT=0x30; /控制字規(guī)則:5:8bit,4:16x2,3:5x7LCD_ENPORT|=LCD_EN;delay_nus(1);LCD_EN

10、PORT&=LCD_EN;delay_nus(40);lcd_write_cmd(0,0x38); /8bit testlcd_write_cmd(0,0x0c); /顯示開lcd_write_cmd(0,0x01); /顯示清屏lcd_write_cmd(0,0x06); /顯示光標(biāo)移動(dòng)設(shè)置void lcd_write_cmd(unsigned cmd,unsigned data)if(cmd=0)LCD_RSPORT&=LCD_RS;elseLCD_RSPORT|=LCD_RS;LCD_DATAPORT&=0x00;LCD_DATAPORT=data;LCD_ENP

11、ORT|=LCD_EN;delay_nus(10);LCD_ENPORT&=LCD_EN;delay_nus(10);void lcd_setxy(unsigned char x,unsigned char y)unsigned char addr;if(y=0)addr=x+0x80;elseaddr=x+0xc0;lcd_write_cmd(0,addr);void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str)lcd_setxy(X,Y);while(*str)lcd_write_cmd(1

12、,*str);str+;void delay_1us(void) /1us延時(shí)函數(shù)asm("nop");void delay_nus(unsigned int n) /N us延時(shí)函數(shù)unsigned int i=0;for (i=0;i<n;i+)delay_1us();void delay_1ms(void) /1ms延時(shí)函數(shù)unsigned int i;for (i=0;i<1140;i+);void delay_nms(unsigned int n) /N ms延時(shí)函數(shù)unsigned int i=0;for (i=0;i<n;i+)delay_1

13、ms();/call this routine to initialize all peripheralsvoid main(void)lcd_init();while(1)lcd_write_cmd(0,0x01); /清屏delay_nms(2);lcd_write_string(0,0,"happy new year");delay_nms(100);lcd_write_string(0,1,"LCD successful!");delay_nms(100);/* 程序結(jié)束 */關(guān)于飛思卡爾智能車模起跑線識(shí)別方法的設(shè)計(jì)與實(shí)現(xiàn)2007-12-02 0

14、0:33設(shè)計(jì)思想及算法實(shí)現(xiàn)車模與賽道的參數(shù)如圖1所示。車模運(yùn)行的主要形式主要是車模的規(guī)定的賽道內(nèi)行進(jìn),賽道中央有一條25mm寬的黑色引導(dǎo)線。 常用的車模巡線方案有光電傳感器陣列和CCD探測(cè)法等,這里介紹光電傳感器陣列的設(shè)計(jì)方案。光電傳感器是靠紅外發(fā)射管和紅外接收管組成的傳感器,如圖2所示。 紅外發(fā)射管發(fā)射的紅外線具有一定的方向性,當(dāng)紅外線照射到白色表面上時(shí)會(huì)有較大的反射,如果距離Dl取值合適,紅外接收管可接收到反射回的紅外線,再利用紅外接收管的電氣特性,在電路中處理紅外線的接收信息;如果反射表面為黑色,紅外光會(huì)被表面將其大部分吸收,紅外接收管就難以收到紅外線。這樣,就可以利用紅外收發(fā)管組成的光

15、電傳感器檢測(cè)賽道黑線,實(shí)現(xiàn)智能車的巡線方案。光電傳感器陣列布局參數(shù)的確定如圖3所示,光電傳感器陣列參數(shù)主要有管距D(管內(nèi)側(cè)距離),管直徑d,影響光電傳感器陣列參數(shù)的主要因素有:起跑標(biāo)志線和十字交叉線;比賽規(guī)則對(duì)車模尺寸的限制;跑道黑色引導(dǎo)線的寬度;舵機(jī)轉(zhuǎn)彎精度。根據(jù)以上影響因素,建立模型如圖3和圖4所示。 起跑標(biāo)志線和十字交叉線的識(shí)別方案要和光電傳感器陣列參數(shù)聯(lián)系起來考慮,所以首先根據(jù)起跑標(biāo)志線的基本識(shí)別方法來確定光電傳感器陣列參數(shù)。單片機(jī)在處理起跑標(biāo)志線和十字交叉線的區(qū)別時(shí),較方便的方法就是當(dāng)光電傳感器陣列經(jīng)過十字交叉線時(shí)7個(gè)傳感器全檢測(cè)到黑線,而經(jīng)過起跑標(biāo)志線時(shí)會(huì)有個(gè)別傳感器檢測(cè)到白色賽道

16、表面。根據(jù)這個(gè)道理,建立模型如圖3和圖4所示,分兩種情況討論:1) 光電傳感器陣列有2個(gè)傳感器檢測(cè)到白色跑道而其它傳感器檢測(cè)到黑線時(shí),如圖3所示;2) 光電傳感器陣列有1個(gè)傳感器檢測(cè)到白色跑道而其它傳感器檢測(cè)到黑線時(shí),如圖4所示。根據(jù)以上兩種情形,在光電傳感器陣列采用等距分布的情況下,可有如(1)式所示的數(shù)學(xué)描述。   (1)   (2)   (3)根據(jù)(3)式,做如圖5所示的數(shù)軸標(biāo)注方法來表示不等式的取值范圍。圖5中計(jì)算所得的D值范圍為(25, 30-1.5d)。但是也要考慮特殊情況。由于車身在經(jīng)過起跑標(biāo)志線時(shí)并不是每次都能保持和跑

17、道引導(dǎo)線平行,所以要考慮當(dāng)車身偏斜進(jìn)入起跑線時(shí)的情況會(huì)不會(huì)使(1)式有所變化。如圖5所示??紤]偏斜的角度如圖6所示,車身偏斜時(shí)在起跑線白色間隙的長(zhǎng)度f=19mm,這樣(1)式的數(shù)學(xué)描述中發(fā)生變化的僅僅是圖4所示中的跑道間隙值17.5mm,該值被f代替。帶入新值后用數(shù)軸標(biāo)注法標(biāo)注D值的區(qū)間如圖7所示。比較圖6發(fā)現(xiàn), A點(diǎn)向B點(diǎn)靠近形成A點(diǎn),并沒有超過B點(diǎn);C點(diǎn)和D點(diǎn)分別移動(dòng)到C點(diǎn)和D點(diǎn)位置,所以D的取值范圍有擴(kuò)大的趨勢(shì),這樣,圖5標(biāo)注的D值范圍符合要求。如果偏斜角度繼續(xù)增大,前排光電傳感器陣列不能同時(shí)進(jìn)入起始標(biāo)志線,這樣在單片機(jī)編程算法中很容易處理這種情況。綜合以上討論,可知:光電傳感器的管距(

18、管內(nèi)側(cè)距離)D取值范圍為(25, 30-1.5d);根據(jù)誤差理論,單純從傳感器的外徑尺寸上考慮,其值d越小越好;本設(shè)計(jì)中取光電管直徑d值為3mm,D值范圍(25mm,25.5mm)。 實(shí)測(cè)效果根據(jù)以上分析的光電傳感器的管距D取值范圍制作車模的尋線傳感器陣列,對(duì)車模進(jìn)行了大于50次的測(cè)試,實(shí)測(cè)結(jié)果表明:車模均能正確識(shí)別到起跑線。但是,設(shè)計(jì)還存在一些問題,主要有:*對(duì)D的取值要求苛刻;*要求紅外傳感器的正常工作率為90%以上。 結(jié)語本文分析了智能車模比賽中的相關(guān)技術(shù)參數(shù),建立了光電傳感器陣列的數(shù)學(xué)模型,確定了陣列參數(shù)。這為車模系統(tǒng)的路況記憶算法提供了基本參考點(diǎn)。本文還分析了起跑線識(shí)別方法的實(shí)測(cè)效果

19、,實(shí)測(cè)結(jié)果表明:車模均能正確識(shí)別到起跑線。(因版面有限,本文已作部分刪節(jié)) 第二屆“飛思卡爾”杯全國大學(xué)生智能車大賽側(cè)記2007年08月27日 星期一 14:22   轉(zhuǎn)眼間,智能車大賽已經(jīng)進(jìn)入了第二個(gè)年頭。今年的全國總決賽在上海交通大學(xué)舉行,華工的九頭鳥隊(duì)再次殺入決賽,自然我作為曾經(jīng)的隊(duì)員和交大的地頭蛇,接待工作自然是義不容辭。   可能有些朋友對(duì)這個(gè)比賽還不太了解,那我首先來做一個(gè)簡(jiǎn)單的說明。1.為啥叫“飛思卡爾”?飛思卡爾 (Freescale) 是全球著名的半導(dǎo)體芯片生產(chǎn)商,對(duì)于芯片行業(yè)不太了解的同學(xué)可能對(duì)這個(gè)名字很陌生,但提起摩托羅拉,估計(jì)是盡

20、人皆知了。不錯(cuò),飛思卡爾就是摩托羅拉公司原來的芯片部,如今獨(dú)立出來,喚作飛思卡爾。那么使用飛思卡爾芯片,由飛思卡爾公司贊助的比賽,理所當(dāng)然就是飛思卡爾杯咯。2.啥是智能車?智能車的定義很廣泛,我在這里掉書袋就惡心了。本次比賽的智能車,實(shí)際上是一種小車模型。但這不是“奧迪”的四驅(qū)車模型,也絕不是什么遙控車,而是能識(shí)別路徑的自主行駛的智能小車。這種智能小車,可以識(shí)別白色賽道上的黑色標(biāo)志線,然后跟隨黑線行進(jìn)。而比賽規(guī)則就是競(jìng)速咯,既不能跑出賽道,又要速度最快,這里就要牽涉到硬件的設(shè)計(jì)啦,機(jī)械結(jié)構(gòu)的改裝啦,控制程序的算法啦,傳感器的選擇啦等等一大串頭疼的事情。3.比賽的規(guī)則是咋樣的?先從隊(duì)伍選拔開始吧

21、,由于今年參賽隊(duì)伍達(dá)到300+支,因此在上半年,將全國劃分為 華東,華南,華北,西南四個(gè)賽區(qū)進(jìn)行預(yù)選賽;每個(gè)賽區(qū)的前X名進(jìn)入全國總決賽。那么比賽時(shí)候有些啥說道呢?首先有一個(gè)事先不公布的賽道,但賽道的一些參數(shù)會(huì)告訴大家,比如多長(zhǎng),彎道弧度,有無坡道,有無連續(xù)S道,有無大回環(huán)等等。然后比賽的時(shí)候呢,每輛小車從起始線發(fā)車,如果中途沖出賽道,則必須重新開始比賽;若沖出賽道達(dá)2次則算失敗未完成比賽,木有成績(jī)。所有小車在賽道上跑兩圈,記時(shí)間最短的一圈為自己的成績(jī)。到此,大家都心里有個(gè)數(shù)了。今年全國總決賽在上海交大的新體育館進(jìn)行,TASA我也是第一次進(jìn)去啊。外面看著是一幢白色鳥巢狀拉風(fēng)型建筑物,內(nèi)里也相當(dāng)華

22、麗。賽場(chǎng)中央是比賽賽道,賽道正前是所有參賽的76支隊(duì)伍的小車分兩列排開,很是壯觀!今年的比賽以攝像頭作為檢測(cè)裝置的方案居多,因此遠(yuǎn)看過去就是一溜長(zhǎng)頸鹿!說道這里,可能有的觀眾又要問了,啥攝像頭啊?那我再把這些智能小車的大致原理給大家介紹下。小車要跟隨黑線,就要有東西做眼睛咯。人走路靠眼珠子看,小車靠啥呢?靠傳感器!參賽的小車所使用的傳感器無非兩類:紅外傳感器,和CCD或者CMOS傳感器。所謂紅外傳感器,就是一個(gè)檢測(cè)紅外線的裝置啦。大家都知道,一般的光里包含了各種波長(zhǎng)的光波,有紅橙黃綠青藍(lán)紫啦,這是看得見的;還有光波頻率高或者低到人眼無法識(shí)別的光波,就是紅外線和紫外線啦。而紅外傳感器就是檢測(cè)這部

23、分光波的!光照在不同物體上會(huì)發(fā)生反射,人眼就是通過接收反射光來看見東西的。但唯有黑色是不反射光線,只吸收光線的。那么當(dāng)紅外傳感器移到黑色線條上方時(shí),就幾乎接收不到光線了,都被黑色吸收了嘛;但到了白色跑道上,因?yàn)榘咨欠垂獾念伾?,所以紅外線基本都被反射回來,自然傳感器就有信號(hào)了餓就這樣使用一排紅外傳感器,就可以知道黑線的位置啦那么CCD/CMOS是啥呢?說白了就是攝像頭,一般來說CMOS比CCD要差些,因此手機(jī)攝像頭大多用CMOS攝像頭,而數(shù)碼相機(jī)一般采用CCD攝像頭。采用攝像頭方案的小車呢,采集到的是前方的圖像,因此需要用圖像處理的算法,從這圖中分析出哪里是黑線,走勢(shì)如何等等,就這樣黑線就被看

24、到了。通常來說,攝像頭看到的是最直觀的圖像,信息量遠(yuǎn)遠(yuǎn)大于紅外傳感器,因此理論上來說攝像頭作為小車的眼睛是更好一些。這也是今年滿城盡帶攝像頭的原因啦。今年比賽和去年相比沒啥懸念,去年清華大學(xué)和上海交大上演的生死時(shí)速到了今年成了上海交大小車的獨(dú)領(lǐng)風(fēng)騷。預(yù)賽階段上交的兩只隊(duì)伍就牢牢占據(jù)前兩名,而這種優(yōu)勢(shì)一直保持到?jīng)Q賽,比賽呈現(xiàn)一邊倒的趨勢(shì)。而清華大學(xué)不但衛(wèi)冕失敗,連三甲都未能染指,實(shí)在是有江郎才盡的味道,可惜可惜。除了交大一枝獨(dú)秀以外,其他許多不知名的學(xué)校都取得了不俗的成績(jī),第三名為天津工業(yè)大學(xué)奪得,而北京科技大學(xué)和武漢科技大學(xué)也是實(shí)力相當(dāng)強(qiáng)勁的10強(qiáng)隊(duì)伍。而華中科技大學(xué)在決賽第一輪慘遭淘汰,去年

25、的遺憾又延續(xù)到今年,可惜之余,我也只能期望明年會(huì)有轉(zhuǎn)機(jī)吧。PP今晚上傳飛思卡爾單片機(jī)C語言編程框架2007-11-30 14:451978年美國貝爾實(shí)驗(yàn)室正式發(fā)表C語言,后來美國在此基礎(chǔ)上制定了一個(gè)C語言標(biāo)準(zhǔn)于1983年發(fā)表即 ANSI C。學(xué)習(xí)一種編程語言,需用一個(gè)好的編程環(huán)境,F(xiàn)reescale為廣大的用戶提供了免費(fèi)的Codewarrior集成開發(fā)系統(tǒng)。為用戶快速步入單片機(jī)的C語言編程提供一個(gè)很好的平臺(tái)。Codewarrior一般按照工程進(jìn)行文件的管理。一個(gè)工程包含的文件無非就是,C文件, H文件, Lib文件和內(nèi)存分配文件。項(xiàng)目的框架如下所示:/*-*工 程 名:Prgframe.mcp

26、                          *硬件連接:PTA.1接指示燈                      &#

27、160;          *程序描述:指示燈PTA.1閃爍                               *目     的:第一個(gè)freescale(Mo

28、torola) HC08系列MCU程序框架*說     明:提供Motorola MCU的編程框架,供教學(xué)入門使用    *注     意:如果延時(shí)不夠長(zhǎng)的話,會(huì)發(fā)覺燈不會(huì)閃爍,而是一 *          直亮,這是由于人的視覺的引起的。              *

29、/*頭文件*/i nclude "GP32C.h"                 /映像寄存器地址頭文件/*指示燈所接引腳定義*/#define   Light_P      PTA          /燈(Light)接在PTA口#define 

30、  Light_D      DDRA         /相應(yīng)的方向寄存器#define   Light_Pin    1            /燈所在的引腳/*全局變量聲明*/unsigned char I1;/*延時(shí)子函數(shù)聲明*/void Delay1000(void);/*主函數(shù)*/void

31、 main()           /I/O初始化      Light_D|=1<<Light_Pin;        /令指示燈引腳為輸出      Light_P|=1<<Light_Pin;        /初始時(shí),指示燈"暗&

32、quot;      /程序總循環(huán)入口      while(1)                            /指示燈(Light)“亮”       

33、60; Light_P&=(1<<Light_Pin);          /延時(shí)         for(I1=0;I1<=250;I1+)            Delay1000();          /指示燈(Li

34、ght)"暗”                      Light_P|=1<<Light_Pin;        /延時(shí)        for(I1=0;I1<=250;I1+)   &#

35、160;        Delay1000();         /*內(nèi)部子程序存放處/*Delay1000:延時(shí)1000個(gè)時(shí)鐘周期-*    *功   能:延時(shí)函數(shù)(約1000個(gè)時(shí)鐘周期)                  &#

36、160;   *參   數(shù):無                                            &

37、#160; *返   回:無                                              *-*/&

38、#160;                           void Delay1000(void)      unsigned char u;      for(u=0;u<=110;u+);   智能車運(yùn)動(dòng)狀態(tài)實(shí)時(shí)監(jiān)

39、測(cè)系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)2008-10-15 12:36系統(tǒng)功能及應(yīng)用本 系統(tǒng)主要完成將智能車行駛過程中的各種狀態(tài)信息(如傳感器亮滅,車速,舵機(jī)轉(zhuǎn)角,電池電量等)實(shí)時(shí)地以無線串行通信方式發(fā)送至上位機(jī)處理,并繪制各部分狀 態(tài)值關(guān)于時(shí)間的曲線。有了這些曲線就不難看出智能車在賽道各個(gè)位置的狀態(tài),各種控制參數(shù)的優(yōu)劣便一目了然了。尤為重要的是對(duì)于電機(jī)控制PID參數(shù)的選取, 通過速度時(shí)間曲線可以很容易發(fā)現(xiàn)各套PID參數(shù)之間的差異。對(duì)于采用CCD傳感器的隊(duì)伍來說,該系統(tǒng)便成為了調(diào)試者的眼睛,可以見智能車之所見,相信對(duì) 編寫循線算法有很大幫助。而且還可以對(duì)這些數(shù)據(jù)作進(jìn)一步處理,例如求取一階導(dǎo)數(shù),以得到更多的信息。系

40、統(tǒng)的硬、軟件設(shè)計(jì)設(shè)計(jì)方案主要分成三部分:車載數(shù)據(jù)采集系統(tǒng),無線數(shù)傳系統(tǒng),上位機(jī)數(shù)據(jù)處理系統(tǒng)。系統(tǒng)基本構(gòu)建如圖1所示。圖1智能實(shí)時(shí)監(jiān)測(cè)系統(tǒng)結(jié)構(gòu)框圖與流程圖車載數(shù)據(jù)采集系統(tǒng)車 載數(shù)據(jù)采集系統(tǒng)主要由單片機(jī)負(fù)責(zé)采集賽車行駛過程中的速度、傳感器狀態(tài)、電池電壓、舵機(jī)轉(zhuǎn)角等信息。為了使監(jiān)測(cè)系統(tǒng)不占用S12單片機(jī)的內(nèi)部資源并且支持 熱插拔,我們將除供電之外的監(jiān)測(cè)系統(tǒng)與智能車控制系統(tǒng)相分離。我們選擇ATMEL公司的ATMEGA16單片機(jī)作為該數(shù)據(jù)采集系統(tǒng)的處理器。二值型光電傳 感器信號(hào)的采集直接使用該單片機(jī)的I/O口進(jìn)行采集,連續(xù)型光電傳感器、電池電壓及CCD攝像頭信號(hào)則采用該單片機(jī)的A/D口進(jìn)行采集,速度信息

41、則通過光 電編碼器和該單片機(jī)的計(jì)數(shù)器來采集。采集到的數(shù)據(jù)每20ms向上位機(jī)發(fā)送一次。無線數(shù)傳系統(tǒng)下 位機(jī)向上位機(jī)傳輸?shù)氖且悦?0ms傳輸一組包含了光電編碼器值(speed),電池電壓(battery),舵機(jī)轉(zhuǎn)角值(angle),傳感器當(dāng)前狀態(tài) (sensor)的數(shù)據(jù),如果是在理想狀態(tài)下,上位機(jī)接收到的應(yīng)是上述各值循環(huán)出現(xiàn)的周期性數(shù)據(jù),此時(shí)上位機(jī)只需將這些數(shù)據(jù)按順序裝入各自的數(shù)組并畫圖即 可。但在實(shí)際的無線傳輸過程中可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。因此加入適當(dāng)?shù)臄?shù)據(jù)校驗(yàn)是必要的,否則會(huì)出現(xiàn)數(shù)據(jù)裝入錯(cuò)誤,造成畫圖的混亂。我們?cè)趯?shí)際過程中是在每 組數(shù)據(jù)中加入0x00,0xff的幀頭,當(dāng)數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí),則舍棄該

42、幀數(shù)據(jù)。數(shù)據(jù)的無線收發(fā)部分采用的是SUNRAY公司的QC96型無線收發(fā)模塊,該模塊可以收發(fā)波特率為9600bps的串行數(shù)據(jù),距離可達(dá)100m。上位機(jī)的數(shù)據(jù)接收及處理上位機(jī)部份主要由四個(gè)模塊構(gòu)成:·數(shù)據(jù)接收模塊功能:上位機(jī)通過串口采集下位機(jī)發(fā)送的原始數(shù)據(jù)。實(shí) 現(xiàn):VC+中實(shí)現(xiàn)串口通信一般有二種方式,分別是MSComm控件和Windows API函數(shù)。MSComm簡(jiǎn)潔易用,適用于比較簡(jiǎn)單的系統(tǒng),Windows API函數(shù)應(yīng)用較廣但比較復(fù)雜繁瑣,由于此模塊的串口通信功能相對(duì)簡(jiǎn)單,本系統(tǒng)采用前者。在實(shí)際過程中使用的是事件驅(qū)動(dòng)的方式,這種方法響應(yīng)及時(shí),可靠性 高,并且比查詢法占用更少的資源。

43、·存儲(chǔ)模塊功能:可直接存儲(chǔ)采集到的原始數(shù)據(jù),以備以后更多的分析處理。實(shí)現(xiàn):在每個(gè)OnComm事件被觸發(fā)后,將串口接收到的數(shù)據(jù)直接存入temp臨時(shí)文件,并且可以在用戶的要求下將temp臨時(shí)文件里的值存儲(chǔ)到指定文件。·數(shù)據(jù)的分析和處理模塊功能:將采集到的原始數(shù)據(jù)進(jìn)行用戶選定的分析和處理,主要包括丟棄錯(cuò)誤數(shù)據(jù),以及去除幀頭并進(jìn)行數(shù)據(jù)裝入任務(wù),同時(shí)也可以對(duì)已保存的數(shù)據(jù)進(jìn)行分析和處理。實(shí)現(xiàn):將temp臨時(shí)文件或用戶指定文件的數(shù)據(jù)讀出并裝入,以下為主要程序代碼:void CChuankokjDlg:find_data(car_data c_data, BYTE c_source, in

44、t c_length)int i=0;while(i<c_length-6)/防止下標(biāo)越界 if(c_sourcei=0x00)&&(c_sourcei+1=0 xff)&&(c_sourcei+6=0x0 0)&&(c_sourcei+7=0xff)/判斷幀頭并進(jìn)行數(shù)據(jù)裝入c_datalength.speed_data=c_sourcei+2;c_datalength.battary_data=c_sourcei+3;c_datalength.direction_data=c_sourcei+4;c_datalength.sensor_d

45、ata=c_sourcei+5;i=i+1;elsei+;·圖形顯示模塊功能:以圖形界面來顯示處理后的數(shù)據(jù),以便更直觀地觀察智能車的運(yùn)行狀態(tài)。實(shí)現(xiàn):將上一模塊中裝入各數(shù)組的數(shù)據(jù)在用戶的選擇的模式下進(jìn)行畫圖,可以只看一幅圖,也可以將四幅圖放在一起進(jìn)行對(duì)比觀看。實(shí)際的運(yùn)行界面及效果如圖2。圖2 圖形顯示介面運(yùn)行模塊結(jié)語該系統(tǒng)通過添加無線收發(fā)模塊,將智能車的實(shí)時(shí)狀態(tài)信息傳到上位機(jī)上,通過VC+編程,用圖象直觀形象地將其表現(xiàn)出來,很好地達(dá)到了對(duì)智能車狀態(tài)實(shí)時(shí)監(jiān)測(cè)的目的,極大地方便了我們調(diào)節(jié)PID等智能車參數(shù),對(duì)賽道記憶算法的研究提供了很大的幫助。7月31日【原創(chuàng)純TECH】第三屆飛卡智能車詳

46、解/*前些天發(fā)現(xiàn)不少XDJM搜索“智能車”結(jié)果搜到了我的頁面,既然我們已經(jīng)被KO出局,直接解密技術(shù)好了,能拿全國一等獎(jiǎng)的隊(duì)?wèi)?yīng)該也不是太稀罕我們的技術(shù)吧源代碼涉及知識(shí)產(chǎn)權(quán),不能貼出*/ 東北賽區(qū)戰(zhàn)況:預(yù)賽攝像頭組:8.105秒,獵豹,東北大學(xué)。隨后是吉林大學(xué) 東北虎,和東北大學(xué) 影馳。預(yù)賽光電組:11.58X秒,獵鷹,東北大學(xué)。隨后是12.9秒哈爾濱工程大學(xué) 某某,和13.0秒東北大學(xué) 神龍(唉。)。預(yù)賽長(zhǎng)度大約30m。 決賽攝像頭組:16.8秒,獵豹。決賽光電組:23.9秒,獵鷹。決賽長(zhǎng)度略大于2倍預(yù)賽。 / 車模改造:如果按車模原定架構(gòu)安裝,會(huì)發(fā)現(xiàn)有如下問題:1.舵機(jī)橫放影響轉(zhuǎn)向速度;2.原

47、電池位置可能會(huì)影響車輛重心位置影響轉(zhuǎn)向;3.控制電路板的位置擺放很大程度上會(huì)影響車輛中心,最好貼近車底盤安置,在底盤重新打孔固定;4.測(cè)速系統(tǒng),不論是碼輪式還是光電編碼器,原車模未提供空間,都需要在車后部重新固定,是否結(jié)實(shí)自己考量;成熟的改良做法是:1.舵機(jī)豎起,或加高橫放,使得舵機(jī)到前輪連桿的連片加長(zhǎng),提高單位角度的轉(zhuǎn)向角度;2.電路板貼底板安裝,已經(jīng)證實(shí)有很好的效果;3.傳感器支架,包括攝像頭的立桿,和光電排管的支撐,都必須與車體緊密連接,這關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性,需要精細(xì)制作;4.電池位置以居中或稍前為佳,使得整車重心前移,轉(zhuǎn)向靈活。 / 傳感器安置:攝像頭組基本大同小異,一個(gè)支桿上面固

48、定攝像頭,以最佳角度高度獲得最合適的視野范圍。基本視野范圍在40cm到1m左右,猜的。沒做攝像頭組。 /我們的布局:發(fā)射接收相對(duì),上下兩排。光電組排布各異,大多數(shù)組使用單排/雙排直行光電管探測(cè)。有的隊(duì)使用W型或U型排布,wellsleep認(rèn)為與其浪費(fèi)幾個(gè)傳感器探測(cè)近處,不如全部探遠(yuǎn),提早知道賽道情況總是好些。具體探遠(yuǎn)的方法,一是通過選擇優(yōu)秀的發(fā)光源,例如激光,或者功率較大的紅外管;二是使用多個(gè)較小功率發(fā)射管打到同一點(diǎn)提高反射強(qiáng)度。比賽允許使用16個(gè)傳感器,除去測(cè)速傳感器基本還剩14-15個(gè),經(jīng)實(shí)驗(yàn)用于探測(cè)起始線停車至少需要4組傳感器,也就是說前探路線的燈管數(shù)量大約在10-11個(gè)。我們使用的是上

49、排10組,前探距離30cm左右,檢測(cè)路徑;下排4組,前探距離5cm左右,檢測(cè)起始線。有一點(diǎn)要說明,前探距離越大,自然能提前轉(zhuǎn)向,有利于提高車速,但探測(cè)的準(zhǔn)確度和光電管的敏感度都有很大的變化。由于紅外線肉眼無法看到,即使使用CCD或CMOS觀察到紅外光斑,但接收管接收光線的角度仍然未知,只能通過大量反復(fù)試驗(yàn)獲得大概位置,非常難纏。而敏感度更是我們決賽失誤的決定性因素,因?yàn)楸荣愰L(zhǎng)達(dá)兩天,而期間無法調(diào)試車輛,溫度的變化,甚至電子器件自己的微小變化都會(huì)影響接收的精度。這也許可以從軟件上得到一些解決的辦法(例如計(jì)算最高最低電壓求平均來動(dòng)態(tài)定黑白閾值),但燈管的生產(chǎn)批次,電阻的生產(chǎn)批次不同使得同一性極難得

50、到統(tǒng)一,軟件是無法解決這類偏差的。對(duì)于激光光源,有著優(yōu)秀的亮度和無與倫比的方向性,但缺點(diǎn)同樣出在它的方向性上,由于方向性過強(qiáng),導(dǎo)致反射角度要求苛刻,要求安裝角度及牢固度比通常紅外管嚴(yán)格的多。另外激光由受激振蕩產(chǎn)生,地線不可接在一起,需要使用三八譯碼器或反相器解決??傊?,光電組的勝則就是,遠(yuǎn)and穩(wěn)。 / 舵機(jī)改造:現(xiàn)在似乎沒有隊(duì)不改造舵機(jī)了吧?加長(zhǎng)連片,使舵機(jī)小角度就能帶動(dòng)前輪大角度擺動(dòng)從而加快轉(zhuǎn)向。不過改造不宜過分,左右最大角PWM值在400/3200(PWMDTY/PWMPER)或左右或稍小為宜,如果到達(dá)300/3200那就太夸張了,很容易轉(zhuǎn)向無力,導(dǎo)致急轉(zhuǎn)失敗。/此圖可見舵機(jī)黃色轉(zhuǎn)動(dòng)軸下

51、的延長(zhǎng)連片連接拉桿 / 閉環(huán)控速系統(tǒng):速度較快的車輛必須使用閉環(huán)速度控制,即MCU給出預(yù)期速度->驅(qū)動(dòng)芯片產(chǎn)生要求電流驅(qū)動(dòng)電機(jī)->電機(jī)旋轉(zhuǎn)帶動(dòng)車輪->測(cè)速系統(tǒng)返回目前速度值->MCU計(jì)算速度偏差->驅(qū)動(dòng)芯片更改電流值,依此循環(huán)。 /此測(cè)速系統(tǒng)由與左側(cè)車輪同軸的大齒輪(碼盤)返回信號(hào),經(jīng)頻率-電壓轉(zhuǎn)換傳回MCU的AD接口,計(jì)算當(dāng)前速度。原理:碼盤上方有一U型架設(shè)的紅外傳感器,當(dāng)紅外接收器穿過齒輪的齒接收到對(duì)射過來的紅外光時(shí),接收器產(chǎn)生低電平,反之產(chǎn)生高電平(電平大約就是電壓的意思)。于是車輪轉(zhuǎn)動(dòng)產(chǎn)生一系列高低電平,又頻率不同即可知道車輪的轉(zhuǎn)速,隨后推知當(dāng)前車速。MC

52、U采到測(cè)速返回的電壓值后進(jìn)行AD轉(zhuǎn)換,得到當(dāng)前速度,通過PID的公式計(jì)算,得出下一步應(yīng)該給出的電流值(實(shí)際上是調(diào)整PWM的頻率),再次循環(huán)控速,以獲得直道的快速加速和進(jìn)彎的減速。此處的PID為自動(dòng)控制中的重要算法,參數(shù)需慢慢調(diào)試,下圖為理想效果圖,即變速時(shí)間短,速度控制穩(wěn)定。/Vo為期望的速度 大多數(shù)賽車采用MC33886芯片提供電機(jī)驅(qū)動(dòng),少則1片,多則4片。多片并行的好處在于瞬間提供更大的電流以快速啟動(dòng),和特殊設(shè)計(jì)提供反向電流以快速剎車。此次比賽看來,反向33886減速的接法在高速比賽中是必須的,PID控速幾乎不可達(dá)到類似的效果,這在需要極短反應(yīng)時(shí)間的比賽中是致命的。 / 算法設(shè)計(jì):其實(shí)最好

53、的算法就是沒有算法至少?zèng)]有發(fā)現(xiàn)除記憶之外的其他光電優(yōu)秀而有用的算法。我們的感覺,第一,算法一定要反應(yīng)快,if 語句多了很影響速度;第二,MCU的初始化很重要,各中斷的分頻系數(shù)設(shè)置正確才行;第三,DG128的堆棧真的很小,注意用static定義常量數(shù)組;第四,相信DG128和33886是牢固的,很多問題還是出現(xiàn)在程序上;第五,再NB的人也老老實(shí)實(shí)用C,匯編沒人能懂值得注意的是,由于第三屆比賽要求識(shí)別起始線,對(duì)于光電組來說,如何發(fā)現(xiàn)兩條黑色10cm起始線中夾的兩段3.75cm寬度白縫就很要點(diǎn)技術(shù)了。我們的做法是特意設(shè)計(jì)燈管在車輛行駛中正好夾在白縫當(dāng)中,當(dāng)然這要求車輛在轉(zhuǎn)向后能迅速擺正位置,而不左右

54、搖晃。也有許多車隊(duì)采用偷懶的辦法,例如將交叉線和起始線一起計(jì)算,然后用過數(shù)經(jīng)過的次數(shù)來得以識(shí)別(有一學(xué)校運(yùn)用此法,屢試不爽,其設(shè)定10次識(shí)別,在起跑之前人工計(jì)算經(jīng)過的次數(shù),如果多了,則起跑前在跑道上蹭夠次數(shù)再跑。);或識(shí)別起始線后利用定時(shí)中斷屏蔽經(jīng)過交叉線的時(shí)間,達(dá)到在起始線停車的觀看效果。而識(shí)別起始線對(duì)于攝像頭組就簡(jiǎn)單多了,畢竟一行30+的采樣點(diǎn)怎么著也能采到中間的窄縫,利用異或的方法計(jì)算一行中黑白跳變的次數(shù)就可以識(shí)別出起始線。我們的車,花了90%的時(shí)間在硬件修理和機(jī)械性能改造上,軟件實(shí)在缺乏亮點(diǎn),so over。 / 最后的話:要想快,軟件占30%,電氣性能占30%,剩下的就是機(jī)械架構(gòu)。跑

55、的越快,越發(fā)現(xiàn)機(jī)械的重要性。要想達(dá)到極速,穩(wěn)定的機(jī)械特性不可或缺。各個(gè)角度和零件連接,都有可能對(duì)整車產(chǎn)生影響。郁悶,設(shè)計(jì)硬件花了了大半個(gè)準(zhǔn)備期的車,在決賽還是倒在了硬件架構(gòu)上。5個(gè)月,最最累的5個(gè)月(別跟我提高考,跟這比高考算個(gè)P),終于結(jié)束了。希望明年的飛思卡爾智能車,速度能突破4m/s。那觀賞性就更強(qiáng)了。想學(xué)一句上屆上交解說員MM對(duì)獵豹比賽時(shí)說的話:獵豹加油!突破16秒!0:45 | 查看引用通告 (0) | 寫入日志ccd圖像采集解決方案2009-02-12 15:18      在采集圖像之前,我們首先要知道攝像頭輸

56、出信號(hào)的特性。目前的模擬攝像頭一般都是PAL制式的,輸出的信號(hào)由復(fù)合同步信號(hào),復(fù)合消隱信號(hào)和視頻信號(hào)。其中的視頻信號(hào)才是真正的圖像信號(hào),對(duì)于黑白攝像頭,圖像越黑,電壓越低,圖像越白,電壓越高。而復(fù)合同步信號(hào)是控制電視機(jī)的電子槍對(duì)電子的偏轉(zhuǎn)的,復(fù)合消隱信號(hào)是在圖像換行和換場(chǎng)時(shí)電子槍回掃時(shí)不發(fā)射電子。由于人眼看到的圖像大于等于24Hz時(shí)人才不會(huì)覺得圖像閃爍,所以PAL制式輸出的圖像是25Hz,即每秒鐘有25幅畫面,說的專業(yè)點(diǎn)就是每秒25幀,其中每一幀有625行。但由于在早期電子技術(shù)還不發(fā)達(dá)時(shí),電源不穩(wěn)定,容易對(duì)電視信號(hào)進(jìn)行干擾,而交流電源是50Hz所以,為了和電網(wǎng)兼容,同時(shí)由于25Hz時(shí)圖像不穩(wěn)定

57、,所以后來工程師們把一副圖像分成兩場(chǎng)顯示,對(duì)于一幅畫面,一共有625行,但是電子槍先掃描奇數(shù)場(chǎng)1,3,5.,然后再掃描2,4,6.,所以這樣的話,一副圖像就變成了隔行掃描,每秒鐘就有50場(chǎng)了。其中具體的細(xì)節(jié)請(qǐng)參考這個(gè)網(wǎng)站電視原理與系統(tǒng)只用看前面的黑白全電視信號(hào)和PAL制式就可以了(當(dāng)然如果感興趣可以全部看完)。     通過上面的內(nèi)容如果你對(duì)PAL制式信號(hào)了然于心,那么就可以開始圖像的采集了,PAL輸出的信號(hào)有復(fù)合同步信號(hào),復(fù)合消隱信號(hào)和視頻信號(hào)。那么我們首先就是要從這三種信號(hào)中分理出復(fù)合同步信號(hào),復(fù)合消隱信號(hào)和視頻信號(hào),以便我們對(duì)AD采樣到的值進(jìn)行存儲(chǔ)

58、,從而形成一幅畫面。具體如何分離,我們使用的是LM1881視頻同步分離器件,具體的硬件連接請(qǐng)參看論壇內(nèi)相關(guān)文章(論壇里有介紹LM1881的文章,自己搜吧,我不重復(fù)了)。   分離出行場(chǎng)同步,奇偶場(chǎng)信號(hào)后,就把他們接到單片機(jī)的外部中斷口,產(chǎn)生中斷,在中斷服務(wù)程序中對(duì)AD采集到的數(shù)據(jù)進(jìn)行圖像存儲(chǔ),從而形成一個(gè)二維數(shù)組的數(shù)字圖像。   下面就說說圖像采集方案,方法有多種,但我使用的方案是在行終端中讀取AD采樣的灰度值,在場(chǎng)同步中交換圖像采集和處理緩存指針,并對(duì)圖像進(jìn)行處理,然后控制小車,在主函數(shù)中只有初始化和鍵盤掃描和串口輸出函數(shù)。這樣做效率比較高,而且可以把

59、調(diào)試和圖像采集處理分開,變成起來比較方便。   大家遇到的還有一個(gè)很棘手的問題可能是AD采樣頻率該設(shè)置多大呢?建議大家先通過PLLL超頻,然后把AD時(shí)鐘頻率設(shè)置的高點(diǎn)才行。下面就把我的代碼貼給大家看看吧。/*/*    *鎖相環(huán)初始化*    */*void vPLLInit(void)                   &#

60、160;              /BUS-CLOCK=PLL-CLOCK/2=32M   REFDV = 1; / set the REFDV register 16M*2*(3+1)/(1+1)=64M    SYNR =3;    / set the SYNR register to give us a 64 MHz PLL-clock.    asm nop

61、    / nops required for PLL stability.    asm nop     asm nop    asm nop   while (CRGFLG&0x08)=0); / wait here till the PLL is locked.    CLKSEL|=0x80;           

62、;  / switch the bus clock to the PLL.設(shè)置總線時(shí)鐘為32M/*/*    *定時(shí)器初始化*    */*void vECTInit(void)TIOS =0x00;    /設(shè)為輸入捕捉TSCR1=0x80;    /定時(shí)器使能TSCR2=0x83;    /允許定時(shí)器溢出中斷,定時(shí)器時(shí)鐘32M/(23)=4MTCTL4=0xAA;    /觸發(fā)電平:下降沿TIE =0x

63、07;    /開中斷TFLG1=0xFF;    /清除中斷標(biāo)志輸入捕捉的1,2通道接行場(chǎng)中斷。/*/*    *AD轉(zhuǎn)換初始化程序*    */*void vADInit(void)/*ATD1設(shè)置*/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>

64、;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/上電,標(biāo)志位快速清零,忽略外部觸發(fā),執(zhí)行一次停止,中斷禁止。ATD1CTL2 = (ATD1CTL2_AFFC_MASK | ATD1CTL2_ADPU_MASK);      /<<<<<<<<<<<<<<<<<

65、;<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/轉(zhuǎn)換序列長(zhǎng)度為1,F(xiàn)IFO模式,F(xiàn)reeze模式下繼續(xù)轉(zhuǎn)換。|ATD0CTL3_FIFO_MASKATD1CTL3 = (ATD1CTL3_S1C_MASK);     /<&l

66、t;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器4>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/8位精度,2AD采樣周期,采樣長(zhǎng)度8。/ATDClock=BusClock*0.5/PRS+1 ; P

67、RS="15", divider="32"ATD1CTL4 =(ATD1CTL4_SRES8_MASK|ATD1CTL4_PRS0_MASK);    /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器5>>>>>>>>>>>>>>&g

68、t;>>>>>>>>>>>>>>>>/右對(duì)齊無符號(hào),掃描模式連續(xù)采樣,單通道采樣/多通道采樣|ATD0CTL5_MULT_MASK。ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);/<<<<<<<<<<<<<<<<<<<<<<<<<<禁止數(shù)字輸入緩沖>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ATD1DIEN=0x00;ATD1的0通道用于AD轉(zhuǎn)換下面是真正的圖像采集程序/<<<<<&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論