好烦啊,求助L298N到底如何控制舵机996R。

2019-10-15 02:19发布

rt,楼主想用L298N控制舵机,但是碰到了如下问题:

1.舵机是996R,额定电压是5V,这就得在12V输入的口上连上5v电源
2.然后舵机是有三个口的,+5v、GND、PWM。我把PWM和GND口连到了L298N的输出端,
然后再把GND连到输入的298的GND,再把STM32的GND连到298的GND,希望舵机、MCU、L298N、电源能共地。
然后298的INT1、INT2是MCU的GPIO输出,EN1是MCu的pwm输出。

结果反正舵机是一直在抖动……………………根本没转。
这么多线连的头也大了,不知道正确的连法到底是怎么样的。
我在陈述一遍我的连法……:
       电源(5v):正极连到L298N的+12V口,负极连到L298N的GND
       舵机:+5v连到5v电源的正极,GND连到L298N的地,PWM端连到L298N的输出端(然后298输出端的另一口连到GND)
       MCU:PWM输出口连到L298N的EN1,2个GPIO连到IN1、IN2。就和控制电机时的连接一样。

然后程序是一个测试程序:

int main(void)
{  
        u16 angle=0;
        u8 flag=1;
        Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
        delay_init(168);                        //延时初始化   
        SERVO_Init();        //舵机初始化
        LED_Init();   //pf10/pf9
       
           while(1)
        {
            PFout(9)=flag;
                PFout(10)=!flag;
                for(angle=0;angle<180;angle++)
                {
                        ServoF_Set(angle);
                        delay_ms(10);
                }
                for(angle=180;angle>0;angle--)
                {
                        ServoF_Set(angle);
                        delay_ms(10);
                }
               
        }
}

舵机的初始化函数:
void PWM9_1_2_Init(u32 arr,u32 psc)
{
        RCC->APB2ENR|=1<<16;         //TIM9时钟使能   
        RCC->AHB1ENR|=1<<0;           //使能PORTA时钟       
        GPIO_Set(GPIOA,PIN2|PIN3,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//复用功能,上拉输出
        GPIO_AF_Set(GPIOA,2,3);        //PA2,AF3
        GPIO_AF_Set(GPIOA,3,3);        //PA3,AF3
       
        TIM9->ARR=arr;                        //设定计数器自动重装值
        TIM9->PSC=psc;                        //预分频器不分频
        TIM9->CCMR1|=6<<4;          //CH1 PWM1模式                 
        TIM9->CCMR1|=1<<3;                 //CH1 预装载使能          
        TIM9->CCER|=1<<0;           //OC1 输出使能       
        TIM9->CCER|=0<<1;           //OC1 高电平有效          
        TIM9->CR1|=1<<7;                   //ARPE使能
       
        TIM9->CCMR1|=6<<12;          //CH2 PWM2模式                 
        TIM9->CCMR1|=1<<11;         //CH2 预装载使能            
       
        TIM9->CR1|=1<<0;            //使能定时器9        

}

void SERVO_Init(){
        PWM9_1_2_Init(4000-1,3360-1);//20ms,取50Hz
        PWM12_1_2_Init(4000-1,3360-1);
}


另外一个PWM12_1_2_Init(4000-1,3360-1);就不写出来了。不管是main里还是哪里都没用到,出错也不会在那里。
然后是控制舵机的函数:
void ServoF_Set(u8 angle){
        float x=(angle*400)/180+100;
        ServoF_VAL=(int)x;
}



求原子哥或者高手坛友们帮我一把啊。。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。