标题: 关于STM32驱动MG995舵机,请大神指点,纠结好长时间了,不知道问题出在哪? [打印本页]

作者: 探路    时间: 2018-6-11 17:15
标题: 关于STM32驱动MG995舵机,请大神指点,纠结好长时间了,不知道问题出在哪?
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的值
                                }         
}
不对着人,串口打印如图所示                                对着人打印如下:
                                             








作者: 野兽kid    时间: 2018-6-11 19:45
支持下,帮顶
作者: zsyzdx    时间: 2018-6-11 21:07
你检测人和没检测到人是怎么做的?会不会是你检测人的波形有问题?
作者: HC6800-ES-V2.0    时间: 2018-6-12 07:34
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。

作者: 探路    时间: 2018-6-12 21:03
zsyzdx 发表于 2018-6-11 21:07
你检测人和没检测到人是怎么做的?会不会是你检测人的波形有问题?

检测到人理应是让舵机定住不动,一旦人离开舵机红外没检测到人的话,开始转动;红外检测到人直接会给单片机一个3.3v高电平
作者: 探路    时间: 2018-6-12 21:04
HC6800-ES-V2.0 发表于 2018-6-12 07:34
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要 ...

我单独用单片机可以驱动它正反转,只是加了红外后连pwm波形都是乱的
作者: 探路    时间: 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的值
                                }         
作者: ebingyu    时间: 2018-10-10 10:57
都是大神,膜拜了!
作者: xzsxzs    时间: 2019-8-5 21:14
都是大神,膜拜了!也可以在电源线上加一个电阻
作者: xzsxzs    时间: 2019-8-5 21:15
舵机的信号线加电阻连串口,抱歉说错了
作者: 浙科陈冠希    时间: 2019-8-6 09:45
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。
即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。

作者: witheMe    时间: 2019-8-8 09:55
我在51上面做的时候曾遇到过相同的问题,红外模块触发中断之后可能打乱了pwm的输出周期,可能需要调整的是外部中断和pwm生成的次序
作者: Tadashi    时间: 2019-8-10 13:53
我也遇到过类似问题,没解决,也来学习一下
作者: hufeng    时间: 2019-8-12 15:12
学习一下,楼主搞出来了吗

作者: qzwddf    时间: 2019-8-12 22:47
你用示波器量一下测人高电平然后用手挥看看有没有高低电平变更!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1