STM32之L298N控制130电机+PWM调速

一,接线:

左右两边的OUT0~OUT4接130电机两端;

中间蓝色端口接电源,注意:两个电源口和一个接地口都要接上!!!!!!!!

偏左一些的排针用杜邦线接上io口,如果需要PWM控速的话,ENA和ENB的跳线帽需要拔掉,

然后用两根杜邦线分别连到一个io口,给高电平使能,如果是低电平则电机制动。

同时,IN1~IN4连接到pwm对应的GPIO口。

这样,接线部分基本完成。

具体可参考这位博主,

(63条消息) L298N 驱动电机与单片机的线路连接图_l298n驱动接线方法图_高佬君的博客-CSDN博客

二,编程序

1.首先给对应的GPIO口初始化,给用到的GPIO口设置推挽输出

L298N.c

#include "L298N.h"
void L298_Init(){
	GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);	    //使能PG端口时钟
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;	            //IN1->PB4,IN2->PB5推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);	  	       //初始化GPIO
	GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5); 			 //PB4,PB5 输出低 
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;	            //IN3->PB1,IN4->PB0推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);
	
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_6;            //ENA->PB0,ENB->PB6,推挽输出
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
	
  GPIO_Init(GPIOB, &GPIO_InitStructure);	 
}

L298N.h

#ifndef __L298N_H__
#define __L298N_H__
#include "sys.h"
#define IN1 PBout(4)
#define IN2 PBout(5)
#define IN3 PBout(0)
#define IN4 PBout(1)
#define ENA1 PBout(2)
#define ENA2 PBout(6)
void L298_Init();
#endif

2.定时器初始化,设置对应的PWM

这里选用通用定时器TIM3的通道1~4;

首先,初始化TIM3,然后,设置端口重映射,并设置PWM输出的GPIO口为推挽复用输出!(切记)

而后,设置PWM参数,使能自动重装载寄存器,arr的预装载,选择通道,使能定时器,完成。

代码如下:PWM.c

#include "PWM.h"

void TIM3_PWM_Init(u16 arr,u16 psc){
	GPIO_InitTypeDef gpio;
	TIM_TimeBaseInitTypeDef time;
	TIM_OCInitTypeDef time_oc;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
	
	//GPIO_PinRemapConfig();
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
	
	gpio.GPIO_Mode=GPIO_Mode_AF_PP;
	gpio.GPIO_Pin=GPIO_Pin_5;
	gpio.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&gpio);
	
	gpio.GPIO_Mode=GPIO_Mode_AF_PP;
	gpio.GPIO_Pin=GPIO_Pin_1;
	gpio.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&gpio);
	
	time.TIM_Period=arr;
	time.TIM_Prescaler=psc;
	time.TIM_ClockDivision=0;
	time.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM3,&time);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM1;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	
  TIM_OC1Init(TIM3,&time_oc);
	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM1;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC2Init(TIM3,&time_oc);
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM2;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC3Init(TIM3,&time_oc);
	TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM2;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC4Init(TIM3,&time_oc);
	TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_ARRPreloadConfig(TIM3,ENABLE);//使能自动重装载寄存器,arr的预装载
	TIM_Cmd(TIM3,ENABLE);
	
	
	
}

pwm.h

#ifndef __PWM_H__
#define __PWM_H__
#include "sys.h"

void TIM3_PWM_Init(u16 arr,u16 psc);
#endif

main.c

#include "stm32f10x.h"
#include "L298N.h"
#include "key.h"
#include "uart.h"
/************************************************
 ALIENTEK 精英STM32F103开发板实验0
 工程模板
 注意,这是手册中的新建工程章节使用的main文件 
 技术支持:www.openedv.com
 淘宝店铺:http://eboard.taobao.com 
 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
 广州市星翼电子科技有限公司  
 作者:正点原子 @ALIENTEK
************************************************/


 int main(void)
 {	
	u16 led0pwmval=0;
	u8 dir=1;
	 
  L298_Init();
	TIM3_PWM_Init(450,7199);
	 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Uart_Init(115200);
	Key_Init();
	 
	delay_init(); //延时函数初始化 
	 //设置 NVIC 中断分组 2
	ENA1=1;
	ENA2=1;
	//Ind=0;
	TIM_SetCompare2(TIM3,100);//设置通道2的占空比实现PWM调速,这里是100,在0~450间,越小速度越快
//	TIM_SetCompare1(TIM3,400);//设置通道1的占空比实现PWM调速
//	TIM_SetCompare3(TIM3,400);
	TIM_SetCompare4(TIM3,100);
	//Ina=1;
	//IN1=1;
//	IN4=1;

  while(1)
	{
	  
		printf("%d\r\n", Get_Key(Key_Scan(0)) );
		
		delay_ms(1000);
	}
 }

### 回答1: l298npwm调速电机接线方法如下: L298N是一个控制两个电机的模块,每个电机接线口分别为1、2、3、4。其中,1和2是一个电机接线口,3和4是另一个电机接线口。 PWM信号是用来控制电机转速的,可以用Arduino等控制芯片产生PWM信号。L298N模块的ENA和ENB引脚接到PWM信号发生器的数字引脚,即可实现电机调速。 具体的接线方法如下: 1. 将电机的正极连接到L298N模块的1或3口,将负极连接到2或4口。 2. 在电机接口旁边的三个引脚中,将VCC引脚连接到正极,将GND引脚连接到负极,将+5V引脚连接到控制芯片的+5V电源。 3. 将控制芯片的数字PWM信号引脚(如Arduino的数字引脚9)连接到L298N模块的ENA或ENB引脚,以控制电机的转速。 4. 最后,将控制芯片的GND接口连接到L298N模块的GND引脚即可。 通过上述接线方式,即可实现l298npwm调速电机控制,可广泛应用于机器人、电动车及各种电机控制设备。 ### 回答2: L298N是一种常用的直流电机驱动芯片,可以用来控制直流电机的运转速度和方向。其中,PWM调速就是一种常见的电机速度控制方法,通过不断改变占空比来控制电机的速度。 首先,将L298N的VCC和GND相应连接到电源的正负极。然后将电机的正极和负极接入OUT1和OUT2两个引脚中,注意电机的正负极连接方式不能颠倒,否则电机将无法正常运转。除此之外,还需要将IN1和IN2以及ENA接入控制器,以实现对电机调速控制。 在使用PWM调速时,我们需要将ENA接入控制器的PWM输出引脚,通过改变ENA引脚接收的PWM波的占空比,来调节电机的运行速度。占空比越大,电机运行速度越快,反之则越慢。另外,通过改变IN1和IN2的电平状态,可以实现电机正反转的切换。 需要注意的是,L298N最大可以承受2A电流,如果电机的额定电流超过了2A,就需要使用外部电流放大器进行扩展。此外,接线时应注意各引脚的接线准确无误,以免造成不必要的损坏。 总的来说,L298N芯片是一种功能强大的直流电机驱动芯片,可以通过PWM调速控制电机的速度,在实际应用中有着广泛的应用。但在接线时需要仔细操作,以确保系统正常稳定运行。 ### 回答3: l298n是一种常用的电机驱动模块,它可以用于Arduino、Raspberry Pi、STM32单片机控制直流电机和步进电机。其中,l298npwml298n直流电机驱动模块的一个带PWM调速功能的版本。在使用l298npwm模块时,我们需要进行一些接线工作,接下来我们详细介绍一下l298npwm调速接线的方法。 1. 电源接线:将模块的VO和GND引脚连接到5V或12V电源,GND引脚需要接到控制单片机的GND引脚。 2. 电机接线:将直流电机的正极连接到模块的OUT1或OUT2引脚中的一个,将负极连接到模块的OUT3或OUT4引脚中的一个。需要注意的是,当直流电机正转时,应将正极连接到OUT1引脚,负极连接到OUT3引脚;反转时,应将正极连接到OUT2引脚,负极连接到OUT4引脚。 3. 控制引脚接线:将控制单片机的数字引脚连接到EN1或EN2引脚,用来控制电机的转速。同时,还需将PWM调速控制引脚(如控制单片机的A0引脚)连接到ENA或ENB引脚,以实现PWM调速功能。 4. 使能和方向控制接线:将EN控制引脚连接到控制单片机的数字引脚(如5号引脚),用来控制电机的使能和方向控制。当EN引脚为高电平时,电机才会工作;当该引脚为低电平时,电机将停止工作。同时,还需要将控制单片机的数字引脚(如7号引脚)与INA或INB引脚相连,用来控制电机的正反转。 通过上述接线,我们就可以实现l298npwm模块的调速功能。在编写程序时,我们需要使用控制引脚、PWM控制引脚、使能和方向控制引脚等进行相应的配置和控制,以实现电机的正反转和调速等功能。需要提醒的是,在进行电机控制时,我们需要考虑到电机的负载、电源的电压和电流等因素,以保证控制的稳定性和可靠性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值