当前位置:   article > 正文

stm32智能小车前进,后退,左转,右转,停止_stm32右箭头

stm32右箭头

本文代码使用 HAL 库。

前言

  • 实验小车:STM32F103C8T6。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:了解 电机模块如何驱动小车运动。

一、电机模块介绍

TB6612模块是一种常见的双路直流电机驱动模块,广泛应用于机器人、无人机、智能小车等电机控制场景中。它采用TB6612FNG芯片作为驱动控制芯片,提供了可靠的电机驱动功能。
在这里插入图片描述

TB6612模块的主要特点和功能:

  1. 双路电机控制:TB6612模块可以同时控制两个直流电机的速度和方向。
  2. 高电流驱动:该模块的驱动电流可达最大1.2A,提供了足够的电流供应能力,适用于各种大小的直
    流电机驱动。
  3. 逻辑电平兼容:TB6612模块采用3.3V或5V逻辑电平兼容,可以直接与微控制器、Arduino等主控
    板连接。
  4. PWM控制:通过PWM信号可以精确地控制电机的转速,实现速度调节。

二、原理图分析

  1. TB6612电机驱动模块
    在这里插入图片描述
    在这里插入图片描述
    智能小车左右均有2个电机,由于左边两个电机的AO1是合并在一起的,AO2也是合并一起的。所以通过AO1 ,AO2 可以控制左边2个电机。同理,右边通过 BO1,BO2 可以控制右边2个电机。

TB6612 电机驱动模块通过AIN1,AIN2 控制左边2个电机BIN1,BIN2 控制右边2个电机

  1. stm32小车地板电路图
    在这里插入图片描述
    由上图可知:
  • 左电机控制
    AIN1 ------------> PB8
    AIN2 ------------> PB9
    PWMA ------------> PB7 (pwm 调速)

  • 右电机控制
    BIN1 ------------> PB5
    BIN2 ------------> PB4
    PWMB ------------> PB6(pwm 调速)

三、电机驱动小车运动原理

控制左右电机引脚输出高低电平控制 小车运行

1. 小车前进,后退,停止

0 : 引脚输出低电平。 1 : 引脚输出高电平。

驱动 左电机:
在这里插入图片描述
驱动 右电机:
在这里插入图片描述

2,小车左转,右转

小车右转 ------ > 左电机前进,右电机停止
小车左转 ------ > 左电机停止,右电机前进

在这里插入图片描述

3,左自旋,右自旋

小车右自旋 ------ > 左电机前进,右电机后退
小车左自旋 ------ > 左电机后退,右电机前进
在这里插入图片描述

四,cubeMX 配置

  1. 设置引脚:
    在这里插入图片描述
  2. 选择 定时器的PWM功能,便于电机调速
    在这里插入图片描述

五,代码模块化编写

采用模块化的编程,将 小车的电机驱动封装在一个驱动文件中。

motor.h:

#ifndef _MOTOR_H_
#define _MOTOR_H_

/* 电机初始化 */
void motor_init(void);

/* 左电机控制 */
void Left_motor(int mode, int speed);

/* 右电机控制 */
void Right_motor(int mode, int speed);

/* 小车运动,mode:1前进,2后退,3左转,4右转 */
void Car_sport(int mode, int speed);

#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

motor.c:

#include "motor.h"
#include "main.h"

extern TIM_HandleTypeDef htim4;


/* 电机初始化 */
void motor_init(void)
{
		// 开启 PWM 功能
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
}


/* 左电机控制,mode:1前进,2后退,0停止 */
void Left_motor(int mode, int speed)
{
	__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, speed);		//设置占空比 0~1000
	
	if(mode == 1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
	}
	else if(mode == 2)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
	}
	else if(mode == 0)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
	}
}


/* 右电机控制,mode:1前进,2后退,0停止 */
void Right_motor(int mode, int speed)
{
	__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, speed);		//设置占空比 0~1000
	
	if(mode == 1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
	}
	else if(mode == 2)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
	}
	else if(mode == 0)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
	}
}


/* 小车运动,mode:1前进,2后退,3左转,4右转,5左自旋,6右自旋,0停止 */
void Car_sport(int mode, int speed)
{
	if(mode == 1)		
	{
		Left_motor(1,speed);
		Right_motor(1,speed);					// 前进
	}
	else if(mode == 2)
	{
		Left_motor(2,speed);
		Right_motor(2,speed);					// 后退
	}
	else if(mode == 3)
	{
		Left_motor(0,speed);
		Right_motor(1,speed);					// 左转
	}
	else if(mode == 4)
	{
		Left_motor(1,speed);
		Right_motor(0,speed);					// 右转
	}
	else if(mode == 5)
	{
		Left_motor(2,speed);
		Right_motor(1,speed);					// 左自旋
	}
	else if(mode == 6)
	{
		Left_motor(1,speed);
		Right_motor(2,speed);					// 右自旋
	}
	else if(mode == 0)
	{
		Left_motor(0,speed);
		Right_motor(0,speed);					// 停止
	}
}
  • 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
  • 96
  • 97
  • 98
  • 99
  • 100

总结

下篇文章为大家介绍 红外 避障。

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

闽ICP备14008679号