赞
踩
本文代码使用 HAL 库。
TB6612模块是一种常见的双路直流电机驱动模块,广泛应用于机器人、无人机、智能小车等电机控制场景中。它采用TB6612FNG芯片作为驱动控制芯片,提供了可靠的电机驱动功能。
TB6612模块的主要特点和功能:
可以同时控制两个直流电机
的速度和方向。通过PWM信号可以精确地控制电机的转速
,实现速度调节。TB6612 电机驱动模块通过AIN1,AIN2 控制左边2个电机。BIN1,BIN2 控制右边2个电机。
左电机控制:
AIN1 ------------> PB8
AIN2 ------------> PB9
PWMA ------------> PB7 (pwm 调速)
右电机控制:
BIN1 ------------> PB5
BIN2 ------------> PB4
PWMB ------------> PB6(pwm 调速)
控制左右电机引脚输出高低电平控制 小车运行
。
0 : 引脚输出低电平。 1 : 引脚输出高电平。
驱动 左电机:
驱动 右电机:
小车右转 ------ > 左电机前进,右电机停止
小车左转 ------ > 左电机停止,右电机前进
小车右自旋 ------ > 左电机前进,右电机后退
小车左自旋 ------ > 左电机后退,右电机前进
采用模块化的编程,将 小车的电机驱动封装在一个驱动文件中。
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
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); // 停止
}
}
下篇文章为大家介绍 红外 避障。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。