当前位置:   article > 正文

STM32CubeMX 直流电机控制、HAL库、cubemx、l298n、tb6612_cubemx 读取电机位置

cubemx 读取电机位置


前言

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输出
  • 1

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3. 主循环代码

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

总结

文件项目下载地址

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

闽ICP备14008679号