• 用HAL库结合STM cube编写代码控制stm32f103c8t6来驱动减速电机实现慢快逐步切换转动


    • 用到的模块
    1. TB6612FNG电机驱动模块
    2. stm32F103C8T6最小系统板
    3. LM2596S降压模块
    4. 直流减速电机(不涉及编码器知识)
    • 模块介绍

           1.TB6612FNG电机驱动模块

                

             (1)<概述>

                TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动两个电机。

    与L298N使用基本一致。而且,相比于L298N的热耗性和外围二极管续流电路,其无需外加散热片,外围电路简单,只需接电源滤波电容就可            

    以直接驱动电机,利于减小系统尺寸。对于PWM信号输入频率范围,高达100kHz的频率更是可以满足我们的大部分需求。

             (2)<主要参数>

    最大输入电压 VM=15V
    最大输出电流 Iout=1.2A(平均)
    模式 正反转/短路刹车/停机功能
    内置电路

    过热保护,低压检测

             (3)<模块接线图>

                   (对应口可以在模块背面看到)

                    解读:VM直接接电池即可,VCC是内部逻辑供电,一般给3.3V或者5V都可以,模块的三个GND接任意一个即可,因为都是导通的,STBY置高模块才能正常                            工作。

                               完成上面的工作之后,我们就可以开始搭载硬件电路了。

            2.  LM2596S DC-DC降压电源模块

              (1)<产品参数>

    输入电压 3.2V~46V
    输出电压 1.25V~35V
    输出电流 3A以内
    转换效率 92%以内
    输出文波 <30mV
    开关频率 65kHz
    工作温度 -45℃~+85℃
    尺寸大小

    43.2mm*21.0mm*14.0mm

    (长*宽*高)

              笔者用12V电源供电,那接到单片机及电机驱动模块内部驱动口必须经过降压到3.3~5V才可以给正常供电。

              话不多说,上图:

              

               (2)<具体使用>    

               ——可以看到模块的正面有一个蓝色的长方体,顶部有一个旋钮,可能比较难操作,我们用一字形螺丝刀(细一点的)来旋转上面的旋钮即可调节输出电压。注意降压模块的四角,我们可以看到    IN-   IN+   OUT-   OUT+    的字样。IN则为输入电压所接脚,OUT则为输出电压所接脚,外部电源就是通过这个模块于内部电路形成联系。

               ——指示灯亮,模块正常工作。

               ——IN+/-接外部电源,用万用表测量输出OUT+/-的电压值达到所需要电压为止

               ——长时间工作建议在2.5A以内的电流使用,同时加上散热片(10W以上输出);由于是降压模块,为了保证输出稳定,请保持最小1.5V压差

         3.直流减速电机

            按照惯例还是先上图介绍

                                    (电机参数  ——>  购自平衡小车之家)

          所以这次单纯控制电机,我们只需单纯引出两条线接到驱动模块上

    • 具体电路搭建

              ——电路必须依靠软件的控制前提,所以我们从软件入手

              1.打开cube,输入STM32F103C8,点进去进行如图配置(PWM频率选取10kHz)

    (PA1/PA2为Output模式)

       (打开TIM1通道一,设为PWM输出模式)

     (注意77和99)(用这个来确定PWM频率)

    (时钟树设定,查表看到TIM1挂载于APB1 timer clocks)

    到这,我们的cube已经配置完毕。

    我们点击齿轮创建工程

           

            2.关于程序的编写

    int main(void)
    {
      /* USER CODE BEGIN 1 */
      uint16_t pwm_val = 0;
      /* USER CODE END 1 */
    
      /* MCU Configuration----------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_TIM1_Init();
      /* USER CODE BEGIN 2 */
      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ;
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
      
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */
      while (pwm_val < 50)
        {
            pwm_val++;
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val);
            HAL_Delay(50);
      }
        while (pwm_val)
        {
            pwm_val--;
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val);
            HAL_Delay(50);
      }
      /* USER CODE END 3 */
    }
    }

    其中(1)在main函数中定义一个变量pwm_val用于控制PWM输出的占空比。

          

           (2)HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);          //即在while(1)之前使能PWM输出通道CH1。

            

           (3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ;
                    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);  //定义IO

        

           (4)在while(1)中不断改变PWM输出的占空比,控制电机的转动速度,实现一个电机转动速度由慢到快再由快到慢的的效果。周期约为5秒。要注意的是,配置的自动加载参数是99,在while(1)                  中,占空比的变化是范围是0~50。

       

           3.关于实物的连接

  • 相关阅读:
    JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
    VS2012 MVC4 学习笔记-概览
    java中运算符的解析和计算
    Python基本数据类型之tuple
    Python基本数据类型之list
    Python基本数据类型之str
    Python基本数据类型之int
    range和xrange梳理
    python编码
    ubuntu下的ssh
  • 原文地址:https://www.cnblogs.com/Wilson-hhx/p/10467945.html
Copyright © 2020-2023  润新知