你用示波器量一下测人高电平然后用手挥看看有没有高低电平变更! |
学习一下,楼主搞出来了吗 |
我也遇到过类似问题,没解决,也来学习一下 |
我在51上面做的时候曾遇到过相同的问题,红外模块触发中断之后可能打乱了pwm的输出周期,可能需要调整的是外部中断和pwm生成的次序 |
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。 即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。 |
舵机的信号线加电阻连串口,抱歉说错了 |
都是大神,膜拜了!也可以在电源线上加一个电阻 |
都是大神,膜拜了! |
HC6800-ES-V2.0 发表于 2018-6-12 07:34 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的值 } |
HC6800-ES-V2.0 发表于 2018-6-12 07:34 我单独用单片机可以驱动它正反转,只是加了红外后连pwm波形都是乱的 |
zsyzdx 发表于 2018-6-11 21:07 检测到人理应是让舵机定住不动,一旦人离开舵机红外没检测到人的话,开始转动;红外检测到人直接会给单片机一个3.3v高电平 |
MG995舵机的功率较大,只用单片机的IO口是无法驱动的,必须加一个电机驱动模块才行。 即:舵机的电源口要与电机驱动模块相连接,控制口与单片机连接,就可以控制MG995舵机了。 |
你检测人和没检测到人是怎么做的?会不会是你检测人的波形有问题? |
支持下,帮顶 |