找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28784|回复: 19
收起左侧

51单片机控制寻迹避障小车各种源程序(功能很多)

  [复制链接]
ID:378221 发表于 2018-8-20 13:35 | 显示全部楼层 |阅读模式
包括电路设计,一些论文还有调试程序

0.png
程序适用单片机
这些程序都可以用ATMEL公司的, AT89C51 C52
                              AT89S51 S52
          可以用STC公司的,   STC89C51
                              STC89C52
请初学的朋友注意,不要再问你这些程序是不是只能用在51上面的,不能用在52上面。


程序调试步骤
1.在装好车后,一步一步来,先把驱动模块与单片机控制板连接好。其它不接,下载程序1    -  程序4 看小车前进后退是否正常。如果正常
再往下一步。不要在全部安装好后,就直接测试下面的一些比较复杂的应用的程序!


关于KEIL打少开头文件问题

关于KEIL打少开头文件问题!
很多朋友反应你的程序是不是不能用呀,编译通不过呀,我们用的KEIL UV3
如果编译少文件的话请把AT89X51.H    AT89X52.H这个头文件放到
X:\Keil\C51\INC
注意X为安装盘,安装不同位置不同找到对应的就行

单片机源程序如下:
  1.         /****************************************************************************
  2.          简单寻迹程序:接法
  3.          
  4.      EN1 EN2 PWM输入端,本程序不使用这二个,直接使插上跳线帽,使能输出,这样就能全速运行

  5.          PWM采用转向端输出PWM法来使小车,调速运行,原理,驱动端IN1=0  IN2=1 的时候全速前进         ,IN1=0,IN2=0时电机停止
  6.          当给IN2一个,占空比信号时,IN1=0 (IN2=0或IN2=1)之间切换,就是前进与停止之间切换,占空比调节其速度



  7.      P1_0 P1_1 接IN1  IN2    当 P1_0=1,P1_1=0; 时左上电机正转        左上电机接驱动板子输出端(蓝色端子OUT1 OUT2)
  8.          P1_0 P1_1 接IN1  IN2    当 P1_0=0,P1_1=1; 时左上电机反转        

  9.          P1_0 P1_1 接IN1  IN2    当 P1_0=0,P1_1=0; 时左上电机停转        

  10.          P1_2 P1_3 接IN3  IN4    当 P1_2=1,P1_3=0; 时左下电机正转        左下电机接驱动板子输出端(蓝色端子OUT3 OUT4)
  11.          P1_2 P1_3 接IN3  IN4    当 P1_2=0,P1_3=1; 时左下电机反转   

  12.          P1_2 P1_3 接IN3  IN4    当 P1_2=0,P1_3=0; 时左下电机停转        

  13.          P1_4 P1_5 接IN5  IN6    当 P1_4=1,P1_5=0; 时右上电机正转        右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)
  14.          P1_4 P1_5 接IN5  IN6    当 P1_4=0,P1_5=1; 时右上电机反转

  15.          P1_4 P1_5 接IN5  IN6    当 P1_4=0,P1_5=0; 时右上电机停转

  16.          P1_6 P1_7 接IN7  IN8    当 P1_6=1,P1_7=0; 时右下电机正转        右下电机接驱动板子输出端(蓝色端子OUT7 OUT8)
  17.          P1_6 P1_7 接IN7  IN8    当 P1_6=0,P1_7=1; 时右下电机反转

  18.          P1_6 P1_7 接IN7  IN8    当 P1_6=0,P1_7=0; 时右下电机停转
  19.    

  20.      P3_4接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
  21.      P3_5接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2        
  22.      P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
  23.          P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4
  24.          四路寻迹传感器有信号(白线)为0  没有信号(黑线)为1
  25.          四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口

  26.                                                                                                                                                                                          
  27.          关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V
  28.          分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。
  29.         ****************************************************************************/
  30.         
  31.         
  32.         #include<AT89x51.H>


  33.     #define Left_1_led        P3_4         //P3_4接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
  34.         #define Left_2_led        P3_5         //P3_5接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2        

  35.     #define Right_1_led       P3_6         //P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
  36.         #define Right_2_led       P3_7         //P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4


  37.         #define Left_moto_pwm          P1_1         //PWM信号端
  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;}    //左边两个电机向前走
  44.         #define Left_moto_back    {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}         //左边两个电机向后转
  45.         #define Left_moto_Stop    {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}    //左边两个电机停转                     
  46.         #define Right_moto_go     {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}        //右边两个电机向前走
  47.         #define Right_moto_back   {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}        //右边两个电机向前走
  48.         #define Right_moto_Stop   {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}        //右边两个电机停转   

  49.         unsigned char pwm_val_left  =0;//变量定义
  50.         unsigned char push_val_left =0;// 左电机占空比N/10
  51.         unsigned char pwm_val_right =0;
  52.         unsigned char push_val_right=0;// 右电机占空比N/10
  53.         bit Right_moto_stop=1;
  54.         bit Left_moto_stop =1;
  55.         unsigned  int  time=0;
  56.    
  57. /************************************************************************/        
  58. //延时函数        
  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. //前速前进
  67.      void  run(void)
  68. {
  69.      push_val_left=7;         //速度调节变量 0-9。。。9最小,0最大
  70.          push_val_right=7;
  71.          Left_moto_go ;   //左电机往前走
  72.          Right_moto_go ;  //右电机往前走
  73. }

  74. //前速后退
  75.      void  backrun(void)
  76. {
  77.      push_val_left=3;         //速度调节变量 0-9。。。0最小,1最大
  78.          push_val_right=3;
  79.          Left_moto_back ;   //左电机往前走
  80.          Right_moto_back ;  //右电机往前走
  81. }

  82. //左转
  83.      void  leftrun(void)
  84. {
  85.    
  86.          Left_moto_back ;   //左电机往前走
  87.          Right_moto_go ;  //右电机往前走
  88. }

  89. //右转
  90.      void  rightrun(void)
  91. {
  92.    
  93.          Left_moto_go ;   //左电机往前走
  94.          Right_moto_back ;  //右电机往前走
  95. }


  96. /************************************************************************/
  97. /*                    PWM调制电机转速                                   */
  98. /************************************************************************/
  99. /*                    左电机调速                                        */
  100. /*调节push_val_left的值改变电机转速,占空比            */
  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. /*                    右电机调速                                  */  
  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中断服务子函数产生PWM信号*/
  152.          void timer0()interrupt 1   using 2
  153. {
  154.      TH0=0XFc;          //1Ms定时
  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. /*--主函数--*/
  164.         void main(void)
  165. {

  166.         TMOD=0X01;
  167.         TH0= 0XFc;                  //1ms定时
  168.          TL0= 0X18;
  169.         TR0= 1;
  170.         ET0= 1;
  171.         EA = 1;


  172. ……………………

  173. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
5.小车配套程序.rar (1.08 MB, 下载次数: 694)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:412449 发表于 2018-11-6 23:31 | 显示全部楼层
这个资料很好,很全面
回复

使用道具 举报

ID:411366 发表于 2018-11-12 15:14 | 显示全部楼层
很好,谢谢
回复

使用道具 举报

ID:604493 发表于 2019-8-30 00:16 来自手机 | 显示全部楼层
有没有主程序
回复

使用道具 举报

ID:608128 发表于 2019-9-8 19:48 | 显示全部楼层
功能全面,值得参考
回复

使用道具 举报

ID:611378 发表于 2019-9-16 09:05 | 显示全部楼层
我的小车没有舵机,前四个都ok,往下就都不行了,我的只有超声波避障和蓝牙控制,好气
回复

使用道具 举报

ID:242298 发表于 2019-9-22 02:28 | 显示全部楼层
这个资料很好,很全面
回复

使用道具 举报

ID:648017 发表于 2019-11-23 19:04 | 显示全部楼层

这个资料很好
回复

使用道具 举报

ID:684871 发表于 2020-1-14 13:44 来自手机 | 显示全部楼层
我的板子上没有l298n,请问可以调速吗?
回复

使用道具 举报

ID:688784 发表于 2020-1-31 17:23 | 显示全部楼层
下载看不了啊
回复

使用道具 举报

ID:228376 发表于 2020-2-17 02:20 来自手机 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:676153 发表于 2020-2-24 13:13 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:693716 发表于 2020-2-27 19:38 | 显示全部楼层
币不够了,无法下载,想问问楼主,通过PWM控制电机,有什么办法能保证多个电机同步运行吗?,我自己做的小车,通过PWM调速的,有光电编码器,返回的脉冲和要求运行的脉冲是一样的的,但是电机就是不能同步启动和同步停止,导致小车运行不能走直线。
回复

使用道具 举报

ID:713570 发表于 2020-3-23 17:02 来自手机 | 显示全部楼层
群主,下载了,没有pcb电路图呀,求电路设计图
回复

使用道具 举报

ID:713570 发表于 2020-3-23 17:07 来自手机 | 显示全部楼层
yrx0203 发表于 2020-1-14 13:44
我的板子上没有l298n,请问可以调速吗?

请问有没有电路图,下载下来只有程序代码呀
回复

使用道具 举报

ID:713570 发表于 2020-3-23 17:12 来自手机 | 显示全部楼层
群主,为什么我下载下来没有电路图呀
回复

使用道具 举报

ID:633418 发表于 2020-4-2 16:45 | 显示全部楼层
资料很好,感谢分享
回复

使用道具 举报

ID:844202 发表于 2020-11-16 09:22 | 显示全部楼层
这个资料很好 ,很有利于我学习,谢谢(*°?°)=3
回复

使用道具 举报

ID:971056 发表于 2021-10-11 08:20 | 显示全部楼层
谢谢楼主,正好最近在找这个资料
回复

使用道具 举报

ID:986849 发表于 2022-4-13 13:12 | 显示全部楼层
用for调转速,电机效率会降低的嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表