【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转

您所在的位置:网站首页 l298驱动器 【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转

【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转

2024-07-16 12:53:48| 来源: 网络整理| 查看: 265

本文仅简单驱动该模块并实现直流减速电机的正反控制,并无步进电机的控制。

实验环境:

(一)STM32F10X 单片机

(二)L298N驱动模块

(三)若干直流减速电机

第一步:L298N正确与STM32接线

    我的L298N的模块如下

我们可以参考下图进行接线

然后买模块的时候,商家也提供了一份接线图

好了,现在接线就变得非常简单了,我把我的接线图贴上来供大家参考:

正确的配置后我们就可以开始编写L298N的驱动程序了,根据L298N的使用手册,我们可以知道298是使用IN端口和MCU板子上的GPIO引脚进行TLL电位信号通讯的,所以操作起来也十分的简单,就配置GPIO引脚的电平信号即可操作。

上图是用于驱动直流电机的TLL配置图,下图是用于驱动步进电机的TLL配置图

我们这里采用的是直流电机,所以只看直流电机的就可以了。

我们从TLL配置图可以知道,我们只用配置高低电平就实现控制电机的正反转,那我们来写一个示例程序程序。

这里是motor.c

#include "motor_1.h" //导入led头文件 #include "stm32f10x.h" //导入STM32官方库 #include "stm32f10x_rcc.h" //导入STM32的RCC时钟库 #include "delay_other.h" //延时库 void Motor_12_Config(void) //定义初始化函数 { GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO_InitTypeDef结构体 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); //开启引脚时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //定义IN引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出功率 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA的引脚参数,写进 GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); //所有引脚拉低 } void Motor_1_STOP(void) { IN1(High); IN2(High); } void Motor_1_PRun(void) { IN1(Low); IN2(High); } void Motor_1_NRun(void) { IN1(High); IN2(Low); } void Motor_2_STOP(void) { IN3(High); IN4(High); } void Motor_2_PRun(void) { IN3(Low); IN4(High); } void Motor_2_NRun(void) { IN3(High); IN4(Low); }

其相关的值都在头文件中进行了宏定义,我们再来看头文件

motor.h

#ifndef __MOTOR1_H #define __MOTOR1_H #include "stm32f10x.h" #include "stm32f10x_gpio.h" #define High 1 #define Low 0 #define IN1(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_2);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_2) #define IN2(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_3);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_3) #define IN3(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_4);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_4) #define IN4(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_5);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_5) void Motor_12_Config(void); void Motor_1_STOP(void); void Motor_1_PRun(void); void Motor_1_NRun(void); void Motor_2_STOP(void); void Motor_2_PRun(void); void Motor_2_NRun(void); #endif 程序文件都写完了之后,我们就在主程序中调用即可。

main.c

#include "stm32f10x.h" //官方库 #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "motor_1.h" #include "delay_other.h" #include "Key_1.h" int main(void) { Motor_12_Config(); //298电机驱动初始化 delay_init(); //延时函数初始化 Key1_GPIO_Config(); //按键初始化 while(1) { Motor_1_PRun(); //正转 Motor_2_PRun(); delay_ms(10000); //转三秒 delay_ms(10000); delay_ms(10000); Motor_1_NRun(); //反转 Motor_2_NRun(); delay_ms(10000); //转三秒 delay_ms(10000); delay_ms(10000); Motor_1_STOP(); //停止 Motor_2_STOP(); delay_ms(10000); //停三秒 delay_ms(10000); delay_ms(10000); } } 然后rebuild整个工程,靠近stm32直接运行就可以调用了。

非常简单的代码,但是具体使用的话建议还是连接PWM进行分档与调速

【最后提醒】

如果出现了电机没反应的情况,线路连接和程序确定没有问题,那么问题就很可能 STM32没有和L298N共地!!!

STM32一定要和L298N共地才行!!!

图中绿色圈圈内的那根粉红色的线就是 STM32 连接到了 12V 电源的 GND

有地方不懂的就在评论区问,有错误请指出,大家共同进步!

因本文不太严谨,所以严禁转载!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭