OpenEdv-开源电子网

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

用pwm波控制舵机mg996

[复制链接]

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
发表于 2017-8-7 22:30:25 来自手机 | 显示全部楼层 |阅读模式
我的程序将控制舵机占空比设置在2ms,程序跑时舵机不动,但是一直都抖,程序仅仅设置了pwm,然后while(1)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-8 10:16:48 | 显示全部楼层
Anyint 发表于 2017-8-8 01:04
楼主控制舵机动,需要不同的占空比奥,一般舵机中值是7.5的占空比,50Hz,20ms,大概1.5ms是中值吧,然后就 ...

循环改变占空比还是没用,一直抖动,就是不转。

int main(void)
{               

       
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
        TIM2_PWM_Init(1999,719);         //不分频。PWM频率=72000000/900=80Khz
                
           while(1)
        {
                                                                         
                            TIM_SetCompare2(TIM2,1850);
                     delay_ms(500);
                      TIM_SetCompare2(TIM2,1950);
                     delay_ms(500);
        }         
}
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-8 20:25:59 | 显示全部楼层
Anyint 发表于 2017-8-8 20:09
这个所谓的中值,看你最大给的pwm占空比是多少,然后才能确定中值大概是多少,我之前上面说的那些都是示 ...

没咋懂,我看网上20ms周期给1.5ms高电平算是零度,0.5——2.5之间都对应一个角度,而且我也是外接电源,5v,用学生电源是100mA左右,学生电源和单片机共地,调整角度的时候还给了百ms级的延时,没动劲,我们组昨天也才开始研究这个舵机,遇到的一样的问题。明天电子竞赛开始,关键时刻舵机还没弄出来,有点伤
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-8-2
在线时间
5 小时
发表于 2017-8-10 09:58:46 | 显示全部楼层
能把你的程序发我参考参考吗    我的舵机也一直没写对
回复 支持 1 反对 0

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 01:04:03 | 显示全部楼层
楼主控制舵机动,需要不同的占空比奥,一般舵机中值是7.5的占空比,50Hz,20ms,大概1.5ms是中值吧,然后就是改变不同的占空比使得这个高电平在1.5ms的时间左右的变化,舵机就能动(ps:你可以用函数信号发生器做实验试试)。
回复 支持 反对

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2017-8-8 10:59:24 | 显示全部楼层
增加两个角度之间的差距试试  还有占空比最好不要设置到两端 靠中间点
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-8 11:30:22 | 显示全部楼层
旺仔奶豆 发表于 2017-8-8 10:59
增加两个角度之间的差距试试  还有占空比最好不要设置到两端 靠中间点

不行a,你有没有例程
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2017-7-1
在线时间
20 小时
发表于 2017-8-8 11:35:32 | 显示全部楼层
很好很厉害
回复 支持 反对

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2017-8-8 11:40:03 | 显示全部楼层
sunnyhuang 发表于 2017-8-8 11:30
不行a,你有没有例程

我在公司。。。。现在什么都没有
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 11:42:24 | 显示全部楼层
sunnyhuang 发表于 2017-8-8 10:16
循环改变占空比还是没用,一直抖动,就是不转。

int main(void)

设置一个变量i,然后++,TIM_SetCompare2(TIM2,i);这样占空比就在变化,说不定就能动了,你要看看舵机的中值占空比是多少
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-8 12:25:04 来自手机 | 显示全部楼层
Anyint 发表于 2017-8-8 11:42
设置一个变量i,然后++,TIM_SetCompare2(TIM2,i);这样占空比就在变化,说不定就能动了,你要看看舵机的 ...

中值应该是1850,我用示波器也看了,波形没问题,在网上也找了别人的程序调了一下,也是一直抖,不转,感觉买了个假舵机。
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-8 12:25:25 来自手机 | 显示全部楼层
旺仔奶豆 发表于 2017-8-8 11:40
我在公司。。。。现在什么都没有

谢谢,不用了
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 20:09:13 | 显示全部楼层
sunnyhuang 发表于 2017-8-8 12:25
中值应该是1850,我用示波器也看了,波形没问题,在网上也找了别人的程序调了一下,也是一直抖,不转,感 ...

这个所谓的中值,看你最大给的pwm占空比是多少,然后才能确定中值大概是多少,我之前上面说的那些都是示波器上调出来的值
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 22:42:06 | 显示全部楼层
Anyint 发表于 2017-8-8 01:04
楼主控制舵机动,需要不同的占空比奥,一般舵机中值是7.5的占空比,50Hz,20ms,大概1.5ms是中值吧,然后就 ...

定时器初始化的时候就可以设置pwm波的最大占空比,那个中值的占空比值是根据你设定的范围来定的,舵机能不能动就看占空比是不是按照那个规则来的什么1.5ms周期啥的,哈哈电赛一起加油奥!
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-30
在线时间
19 小时
 楼主| 发表于 2017-8-9 18:42:07 | 显示全部楼层
Anyint 发表于 2017-8-8 22:42
定时器初始化的时候就可以设置pwm波的最大占空比,那个中值的占空比值是根据你设定的范围来定的,舵机能 ...

换了个舵机,能驱动了,你做哪个题目,1367839585加我QQ
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2017-8-9
在线时间
30 小时
发表于 2017-8-9 23:08:45 | 显示全部楼层
谁有程序啊,求一个,万分感谢
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-26
在线时间
2 小时
发表于 2019-8-3 12:22:44 | 显示全部楼层
大佬能分享一下代码看看吗?
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-11-12
在线时间
15 小时
发表于 2019-8-6 18:52:03 | 显示全部楼层
sunnyhuang 发表于 2017-8-8 10:16
循环改变占空比还是没用,一直抖动,就是不转。

int main(void)

TIM2_PWM_Init(19999,71);
TIM_SetCompare2(TIM2,18500);
你试一下这样改
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-5 11:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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