9329|23

20

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

楼主在做一个智能扫地车,关于小车如何走直线的问题请教一下各位大神 [复制链接]

最近在做一部智能扫地车,初步可以nrf无线控制,蔽障,吸尘模块,现在还差路径规划,尽量做到空房间里遍历每一个角落,目前采用左右电机各装一个编码盘,进行计数然后通过比较两者进行走直线调整,就是请求大神指导一下,感激不尽

最新回复

所以最后搞定了吗,楼主  详情 回复 发表于 2024-9-3 22:15
点赞 关注
 

回复
举报

1234

帖子

4

TA的资源

纯净的硅(高级)

沙发
 
走直线,左右电机采用同样的PWM,不就可以直线行走了吗,要想转弯,两边的PWM相互调节下不就可以转弯了吗?
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

767

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
思路是对的 两边比较走直线~

点评

我同时用两个外部中断计数,一个定时器计时,实际还是走歪了,上了程序,兄弟帮我指正下  详情 回复 发表于 2016-4-28 09:30
嗯嗯,没事,我现在试了好几种变成方式,比如用外部中断的2个计数器,和一个定时器作用但是发现走不了直线,后面想改用3个定时器,但是苦于现在用的是stc89c52rc的单片机据说有3个定时器以前没用过,没把握  详情 回复 发表于 2016-4-28 09:23
 
个人签名物致DIY 欢迎你的加入~
QQ群:646461928 公众号:智物知心致成
小店
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

4
 
轮子滑动因素不考虑,要闭环操作,编码器检测转速相同

点评

我同时用两个外部中断计数,一个定时器计时,实际还是走歪了,上了程序,兄弟帮我指正下  详情 回复 发表于 2016-4-28 09:30
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

5
 
刚开始看了自己的说法,有点草率,在理想的状态下,两边电机给相同PWM可以走直线,但考虑到环境因素的影响,加上闭环的反馈可以做到及时的纠正,这样,你需要给自己定一个时间,去看反馈,比较两个电机转速的大小,做出及时的纠正。

点评

刚刚上了程序,兄弟帮忙指正下,谢谢  详情 回复 发表于 2016-4-28 09:31
嗯嗯,没事,我现在试了好几种变成方式,比如用外部中断的2个计数器,和一个定时器作用但是发现走不了直线,后面想改用3个定时器,但是苦于现在用的是stc89c52rc的单片机据说有3个定时器以前没用过,没把握  详情 回复 发表于 2016-4-28 09:23
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

6
 
ywlzh 发表于 2016-4-27 22:24
刚开始看了自己的说法,有点草率,在理想的状态下,两边电机给相同PWM可以走直线,但考虑到环境因素的影响 ...

嗯嗯,没事,我现在试了好几种变成方式,比如用外部中断的2个计数器,和一个定时器作用但是发现走不了直线,后面想改用3个定时器,但是苦于现在用的是stc89c52rc的单片机据说有3个定时器以前没用过,没把握
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

7
 
皈依 发表于 2016-4-27 22:15
思路是对的 两边比较走直线~

嗯嗯,没事,我现在试了好几种变成方式,比如用外部中断的2个计数器,和一个定时器作用但是发现走不了直线,后面想改用3个定时器,但是苦于现在用的是stc89c52rc的单片机据说有3个定时器以前没用过,没把握

点评

不要用停顿的方式,PID实时调节速度 和电机测速组成PID  详情 回复 发表于 2016-4-28 11:41
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

8
 
附上我的程序,用外部中断1,2计数和定时器T0计时,但是还是走不了直线


#include//单片机头文件

unsigned int motor1=0;         //计左电机码盘脉冲值
unsigned int motor2=0;         //计右电机码盘脉冲值
unsigned int speed1=0;         //计左电机码盘脉冲值
unsigned int speed2=0;         //计右电机码盘脉冲值
sbit zuo1=P0^0;//左电机控制端1
sbit zuo2=P0^1;//左电机控制端2
sbit you1=P0^2;//右电机控制端1
sbit you2=P0^3;//右电机控制端2
unsigned int k=0;
void delay(int z)//pwm中使用的延时函数
{
        int i,j;
        for(i=10;i>0;i--)          
        for(j=z;j>0;j--);       
}
void qian(void)
{
           you1=0;
        you2=1;
        zuo1=0;
        zuo2=1;
        delay(3);//pwm调速,若PWM1=7表示速度为全速的70%
        you1=1;
        you2=1;
        zuo1=1;
        zuo2=1;
        delay(7);
}
void  zuostop(void)
{
     
        zuo1=1;
        zuo2=1;
        delay(20);
}
  void  youstop(void)
{
    you1=1;
        you2=1;
        delay(20);
}

/*********************************************************************************************
主程序
/*********************外部中断INT0、INT1初始化函数***********************************************************************/
void main(void)
{               
        TMOD=0X01;
    TH0=(65536-50000)/256;                //50MS定时
    TL0=(65536-50000)%256;
        TR0= 1;
        ET0= 1;

        EX0=1;           //开启外部中断0
    IT0=1;           //下降沿有效
        IE0=0;
        EA = 1;
        EX1 = 1;
        IT1= 1;
    qian();

               
                
}

/*********************************************************************************************
外部中断INT0计算电机1的脉冲
/********************************************************************************************/
void intersvr1(void) interrupt 0 using 1
{
        motor1++;               
}
/*********************************************************************************************
外部中断INT1计算电机2的脉冲
/********************************************************************************************/
void intersvr2(void) interrupt 2 using 3
{
        motor2++;
}

/********************************************************************************************
定时器0中断函数
注意:这里的speed为简单书写,逻辑公式过程应该为
speed2=小车轮子周长/码盘格式*1秒的码盘脉冲格数
定时器做出的效果为算出一秒内的距离
/********************************************************************************************/
void timer0(void) interrupt 1  using 2
{     TH0=(65536-50000)/256;                //2MS定时
      TL0=(65536-50000)%256;
       k++;
         if(k>=10)        //10次即是,0.5S               
        {
                k=0;                        //重新定义k的值
                speed1=motor1;
                speed2=motor2;
        {
                  if(speed1>speed2) zuostop();//左边走得快就停顿一下
          else if(speed1           else if(speed1=speed2) qian();//左右相同,直走
         }
                motor1=0;                 //重新定义motor1的值
                motor2=0;                //重新定义motor1的值
        }               
}

请大家指正
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

9
 
皈依 发表于 2016-4-27 22:15
思路是对的 两边比较走直线~

我同时用两个外部中断计数,一个定时器计时,实际还是走歪了,上了程序,兄弟帮我指正下
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

10
 
不知道叫什么 发表于 2016-4-27 22:18
轮子滑动因素不考虑,要闭环操作,编码器检测转速相同

我同时用两个外部中断计数,一个定时器计时,实际还是走歪了,上了程序,兄弟帮我指正下
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

11
 
ywlzh 发表于 2016-4-27 22:24
刚开始看了自己的说法,有点草率,在理想的状态下,两边电机给相同PWM可以走直线,但考虑到环境因素的影响 ...

刚刚上了程序,兄弟帮忙指正下,谢谢
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

12
 
wzqvip 发表于 2016-4-28 09:30
我同时用两个外部中断计数,一个定时器计时,实际还是走歪了,上了程序,兄弟帮我指正下

轮子防滑怎么样?如果闭环速度控制还是不能走直线的话,你可以计路程,但是首先轮子防滑做的好

点评

防滑还可以,就是感觉闭环没做好  详情 回复 发表于 2016-4-28 10:45
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

13
 
不知道叫什么 发表于 2016-4-28 09:54
轮子防滑怎么样?如果闭环速度控制还是不能走直线的话,你可以计路程,但是首先轮子防滑做的好

防滑还可以,就是感觉闭环没做好
 
 
 

回复

767

帖子

2

TA的资源

纯净的硅(初级)

14
 
wzqvip 发表于 2016-4-28 09:23
嗯嗯,没事,我现在试了好几种变成方式,比如用外部中断的2个计数器,和一个定时器作用但是发现走不了直 ...

不要用停顿的方式,PID实时调节速度 和电机测速组成PID

点评

pid还不懂,不用pid可以吗  详情 回复 发表于 2016-4-28 14:38
 
个人签名物致DIY 欢迎你的加入~
QQ群:646461928 公众号:智物知心致成
小店
 
 

回复

132

帖子

0

TA的资源

一粒金砂(中级)

15
 
吸尘模块哪里买的?

点评

去买usb吸尘器改装的  详情 回复 发表于 2016-4-28 14:38
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

16
 
皈依 发表于 2016-4-28 11:41
不要用停顿的方式,PID实时调节速度 和电机测速组成PID

pid还不懂,不用pid可以吗
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

17
 
quner 发表于 2016-4-28 12:33
吸尘模块哪里买的?

去买usb吸尘器改装的
 
 
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

18
 
检测到碰撞后,随机避让

点评

这个是其中的一部分,算是做好了  详情 回复 发表于 2016-4-28 16:03
 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

19
 
人民币的幻想 发表于 2016-4-28 14:46
检测到碰撞后,随机避让

这个是其中的一部分,算是做好了
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

20
 
主要是要做到空房间里的每一个地方都遍历
我是打算采用如图,就要让车到走直线的时候尽量走直线



T5W@BC6FIQ4A(Y4F}_6YT1G.png (22.52 KB, 下载次数: 0)

T5W@BC6FIQ4A(Y4F}_6YT1G.png
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表