久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13193|回復: 20
打印 上一主題 下一主題
收起左側

STC單片機做的智能小車—上位機可控制行駛路徑、超聲避障、信息化遠程監控

  [復制鏈接]
跳轉到指定樓層
樓主
ID:51663 發表于 2013-7-11 20:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51hei論壇是我們學習嵌入式的非常好的平臺,大家不要亂發水貼,影響交流氛圍.
單片機實踐之閉門造車 安徽師范大學  07級電子信息工程

一、造車綜述
從2003年全國電子設計大賽以來智能小車一直備受青睞,大家都在前人的基礎上紛紛亮出自己的得意之作。且大部分是以循跡小車為主題,主控芯片自然是用的贊助商提供的片子為多。其中飛思卡爾、MPS430等都是智能小車的熱門主控芯片,甚者有采用FPGA、DSP、ARM來做控制臺的,個人覺得Cortex-M3很適合,不過既然是單片機實踐自然要從基礎的做起,這樣以后也可以很方便的移植到Cortex-M3上。而此文為大家介紹的是采用STC12C5A60S2為主控芯片,STC89S52為從處理器搭建的智能小車平臺。
簡單介紹一下智能小車平臺需要實現的功能:上位機無線遙控可發送速度、轉向、行車時間、軌跡、測距、自動蔽障等控制命令,同時可以反饋實時速度、距離、電源電壓、功率等狀態數據。
二、總體方案
測速采用光電管或者霍爾傳感器來實現,而這些傳感器的待處理信號都是開關量也就是周期性的脈沖,故測速需要占用兩只定時器。測距離目前常用的有超聲波測距、紅外測距兩種,這兩種方案都至少占用一只定時器。電機調速采用PWM信號,如果采用定時器來產生PWM信號的話又需要占用一只定時器。再算上一些串行口、定時器查詢等估計別說是普通的AT89S52就連AVR的片子也很吃力,所以采用兩片單片機也變得合情合理了。而且也為以后擴展其他信號傳感器提供接口。一般片級通信多是采用SPI通信,51的片子很少有支持,所以大部分SPI多是軟件模擬的(某些串行的AD轉換)。不過這里要是使用模擬的SPI來實現片級通信的話會由于沒有SPI中斷給通信帶來很大的局限性,或者有些人會想到使用定時器中斷來查詢實現軟件模擬的SPI片級通信,而這樣又會占用定時器(不考慮定時器服用的情況下)。分析考慮所需的資源,最終選取STC12C5A60S2作為主控制器,該芯片自帶2路PWM控制器、2個定時器、2個串行口支持獨立的波特率發生器、3路可編程時鐘輸出、10位AD轉換器、一個SPI接口等。
測速模塊掛在STC12C5A60S2上面并配置一路PWM輸出至直流電機驅動模塊(后輪驅動),同時通過光耦隔離控制直流電機轉向以及步進電機步進節拍。STC89S52負責超聲測距通過串行口發送至STC12C5A60S2。主控芯片綜合處理各方面的信息,通過另一個串行口與PC機通信。無線模塊最初采用自帶串行接口的藍牙模塊,但由于藍牙距離不夠、重啟系統需重新配置等原因后期采用NRF2401來替代。總體結構框圖如下(采用Microsoft Office Visio繪制)

三、硬件原理
1、電機驅動:
智能小車采用12V直流電機為后輪驅動力,6V步進電機為前輪轉向控制提供動力,故智能車平臺需驅動12V直流電機和6V步進電機。由于需要控制小車的車速以及小車行駛的方向(包括轉向以及前進、后退、停車),直流電機驅動采用常用的H橋電路,通過控制信號選通對管與否實現電機的正反轉,并改變所加電壓的占空比來改變電機轉速。這里采用電機驅動專用芯片L298N,該芯片可驅動兩路5-36V的直流電機或者一路四拍的步進電機。同時在L298N與主控芯片間通過四路光耦TLP521-4隔離消除干擾信號。
搭建好電路后不要直接在小車上調試,外界一只相同電壓的電機測試模塊。在STC12C5A60S2上配置好串口、PWM,實現串口接收的數據直接賦值給PWM定時器CCAP1L、CCAP1H。利用串口調試助手發送控制信息給STC12C5A60S2,同時輔助外界電源更改L298N的IN1和IN2,共同完成L298N電機驅動模塊的調試。

2、光電對管測速
   光電對管采用TCRT5000,由一只特殊的發光二極管和光電三極管構成,當二極管發出的光打在光電三極管的基極B上時三極管CE導通。而正常情況下二極管的光不能到達光電管的基極上,故通過在車輪上貼反射片即可實現對小車的測速。假設車輪均勻貼有n片反射片,測得光電三極管的輸出脈沖頻率為f,則車速=f/n。為了提高測速的精度,在信號后級添加比較器調理信號為標準的方波,調節比較器運放的偏置電壓使方波信號最適合于測速。
   同樣適用外界電機(已配有自制的編碼盤),給電機加電讓其帶動編碼盤旋轉,將光電對管靠近編碼盤,用示波器觀測輸出脈沖信號的有無與好壞,調節比較器偏置電壓使脈沖最接近于方波且幅度大于3.3V。
3、超聲測距
超聲波測距的方法有多種:如往返時間檢測法、相位檢測法、聲波幅值檢測法。本設計采用往返時間檢測法測距。其原理是超聲波傳感器發射一定頻率的超聲波,借助空氣媒質傳播,到達測量目標或障礙物后反射回來,經反射后由超聲波接收器接收脈沖,其所經歷的時間即往返時間,往返時間與超聲波傳播的路程的遠近有關。測試傳輸時間可以得出距離。假定s為被測物體到測距儀之間的距離,測得的時間為T,超聲波傳播速度為V表示,則有關系式S=VT/2 。
超聲波發射部分是為了讓超聲波發射換能器TCT40-16T能向外界發出40 kHz左右的方波脈沖信號。編程由單片機端口輸出40 kHz左右的方波脈沖信號,由于單片機端口輸出功率不夠,40 kHz方波脈沖信號分成兩路,送給一個由74HC04組成的推挽式電路進行功率放大以便使發射距離足夠遠,滿足測量距離要求,最后送給超聲波發射換能器TCT40-16T以聲波形式發射到空氣中。發射部分的電路,如圖4所示。圖中輸出端上拉電阻R31,R32,一方面可以提高反向器74HC04輸出高電平的驅動能力,另一方面可以增加超聲換能器的阻尼效果,縮短其自由振蕩的時間。

上述TCT40-16T發射的在空氣中傳播,遇到障礙物就會返回,超聲波接收部分是為了將反射波(回波)順利接收到超聲波接收換能器TCT40-16R進行轉換變成電信號,并對此電信號進行放大、濾波、整形等處理后,這里用索尼公司生產的集成芯片CX20106,得到一個負脈沖送給單片機的INT0引腳,以產生一個中斷。

接在CX20106的第五腳上的電阻,用以設置帶通濾波器的中心頻率f0,阻值越大,中心頻率越低。電路中采用一只粗調的可變電阻和一只精密調節的電阻串聯而成。調節函數信號發生器產生40K的方波,接在超聲發射電路的輸入端,同時用示波器觀測超聲接收電路的輸出端。用書本等模擬障礙物,調節兩只電阻觀測示波器看接收端否會產生電平跳變。
若產生跳變則發射與接收電路調試完成。
4、電源模塊
   對于小車而言電源是整個系統的咽喉,考慮到體積、重量、電能容量等。這里我們選取8節1.5V鋰電池串聯起來作為總電源輸出(12V),采用LM78L05、LM317構成整個電源模塊。
5、無線通信模塊
   無線通信采用現成的串行接口的藍牙模塊,只需要配置主從機、信道、通信密鑰、波特率即可實現無線串行通信。這樣PC和主控STC12C5A60S2只需將通信理解為串行通信,給程序構架帶來便利。不過需要考慮通信接口的問題:STC12C5A60S2是5V電壓供電,TXD和RXD的通信電信號自然是以5V為參考電平;藍牙模塊是3.3V電壓供電,TXD和RXD的通信電信號自然是以3.3V為參考電平。所以我們需要添加電平轉換,實現STC12C5A60S2與藍牙模塊的正常通信。一般電平轉換可以使用專用的芯片74xHCT或164245,電阻分壓法、OC/OD 器件法、晶體管上拉電阻法等。不過對比幾種方案同時考慮電平兼容、電源次序、速度/頻率、輸出驅動能力等,最終選取晶體管法,電路如下,圖中NPN的管子可以選取8050,1815等,不過倒不是所有的NPN的管子都可行,調試時使用9014就不能實現正常通信,估計是輸出驅動能力不夠的緣故。由于藍牙的通信范圍約束,我們還采用射頻NRF2401來實現遠距離的無線通信,由于篇幅有限這里不予細述。


四、軟件構架
1、主控STC12C5A60S2
   配置STC12C5A60S2定時器0為定時器方式2、10ms中斷,定時器1為計數器方式,初值為0。累計100次定時器0中斷為1秒,此時TL1即光電對管輸入的脈沖頻率,最終Speed=L*TL1/n(n為后輪上反射紙的片數,L為后輪的周長)。同時在此一秒內觸發AD采集一次電源電壓Voltage送入內存。當Voltage低于與設電壓值時蜂鳴器報警。
   配置STC12C5A60S2串行口2為方式2、獨立波特率發生器9600、允許接收中斷。當串口2接收到PC機數據轉入中斷處理程序,檢測接收到的數據最高位,以此來區分數據是控制信號還是速度信息。
   配置STC12C5A60S2串行口1為方式1、波特率固定、允許接收中斷。當串口1接收到從處理器STC89S52數據將轉入中斷處理程序,將接收到的數據處理后送至主控的內存當中,以備主控芯片使用,同時等待PC命令隨時傳給PC機控制臺。
   配置STC12C5A60S2脈寬調制PWM為8位、無中斷。主程序中循環執行PwmContral函數實時更改PWM定時器CCAP1L、CCAP1H的值。
PwmContral()程序如下(AutoFlags為超聲自動調速標志):
uchar        Pid(uchar Setpoint,uchar Achieved)  
{
    float  P=5,I=1,D=0.5;
    float  Eun=0.0,En=0.0,En1=0.0,En2=0.0;
    int         Output0=0,Output1=50;
    En=Setpoint-Achieved;
        Eun=P*En-I*(En-En1)+D*(En1-En2);
        Eun=Eun/500;
        Output0=Output1+(int)Eun;
        Output1=Output0;
        En2=En1;
        En1=En;         
        return        Output0;
}
uchar AutoDistance(uchar D,uchar S)
{
uint Output;
uint t;
t=D/S;
Output=0xff-0.75*t;
return Output;
}

void PwmContral()
{        
        if(AutoFlags==1)        
        {
        PwmTemp = AutoDistance(Distance,Speed);
        if(PwmTemp>256)        
        PwmTemp=256;
        if(PwmTemp<0)
        PwmTemp=0;
        PwmLower=PwmTemp;
        PwmHigher=PwmTemp;
        CCAP1L=PwmLower;
        CCAP1H=PwmHigher;
        }
        if(AutoFlags==0)
        {
        if((Speed-ContralSpeed)<=-100||(Speed-ContralSpeed)>=100)
        PwmTemp=Pid(ContralSpeed,Speed);        
        if(PwmTemp>256)        
        PwmTemp=256;
        if(PwmTemp<0)
        PwmTemp=0;
        PwmLower=PwmTemp;
        PwmHigher=PwmTemp;
        CCAP1L=PwmLower;
        CCAP1H=PwmHigher;
        }
}
2、從處理器STC89S52
   配置STC89S52串行口為方式1、波特率固定、允許接收中斷(與主控的串行口1作雙機通信交換數據信息)。此種情況下需將主控芯片與從處理器的晶振選取為同一數值,這里我們選取12M。若是選取11.0592M會導致測距的定時器0和定時器1算得的時間不準確,極大影響測距結果。同時主控選取12M晶振的同時也會影響它與PC機之間的雙機通信,故我們配置STC12C5A60S2的串行口2為獨立波特率發生器。
配置STC89S52定時器0為16為定時器、初值為0、開定時器0允許中斷,定時器1為方式2、中斷產生40K方波、關定時器1。定時器0中斷處理程序中開定時器1允許中斷、重裝初值。定時器1中斷處理程序中產生40K方波,通過控制產生2個脈沖后關掉定時器1,開外部中斷0。
外部中斷0處理程序中,關掉定時器0、定時器1和總中斷EA同時置位接收成功標志ReceFlags,最終發送超聲波到接收到超聲波時間差為Time=256*TH0+TL0。對于時間Time需要作適當的修正補償,帶入Distance=Time*0.017即可得到小車與前方障礙物的距離。將Distance送入STC89S52的內存中,以備通過串行口發送至主控的串行口1。
   主程序中等待ReceFlags,當接收成功清除標志同時通過短延時控制測量間隔,也就是再一次發送2個脈沖的超聲波時間。
3、上位機界面

   采用Visual Baisc6.0編寫智能車控制臺,使用MSCcom串口通信控件實現數據傳輸,實時監測與控制。
4、雙機通信
   考慮到小車需要實時反饋速度以及測得前方的障礙物的距離,同時需要將居多控制命令發送給小車。由于主控芯片是8位的片子,串口緩沖區大小就是1個字節(8位數據),一般將信息數據送入堆棧,不過對于數據處理就變得復雜了。這里為了便捷我們考慮到速度值和控制命令都可以控制在1字節以內,只是需要區分這些信息而已。這里我們約定控制命令都以最高位為標志位,當最高位為1時是控制信息,為0時是速度信息。同時考慮到速度會超過0x7f所以在上位機上將速度除以2,等待下位機接收之后再還原。當然還需要對反饋的數據流作處理,將速度與上0xfe、距離或上0x01,以此通過最低位來區分數據流。
五、造車心得:
小車從規劃到完工一共花了4天時間,雖然很普通也沒有什么創新之處,卻也和以往的小車不大一樣。既然上位機已經可以往小車發送各種控制命令和信息了,那么只要我們在PC端的控制臺上多花點時間,小車就有他的價值所在了。比如說雷區探雷,在小車上安裝探雷的傳感器,PC機解析人工提供的路徑為控制命令和信息,按規律發送給小車,實現小車的人工智能。
學習單片機就是需要不停的實踐,哪怕看起來很簡單的你也需要自己去體會一下。就拿超聲測距說事,很久以前就有所了解,覺得這玩意太簡單了只不過是測一個時間而已(定時器一開一關當時就這樣認為的)。然而自己去弄了才知道,需要考慮的問題很多,或許你會想到網上有現成的程序參考一下不就得了。但是如果等下一次你接觸的很少有人研究怎么辦,你去參考誰?有一套自己解決問題的方法比什么都強,而這個就來自多次的——單片機實踐。                                            


1、由于文章中有大量的圖片,論壇上傳圖片不太方便所以就上傳一個pdf版的完整篇啦,各位見諒一下
下載地址:http://www.zg4o1577.cn/f/閉門造車.pdf

2、文中提及的框圖是用Visio畫的,上傳全部框架
下載地址:http://www.zg4o1577.cn/f/框圖Visio.rar

3、第一版本無線采用的是藍牙傳輸,后來采用nRF2401作為無線傳輸,上傳文檔一篇(自己寫的不要拍磚啊 HoHo)
下載地址:http://www.zg4o1577.cn/f/NR2401無線通信.pdf

上傳程序代碼:
1、小車程序包括STC12C5A60S2和STC89C51的程序,程序框架是我個人寫的驅動庫Easy Hw OS,反正就是這樣結構我看著舒服移植也很方便,同時也方便大家看。小弟初學程序寫的不好,望各位多多提點意見,便于我成長,也不枉我敲這么多字,呵呵。

點擊此處下載:http://www.zg4o1577.cn/f/DoubleTransfer.rar

2、nRF2401的程序包,為了方便以后使用采用AT89C2051加上nRF2401構成通信節點,很方便的實現無線串行通信,用戶直接使用無須考慮其他問題。不過2051很少用了,可以在STC中找一款替代的片子,我看了一下一般在1.8元左右的STC片子都可以用來替代,價格在這擺著呢,相關的說明請看——NR2401無線通信.pdf。
點擊此處下載:http://www.zg4o1577.cn/f/NFR2401無線串口.rar

3、上位機控制臺采用Visual Basic 6.0編寫,程序還沒達到預期的功能。是初版的不過模型已經搞定了,接下來就是將一系列的命令打包就可以啦,上傳源代碼
點擊此處下載 :http://www.zg4o1577.cn/f/智能車控制臺.rar



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:51777 發表于 2013-7-13 20:57 | 只看該作者
受教了 厲害
回復

使用道具 舉報

板凳
ID:51939 發表于 2013-7-17 11:27 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:52177 發表于 2013-7-23 22:27 | 只看該作者
有套件賣嗎?我要
回復

使用道具 舉報

5#
ID:52704 發表于 2013-8-6 11:42 | 只看該作者
太厲害了啊
回復

使用道具 舉報

6#
ID:58710 發表于 2014-1-11 20:25 | 只看該作者
樓主太給力了呀,資料都下載了,好好研究一番
回復

使用道具 舉報

7#
ID:58768 發表于 2014-1-13 19:32 | 只看該作者
這個確實牛。。
回復

使用道具 舉報

8#
ID:56194 發表于 2014-3-9 16:13 | 只看該作者
學習學習。
回復

使用道具 舉報

9#
ID:61037 發表于 2014-4-23 22:46 | 只看該作者
新手只能膜拜了。。。。
回復

使用道具 舉報

10#
ID:56605 發表于 2014-5-8 11:23 | 只看該作者
頂禮膜拜
回復

使用道具 舉報

11#
ID:63831 發表于 2014-7-16 09:46 | 只看該作者
樓主都吧原理圖說明放出來了 你應該把整套原理圖都放出來,給我們這些新手更好學習呢!!!!
回復

使用道具 舉報

12#
ID:62989 發表于 2014-7-17 19:47 | 只看該作者
正準備搞這個,希望對我有幫助!
回復

使用道具 舉報

13#
ID:65361 發表于 2014-8-22 21:20 | 只看該作者
謝謝分享
回復

使用道具 舉報

14#
ID:28571 發表于 2015-4-18 08:11 | 只看該作者
好東西,學習一下,謝謝分享!
回復

使用道具 舉報

15#
ID:64888 發表于 2015-5-12 23:36 | 只看該作者
謝謝分享!
回復

使用道具 舉報

16#
ID:79544 發表于 2015-12-12 14:41 | 只看該作者
太牛啦,這么高大上啊佩服,學習啦!
回復

使用道具 舉報

17#
ID:99693 發表于 2015-12-22 16:00 來自手機 | 只看該作者
看不很懂
回復

使用道具 舉報

18#
ID:108748 發表于 2016-3-19 01:01 | 只看該作者
樓主很強大啊
回復

使用道具 舉報

19#
ID:86621 發表于 2016-4-7 10:17 | 只看該作者
做了好幾個周了 也沒做好  求指導 1005301678
回復

使用道具 舉報

20#
ID:112676 發表于 2016-4-7 11:37 | 只看該作者
很不錯的東西,基礎的東西做高大上的題材
回復

使用道具 舉報

21#
ID:113058 發表于 2016-4-9 01:58 | 只看該作者
問下LZ,聽你前面說驅動電機是用光耦隔離,那么電源方面如果讓單片機和電機的電源隔離呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日本一区 | 国产高清一区二区 | 欧美国产视频一区二区 | 国产精品高潮呻吟久久久久 | 国产美女自拍视频 | 成人免费视频在线观看 | 亚洲在线 | 日本在线精品视频 | 国产精品久久久久久一区二区三区 | 日韩www视频 | 伊人网在线综合 | 九色91视频| a在线视频| 国产一区不卡在线观看 | 免费观看一级特黄欧美大片 | 色偷偷人人澡人人爽人人模 | 国产偷自视频区视频 | 日韩毛片播放 | 一区二区视频在线 | 国产精品一区二区久久 | 欧美国产91| 日韩精品1区2区3区 国产精品国产成人国产三级 | 91精品国产综合久久婷婷香蕉 | 日韩欧美在线观看 | 国产成人精品一区二 | 在线āv视频 | 日韩欧美在线观看 | 久久精品久久久久久 | 午夜一区二区三区在线观看 | 亚洲精品视频在线 | 久久国产精品-久久精品 | 精品国产一区二区国模嫣然 | www.国产| 久久国产一区 | 成人免费视频网站在线看 | 国产91精品久久久久久久网曝门 | 日本成人三级电影 | 粉嫩av久久一区二区三区 | 成人av免费网站 | 91精品国产91久久久久福利 | 免费观看一级特黄欧美大片 |