STM32CubeMX 直流电机控制、HAL库、cubemx、l298n、tb6612


前言

STM32CubeMX 直流电机控制、HAL库、cubemx
通过encoder来获取当前转速。
使用的芯片是stm32f401ccu6
电机控制使用的是tb6612


一、STM32CubeMX环境配置

1.1 PWM输出配置

PWM的频率大概是10KHZ,CK_CNT=TIMXCLK/(PSC+1)。所以我们将预分配系数为0,arr寄存器的值为8400-1;
在这里插入图片描述

1.2电机控制引脚配置

对于定时器而言除了红色位置需要修改以外其他地方不需要修改。(其他基础配置不做解析)。
TB213A需要两个引脚来控制电机的正反转以及停止所以我们在定义两个gpio为输出:
(为了方便我们使用user label)

在这里插入图片描述

注:TB213A还有一个STBY引脚他需要使能高电平,直接接入单片机的vcc+即可。

二、代码

1.主函数开启

	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启pwm输出

2.moto代码

新建一个moto.h 和moto.c文件

moto.c

#include "moto.h"
#include "tim.h"
/**************************************************************************
函数功能:赋值给PWM寄存器
入口参数:PWM
返回  值:无
**************************************************************************/
void Set_Pwm(int moto)//赋值给PWM寄存器
{
	int pwm_abs;
	if(moto>0) Moto(1);
	else      Moto(0);
	pwm_abs=myabs(moto);		
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,pwm_abs);
}
/**************************************************************************
函数功能:电机的正反转//
入口参数:mode   mode=1时为正转  mode=0时反转   mode =3时关闭
返回  值:无
**************************************************************************/
static void Moto(int mode)
{	
	if(mode==1)
	{
		HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET);
	}
	else if(mode==0)
	{
		HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);

		HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);
	}

	if(mode==3)
	{
		HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);	
	
	}
}
/*
*	函数功能:取绝对值
*	入口参数:int 
*	返回值:无 unsingned int 
*/
static int myabs(int num)
{
	int temp;
	if(num<0)	temp=-num;
	else temp =num;
	return temp;
}

moto.h

#ifndef __MOTO_H
#define __MOTO_H
#include "main.h"
static void Moto(int mode);
static int myabs(int num);
void Set_Pwm(int moto);//赋值给PWM寄存器
#endif

3. 主循环代码

Set_Pwm(4200);//取值只能在 -8400---+8400

总结

文件项目下载地址

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用STM32CubeMX进行直流电机控制,您需要执行以下步骤: 1. 打开STM32CubeMX并创建一个新工程,选择您的STM32系列芯片。 2. 在“Pinout”选项卡中配置GPIO引脚,将它们设置为输出模式以控制直流电机。 3. 配置定时器以生成PWM信号,用于驱动电机。在“Clock Configuration”选项卡中启用定时器时钟,并在“Timers”选项卡中配置定时器。 4. 在“Project Manager”选项卡中启用HAL库。 5. 在“Code Generator”选项卡中生成代码,并将其导入到您的IDE中。 6. 在代码中初始化定时器和GPIO引脚,并编写一个简单的控制循环来控制电机。 下面是一个示例代码片段,用于控制直流电机: ```c #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim2; GPIO_InitTypeDef GPIO_InitStruct; void MX_TIM2_Init(void) { TIM_MasterConfigTypeDef sMasterConfig; htim2.Instance = TIM2; htim2.Init.Prescaler = 84-1; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 1000-1; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim2); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500-1; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); } void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void) { HAL_Init(); MX_TIM2_Init(); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); while (1) { for (int i = 0; i < 1000; i++) { TIM2->CCR1 = i; HAL_Delay(10); } } } ``` 这段代码使用TIM2在PA5引脚上生成PWM信号,从而控制电机的转速。在无限循环中,它使用一个简单的控制循环来逐渐增加电机的转速。注意,这只是一个简单的示例,您需要根据您的具体应用场景进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值