OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5231|回复: 3

51单片机循迹小车求助

[复制链接]

23

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-12-8
在线时间
0 小时
发表于 2014-7-21 16:25:54 | 显示全部楼层 |阅读模式
5金钱

最近在做循迹小车,前面是2驱电机,后面是万向轮;使用2路红外传感器(左和右),现在遇到的问题是小车不能拐弯,我的想法是:左路检测到黑线,小车左拐;右路检测到黑线,小车右拐,同时检测到黑线则直走,同时都没检测到则让小车后退。

//引脚说明
sbit Left_Moto_IN1=P0^0;
sbit Left_Moto_IN2=P0^1;

sbit Right_Moto_IN3=P0^2;
sbit Right_Moto_IN4=P0^3;

sbit Left_Led=P1^6;  //左路红外
sbit Right_Led=P1^7; //右路红外


我的电机驱动是L298N,2PWM控制速度的方法如下:

uchar count = 0;

void Init_timer()
{

    //12M晶振
    TH0 = (65535-10)/256;
    TL0 = (65535-10)%256;
    TMOD = 0x01;
    TR0 = 1;
    ET0 = 1;
    EA = 1;
}

void Timer0_int()interrupt 1
{
   TH0 = (65535-10)/256;
   TL0 = (65535-10)%256;
    count ++;
    if(count >= 100){count = 0;}  
}

//PWM控制左轮速度

void Wheel_l(uchar speed)
{
    if(count <= speed)
    {
       Left_Moto_IN1 = 1;//左电机的两个输入端

       Left_Moto_IN2 = 0;//p0.1
    } 
   else
    {
       Left_Moto_IN1 = 0;
        Left_Moto_IN2 = 0;
    }
}

 

//PWM控制右轮速度
void Wheel_r(uchar speed)
{
     if(count<= speed)
    {
         Right_Moto_IN3 = 0;//右电机的两个输入端
         Right_Moto_IN4 = 1;  
     }
    else
     {
         Right_Moto_IN3 = 0;
         Right_Moto_IN4 = 0;
     }
}

 

void main()
{
      Init_timer();
      while(1)
       {
            if((Left_Led==1)&&(Right_Led==0))//左边检测到黑线右边没检测到 小车左转
            {
                    Wheel_l(10);
                    Wheel_r(30);
             }
           if((Left_Led==0)&&(Right_Led==1))//右边检测到黑线左边没检测到 小车右转
           {
                  Wheel_l(30);
                  Wheel_r(10);
           }  
           if((Left_Led==1)&&(Right_Led==1))//两边同时检测到黑线  小车直走
           {
                    Wheel_l(30);
                    Wheel_r(30);
           }
          if((Left_Led==0)&&(Right_Led==0))//两边都没检测到黑线  小车后退
          {
                   back();//电机同时后退
                  delayms(10);
                  Stop_All();//两个电机都停止
                  delayms(10);
         }

}

请问大家,这样做对不对?现在小车在黑线边界的地方不能拐弯,直接跑出去了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-21 17:27:44 | 显示全部楼层
两个传感器太少了吧,如果寻迹线在小车中间的话,做好做三个。两个传感器的话,你可以试试,将传感器只装在左边或者右边。
给你看下我做的小车:

站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

23

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-12-8
在线时间
0 小时
 楼主| 发表于 2014-7-22 11:32:03 | 显示全部楼层

我是把两个传感器都放在小车前端的中间,给你看下





只用了中间红色框框里的两只

你的意思是两只传感器都紧密挨在一起放在 小车的左端或最右端吗?

回复

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-7-22 16:08:33 | 显示全部楼层
感觉是你pwm控制的问题,是不是pwm控制和红外巡线有空白区,我以前都是直接在中断中使用,或用硬件pwm的
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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