STM32 cubeMX 直流电机控制风扇转动

本文使用的是 HAL 库。

前言

  • 实验开发板:STM32F051K8。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:了解 直流电机,风扇 的配置和使用。

一、直流电机介绍

直流电机是一种电动机类型,它通过直流电源供电,将电能转化为机械能。这类电机在各种应用中都得到广泛使用,包括工业、汽车、家用电器等领域

主要特点:

  • 可控性:通过控制电流或者电压,可以调节直流电机的转速和扭矩。

  • 高启动转矩:直流电机通常具有较高的启动转矩,适合需要大扭矩启动的应用。

  • 易于控制:直流电机的速度和转向可以通过简单的电路控制来实现。

  • 应用广泛:由于其特性和控制便利性,直流电机在许多应用领域都有广泛的应用,包括电动车辆、机械传动、风扇、泵等。

直流电机因其简单的控制方式、高效率和广泛的应用范围而备受青睐,但也有一些局限性,比如需要维护电刷(对于有刷电机)、电刷磨损等问题。

二、直流电机原理图

直流电机由两根线控制:
一根线连接到了5V电源端口,一根线连接到了D1端口。
在这里插入图片描述
D1连接到开发板的PB7端口:

在这里插入图片描述

三、直流电机控制方法

因为一个端口已经连接到了5V端口,所以要想让直流电机旋转起来那另一个端口就必须设置为低电平才能让他转动起来。
在这里插入图片描述

四、STM32CubeMX 配置直流电机

把直流电机端口配置为输出端口即可。

在这里插入图片描述

五、代码编写

直流电机控制风扇,持续让风扇打开 5 秒,关闭 5 秒。

// 打开风扇
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(5000);

// 关闭风扇
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(5000);

示例:
在这里插入图片描述


总结

下一篇文章为大家继续介绍 STM32 cubeMX 的温湿度模块。

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用STM32CubeMX进行直流电机控制,您需要执行以下步骤: 1. 打开STM32CubeMX并创建一个新工程,选择您的STM32系列芯片。 2. 在“Pinout”选项卡中配置GPIO引脚,将它们设置为输出模式以控制直流电机。 3. 配置定时器以生成PWM信号,用于驱动电机。在“Clock Configuration”选项卡中启用定时器时钟,并在“Timers”选项卡中配置定时器。 4. 在“Project Manager”选项卡中启用HAL库。 5. 在“Code Generator”选项卡中生成代码,并将其导入到您的IDE中。 6. 在代码中初始化定时器和GPIO引脚,并编写一个简单的控制循环来控制电机。 下面是一个示例代码片段,用于控制直流电机: ```c #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim2; GPIO_InitTypeDef GPIO_InitStruct; void MX_TIM2_Init(void) { TIM_MasterConfigTypeDef sMasterConfig; htim2.Instance = TIM2; htim2.Init.Prescaler = 84-1; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 1000-1; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim2); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500-1; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); } void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void) { HAL_Init(); MX_TIM2_Init(); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); while (1) { for (int i = 0; i < 1000; i++) { TIM2->CCR1 = i; HAL_Delay(10); } } } ``` 这段代码使用TIM2在PA5引脚上生成PWM信号,从而控制电机的转速。在无限循环中,它使用一个简单的控制循环来逐渐增加电机的转速。注意,这只是一个简单的示例,您需要根据您的具体应用场景进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果罐子♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值