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

简介: STM32智能小车 0基础教学(驱动小车电机)

前言

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

一、电机的原理和接线

image.png

首先我们需要先为电机驱动供电,看到上面的图片,有一个12V的输入和电源地。

12V的电源接口可以接收5~35V的电压范围,这里我们可以将他接在板子上面的5V供电口对其进行供电。也可以接在电源模块中为其供电。

GND接到GND即可。

image.png


一个L298N是能够控制两个电机的,并且还能够通过PWM来进行小车速度的控制。

L298N上面有马达A和马达B两个接口,这两个接口能够分别控制电机,互相不会影响。

单片机IO使能端口是用来控制电机的正反转的,A通道使能和B通道使能分别对应马达A和马达B的PWM功能。想要使用PWM的功能必须将端口的跳线帽拔下来,否则是使用不了的。

下面我们进行接线和GPIO口的配置


二、使用cubemx配置驱动电机

这里我们暂时只使用到了普通的电机旋转,不涉及PWM的调速功能,PWM功能我们放到后面讲解。

这里我建议大家接线的时候尽量将线接的有规律,不要东一个西一个。

这里我们将四个电机控制GPIO分别接到了PB12-PB15。

这里我不建议大家这里接线:

一个接PB0一个接PA0一个接PC0.。。。。。这样接线的习惯是非常不好的。大家尽量将线接的有规律方便我们的代码编写。

image.png

如何控制小车电机选择呢,两个GPIO口就对应了一个电机。为什么是两个呢?现在我们给出一张真值表进行讲解。

image.png

由真值表可知当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);

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;
  }
}

总结

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

相关文章
|
4月前
|
传感器 数据采集 人工智能
基于STM32单片机的智能晾衣架设计与实现【开源免费】
随着智能家居的发展,传统晾衣架已经难以满足现代家庭对便捷、智能化的需求。基于STM32单片机的智能晾衣架能够实现自动升降、光照检测、风干控制、远程控制等功能,为家庭用户提供更智能、更舒适的晾晒体验。本项目以STM32F103C8T6为核心控制器,通过电机驱动模块、光照传感器、温湿度传感器、蓝牙/Wi-Fi通信模块,实现晾衣架的自动化与远程控制。
基于STM32单片机的智能晾衣架设计与实现【开源免费】
|
4月前
|
传感器 机器人 物联网
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
1056 42
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
|
4月前
|
传感器 数据采集 安全
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
本项目成功实现了基于STM32的智慧行李箱设计,采用了超声波测距、重力传感器和报警系统等技术,打造了一款智能且安全的行李箱。通过超声波测距模块,行李箱能够实时跟随主人并根据距离变化调整电机的速度与方向,确保小车始终保持与主人的相对位置。此外,重力测量模块能够检测行李箱内物品的重量,若超重则及时通过LED和蜂鸣器提醒主人,避免物品过重对行李箱造成损害或不便。
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
|
4月前
|
传感器 人工智能 监控
【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码
本项目基于STM32F103C8T6设计实现智能宠物喂食系统,支持定时喂食、远程控制、余粮检测、语音提示等功能,结合传感器与物联网技术,提升宠物喂养智能化水平,适用于家庭及嵌入式课程实践。源码开源,具备良好扩展性。
【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码
|
算法
STM32CubeMX PID差速循迹小车
STM32CubeMX PID差速循迹小车
668 1
STM32CubeMX PID差速循迹小车
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
376 14
STM32Cubemx PWM驱动SG90舵机
STM32Cubemx PWM驱动SG90舵机
885 13
STM32CubeMX mpu6050驱动
STM32CubeMX mpu6050驱动
271 10
STM32CubeMX EC11旋转编码器驱动
STM32CubeMX EC11旋转编码器驱动
1573 10
STM32CubeMX WS2812B灯驱动
STM32CubeMX WS2812B灯驱动
1414 1

热门文章

最新文章