找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8691|回复: 14
打印 上一主题 下一主题
收起左侧

关于STM32驱动MG995舵机,请大神指点,纠结好长时间了,不知道问题出在哪?

  [复制链接]
回帖奖励 6 黑币 回复本帖可获得 3 黑币奖励! 每人限 2 次(中奖概率 60%)
跳转到指定楼层
楼主
TIM1_PWM_Init(4999,287);//50hz
         while(1)
         {
                 
                 delay_ms(100);
                 if(dir) t=t+20;
                 else t=t-20;
                 if(t>660)dir=0;
                 if(t==140)dir=1;
//                 printf("t:%d\n",t);
                  TIM_SetCompare1(TIM1,t);
         }
}         这段程序还能使舵来回转,pwm波形正确

但这段程序用示波器检测pwn都没有,舵机不动,用串口打印调试如图所示
while(1)
                 {
                         delay_ms(100);
                         dianpin= GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);//红外检测是否有人,有人输出高电平
                        printf("%d\n",dianpin);用串口调试,观看对着人与不对着人的电平高低变化
                         if(!dianpin)//没检测到人,让舵机转动检测
                         {
                         delay_ms(20000);
                                 
                         if(dir) t=t+20;
                         else t=t-20;
                         if(t>660) dir=0;        
                         if(t==140)dir=1;               
                        TIM_SetCompare1(TIM1,t);
                        }
                          else//检测到人,舵机在原来的位置停止
                                {
                                delay_ms(1000);
                                TIM_SetCompare1(TIM1,t);
                                }
                                 printf("t:%d\n ",t); //用串口调试观察t的值
                                }         
}
不对着人,串口打印如图所示                                对着人打印如下:
                                             







评分

参与人数 2黑币 +3 收起 理由
小九九 + 1 还行就是看不太懂
yy960901 + 2 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:349741 发表于 2018-6-11 19:45 | 只看该作者
支持下,帮顶
回复

使用道具 举报

板凳
ID:320306 发表于 2018-6-11 21:07 | 只看该作者
你检测人和没检测到人是怎么做的?会不会是你检测人的波形有问题?
回复

使用道具 举报

地板
ID:164602 发表于 2018-6-12 07:34 | 只看该作者
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。
回复

使用道具 举报

5#
ID:229016 发表于 2018-6-12 21:03 | 只看该作者
zsyzdx 发表于 2018-6-11 21:07
你检测人和没检测到人是怎么做的?会不会是你检测人的波形有问题?

检测到人理应是让舵机定住不动,一旦人离开舵机红外没检测到人的话,开始转动;红外检测到人直接会给单片机一个3.3v高电平
回复

使用道具 举报

6#
ID:229016 发表于 2018-6-12 21:04 | 只看该作者
HC6800-ES-V2.0 发表于 2018-6-12 07:34
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要 ...

我单独用单片机可以驱动它正反转,只是加了红外后连pwm波形都是乱的
回复

使用道具 举报

7#
ID:229016 发表于 2018-6-12 21:08 | 只看该作者
HC6800-ES-V2.0 发表于 2018-6-12 07:34
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要 ...

TIM1_PWM_Init(4999,287);//50hz
         while(1)
         {
                 
                 delay_ms(100);
                 if(dir) t=t+20;
                 else t=t-20;
                 if(t>660)dir=0;
                 if(t==140)dir=1;
//                 printf("t:%d\n",t);
                  TIM_SetCompare1(TIM1,t);
         }
}
这段代码就可以使舵机来回转,pwm波形正确20ms的周期,高电平在0.5毫秒与2.5毫秒来回循环,但是下面这段程序就连pwm都是乱的,连周期都在变
   delay_ms(100);
                         dianpin= GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);//红外检测是否有人,有人输出高电平
                        printf("%d\n",dianpin);用串口调试,观看对着人与不对着人的电平高低变化
                         if(!dianpin)//没检测到人,让舵机转动检测
                         {
                         delay_ms(20000);
                                 
                         if(dir) t=t+20;
                         else t=t-20;
                         if(t>660) dir=0;        
                         if(t==140)dir=1;               
                        TIM_SetCompare1(TIM1,t);
                        }
                          else//检测到人,舵机在原来的位置停止
                                {
                                delay_ms(1000);
                                TIM_SetCompare1(TIM1,t);
                                }
                                 printf("t:%d\n ",t); //用串口调试观察t的值
                                }         
回复

使用道具 举报

8#
ID:406408 发表于 2018-10-10 10:57 来自手机 | 只看该作者
都是大神,膜拜了!
回复

使用道具 举报

9#
ID:328753 发表于 2019-8-5 21:14 | 只看该作者
都是大神,膜拜了!也可以在电源线上加一个电阻
回复

使用道具 举报

10#
ID:328753 发表于 2019-8-5 21:15 | 只看该作者
舵机的信号线加电阻连串口,抱歉说错了
回复

使用道具 举报

11#
ID:582082 发表于 2019-8-6 09:45 | 只看该作者
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。
回复

使用道具 举报

12#
ID:542954 发表于 2019-8-8 09:55 | 只看该作者
我在51上面做的时候曾遇到过相同的问题,红外模块触发中断之后可能打乱了pwm的输出周期,可能需要调整的是外部中断和pwm生成的次序
回复

使用道具 举报

13#
ID:598763 发表于 2019-8-10 13:53 | 只看该作者
我也遇到过类似问题,没解决,也来学习一下
回复

使用道具 举报

14#
ID:158956 发表于 2019-8-12 15:12 | 只看该作者
学习一下,楼主搞出来了吗
回复

使用道具 举报

15#
ID:599517 发表于 2019-8-12 22:47 | 只看该作者
你用示波器量一下测人高电平然后用手挥看看有没有高低电平变更!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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