L298N电机驱动模块的使用与驱动代码

由于单片机内部结构原因,其等效内阻极大, 导致输出电流极小,输出功率极小,无法满足直流电机的额定功率,所以我们一般只把单片机当控制器,而不是驱动器。

模块介绍

L298N芯片是ST公司生产的一种高电压、大电流双全桥式的电机驱动芯片。该芯片采用15脚封装,具有驱动能力强,发热量低,抗干扰能力强的特点。

特点

工作电压高,最高工作电压可达46V

输出电流大,瞬间峰值电流可达3A,持续工作电流为2A

低静态电压
过热保护

逻辑0电平高至1.5V(高抗扰度)

在L298N芯片基础上,本模块使用大容量滤波电容,续流保护二极管,可以提高可靠性。

硬件特性

驱动部分端子供电范围 Vs:+5V~+35V;如需要板内取电,则供电范围+7V~+35V
驱动部分峰值电流 Io: 2A(MAX单桥)
逻辑部分端子供电范围 Vss: +5V~+7V(可板内取电+5V)
逻辑部分工作电流范围: 0~36mA
控制信号输入电压范围   低电平:-0.3V≤Vin≤1.5V                            高电平:2.3V≤Vin≤Vss
使能信号输入电压范围 低电平:-0.3≤Vin≤1.5V(控制信号无效)     高电平:2.3V≤Vin≤Vss(控制信号有效)
最大功耗 25W(温度T=75℃时)
存储温度 -25℃~+130℃
驱动板尺寸 43*43*27mm
驱动板重量 30g

参数最大值

### 如何使用 STM32 控制 L298N 电机驱动模块 #### GPIO 和 PWM 输出配置 为了使 STM32 能够控制 L298N 电机驱动模块,首先需要配置相应的 GPIO 引脚以及设置 PWM 输出。这一步骤涉及到将特定的引脚分配给不同的功能,比如 PWM 波形生成。 对于 L298N 的 IN1 至 IN4 输入端口连接到 STM32 的 GPIO 引脚上,这些引脚用来发送信号以决定电机的方向和启动/停止命令。而 ENA 和 ENB 则通常接至能够产生 PWM 信号的引脚,以便调节电机的速度[^1]。 ```c // 配置GPIO引脚作为PWM输出 void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; // 假设使用TIM2定时器 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` #### 定时器 TIM2 初始化 PWM 设置 接下来是对定时器 TIM2 进行初始化并设定其工作参数,包括预分频系数、自动重装载值等,从而定义了 PWM 波形的具体特性——周期 T 和占空比 D。此部分操作决定了最终输出给 L298N 的脉宽调制电压水平,进而影响电机运转速度。 ```c static void MX_TIM2_PWM_Init(TIM_HandleTypeDef* htim) { TIM_OC_InitTypeDef sConfigOC; htim->Instance = TIM2; htim->Init.Prescaler = 83; // 设定预分频数为84-1=83 (假设系统时钟72MHz),得到计数频率约为1MHz htim->Init.CounterMode = TIM_COUNTERMODE_UP; htim->Init.Period = 999; // 自动重载寄存器ARR加载数值999,则PWM周期T=(ARR+1)/f_cnt≈1ms htim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(htim) != HAL_OK){ Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 499; // 占空比D=PSC/(PSC+CCR)=50% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, TIM_CHANNEL_1) != HAL_OK || HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, TIM_CHANNEL_2) != HAL_OK){ Error_Handler(); } } ``` #### 主程序逻辑设计 在主函数中,通过改变 PWM 的占空比来调整电机转速,并利用 GPIO 来切换电机转动方向。这里展示的是一个简化版的例子,在实际应用中可能还需要加入更多保护机制和其他功能性代码。 ```c int main(void) { /* MCU Configuration */ HAL_Init(); SystemClock_Config(); // 系统时钟配置 MX_GPIO_Init(); // GPIO初始化 MX_TIM2_PWM_Init(&htim2); // TIM2 PWM初始化 uint16_t duty_cycle = 500; // 默认占空比50% while (1) { // 改变PWM占空比以调整电机转速 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, duty_cycle); // 更改IN1-IN4电平状态以改变电机旋转方向 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, SET); // PA0 -> HIGH HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, RESET); // PA1 -> LOW HAL_Delay(2000); // 延迟一段时间观察效果 // 反向运行 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, SET); HAL_Delay(2000); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值