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;
}
求原子哥或者高手坛友们帮我一把啊。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那能直接驱动得了吗?电流够吗,我没敢试也怕弄坏板子
可以的,不过你要选择耐5v的io口
一周热门 更多>