一、所需硬件模块
1.主控芯片:STM32F103C8T6
2.程序下载器:STLINK
3.电机:直流电机
4.电机驱动模块:L298N
二、模块介绍
1、主控芯片采用的是STM32系列的最小系统板,通过控制其引脚的输出进而实现对电机的控制;
2、STLINK下载器是用于烧录程序,其中的SWCLK、SWDLO、GND、3.3V引脚分别对应接到主控芯片的相关引脚,安装驱动、keil软件相关配置连接电脑就可以把程序烧录到开发板上了;
3、直流电机是我们需要控制的对象,刚开始控制可以选择几块钱的直流电机来玩玩先;
4、电机不像舵机不能通过引脚直接控制直流电机,需要通过驱动板来对直流电机进行控制,这里我选择的L298N的电机驱动模块,这个模块可以驱动两个直流电机和一个步进电机,其驱动电机也非常简单。
三、实现的基本原理
我们所使用的电机一般是两根接线的,基本原理是主控板通过控制高低电平的输出来(见下表)实现对电机的控制的,直流电机的两根线分别接到L298N驱动模块的电位器上,L298N的IN1和IN2接到主控板的GPIO口,并把GPIO口设置为输出模式,控制其高低电平的输出。L298N的ENA或ENB是控制电机调速用的。
IN1/IN3(电平状态) | IN2/IN4(电平状态) | 电机状态 |
高 | 低 | 正转 |
低 | 高 | 反转 |
高 | 高 | 停止 |
低 | 低 | 停止 |
四、代码实现
下边代码我用的是GPIOA的pin4和pin5引脚,代码如下:
这个是.c文件的文章来源:https://www.toymoban.com/news/detail-465870.html
void MOTOR_UserConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启外设时钟 复用功能
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; //引脚配置
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速率
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式 推挽式输出
GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化
}
void MOTOR_Function(u8 dir) //电机函数 方向 传参数
{
if(dir) //dir=1 正转
{
CH2_LOW; //宏定义 放在.h
CH3_HIGH;
}
else //dir=0 反转
{
CH2_HIGH;
CH3_LOW;
}
}
void MOTOR_STOP(void) //电机停止 都设置为高电平
{
CH2_HIGH;
CH3_HIGH;
}
在.h文件宏定义了引脚高低电平的控制,如下:文章来源地址https://www.toymoban.com/news/detail-465870.html
#ifndef _MOTOR_H_
#define _MOTOR_H_
#define CH2_LOW GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define CH2_HIGH GPIO_SetBits(GPIOA,GPIO_Pin_4)
#define CH3_LOW GPIO_ResetBits(GPIOA,GPIO_Pin_5)
#define CH3_HIGH GPIO_SetBits(GPIOA,GPIO_Pin_5)
void MOTOR_UserConfig(void);
void MOTOR_Function(u8 dir);
void MOTOR_STOP(void);
#endif
到了这里,关于STM32控制直流电机转向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!