首页 > 分享 > stm32智能小车前进,后退,左转,右转,停止

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

本文代码使用 HAL 库。

文章目录 前言一、电机模块介绍二、原理图分析三、电机驱动小车运动原理1. **小车前进,后退,停止**2,小车左转,右转3,左自旋,右自旋 四,cubeMX 配置五,代码模块化编写总结

前言

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

一、电机模块介绍

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

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

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

二、原理图分析

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

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

stm32小车地板电路图
在这里插入图片描述
由上图可知:

左电机控制:
AIN1 ------------> PB8
AIN2 ------------> PB9
PWMA ------------> PB7 (pwm 调速)

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

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

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

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

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

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

2,小车左转,右转

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

在这里插入图片描述

3,左自旋,右自旋

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

四,cubeMX 配置

设置引脚:
在这里插入图片描述选择 定时器的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 12345678910111213141516

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~1000if(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~1000if(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);// 停止} } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100

总结

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

相关知识

stm32智能小车前进,后退,左转,右转,停止
3、小车前进后退左右综合实验
前进。后退,左转,右转。用英语怎么说
前进、后退
树莓派小车之前进和后退(创乐博套件)
基于stm32的远程监控喂食器
想做个4G网络小车,能远程控制前进后退,能看到图像,GPS位置和小车的姿态角,该从哪几个方面入手呢
word怎么前进和后退文字word中前进后退快捷键
如何训练宠物狗狗前进和后退(15个步骤教你如何训练你的宠物狗狗前进和后退)
vscode如何前进后退操作

网址: stm32智能小车前进,后退,左转,右转,停止 https://m.mcbbbk.com/newsview353789.html

所属分类:萌宠日常
上一篇: 废土3宠物解散之后怎么召回
下一篇: 原版mc用指令收复宠物, 成为最