当前位置:   article > 正文

STM32智能小车 0基础教学(驱动小车电机)_智能小车电机转动

智能小车电机转动


前言

本篇文章将带大家学习如何驱动小车的电机让小车动起来。这里我们使用的是L298N电机驱动板驱动我们的电机。

一、电机的原理和接线

在这里插入图片描述
首先我们需要先为电机驱动供电,看到上面的图片,有一个12V的输入和电源地。
12V的电源接口可以接收5~35V的电压范围,这里我们可以将他接在板子上面的5V供电口对其进行供电。也可以接在电源模块中为其供电。
GND接到GND即可。

在这里插入图片描述
一个L298N是能够控制两个电机的,并且还能够通过PWM来进行小车速度的控制。
L298N上面有马达A和马达B两个接口,这两个接口能够分别控制电机,互相不会影响。
单片机IO使能端口是用来控制电机的正反转的,A通道使能和B通道使能分别对应马达A和马达B的PWM功能。想要使用PWM的功能必须将端口的跳线帽拔下来,否则是使用不了的。
下面我们进行接线和GPIO口的配置

二、使用cubemx配置驱动电机

这里我们暂时只使用到了普通的电机旋转,不涉及PWM的调速功能,PWM功能我们放到后面讲解。
这里我建议大家接线的时候尽量将线接的有规律,不要东一个西一个。
这里我们将四个电机控制GPIO分别接到了PB12-PB15。
这里我不建议大家这里接线:
一个接PB0一个接PA0一个接PC0.。。。。。这样接线的习惯是非常不好的。大家尽量将线接的有规律方便我们的代码编写。
在这里插入图片描述
如何控制小车电机选择呢,两个GPIO口就对应了一个电机。为什么是两个呢?现在我们给出一张真值表进行讲解。
在这里插入图片描述
由真值表可知当IN1和IN2同时输出0或者1时电机停止旋转,当IN1输出0,IN2输出1时电机正转。当IN1输出1,IN2输出0时电机反转。
知道原理后我们编写代码:
这里我们创建一个Moto.c和Moto.h来管理电机模块。
在这个文件中封装了小车初始化函数、左右电机控制函数、小车移动函数。
并对各个端口的输出进行了宏定义操作,这样方便我们后续的调用和编写代码。
Moto.h

#ifndef _MOTO_H_
#define _MOTO_H_

#include "main.h"


//右电机
#define  AIN1_RESET()  HAL_GPIO_WritePin (AIN1_GPIO_Port ,AIN1_Pin ,GPIO_PIN_RESET);
#define  AIN1_SET()    HAL_GPIO_WritePin (AIN1_GPIO_Port ,AIN1_Pin ,GPIO_PIN_SET);
#define  AIN2_RESET()  HAL_GPIO_WritePin (AIN2_GPIO_Port ,AIN2_Pin ,GPIO_PIN_RESET);
#define  AIN2_SET()		 HAL_GPIO_WritePin (AIN2_GPIO_Port ,AIN2_Pin ,GPIO_PIN_SET);

//左电机
#define  BIN1_RESET()  HAL_GPIO_WritePin (BIN1_GPIO_Port ,BIN1_Pin ,GPIO_PIN_RESET);
#define  BIN1_SET()    HAL_GPIO_WritePin (BIN1_GPIO_Port ,BIN1_Pin ,GPIO_PIN_SET);
#define  BIN2_RESET()  HAL_GPIO_WritePin (BIN2_GPIO_Port ,BIN2_Pin ,GPIO_PIN_RESET);
#define  BIN2_SET()		 HAL_GPIO_WritePin (BIN2_GPIO_Port ,BIN2_Pin ,GPIO_PIN_SET);

//小车初始化
void Car_Init(void);

//左电机
void Left_moto(unsigned char mode);

//右电机
void Right_moto(unsigned char mode);

//小车移动
void Move_car(unsigned char mode);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

Moto.c
通过真值表很容易就能编写出小车电机的控制函数。
具体逻辑大家可以参照下面的代码。

#include "Moto.h"
#define back 1
#define go 2
#define stop 3

#define left 4
#define right 5

//小车状态初始化
void Car_Init()
{
	Move_car(stop);
}

//左电机
void Left_moto(unsigned char mode)
{
	switch(mode )
	{
	  case back:
		{
			BIN2_RESET();
			BIN1_SET();
		}
		break;
		
	  case go :
		{
			BIN1_RESET();
			BIN2_SET();
		}
		break;

	  case stop :
		{
			BIN1_RESET();
			BIN2_RESET();
		}
		break;
	}
}
//右电机
void Right_moto(unsigned char mode)
{
	switch(mode )
	{
	  case back:
		{
			AIN2_RESET();
			AIN1_SET();
		}
		break;
		
	  case go :
		{
			AIN1_RESET();
			AIN2_SET();
		}
		break;

	  case stop :
		{
			AIN1_RESET();
			AIN2_RESET();
		}
	}
}

//小车移动(后退,前进,停止)
void Move_car(unsigned char mode)
{
	switch(mode)
	{
	  case back:
		{
			Left_moto(back);
			Right_moto(back);
		}
		break;
		
	  case go :
		{
			Left_moto(go);
			Right_moto(go);
		}
		break;

	  case stop :
		{
			Left_moto(stop);
			Right_moto(stop);
		}
		break;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

总结

希望大家多多点赞评论留言,B站讲课地址:B站主页

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46485
推荐阅读
相关标签
  

闽ICP备14008679号