【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转
来源:互联网 发布:微创软件 外派 编辑:程序博客网 时间:2024/04/27 17:25
本文仅简单驱动该模块并实现直流减速电机的正反控制,并无步进电机的控制。
实验环境:
(一)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
有地方不懂的就在评论区问,有错误请指出,大家共同进步!
因本文不太严谨,所以严禁转载!
阅读全文
5 0
- 【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转
- 【STM32小案例 06 】STM32使用按键驱动L298N电机模块控制电机正反转
- 【Arduino学习笔记】使用L298N电机驱动模块驱动直流电机
- 基于stm32的遥控小船(一)L298N电机驱动
- STM32控制直流电机笔记(一)——电源转换和电机驱动电路设计及注意事项
- stm32学习------stm32控制L298N电动机
- H桥驱动小功率直流电机正反转
- 【Espruino】NO.18 使用L298N驱动直流电机
- STM32驱动步进电机
- STM32控制步进电机
- 单片机控制电机正反转
- STM32 直流电机
- [51]L298N电机驱动
- L298n控制步进电机
- STM32+ULN2003驱动步进电机
- stm32 DMA步进电机控制
- 使用Arduino与L298N(红板) 驱动直流电机
- STM32用IO口控制步进电机的简单程序
- dp动态规划分类详解
- 自下向上的编写容易阅读的代码方法(下 )
- Thinkphp5集成阿里云短信
- muduo源码学习(13)-多线程与并发服务器设计
- Python 多线程 多进程 协程 yield
- 【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转
- [生而为人-思考] 《自在力》读书笔记 + Python词频分析
- 使用Hbuilder编辑器进行移动端页面调试
- nfs文件系统
- 浅析Java中的final关键字
- Intersection of Two Arrays
- 自下向上的编写容易阅读的代码方法(下 )
- sass中变量的使用
- hdu 1195 open the lock