找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 29544|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制尋跡避障小車各種源程序(功能很多)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
包括電路設(shè)計(jì),一些論文還有調(diào)試程序


程序適用單片機(jī)
這些程序都可以用ATMEL公司的, AT89C51 C52
                              AT89S51 S52
          可以用STC公司的,   STC89C51
                              STC89C52
請(qǐng)初學(xué)的朋友注意,不要再問(wèn)你這些程序是不是只能用在51上面的,不能用在52上面。


程序調(diào)試步驟
1.在裝好車后,一步一步來(lái),先把驅(qū)動(dòng)模塊與單片機(jī)控制板連接好。其它不接,下載程序1    -  程序4 看小車前進(jìn)后退是否正常。如果正常
再往下一步。不要在全部安裝好后,就直接測(cè)試下面的一些比較復(fù)雜的應(yīng)用的程序!


關(guān)于KEIL打少開頭文件問(wèn)題

關(guān)于KEIL打少開頭文件問(wèn)題!
很多朋友反應(yīng)你的程序是不是不能用呀,編譯通不過(guò)呀,我們用的KEIL UV3
如果編譯少文件的話請(qǐng)把AT89X51.H    AT89X52.H這個(gè)頭文件放到
X:\Keil\C51\INC
注意X為安裝盤,安裝不同位置不同找到對(duì)應(yīng)的就行

單片機(jī)源程序如下:
  1.         /****************************************************************************
  2.          簡(jiǎn)單尋跡程序:接法
  3.          
  4.      EN1 EN2 PWM輸入端,本程序不使用這二個(gè),直接使插上跳線帽,使能輸出,這樣就能全速運(yùn)行

  5.          PWM采用轉(zhuǎn)向端輸出PWM法來(lái)使小車,調(diào)速運(yùn)行,原理,驅(qū)動(dòng)端IN1=0  IN2=1 的時(shí)候全速前進(jìn)         ,IN1=0,IN2=0時(shí)電機(jī)停止
  6.          當(dāng)給IN2一個(gè),占空比信號(hào)時(shí),IN1=0 (IN2=0或IN2=1)之間切換,就是前進(jìn)與停止之間切換,占空比調(diào)節(jié)其速度



  7.      P1_0 P1_1 接IN1  IN2    當(dāng) P1_0=1,P1_1=0; 時(shí)左上電機(jī)正轉(zhuǎn)        左上電機(jī)接驅(qū)動(dòng)板子輸出端(藍(lán)色端子OUT1 OUT2)
  8.          P1_0 P1_1 接IN1  IN2    當(dāng) P1_0=0,P1_1=1; 時(shí)左上電機(jī)反轉(zhuǎn)        

  9.          P1_0 P1_1 接IN1  IN2    當(dāng) P1_0=0,P1_1=0; 時(shí)左上電機(jī)停轉(zhuǎn)        

  10.          P1_2 P1_3 接IN3  IN4    當(dāng) P1_2=1,P1_3=0; 時(shí)左下電機(jī)正轉(zhuǎn)        左下電機(jī)接驅(qū)動(dòng)板子輸出端(藍(lán)色端子OUT3 OUT4)
  11.          P1_2 P1_3 接IN3  IN4    當(dāng) P1_2=0,P1_3=1; 時(shí)左下電機(jī)反轉(zhuǎn)   

  12.          P1_2 P1_3 接IN3  IN4    當(dāng) P1_2=0,P1_3=0; 時(shí)左下電機(jī)停轉(zhuǎn)        

  13.          P1_4 P1_5 接IN5  IN6    當(dāng) P1_4=1,P1_5=0; 時(shí)右上電機(jī)正轉(zhuǎn)        右上電機(jī)接驅(qū)動(dòng)板子輸出端(藍(lán)色端子OUT5 OUT6)
  14.          P1_4 P1_5 接IN5  IN6    當(dāng) P1_4=0,P1_5=1; 時(shí)右上電機(jī)反轉(zhuǎn)

  15.          P1_4 P1_5 接IN5  IN6    當(dāng) P1_4=0,P1_5=0; 時(shí)右上電機(jī)停轉(zhuǎn)

  16.          P1_6 P1_7 接IN7  IN8    當(dāng) P1_6=1,P1_7=0; 時(shí)右下電機(jī)正轉(zhuǎn)        右下電機(jī)接驅(qū)動(dòng)板子輸出端(藍(lán)色端子OUT7 OUT8)
  17.          P1_6 P1_7 接IN7  IN8    當(dāng) P1_6=0,P1_7=1; 時(shí)右下電機(jī)反轉(zhuǎn)

  18.          P1_6 P1_7 接IN7  IN8    當(dāng) P1_6=0,P1_7=0; 時(shí)右下電機(jī)停轉(zhuǎn)
  19.    

  20.      P3_4接四路尋跡模塊接口第一路輸出信號(hào)即中控板上面標(biāo)記為OUT1
  21.      P3_5接四路尋跡模塊接口第二路輸出信號(hào)即中控板上面標(biāo)記為OUT2        
  22.      P3_6接四路尋跡模塊接口第三路輸出信號(hào)即中控板上面標(biāo)記為OUT3
  23.          P3_7接四路尋跡模塊接口第四路輸出信號(hào)即中控板上面標(biāo)記為OUT4
  24.          四路尋跡傳感器有信號(hào)(白線)為0  沒(méi)有信號(hào)(黑線)為1
  25.          四路尋跡傳感器電源+5V GND 取自于單片機(jī)板靠近液晶調(diào)節(jié)對(duì)比度的電源輸出接口

  26.                                                                                                                                                                                          
  27.          關(guān)于單片機(jī)電源:本店驅(qū)動(dòng)模塊內(nèi)帶LDO穩(wěn)壓芯片,當(dāng)電池輸入6V時(shí)時(shí)候可以輸出穩(wěn)定的5V
  28.          分別在針腳標(biāo)+5 與GND 。這個(gè)輸出電源可以作為單片機(jī)系統(tǒng)的供電電源。
  29.         ****************************************************************************/
  30.         
  31.         
  32.         #include<AT89x51.H>


  33.     #define Left_1_led        P3_4         //P3_4接四路尋跡模塊接口第一路輸出信號(hào)即中控板上面標(biāo)記為OUT1
  34.         #define Left_2_led        P3_5         //P3_5接四路尋跡模塊接口第二路輸出信號(hào)即中控板上面標(biāo)記為OUT2        

  35.     #define Right_1_led       P3_6         //P3_6接四路尋跡模塊接口第三路輸出信號(hào)即中控板上面標(biāo)記為OUT3
  36.         #define Right_2_led       P3_7         //P3_7接四路尋跡模塊接口第四路輸出信號(hào)即中控板上面標(biāo)記為OUT4


  37.         #define Left_moto_pwm          P1_1         //PWM信號(hào)端
  38.         #define Left_moto_pwm1          P1_3
  39.         
  40.         #define Right_moto_pwm          P1_5
  41.         #define Right_moto_pwm1          P1_7                                                                 
  42.                                                                  


  43.         #define Left_moto_go      {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}    //左邊兩個(gè)電機(jī)向前走
  44.         #define Left_moto_back    {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}         //左邊兩個(gè)電機(jī)向后轉(zhuǎn)
  45.         #define Left_moto_Stop    {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}    //左邊兩個(gè)電機(jī)停轉(zhuǎn)                     
  46.         #define Right_moto_go     {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}        //右邊兩個(gè)電機(jī)向前走
  47.         #define Right_moto_back   {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}        //右邊兩個(gè)電機(jī)向前走
  48.         #define Right_moto_Stop   {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}        //右邊兩個(gè)電機(jī)停轉(zhuǎn)   

  49.         unsigned char pwm_val_left  =0;//變量定義
  50.         unsigned char push_val_left =0;// 左電機(jī)占空比N/10
  51.         unsigned char pwm_val_right =0;
  52.         unsigned char push_val_right=0;// 右電機(jī)占空比N/10
  53.         bit Right_moto_stop=1;
  54.         bit Left_moto_stop =1;
  55.         unsigned  int  time=0;
  56.    
  57. /************************************************************************/        
  58. //延時(shí)函數(shù)        
  59.    void delay(unsigned int k)
  60. {   
  61.      unsigned int x,y;
  62.          for(x=0;x<k;x++)
  63.            for(y=0;y<2000;y++);
  64. }
  65. /************************************************************************/
  66. //前速前進(jìn)
  67.      void  run(void)
  68. {
  69.      push_val_left=7;         //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  70.          push_val_right=7;
  71.          Left_moto_go ;   //左電機(jī)往前走
  72.          Right_moto_go ;  //右電機(jī)往前走
  73. }

  74. //前速后退
  75.      void  backrun(void)
  76. {
  77.      push_val_left=3;         //速度調(diào)節(jié)變量 0-9。。。0最小,1最大
  78.          push_val_right=3;
  79.          Left_moto_back ;   //左電機(jī)往前走
  80.          Right_moto_back ;  //右電機(jī)往前走
  81. }

  82. //左轉(zhuǎn)
  83.      void  leftrun(void)
  84. {
  85.    
  86.          Left_moto_back ;   //左電機(jī)往前走
  87.          Right_moto_go ;  //右電機(jī)往前走
  88. }

  89. //右轉(zhuǎn)
  90.      void  rightrun(void)
  91. {
  92.    
  93.          Left_moto_go ;   //左電機(jī)往前走
  94.          Right_moto_back ;  //右電機(jī)往前走
  95. }


  96. /************************************************************************/
  97. /*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
  98. /************************************************************************/
  99. /*                    左電機(jī)調(diào)速                                        */
  100. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  101.                 void pwm_out_left_moto(void)
  102. {  
  103.    if(Left_moto_stop)
  104.    {
  105.     if(pwm_val_left<=push_val_left)
  106.                {
  107.                      Left_moto_pwm=1;
  108.                      Left_moto_pwm1=1;
  109.                    }
  110.         else
  111.                {
  112.                  Left_moto_pwm=0;
  113.                      Left_moto_pwm1=0;
  114.                    }
  115.         if(pwm_val_left>=10)
  116.                pwm_val_left=0;
  117.    }
  118.    else   
  119.           {
  120.            Left_moto_pwm=0;
  121.            Left_moto_pwm1=0;
  122.                   }
  123. }
  124. /******************************************************************/
  125. /*                    右電機(jī)調(diào)速                                  */  
  126.    void pwm_out_right_moto(void)
  127. {
  128.   if(Right_moto_stop)
  129.    {
  130.     if(pwm_val_right<=push_val_right)
  131.               {
  132.                Right_moto_pwm=1;
  133.                    Right_moto_pwm1=1;
  134.                    }
  135.         else
  136.               {
  137.                    Right_moto_pwm=0;
  138.                    Right_moto_pwm1=0;
  139.                   }
  140.         if(pwm_val_right>=10)
  141.                pwm_val_right=0;
  142.    }
  143.    else   
  144.           {
  145.            Right_moto_pwm=0;
  146.            Right_moto_pwm1=0;
  147.               }
  148. }
  149.       
  150. /***************************************************/
  151. ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  152.          void timer0()interrupt 1   using 2
  153. {
  154.      TH0=0XFc;          //1Ms定時(shí)
  155.          TL0=0X18;
  156.          time++;
  157.          pwm_val_left++;
  158.          pwm_val_right++;
  159.          pwm_out_left_moto();
  160.          pwm_out_right_moto();
  161. }        

  162. /*********************************************************************/                 
  163. /*--主函數(shù)--*/
  164.         void main(void)
  165. {

  166.         TMOD=0X01;
  167.         TH0= 0XFc;                  //1ms定時(shí)
  168.          TL0= 0X18;
  169.         TR0= 1;
  170.         ET0= 1;
  171.         EA = 1;


  172. ……………………

  173. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
5.小車配套程序.rar (1.08 MB, 下載次數(shù): 694)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏18 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:412449 發(fā)表于 2018-11-6 23:31 | 只看該作者
這個(gè)資料很好,很全面
回復(fù)

使用道具 舉報(bào)

板凳
ID:411366 發(fā)表于 2018-11-12 15:14 | 只看該作者
很好,謝謝
回復(fù)

使用道具 舉報(bào)

地板
ID:604493 發(fā)表于 2019-8-30 00:16 來(lái)自手機(jī) | 只看該作者
有沒(méi)有主程序
回復(fù)

使用道具 舉報(bào)

5#
ID:608128 發(fā)表于 2019-9-8 19:48 | 只看該作者
功能全面,值得參考
回復(fù)

使用道具 舉報(bào)

6#
ID:611378 發(fā)表于 2019-9-16 09:05 | 只看該作者
我的小車沒(méi)有舵機(jī),前四個(gè)都o(jì)k,往下就都不行了,我的只有超聲波避障和藍(lán)牙控制,好氣
回復(fù)

使用道具 舉報(bào)

7#
ID:242298 發(fā)表于 2019-9-22 02:28 | 只看該作者
這個(gè)資料很好,很全面
回復(fù)

使用道具 舉報(bào)

8#
ID:648017 發(fā)表于 2019-11-23 19:04 | 只看該作者

這個(gè)資料很好
回復(fù)

使用道具 舉報(bào)

9#
ID:684871 發(fā)表于 2020-1-14 13:44 來(lái)自手機(jī) | 只看該作者
我的板子上沒(méi)有l(wèi)298n,請(qǐng)問(wèn)可以調(diào)速嗎?
回復(fù)

使用道具 舉報(bào)

10#
ID:688784 發(fā)表于 2020-1-31 17:23 | 只看該作者
下載看不了啊
回復(fù)

使用道具 舉報(bào)

11#
ID:228376 發(fā)表于 2020-2-17 02:20 來(lái)自手機(jī) | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

12#
ID:676153 發(fā)表于 2020-2-24 13:13 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

13#
ID:693716 發(fā)表于 2020-2-27 19:38 | 只看該作者
幣不夠了,無(wú)法下載,想問(wèn)問(wèn)樓主,通過(guò)PWM控制電機(jī),有什么辦法能保證多個(gè)電機(jī)同步運(yùn)行嗎?,我自己做的小車,通過(guò)PWM調(diào)速的,有光電編碼器,返回的脈沖和要求運(yùn)行的脈沖是一樣的的,但是電機(jī)就是不能同步啟動(dòng)和同步停止,導(dǎo)致小車運(yùn)行不能走直線。
回復(fù)

使用道具 舉報(bào)

14#
ID:713570 發(fā)表于 2020-3-23 17:02 來(lái)自手機(jī) | 只看該作者
群主,下載了,沒(méi)有pcb電路圖呀,求電路設(shè)計(jì)圖
回復(fù)

使用道具 舉報(bào)

15#
ID:713570 發(fā)表于 2020-3-23 17:07 來(lái)自手機(jī) | 只看該作者
yrx0203 發(fā)表于 2020-1-14 13:44
我的板子上沒(méi)有l(wèi)298n,請(qǐng)問(wèn)可以調(diào)速嗎?

請(qǐng)問(wèn)有沒(méi)有電路圖,下載下來(lái)只有程序代碼呀
回復(fù)

使用道具 舉報(bào)

16#
ID:713570 發(fā)表于 2020-3-23 17:12 來(lái)自手機(jī) | 只看該作者
群主,為什么我下載下來(lái)沒(méi)有電路圖呀
回復(fù)

使用道具 舉報(bào)

17#
ID:633418 發(fā)表于 2020-4-2 16:45 | 只看該作者
資料很好,感謝分享
回復(fù)

使用道具 舉報(bào)

18#
ID:844202 發(fā)表于 2020-11-16 09:22 | 只看該作者
這個(gè)資料很好 ,很有利于我學(xué)習(xí),謝謝(*°?°)=3
回復(fù)

使用道具 舉報(bào)

19#
ID:971056 發(fā)表于 2021-10-11 08:20 | 只看該作者
謝謝樓主,正好最近在找這個(gè)資料
回復(fù)

使用道具 舉報(bào)

20#
ID:986849 發(fā)表于 2022-4-13 13:12 | 只看該作者
用for調(diào)轉(zhuǎn)速,電機(jī)效率會(huì)降低的嘛
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表