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

实验环境:

(一)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


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

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

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

  1. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...

  2. K_A08_003 基于 STM32等单片机驱动L9110模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 L9110模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+L9110模块 2.STM ...

  3. K_A08_002 基于 STM32等单片机驱动MAX1508模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 3.驱动说明 MAX1508模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MAX1508模块 2 ...

  4. l298n电机哪一端为正_L298N控制直流电机正反转_张天鹏

    Design L298N控制直流电机正反转 文/张天鹏  徐磊  北京林业大学工学院 摘要:在分析了直流电机驱动芯片 L298N 的性能.结构的基础上,结合 SPCE061A EMU BOARD单片机 ...

  5. STC单片机简单控制直流电机正反转

    最近在研究智能小车,简单研究了一下单片机简单控制直流电机正反转,一开始想着用单片机直接控制,结果失败了. 原因是:虽然I/O口输出的电压也是5V,但输出的电流太小,以致输出功率太小,不足以驱动电机工作 ...

  6. Arudino+L298N控制直流电机正反转

    Arudino+L298N控制直流电机正反转 所需元器件 电路连接图 Arduino程序 所需元器件 Arduino uno, L298N, 直流电机马达两个,两节18650电池,一个电池盒,杜邦线若 ...

  7. STC52单片机简单控制直流电机正反转(已验证)

    STC52单片机简单控制直流电机正反转(已验证) 本实验源码来源于:坛友-书盲<STC单片机简单控制直流电机正反转> 开发环境:Keil STC型号STC89C52RC

  8. K_A08_012 基于 STM32等单片机驱动 DRV8833 模块按键控制直流电机正反转

    目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 驱动时序 对应程序: 四.部分代码说明 接线说明 STC89C52RC+DRV8833模块 STM32F103C8T6+DRV8833模 ...

  9. K_A08_009 基于 STM32等单片机驱动TB6612模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 TB6612模块驱动说明 对应程序: ENA ENB输出PWM 四.部分代码说明 接线说明 1.STC89C52RC+TB661 ...

最新文章

  1. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  2. delphi dbgrideh 遍历每一个单元格_利用财务函数制作贷款计算器,让你了解还款的每一个细节...
  3. Docker: 解决Centos 7中Permission Denied的问题
  4. 微服务实战(七):从单体式架构迁移到微服务架构
  5. es6 Null 传导运算符
  6. 数据结构—链表-单链表应用-删除元素最大的节点
  7. 为什么要使用SSM框架进行项目开发
  8. 【项目实训】微信公众号获取用户openid
  9. 多线程ADSL切换IP
  10. Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
  11. python通过正则匹配指定字符开头与结束提取中间内容
  12. FATAL: kernel too old
  13. 阮一峰:炫耀从来不是我的动机,好奇才是(图灵访谈)
  14. 正确的打字方式,如何正确分配手指控制按键
  15. 35个非常有创意的 Flash 网站作品欣赏
  16. 计算机知识的黑板报图片大全,学习黑板报精选图片欣赏
  17. 基于Java的学生在线选课系统设计与实现
  18. 赛码网_在线编程_约会
  19. Kong网关简介安装
  20. Bluetooth Profile Specification之(AVRCP篇)5.1AVCTP的连接和释放

热门文章

  1. 单层感知机实现布尔函数,附代码
  2. 重入锁ReentrantLock详解
  3. 西辽开国皇帝耶律大石:孤独的苍鹰称霸西域
  4. LiberOJ -6210-tree -树形DP
  5. 前端第五次培训(JS语法)
  6. ZKFinger Live20R 版对接java - B/S(网络版)
  7. 串级PID与单极PID的区别
  8. Knowledge representation learning with entity descriptions,hierarchical types, and textual relation
  9. Java8集合过滤操作
  10. 世界顶级的程序员大佬都有谁?