STM32学习记录——L298N驱动

STM32学习记录——L298N驱动

PS:小编第一次尝试写博客,写的不好的地方,敬请谅解。

硬件

1.正点原子STM32F103ZET6开发板。
2.L298N电机驱动模块。
3.直流减速电机。

模块使用STM32学习记录——L298N驱动_第1张图片

1.输出A接及B可以各自接一直流电机
2.若使用12V供电,将12V供电端口及GND接上电源正负,模块GND还需一根线接上开发板的GND。
3.逻辑A与B需要使能,可以用跳线帽,也可以将下方的引脚接上单片机的IO口,程序中使能。
4.逻辑输入四个端口接单片机四个IO口,每两个一侧的端口控制的一路电机。
5.使能端的两种方法其实均可实现电机的正反转和调速。

代码(驱动一个电机,不用跳线帽)

使能函数

void ENABLE_GPIO(void)
{
     
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_0; //IN1,IN2接口
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	GPIO_SetBits(GPIOC,GPIO_Pin_0);
	GPIO_ResetBits(GPIOC,GPIO_Pin_1);
}

配置定时器2

void TIM2_PWM_Init(u16 arr,u16 psc)
{
     
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);  //时钟使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出,输出TIM2 CH3的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//定时器2通道3
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);

	TIM_TimeBaseStructure.TIM_Period = arr;
	TIM_TimeBaseStructure.TIM_Prescaler = psc;
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
	TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High ;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0; //CCR,设置占空比。反转模式时候无效
	
	TIM_OC3Init(TIM2,&TIM_OCInitStructure);//初始化外设 TIM2 OC1
	TIM_CtrlPWMOutputs(TIM2,ENABLE);     ///开启定时器输出功能
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能预装载寄存器
	
	TIM_Cmd(TIM2, ENABLE);   //使能 TIM2

}

主函数

主函数初始化后配置定时器的频率,value根据你的重装载值进行配置,改变value可实现调速,转换PC1和PC0的高低电平可实现正反转的改变。

TIM_SetCompare3(TIM2,value);

你可能感兴趣的:(STM32,stm32,单片机)