电机驱动—-L298N

电机驱动—-L298NL298N 是一种双 H 桥电机驱动芯片 其中每个 H 桥可以提供 2A 的电流 内含 4 路逻辑驱动电路 功率部分的供电电压范围是 2 5 48v 逻辑部分 5v 供电 接受 5vTTL 电平

大家好,欢迎来到IT知识分享网。

一、介绍

        L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,内含4路逻辑驱动电路,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。一个模块可同时驱动两个直流电机工作,具有反馈检测和过热自断功能。其模块实物图如下所示:

电机驱动----L298N

二、引脚说明

电机驱动----L298N

引脚名 引脚号 描述
GND 1,10,11,20 接地
Sense A 2 在该引脚和接地之间连接检测电阻器以控制负载的电流。
Sense B 19
N.C. 3;18 无连接
OUT1 4

桥A的输出;连接在这两个引脚之间的负载上流过的电流在引脚1处监测。

OUT2 5
Vs 6 供电电压用于功率输出级。一个无感的10nF电容必须连接在这个引脚和地之间。
Input1 7 桥A的TTL兼容输入。
Input2 9
EnableA 8 TTL兼容使能输入:L状态禁用桥A(使能A)和/或桥B(使能B)。
EnableB 14
VSS 12 模块的供电电压。一个100nF电容必须连接在这个引脚和地之间。
Input3 13 桥B的TTL兼容输入。
Input4 15
OUT3 16 桥B的输出。连接在这两个引脚之间的负载上流过的电流在引脚15处监测。
OUT4 17
  • IN1, IN2, IN3, IN4: 输入控制引脚,控制电机的转动方向。
  • ENA, ENB: 使能引脚,用于启动和停止电机。
  • OUT1, OUT2, OUT3, OUT4: 输出引脚,连接到电机端子。
  • VSS: 逻辑电压供应引脚。
  • VS: 电机电压供应引脚。
  • GND: 地引脚。

三、工作原理

电机驱动----L298N

1.供电控制:

        只需要在12V供电处接上7-12V电压,供电GND处与单片机共地即可,5V供电处会输出一个5V的电压,可以用于给单片机供电,做小车时最常用的就是这种方式。使用这种方式时,板载5V使能不用管。 

2.控制逻辑:

        不用PWM调速,就单纯想让电机转动,就给使能脚一个高电平即可,可以通过跳线帽将其与高电平输出脚相连,如果给使能脚低电平的话,电机将无法转动。其转动逻辑如下表:

        电机1 电机2 电机1 电机2
IN1 IN2 IN3 IN4
1 0 1 0 正转 正转
0 1 0 1 反转 反转
相同 相同 相同 相同 停止 停止

启动电机1:使能引脚ENA设置为高电平 

停止电机1:使能引脚ENA设置为低电平

IN1高电平,IN2低电平:电机1正转

IN1低电平,IN2高电平:电机1反转

电机2同理,不做过多解释。

四、代码示例

1.带PWM示例

接线:

L298N STM32
OUT1和OUT2 电机1的两个端子
OUT3和OUT4 电机2的两个端子
ENA PA7
ENB PA6
IN1和IN2 PA0和PA1
IN3和IN4 PA4和PA5
VSS 5V
GND GND

l298n.h

 #ifndef __L1298N_H #define __L1298N_H #include "sys.h" #define MOTOR_PIN_A GPIO_Pin_7 #define MOTOR_PIN_B GPIO_Pin_6 #define MOTOR_CTRL_A GPIO_Pin_0 #define MOTOR_CTRL_B GPIO_Pin_1 #define MOTOR_CTRL_C GPIO_Pin_4 #define MOTOR_CTRL_D GPIO_Pin_5 #define GPIO_PORT_MOTOR GPIOA #define SET_PIN_HIGH(PORT, PIN) GPIO_SetBits(PORT, PIN) #define SET_PIN_LOW(PORT, PIN) GPIO_ResetBits(PORT, PIN) #define MOTOR_FORWARD() { PAout(0) = 1; PAout(1) = 0; PAout(4) = 1; PAout(5) = 0; } #define MOTOR_BACKWARD() { PAout(0) = 0; PAout(1) = 1; PAout(4) = 0; PAout(5) = 1; } #define MOTOR_STOP() { PAout(0) = 0; PAout(1) = 0; PAout(4) = 0; PAout(5) = 0; } void Forward(void); void Back(void); void Stop(void); void TIM3_PWM_Init(u16 arr,u16 psc); #endif

l298n.c 

#include "timer.h" #include "l298n.h" #include "stm32f10x_tim.h" #include "stm32f10x_rcc.h" void TIM3_PWM_Init(uint16_t arr, uint16_t psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // Enable clocks RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIO Configuration GPIO_InitStructure.GPIO_Pin = MOTOR_PIN_A | MOTOR_PIN_B; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIO_PORT_MOTOR, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MOTOR_CTRL_A | MOTOR_CTRL_B | MOTOR_CTRL_C | MOTOR_CTRL_D; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIO_PORT_MOTOR, &GPIO_InitStructure); // Reset motor control pins SET_PIN_LOW(GPIO_PORT_MOTOR, MOTOR_CTRL_A); SET_PIN_LOW(GPIO_PORT_MOTOR, MOTOR_CTRL_B); SET_PIN_LOW(GPIO_PORT_MOTOR, MOTOR_CTRL_C); SET_PIN_LOW(GPIO_PORT_MOTOR, MOTOR_CTRL_D); // Timer base configuration TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler = psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // PWM Mode configuration for Channel 1 and Channel 2 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); } void Forward() { MOTOR_FORWARD(); TIM_SetCompare2(TIM3, 1); TIM_SetCompare1(TIM3, 1); } void Back() { MOTOR_BACKWARD(); TIM_SetCompare2(TIM3, 1); TIM_SetCompare1(TIM3, 1); } void Stop(void) { MOTOR_STOP(); }

main.c

 #include "delay.h" #include "usart.h" #include "l298n.h" int main(void) { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(); TIM3_PWM_Init(999,0); while(1) { Forward(); delay_ms(3000); Back(); delay_ms(3000); } 

 

 

2.无PWM控制

接线:

L298N STM32
OUT1和OUT2 电机1的两个端子
OUT3和OUT4 电机2的两个端子
ENA PA6
ENB PA7
IN1和IN2 PA0和PA1
IN3和IN4 PA2和PA3
VSS 5V
GND GND

此demo为不带PWM的双电机版本的STM32HAL库示例: 

#include "stm32f1xx_hal.h" // 定义引脚 #define ENA_Pin GPIO_PIN_6 #define ENA_GPIO_Port GPIOA #define IN1_Pin GPIO_PIN_0 #define IN1_GPIO_Port GPIOA #define IN2_Pin GPIO_PIN_1 #define IN2_GPIO_Port GPIOA #define ENB_Pin GPIO_PIN_7 #define ENB_GPIO_Port GPIOA #define IN3_Pin GPIO_PIN_2 #define IN3_GPIO_Port GPIOA #define IN4_Pin GPIO_PIN_3 #define IN4_GPIO_Port GPIOA void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { // 启动电机1,设置方向为顺时针 HAL_GPIO_WritePin(ENA_GPIO_Port, ENA_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, GPIO_PIN_RESET); HAL_Delay(2000); // 停止电机1 HAL_GPIO_WritePin(ENA_GPIO_Port, ENA_Pin, GPIO_PIN_RESET); HAL_Delay(2000); // 启动电机2,设置方向为逆时针 HAL_GPIO_WritePin(ENB_GPIO_Port, ENB_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, GPIO_PIN_SET); HAL_Delay(2000); // 停止电机2 HAL_GPIO_WritePin(ENB_GPIO_Port, ENB_Pin, GPIO_PIN_RESET); HAL_Delay(2000); } } // 时钟配置 void SystemClock_Config(void) { // ... (根据具体需求配置时钟) } // GPIO初始化 static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = IN1_Pin | IN2_Pin | IN3_Pin | IN4_Pin | ENA_Pin | ENB_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } // 错误处理 void Error_Handler(void) { // ... (错误处理代码) } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110173.html

(0)
上一篇 2026-02-02 12:11
下一篇 2026-02-02 12:21

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信