智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 18831|回复: 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会有一段时间的不稳定,要过一段时间才能稳定输出,这是为什么啊。每次关闭单片机电源后重新上电都会有这段不稳定,所以我们现在是在前面加了一段延时,但始终不知道为什么会有这段波动。
希望了解的人给个答案,拜托了。
回复

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
2#
 楼主| 发表于 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 小时
毕业学校
青岛理工大学
3#
 楼主| 发表于 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 小时
毕业学校
青岛理工大学
4#
 楼主| 发表于 2014-9-4 16:25:05 | 显示全部楼层
whisker 发表于 2014-9-4 12:59
for

啊?
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
5#
 楼主| 发表于 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);
         }
}


回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
6#
 楼主| 发表于 2014-9-4 18:06:53 | 显示全部楼层
狅士§ 发表于 2014-9-4 18:01
哦,可能是连接问题,我是上次动作和当前动作平滑过度的

你可不可以把你的程序给我看一下呢,我现在从示波器里看好像是for循环每运行一次,1500减去一个数后,再循环第二次时又跳回1500了,搞不懂,我现在在while循环前面加1.5ms的延时,这1.5稳定在初始的1500,1.5ms过后开始while 循环就可以正常输出了
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
7#
 楼主| 发表于 2014-9-4 18:43:39 | 显示全部楼层
狅士§ 发表于 2014-9-4 18:13
你是在做比赛还是?
          d_PWM_1 = (Target_PWM_1-Present_PWM_1)*0.005;           //精度单位,可修改
          d_PWM ...

我不参加比赛,自个玩。
你这个程序我没太懂。目标值减去当前值再乘精度,这是在求什么,求出来之后再怎么应用呢?麻烦了
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
8#
 楼主| 发表于 2014-9-6 18:32:12 | 显示全部楼层
2点1刻 发表于 2014-9-6 10:16
你是多大的电压?电压或电流不足有可能会出现这种问题

我们舵机是6v供电,单片机是用电脑供的电。电压应该没问题,我们每次试都会有波动
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
威望
146
贡献
78
兑换币
81
注册时间
2014-8-15
在线时间
24 小时
毕业学校
青岛理工大学
9#
 楼主| 发表于 2014-9-6 18:33:41 | 显示全部楼层
狅士§ 发表于 2014-9-5 09:43
求的是d-PWm.就是差值再分成200等分。你自己在想个条件下他一直加或减这么多等分就行了

嗯,我懂了。还想问一下,你们pwm是用TIM的pwm1输出模式输出的吗,还是用其他模式
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 18:57 , Processed in 0.060385 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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