智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 18702|回复: 23
打印 上一主题 下一主题

[其他] [急]求助:关于stm32控制舵机的问题

  [复制链接]

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
跳转到指定楼层
1#
发表于 2014-9-4 09:47:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做机器人,用stm32输出pwm来控制舵机的角度,遇到了两个问题:
1、如何实现舵机角度的缓慢变化,就是慢慢地转发到指定角度而不是一下子就转过去。我看过别人的程序,用一个for语句,一次加一点或减一点可以实现,不知道这是不是最优方案。
2、就是用上面提到的for语句时,每次运行到for语句时,输出的pwm会有一段时间的不稳定,要过一段时间才能稳定输出,这是为什么啊。每次关闭单片机电源后重新上电都会有这段不稳定,所以我们现在是在前面加了一段延时,但始终不知道为什么会有这段波动。
希望了解的人给个答案,拜托了。
回复

使用道具 举报

5

主题

900

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7366

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

威望
3282
贡献
2418
兑换币
2121
注册时间
2014-1-19
在线时间
833 小时
2#
发表于 2014-9-4 11:05:05 | 只看该作者
缓慢变化,步进电机不可以吗?
回复 支持 反对

使用道具 举报

9

主题

74

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2406
威望
1138
贡献
680
兑换币
725
注册时间
2013-12-23
在线时间
294 小时
3#
发表于 2014-9-4 12:55:41 | 只看该作者
我是用For语句的 - -、、
回复 支持 反对

使用道具 举报

3

主题

505

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
16401

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章

威望
12173
贡献
3288
兑换币
947
注册时间
2014-5-27
在线时间
470 小时
4#
发表于 2014-9-4 12:59:29 | 只看该作者
for
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
5#
 楼主| 发表于 2014-9-4 16:22:28 | 只看该作者
杨先生 发表于 2014-9-4 11:05
缓慢变化,步进电机不可以吗?

我们选用的舵机,不好再换步进了,而且做机器人用舵机挺合适的吧
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
6#
 楼主| 发表于 2014-9-4 16:24:27 | 只看该作者
呆逼。 发表于 2014-9-4 12:55
我是用For语句的 - -、、

那在单片机上电以后有没有一段波动呢,还是可以立马稳定输出要的波型。
我的大约有2秒的波动,不知道什么原因,求帮助
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
7#
 楼主| 发表于 2014-9-4 16:25:05 | 只看该作者
whisker 发表于 2014-9-4 12:59
for

啊?
回复 支持 反对

使用道具 举报

49

主题

304

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4687
威望
2137
贡献
1138
兑换币
1365
注册时间
2014-1-10
在线时间
706 小时
毕业学校
浙江省温岭中学
8#
发表于 2014-9-4 16:32:10 | 只看该作者
当然不是了,但大体上思想上可以这样。我刚参加完双足比赛,比较了解这个。得用while()语句+函数,至少一次函数。自己好好想想再你要
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
9#
 楼主| 发表于 2014-9-4 16:39:00 | 只看该作者
狅士§ 发表于 2014-9-4 16:32
当然不是了,但大体上思想上可以这样。我刚参加完双足比赛,比较了解这个。得用while()语句+函数,至少一 ...

对啊 ,我用while语句了,步子通过while循环,只是在我给单片机上电后,单片机在运行while语句中的第一个动作时后有波动,不正常,过一段时间以后才正常输出pwm。我把程序发一下,你帮帮我吧,找不出原因好着急。
        while(1)
        {
                 position_1();
                 position_2();
                 position_3();
                 position_4();
                 position_5();
                 position_6();
                 position_7();
                 position_8();
        }

void position_1(void)
{
         static uint8_t i=0;
         __IO uint16_t ccr;
         for(i=0;i<101;i++)
         {
                 TIM3->CCR1=1500;                                                //1500
                 TIM3->CCR2=1500;                                                //1500
                 TIM3->CCR3=1500-1.40*i;                //1500-140=1360
                 TIM3->CCR4=1500+1.40*i;                //1500+140=1640
                 TIM4->CCR1=1500;                                                //1500
                 TIM4->CCR2=1500-6.28*i;                //1500-628=872
                 TIM4->CCR3=1500-3.02*i;                //1500-302=1198
                 TIM4->CCR4=1500;
                 delayms(10);
         }
}


回复 支持 反对

使用道具 举报

49

主题

304

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4687
威望
2137
贡献
1138
兑换币
1365
注册时间
2014-1-10
在线时间
706 小时
毕业学校
浙江省温岭中学
10#
发表于 2014-9-4 18:00:58 | 只看该作者
这么看,是没问题的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:16 , Processed in 0.071595 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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