欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機循跡小車制作總結 附程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發表于 2015-6-23 19:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 hongniu 于 2015-6-23 19:08 編輯

我的循跡小車歷經兩整天,兩晚的奮戰終于與今天下午巡跡成功了,總結一下我最大的收獲就是:抓住關鍵點,結點事件,先把最關鍵的問題加以解決,以后聯調試時會很快的,還有一點,別人的東西不一定是對的,即使他做過,你要綜合各方面的信息,做出自己的判斷,還有就是手冊的重要性,這是一個思考問題、發現問題、解決問題的過程,很苦燥,但是結果是很甜的,就像做出了一道數學題,還是那句話:即使一小步,也有新高度


程序源碼:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit p0_0=P0^0;
  5. sbit p0_7=P0^7;

  6. sbit p1_7=P0^7;




  7. sbit EN1=P1^2;//m1脈沖輸入
  8. sbit EN2=P1^5;//m2脈沖輸入
  9. //*****************************
  10. sbit HW1=P2^0;//加建
  11. sbit HW2=P2^1;//減鍵  m1
  12. //***************************
  13. sbit p2_2=P2^2;
  14. sbit p2_3=P2^3;
  15.        // m2
  16. //*********************
  17. sbit p1_3=P1^3;
  18. sbit p1_4=P1^4;  //M2轉向組合
  19. //******************************
  20. sbit p1_1=P1^1;
  21. sbit p1_0=P1^0;    //M1轉向組合
  22. //*****M1***********************************************
  23. uint t=100;  //載波周期
  24. uint time0; // 低電平可按鍵調整量 我這里是 把周期和低電平設為一個是程序內可調,一個是程序外可調而高電平是死的,也可以反之是一樣的
  25. uint time1; // 高點平基準量
  26. uint timeing0;//立即低電平動態變量
  27. uint timeing1; //立即高電平動態變量  
  28. //*****M2****************
  29. //uint t=500;  //載波周期
  30. uint time_0; // 低電平可按鍵調整量 我這里是 把周期和低電平設為一個是程序內可調,一個是程序外可調而高電平是死的,也可以反之是一樣的
  31. uint time_1; // 高點平基準量
  32. uint timeing_0;//立即低電平動態變量
  33. uint timeing_1; //立即高電平動態變量
  34. //********傳感器中間變量定義****************************

  35.    uchar middate,middate1,middate2;



  36. //********************************
  37. //void delay(uint z) //延時1ms程序
  38. //{
  39. //uint x,a,b;
  40. //        for (x=0;x<z;x++)
  41. //  
  42.   //     {
  43. //       for(b=120;b>0;b--)
  44. //    {
  45.   //      for(a=3;a>0;a--);
  46. //   
  47. //             }
  48. //    }
  49.   //

  50. // }

  51. void stop() //停止函數    停止     HW1=HW2=0;
  52. {

  53.   EA=0;  //禁止中斷
  54.   EN1=0;
  55.   EN2=0;







  56. }
  57. void goon()//               直著走      HW1=1=HW2;
  58. {

  59.   EA=1;
  60.   
  61.   time0=50;
  62.   time_0=50;
  63.   time1=50;
  64.   time_1=50;





  65. }
  66. void left()//向左轉彎                         HW1=1;HW2=0;                 修改定時數據,實現實時PWM調制
  67. {
  68. EA=1;
  69.      
  70.    
  71.      
  72.             
  73.              //***************
  74.           time_0=50;
  75.          time_1=50;    // //通過調整左輪的轉速來調整轉彎力度,這里要配合傳感器實時采集才行
  76.           time0=(time0-1);
  77.           time1=(t-time0);
  78.           //***********************
  79.           timeing0=0;
  80.           timeing1=0;
  81.         
  82.       

  83.       
  84.       
  85.         


  86.      
  87. }





  88.             
  89.   void right()//向右轉彎        HW1=0;HW2=1;
  90. {
  91.     EA=1;
  92.    
  93.    
  94.    

  95.      
  96.            //***************
  97.            time0=50;
  98.           time1=50;      //通過調整右輪的轉速來調整轉彎力度,這里要配合傳感器實時采集才行
  99.           time_0=(time_0-1);
  100.           time_1=(t-time_0);
  101.           //******************




  102.           timeing_0=0;
  103.           timeing_1=0;  //太關鍵了!這一步,因為不加的話,當再一次的time0被修改時timeing0,和timeing1不為0
  104.          //             所以才會發生錯誤,表現為波形時斷時續,而且有尖鋒脈沖,這都是沒有在刷新TIME0的同時刷新tineing的后果
  105.          //             沒想到很簡單的一點事竟差點釀成PWM做不出來!真是有有教訓了
  106.          //             2010年10月7日晚8:34分與天津開發區第四項目部宿舍1
  107.         
  108.         

  109.       
  110.       
  111.         


  112. }








  113. void InitTimer0(void) //10us 定時器初始化設置函數
  114. {
  115.     TMOD = 0x01;

  116.     TH0 =0xff;
  117.     TL0 =0xf7;
  118.     EA = 1;
  119.     ET0 = 1;
  120.     TR0 = 1;


  121. }

  122. void main(void)//主函數
  123. { P2=0x0f;
  124.     InitTimer0(); //10 us(可變啊,根據不同的精準度和頻率要求)
  125. //************
  126.    p1_0=0;
  127.    p1_1=1;    //M2
  128.   
  129.   
  130.                     //決策轉向
  131.    p1_3=1;
  132.    p1_4=0;  //M1
  133. //************
  134.    time0=50; //**************************************************************************************************************//
  135.    time1=50; //                            //
  136.   time_0=50; //                            //
  137.   time_1=50; //        通知                   //
  138.        //     L293B的8腳是要接>5V的,16腳要接5V,但是別人的不是這樣的,我是看了手冊,和失敗后這樣做的     //                       //
  139.     //   這里我用了周期是1000us的但是我的定時器是10us一次的所以我這里取t=100;表示我把周期分成100份    //
  140.     //    占空比(q)=高電平(time1)/周期(t);故而time1/100=占空比;            //
  141.     //    電壓(u)=占空比*最大電壓(Um)故而我的輸出電壓函數為:U0=Um*q =time1/100*5V(這里我用的是5v電壓=Um)  //
  142.     //    根據上述公式可以算出MCU輸出電壓:例如:我要輸出1.5V電壓只要讓time1=30即可,當然time0=70(保證頻率不變) //
  143.     //            我要輸出3V只要讓time1=60,tim0=40;即可    呵呵呵呵       //
  144.     //             大概這也就是數模轉換的原理吧         //
  145.     //                            //
  146.     //       2010年10月24日下午與天津第四項目部宿舍              //
  147.     //**************************************************************************************************************//



  148.   while(1) //主循環
  149.   {  



  150.       //***********************
  151.           middate=0x00;
  152.           middate1=0x00;
  153.     middate2=0x00;
  154.     middate1=HW1;     //傳感器信號采集后處理
  155.    middate2=HW2;
  156.    CY=0;
  157.    middate2=(middate2<<1) ;
  158.    middate=(middate1+middate2) ;
  159.    // ****************************



  160.     switch(middate)   //轉向關鍵步函數
  161.     {
  162.       case 3:{stop();break;     }//停止>>>>>>>>>>>>>>HW1=0=HW2;                                 
  163.    case 1:{left();break;     }//左轉>>>>>>>>>>>>>>HW1=1;HW2=0;
  164.    case 2:{right();break;    }//右轉>>>>>>>>>>>>>>HW1=0;HW2=1;
  165.    case 0:{goon();break;     }//直行>>>>>>>>>>>>>>HW1=1=HW2;
  166.    
  167.    
  168.    
  169.    
  170.    
  171.    
  172.     }























  173.   
  174.    }












  175. }

  176. void Timer0Interrupt(void) interrupt 1    //定時器中斷函數生成PWM,接口單元為:time0(PWM1號低電平時間),time1(PWM1號高電平時間),time_0(PWM2號低電平時間),time_1(PWM2號高電平時間) ,t(周期)
  177. {                   //   MCU:P1.2是第一路PWM,P1.5是第二路PWM         
  178.    

  179.      if(time0==timeing0)
  180.   {
  181.         if(time1!=timeing1)
  182.      {     //高電平時間段
  183.    
  184.         TH0 =0xff;
  185.               TL0 =0xf7;
  186.           EN1=1;
  187.           timeing1++;
  188.    
  189.    
  190.    
  191.      }
  192.        //中斷子函數(定時器參量修改)




  193.   }
  194.    else
  195.    if(time0!=timeing0)
  196.      {
  197.    TH0 =0xff;
  198.         TL0 =0xf7;
  199.     EN1=0;      //低電平時間段
  200.    timeing0++;
  201.       



  202.   }

  203.   if(time0==timeing0)
  204.   {
  205.   if(time1==timeing1)

  206.   {
  207.   
  208.    timeing0=0;
  209.    timeing1=0;
  210.   }

  211.   }

  212. //****************M2的************************************************************************************************************************************************************






  213.      if(time_0==timeing_0)
  214.   {
  215.         if(time_1!=timeing_1)
  216.      {     //高電平時間段
  217.    
  218.         TH0 =0xff;
  219.               TL0 =0xf7;
  220.           EN2=1;
  221.           timeing_1++;
  222.    
  223.    
  224.    
  225.      }
  226.        //中斷子函數(定時器參量修改)




  227.   }
  228.    else
  229.    if(time_0!=timeing_0)
  230.      {
  231.    TH0 =0xff;
  232.         TL0 =0xf7;
  233.    EN2=0;      //低電平時間段
  234.    timeing_0++;
  235.       



  236.   }

  237.   if(time_0==timeing_0)
  238.   {
  239.   if(time_1==timeing_1)

  240.   {
  241.   
  242.    timeing_0=0;
  243.    timeing_1=0;
  244.   }

  245.   }
  246.   

  247.   
  248. }
復制代碼






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

使用道具 舉報

沙發
ID:129918 發表于 2017-1-11 21:04 | 只看該作者
圖畫的我給滿分
回復

使用道具 舉報

板凳
ID:200853 發表于 2017-5-15 10:18 | 只看該作者
樓主用的是哪些傳感器
回復

使用道具 舉報

地板
ID:198608 發表于 2017-5-16 20:44 | 只看該作者
看了你的圖我還以為你是學畫畫的
回復

使用道具 舉報

5#
ID:201562 發表于 2017-5-16 21:14 | 只看該作者
學習  學習
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
7#
ID:33452 發表于 2017-8-15 18:25 | 只看該作者

學習  學習
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
9#
ID:167884 發表于 2018-9-27 23:12 | 只看該作者
樓主的思路很好,值得參考
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表