当前位置:   article > 正文

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

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

目录

简介

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

  1. #include "DC_Motor.h"
  2. void DCMotor_Init(void)
  3. {
  4. { /* Enable peripheral clock
  5. */
  6. CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  7. CKCUClock.Bit.PA = 1; //PA端口时钟开启
  8. CKCUClock.Bit.PB = 1;
  9. CKCUClock.Bit.GPTM0 = 1; //通用定时器GPTM0时钟开启
  10. CKCUClock.Bit.AFIO = 1; //复用功能时钟开启
  11. CKCU_PeripClockConfig(CKCUClock, ENABLE);
  12. }
  13. { /* Configure AFIO mode as TM function
  14. */
  15. AFIO_GPxConfig(GPIO_PA, AFIO_PIN_6, AFIO_MODE_4); //将GPTM0_CH2映射到PA6
  16. GPIO_DirectionConfig(HT_GPIOA,GPIO_PIN_6, GPIO_DIR_OUT);
  17. }
  18. { /* Time base configuration
  19. */
  20. TM_TimeBaseInitTypeDef TimeBaseInit;
  21. TimeBaseInit.Prescaler = 72 - 1; //Timer Clock = CK_AHB/HTCFG_PWM_TM_PRESCALER
  22. TimeBaseInit.CounterReload = 101 - 1;
  23. TimeBaseInit.RepetitionCounter = 0;
  24. TimeBaseInit.CounterMode = TM_CNT_MODE_UP; //设置为向上计数
  25. TimeBaseInit.PSCReloadTime = TM_PSC_RLD_IMMEDIATE; //立即重装载
  26. TM_TimeBaseInit(HT_GPTM0, &TimeBaseInit);
  27. TM_CRRPreloadCmd(HT_GPTM0, ENABLE); //使能CRR寄存器预装载值
  28. TM_ClearFlag(HT_GPTM0, TM_FLAG_UEV);
  29. }
  30. {
  31. //输入捕获配置
  32. TM_OutputInitTypeDef OutInit;
  33. OutInit.Channel = TM_CH_2;
  34. OutInit.OutputMode = TM_OM_PWM1; //模式设置为PWM1,不同的模式可以查看数据手册
  35. OutInit.Control = TM_CHCTL_ENABLE; //GPTM通道使能
  36. OutInit.ControlN = TM_CHCTL_DISABLE;
  37. OutInit.Polarity = TM_CHP_INVERTED; //GPTM通道极性为高电平有效
  38. TM_OutputModeConfig(HT_GPTM0, TM_CH_2, TM_OM_PWM1);
  39. //TM_SetCaptureCompare(HT_GPTM0,TM_CH_1,0);
  40. TM_OutputInit(HT_GPTM0,&OutInit);
  41. }
  42. //TM_IntConfig(HT_GPTM0, TM_INT_CH2CC, ENABLE); //中断
  43. TM_Cmd(HT_GPTM0, ENABLE); //最后一定要记得使能GPTM
  44. }
  45. //电机pwm输入控制
  46. void DCmotor_run(uint16_t PWM)
  47. {
  48. TM_SetCaptureCompare(HT_GPTM0,TM_CH_2,PWM);
  49. }

DC_Motor.h

  1. #ifndef _DC_MOTOR_H
  2. #define _DC_MOTER_H
  3. #include "ht32f5xxxx_01.h" // Device header
  4. void DCMotor_Init(void);
  5. void DCmotor_run(uint16_t PWM);
  6. #endif

main.c

  1. #include "ht32.h"
  2. #include "ht32_board.h"
  3. #include "led.h"
  4. #include "delay.h"
  5. #include "USART.h"
  6. #include "IIC.h"
  7. #include "SHT30.h"
  8. #include "modbus485.h"
  9. #include "motor.h"
  10. #include "DC_Motor.h"
  11. //#include "Timer.h"
  12. int temp1;
  13. u16 humi;
  14. volatile u32 milliseconds = 0;
  15. volatile u32 seconds = 0;
  16. u8 led_flag,light_in;
  17. //
  18. int main()
  19. {
  20. //USART1_Configuration();
  21. //PWM_Init();
  22. DCMotor_Init();
  23. //LED_Init();
  24. //SHT30_Init();
  25. //BFTM0_Configuration();
  26. //USART0_Configuration();
  27. //USART_Configuration();
  28. //Send_Data();
  29. while(1)
  30. {
  31. //Motor1_up();
  32. //Motor1_down();
  33. DCmotor_run(50);
  34. // Readshuju();
  35. // delay_ms(1000);
  36. }
  37. }

实现演示

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

闽ICP备14008679号