智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 19582|回复: 36
打印 上一主题 下一主题

[单片机] 51单片机小车,不走直线!

  [复制链接]

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
威望
136
贡献
92
兑换币
79
注册时间
2014-8-1
在线时间
47 小时
毕业学校
大连理工大学
跳转到指定楼层
#
发表于 2014-8-1 09:12:55 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1贡献
本帖最后由 五加六等于一 于 2014-8-1 09:15 编辑

新手没是那么经验,只是靠兴趣自学了单片机,又自学了C语言,现在做了一个基于51单片机的小车,处于程序调试阶段。大概说说我的小车吧,三个轮子,前面一个万向轮后面两个直流马达驱动另外两个轮子。直流马达采用ULN2803驱动,可以实现PWM调速。小车上一共备有四组红外传感器,Sensor01 和 Sensor02 分别测速 Motor01 和 Motor2,Sensor03 实现避障功能,Sensor04 备用以防不时之需。先上个图,Show 一下我的处女座小车,哈哈......
一开始楼主单纯的认为只要两边的Motor 给相同的电压就可以走直线了,所以随便调来了一个PWM就OK了。结果小车走的那叫一个歪,然后我在网上发帖求助,网友说开环控制不能实现小车直线,最好要闭环控制。然后我就构思了小车的闭环控制,闭环控制的程序流程图请参看下面的截图。

不幸的是小车还是不走直线,然后我就发现测速的两个Sensor有点问题,就是这个读出的数值有偏差,然后我就在同一个马达上调试了这个两个Sensor。如何调试?在红外发光端加大了限流电阻从220欧加到2K,调节红外接收极的分压电阻(滑动变阻器),然后用单片机的定时器定时30s 每个Sensor 收集21个数据,最终调试的结构如下面的截图。

最后我按照之前的思路编写了程序,可是小车还是不能走直线,所以在这里请各位大牛给点建议,只能谢谢了。







补充内容 (2014-8-14 11:05):
小车已经搞好了,视频链接: http://v.youku.com/v_show/id_XNzU1NTIxMzcy.html

附件: 您需要 登录 才可以下载或查看,没有帐号?注册
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
QQ
威望
152
贡献
110
兑换币
99
注册时间
2017-9-14
在线时间
19 小时
毕业学校
合肥学院
36#
发表于 2018-3-13 09:38:38 | 只看该作者
楼主,你最后是怎么把他调成跑直线的?求指点
回复

使用道具 举报

4

主题

275

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3251

优秀会员奖章活跃会员奖章

威望
1608
贡献
1033
兑换币
1055
注册时间
2014-2-12
在线时间
305 小时
35#
发表于 2016-12-21 16:51:34 | 只看该作者
aytc100 发表于 2014-8-1 09:27
上陀螺吧。一个差不多的陀螺就能让你的小车走直了。

只加陀螺仪可以吗?是不是需要电子罗盘矫正;如果只用电子罗盘可以不
回复

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
53
威望
39
贡献
10
兑换币
10
注册时间
2016-4-6
在线时间
2 小时
毕业学校
fzu
34#
发表于 2016-4-7 10:34:17 | 只看该作者
你好,看到你做的测面积的小车挺厉害的,能否请教一下你几个问题哈?我最近忙着做毕设,卡住了,真心谢谢你
回复

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
53
威望
39
贡献
10
兑换币
10
注册时间
2016-4-6
在线时间
2 小时
毕业学校
fzu
33#
发表于 2016-4-7 10:24:01 | 只看该作者
aytc100 发表于 2014-8-1 09:27
上陀螺吧。一个差不多的陀螺就能让你的小车走直了。

您好请教一下,陀螺仪是怎么用让车走直线的
回复

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
53
威望
39
贡献
10
兑换币
10
注册时间
2016-4-6
在线时间
2 小时
毕业学校
fzu
32#
发表于 2016-4-6 14:57:18 | 只看该作者
五加六等于一 发表于 2014-8-5 09:55
兄台,问题找到了,测速程序有问题,之前的测速程序是在大循环里用IF 判断,后来想了想这个方法完全错误 ...

楼主你最后是用51的还是52的?还有你说的是码盘测速吗?就是加在tt马达装轮子另外一边的那里的?
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
威望
136
贡献
92
兑换币
79
注册时间
2014-8-1
在线时间
47 小时
毕业学校
大连理工大学
31#
 楼主| 发表于 2014-8-5 11:49:20 | 只看该作者
aytc100 发表于 2014-8-1 11:21
你的小车要是这样就没太好的办法了。51的PWM精度不够。要么换主控芯片,飞思卡尔的单片机什么的;要么你就 ...

我买了个陀螺准备研究一下, 目前正在改进 小车的程序。谢谢指点
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
威望
136
贡献
92
兑换币
79
注册时间
2014-8-1
在线时间
47 小时
毕业学校
大连理工大学
30#
 楼主| 发表于 2014-8-5 09:55:24 | 只看该作者
hymwgk 发表于 2014-8-1 11:15
看了看    你看是不是调节太过频繁   电机高频启动停止   有可能和地面产生微小的打滑    可以多次采集之 ...

兄台,问题找到了,测速程序有问题,之前的测速程序是在大循环里用IF 判断,后来想了想这个方法完全错误,先把程序贴上:

while (1)
{
     /* PWM */
     motor01=0;
     motor02=0;
     delayms(10);
     motor01=1;
     motor02=1;
     delayms(30);


     /* Check the speed */
     if (sensor01==0)
       speed01++;
     if (sensor02==0)
       speed02++;

}

这个程序测得的脉冲个数根本不能反映马达的速度,后来我发现应该用T0,T1 的计数器模式来读取motor01 motor02的脉冲个数来测速,可是这样的话52 单片机就三个定时器, 感觉定时器好紧张。
我的思路, 用T0, T1 计数器模式记录motor 脉冲, T2来控制PWM, 大概就是这个样子,兄台有什么建议?
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
威望
136
贡献
92
兑换币
79
注册时间
2014-8-1
在线时间
47 小时
毕业学校
大连理工大学
29#
 楼主| 发表于 2014-8-4 16:27:34 | 只看该作者
本帖最后由 五加六等于一 于 2014-8-4 16:35 编辑

向大家报道一个喜讯,小车目前来看有望走直线了,我晚上回去就去调程序。目前来看, 之前的测速程序有很大问题,楼主之前的测速程序用的大循环里的if 语句:
while(1)
{
          /* PWM to control motor speed */
     motor01=0;     motor02=0;
     delayms(5);
     motor01=1;
     motor02=1;
     delayms(20);

     /* Check the speed of motor */
     if (sensor01==0)
         pulse_motor01++;
     if (sensor02==0)
         pulse_motor02++;

}


这个测速程序非常有问题,这个就是楼主写了半天程序,逻辑没错可是不按照设想走直线的原因,回去就去用定时器的计数模式改测速程序,然后再来汇报。
PS : 楼主正在研究 PID ,等我搞懂了PID的 概念和方法, 再来请教。
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
威望
136
贡献
92
兑换币
79
注册时间
2014-8-1
在线时间
47 小时
毕业学校
大连理工大学
28#
 楼主| 发表于 2014-8-2 20:15:46 | 只看该作者
wjfuture 发表于 2014-8-2 16:43
显然是你的PWM的精度不够。两边电机对相同占空比的PWM响应也不一定一样,用双电机的话要精确的测出来两个电 ...

你讲的很靠谱,可否详细说说?
回复

使用道具 举报

5

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
威望
119
贡献
49
兑换币
58
注册时间
2014-7-6
在线时间
18 小时
毕业学校
武汉大学
27#
发表于 2014-8-2 16:43:15 | 只看该作者
显然是你的PWM的精度不够。两边电机对相同占空比的PWM响应也不一定一样,用双电机的话要精确的测出来两个电机分别对PWM占空比的响应才行。
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-28 13:44 , Processed in 0.072568 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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