基于cubmx对电机的初步控制

  1. 硬件准备 在开始之前,我们需要准备以下硬件:
  • STM32开发板(例如STM32F411RCT6)
  • 电机(直流电机或步进电机)
  • 驱动电路(例如L298N)
  • 电源(5V或12V)
  • 硬件连接 将电机连接到驱动电路上,并将驱动电路连接到STM32开发板上。根据电机类型的不同,连接方式也会有所不同。必须要确保外接电源给驱动电路板供5-12V电,12V最佳,可以从L298N的5V接口引出一条线接到开发板5V接口,以供给开发板供电。

    STM32开发环境设置 使用适当的IDE(集成开发环境)设置STM32开发环境。我们推荐使用STM32CubeIDE,它是STMicroelectronics官方提供的IDE。

    创建新项目 在STM32CubeIDE中,创建一个新的STM32项目。选择适当的MCU系列和型号,并配置项目设置。

    接下来我将开始演示cubmx配置:

  • 首先开始生成一个新的cubmx,点击画圈区域。

  • 第二步,我们需要选择自己开发板类型

  •                  

  • 第三步,对rcc和sys进行配置,如图所示,几乎所有项目rcc和sys都是这样配置

  • 第四步开启tim通道,选择pwm输出,几个电机选几个通道,可以选在一个tim,也可以分开选择

  • 第五步,对其进行设置,驱动电机速度是调节其占空比,至于原理可以看看其他人的,每一种型号不同,这里以我使用的为例。

  • 第六步,选择四个引脚用GPIO_OUTPUT,分别命名AIN1,AIN2,BIN1,BIN2,通过控制这四个引脚高低电平控制电机正反转,其中AIN1,AIN2是调节左侧电机的,BIN1,BIN2是调节右侧电机的。

  • 第七步,配置时钟,HCLK更具芯片输入最大值,我这里是100MHZ,之后按回车,其他地方会自动配置好

  • 第八步,设置项目名称和路径

  • 第十步,生成文件

  • 在生成的keil5中点进main.c文件中,里面是cubmx封装好的代码,往下滚动滑轮,找到

    所在位置添加两行代码,用以开启htim2的一通道和四通道

  • /* USER CODE BEGIN 2 */
    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
    
      /* USER CODE END 2 */

    接下来在while循环中添加代码

  •  while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
    	  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,500);
    	  HAL_Delay(2000);
    	   __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0);
    	  HAL_Delay(1000);
    	   __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,500);
    	  HAL_Delay(2000);
    	   __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);
    	  HAL_Delay(1000);
      }
      /* USER CODE END 3 */

    在此段代码中开启htim2一通道,改变500和0数字可以调节电机速度,HAL_Delay是延时2s。

  • 在之后调节电机方向和速度(将前面代码删除,在指定位置输入这段代码),创建一个对左右电机控制的函数,其中AIN1/BIN1高电平正转,AIN2/BIN2高电平反转,但是由于要安装在小车上,所以对方向值设置引脚高低电平值相反。

  • /* USER CODE BEGIN 0 */
    // 电机右控制函数
    void motorControlR(uint8_t direction, uint16_t speed) { 
        // 启动 htim2 的 TIM_CHANNEL_2 通道的 PWM 输出
        HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
        /*  根据方向值设置 IN1 和 IN2 引脚的电平状态  */
        HAL_GPIO_WritePin(GPIOC, BIN1_Pin, (direction & 0x01));
        HAL_GPIO_WritePin(GPIOC, BIN2_Pin, ((direction & 0x01) ^ 0x01));
    
        /*  设置 TIM_CHANNEL_2 通道的比较值,从而控制 PWM 占空比,实现速度控制  */
        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, speed);
    }
    
    // 电机左控制函数
    void motorControlL(uint8_t direction, uint16_t speed) { 
        // 启动 htim2 的 TIM_CHANNEL_1 通道的 PWM 输出
        HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
        /*  根据方向值设置 AIN1 和 AIN2 引脚的电平状态  */
        HAL_GPIO_WritePin(GPIOA, AIN2_Pin, (direction & 0x01));
        HAL_GPIO_WritePin(GPIOA, AIN1_Pin, ((direction & 0x01) ^ 0x01));
    
        /*  设置 TIM_CHANNEL_1 通道的比较值,从而控制 PWM 占空比,实现速度控制  */
        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, speed);
    }
    /* USER CODE END 0 */

    之后在while循环中输入如下代码

  •  /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    	  
    
    		// 控制电机左转动
    motorControlL(AIN2_Pin, 100); // 调用电机左控制函数,设置方向为 AIN2_Pin,速度为 100 
    // 控制电机右转动
    motorControlR(BIN2_Pin, 100); // 调用电机右控制函数,设置方向为 BIN2_Pin,速度为 100
        /* USER CODE BEGIN 3 */
    	  
      }
      /* USER CODE END 3 */
    }

    将AIN1_Pin改成AIN2_Pin,可以改变电机旋转方向,改变数值可以改变速度,同理,另一侧电机也是如此。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值