找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3128|回复: 1
打印 上一主题 下一主题
收起左侧

单片机循迹智能车比赛 程序+原理图

[复制链接]
跳转到指定楼层
楼主
这是学校近期举行的循迹智能车比赛使用的程序和代码,并包含了原理图

电路原理图如下:


单片机源程序如下:
  1. /*申明:本程序不包含停车程序,初始速度值仅可以让小车上赛道运行,且只适应初赛,新手修改参数请点击左侧菜单栏interrupt.c文件中找到void speed()函数修改参数*/
  2. /*主函数*/

  3. #include "reg52.h"
  4. #include "delay.h"
  5. #include "interrupt.h"
  6. #include "main.h"

  7. void main()
  8. {
  9.         init();                 /*车辆数据初始化*/
  10.         delay(1000);                /*延时1s后启动小车*/
  11.         while(1)
  12.         {
  13.     speed();
  14.         }
  15. }
复制代码
  1. /*中断函数*/

  2. #include "interrupt.h"

  3. char SP_L0;    /*定义SP_L0代表左前轮速度*/
  4. char SP_R0;    /*定义SP_R0代表右前轮速度*/
  5. char SP_L1;    /*定义SP_L1代表左后轮速度*/
  6. char SP_R1;    /*定义SP_R1代表右后轮速度*/

  7. uchar t=0;    /*初始化全局变量t*/


  8. /*初始化函数*/
  9. void init()               
  10. {
  11.         TMOD=0x02;                /*设置定时器0为工作方式2*/
  12.         
  13.         TH0=256-206;                /*初装值设置约为50us一次中断*/
  14.         TL0=256-206;
  15.         
  16.         EA=1;
  17.         ET0=1;
  18.         TR0=1;
  19.         
  20.         Sensor_L0=1;                /*最左边传感器信号初始化为1*/
  21.         Sensor_L1=1;                /*次左边传感器信号初始化为1*/
  22.         Sensor_R1=1;                /*次右边传感器信号初始化为1*/
  23.         Sensor_R0=1;                /*最右边传感器信号初始化为1*/
  24.         
  25.         Motor_L00=0;                /*左前轮电机0接口初始化数值为0*/
  26.         Motor_L01=0;                /*左前轮电机1接口初始化数值为0*/
  27.         
  28.         Motor_R00=0;                /*右前轮电机0接口初始化数值为0*/
  29.         Motor_R01=0;                /*右前轮电机1接口初始化数值为0*/
  30.         
  31.         Motor_L10=0;                /*左后轮电机0接口初始化数值为0*/
  32.         Motor_L11=0;                /*左后轮电机1接口初始化数值为0*/
  33.         
  34.         Motor_R10=0;                /*右后轮电机0接口初始化数值为0*/
  35.         Motor_R11=0;                /*右后轮电机1接口初始化数值为0*/
  36. }


  37. /*在下面的函数中可进行小车四个电机的调速*/
  38. void speed()
  39. {
  40.         /*直行*/
  41.         if(Sensor_L0 && Sensor_L1 && Sensor_R1 && Sensor_R0)        
  42.         {               
  43.                 SP_L0=50;
  44.                 SP_R0=50;
  45.                 SP_L1=50;
  46.                 SP_R1=50;                        
  47.         }
  48.         /*向左小转弯*/
  49.         else if(!Sensor_L0 && Sensor_L1 && !Sensor_R1 && !Sensor_R0)        
  50.         {
  51.                 SP_L0=-50;
  52.                 SP_R0=50;
  53.                 SP_L1=50;
  54.                 SP_R1=50;                        
  55.         }
  56.         /*向右小转弯*/
  57.         else if(!Sensor_L0 && !Sensor_L1 && Sensor_R1 && !Sensor_R0)        
  58.         {
  59.                 SP_L0=50;
  60.                 SP_R0=-50;
  61.                 SP_L1=50;
  62.                 SP_R1=50;                        
  63.         }
  64.         /*向左大转弯*/
  65.         else if(Sensor_L0 && !Sensor_L1 && !Sensor_R1 && !Sensor_R0)        
  66.         {
  67.                 SP_L0=-50;
  68.                 SP_R0=50;
  69.                 SP_L1=-50;
  70.                 SP_R1=50;               
  71.         }
  72.         /*向右大转弯*/
  73.         else if(!Sensor_L0 && !Sensor_L1 && !Sensor_R1 && Sensor_R0)                                
  74.         {
  75.                 SP_L0=50;
  76.                 SP_R0=-50;
  77.                 SP_L1=50;
  78.                 SP_R1=-50;
  79.         }
  80.         /*直行*/
  81.         else                        
  82.         {
  83.                 SP_L0=50;
  84.                 SP_R0=50;
  85.                 SP_L1=50;
  86.                 SP_R1=50;
  87.         }
  88. }


  89. /*利用定时器0中断定义四个电机的pwm占空比*/
  90. void T0_time() interrupt 1
  91. {
  92.         t++;
  93.         if(t>=100)
  94.                 t=0;

  95. /*定义左前轮的pwm占空比*/        
  96.         if(SP_L0>=0)        
  97.         {
  98.                 Motor_L00=0;
  99.                 if(t<SP_L0)                 
  100.                 {
  101.                         Motor_L01=1;
  102.                 }        
  103.                 else
  104.                 {
  105.                         Motor_L01=0;
  106.                 }
  107.         }
  108.         else                                       
  109.         {
  110.                 Motor_L01=0;
  111.                 if(t<(-SP_L0))                 
  112.                 {
  113.                         Motor_L00=1;
  114.                 }        
  115.                 else
  116.                 {
  117.                         Motor_L00=0;
  118.                 }
  119.         }
  120.    
  121. /*定义右前轮的pwm占空比*/        
  122.         if(SP_R0>=0)        
  123.         {
  124.                 Motor_R00=0;
  125.                 if(t<SP_R0)                 
  126.                 {
  127.                         Motor_R01=1;
  128.                 }        
  129.                 else
  130.                 {
  131.                         Motor_R01=0;
  132.                 }
  133.         }
  134.         else                                       
  135.         {
  136.                 Motor_R01=0;
  137.                 if(t<(-SP_R0))                 
  138.                 {
  139.                         Motor_R00=1;
  140.                 }        
  141.                 else
  142.                 {
  143.                         Motor_R00=0;
  144.                 }
  145.         }

  146. /*定义左后轮的pwm占空比*/        
  147.         if(SP_L1>=0)        
  148.         {
  149.                 Motor_L10=0;
  150.                 if(t<SP_L1)                 
  151.                 {
  152.                         Motor_L11=1;
  153.                 }        
  154.                 else
  155.                 {
  156.                         Motor_L11=0;
  157.                 }
  158.         }
  159.         else                                
  160.         {
  161.                 Motor_L11=0;
  162.                 if(t<(-SP_L1))                 
  163.                 {
  164.                         Motor_L10=1;
  165.                 }        
  166.                 else
  167.                 {
  168.                         Motor_L10=0;
  169.                 }
  170.         }

  171. /*定义右后轮的pwm占空比*/
  172.         if(SP_R1>=0)        
  173.         {
  174.                 Motor_R10=0;
  175.                 if(t<SP_R1)                 
  176.                 {
  177.                         Motor_R11=1;
  178.                 }        
  179.                 else
  180.                 {
  181.                         Motor_R11=0;
  182.                 }
  183.         }
  184.         else                                       
  185.         {
  186.                 Motor_R11=0;
  187.                 if(t<(-SP_R1))                 
  188.                 {
  189.                         Motor_R10=1;
  190.                 }        
  191.                 else
  192.                 {
  193.                         Motor_R10=0;
  194.                 }
  195.         }
  196. }        
复制代码


所有资料51hei提供下载:
2019循迹智能车比赛资料.zip (584.53 KB, 下载次数: 43)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:375715 发表于 2019-4-28 02:20 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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