(合泰杯)HT32F52352 TB6612驱动直流减速电机(代码完整可行)

本文介绍了如何在STM32平台上使用TB6612驱动芯片控制直流减速电机,通过PWM进行速度调整,并提供了基础的初始化代码和电机运行函数。着重讨论了驱动选择及使用中的电流问题。
摘要由CSDN通过智能技术生成

目录

简介

DC_Motor.c

DC_Motor.h

main.c

实现演示


简介


        直流减速电机在很多智能化、自动化项目里常有用到,在一般项目里一般不用太精确,比如要编码什么的,我们要求就是驱动即可,通过pwm+pid控制它的速度,正反转就够了。现在需求是运输东西到一定位置。我们可以选最简单的直流减速电机两脚即可,如图1所示。

                                图1

        在编程工程中,之前在stm32驱动的时候,没有加驱动直接芯片引脚给PWM也可以动,用来调试嘛。但是我在合泰板子调试的时候,我暂时没用驱动去搞,然后就一直驱动不了,主要用电表看pwm给芯片满值是3.3V,我觉得奇怪,但是直接板子3.3它可以动,然后看电路知道原来是它芯片输出引脚的驱动能力不足以提供足够的电流给电机,导致电机无法运转,就是电流保护嘛,输出电流小。然后我就使用了驱动电机芯片TB6612图2所示,用法功能如图3所示。

                                图2

                        图3

下面代码部分,本代码就是直接通过pwm控制速度没有实现正反转驱动一个减速电机,正反转实现也很简单,如果有需求自己可以试试。

DC_Motor.c

#include  "DC_Motor.h"

void DCMotor_Init(void)
{
	{ /* Enable peripheral clock                                                                        
      */
   CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
	CKCUClock.Bit.PA               = 1;    //PA端口时钟开启
   CKCUClock.Bit.PB               = 1;
   CKCUClock.Bit.GPTM0            = 1;    //通用定时器GPTM0时钟开启
   CKCUClock.Bit.AFIO             = 1;    //复用功能时钟开启
   CKCU_PeripClockConfig(CKCUClock, ENABLE);
   }
	
	{ /* Configure AFIO mode as TM function                                                            
      */
   AFIO_GPxConfig(GPIO_PA, AFIO_PIN_6, AFIO_MODE_4);    //将GPTM0_CH2映射到PA6
	 	
	GPIO_DirectionConfig(HT_GPIOA,GPIO_PIN_6, GPIO_DIR_OUT);	
   }
 
	{ /* Time base configuration                                                                            
      */
   TM_TimeBaseInitTypeDef TimeBaseInit;
 
   TimeBaseInit.Prescaler = 72 - 1;    //Timer Clock = CK_AHB/HTCFG_PWM_TM_PRESCALER
   TimeBaseInit.CounterReload = 101 - 1;
	TimeBaseInit.RepetitionCounter = 0;
   TimeBaseInit.CounterMode = TM_CNT_MODE_UP;    //设置为向上计数
   TimeBaseInit.PSCReloadTime = TM_PSC_RLD_IMMEDIATE;    //立即重装载
   TM_TimeBaseInit(HT_GPTM0, &TimeBaseInit);
	TM_CRRPreloadCmd(HT_GPTM0, ENABLE);    //使能CRR寄存器预装载值

   TM_ClearFlag(HT_GPTM0, TM_FLAG_UEV);
   }
	
	
    {                                                 
	//输入捕获配置
   TM_OutputInitTypeDef OutInit;
		
    OutInit.Channel = TM_CH_2;
   OutInit.OutputMode = TM_OM_PWM1;        //模式设置为PWM1,不同的模式可以查看数据手册
   OutInit.Control = TM_CHCTL_ENABLE;      //GPTM通道使能
   OutInit.ControlN = TM_CHCTL_DISABLE;                  
   OutInit.Polarity = TM_CHP_INVERTED;     //GPTM通道极性为高电平有效
   

	
	TM_OutputModeConfig(HT_GPTM0, TM_CH_2, TM_OM_PWM1);
		 //TM_SetCaptureCompare(HT_GPTM0,TM_CH_1,0);
	TM_OutputInit(HT_GPTM0,&OutInit);
 }
	
	
 //TM_IntConfig(HT_GPTM0, TM_INT_CH2CC, ENABLE);  //中断	
	TM_Cmd(HT_GPTM0, ENABLE);    //最后一定要记得使能GPTM
}

//电机pwm输入控制
void DCmotor_run(uint16_t PWM)
{
	TM_SetCaptureCompare(HT_GPTM0,TM_CH_2,PWM);
}


DC_Motor.h

#ifndef _DC_MOTOR_H
#define _DC_MOTER_H

#include "ht32f5xxxx_01.h"              // Device header

void DCMotor_Init(void);
void DCmotor_run(uint16_t PWM);



#endif

main.c

#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "USART.h"
#include "IIC.h"
#include "SHT30.h"
#include "modbus485.h"
#include "motor.h"
#include "DC_Motor.h"
//#include "Timer.h"


int temp1;
u16 humi;

volatile u32 milliseconds = 0;
volatile u32 seconds = 0;
u8 led_flag,light_in;



//
	

int main()
{
	
	//USART1_Configuration();
	//PWM_Init();
	DCMotor_Init();
		//LED_Init();	
		//SHT30_Init();
	
		//BFTM0_Configuration();
		//USART0_Configuration();
		
	//USART_Configuration();
		//Send_Data();
	
	while(1)
	{
		//Motor1_up();
		//Motor1_down();
		DCmotor_run(50);
//		Readshuju();
//		delay_ms(1000);
	}
	
}

实现演示

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值