问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F103单片机:轻松搞定无刷直流电机控制

创作时间:
作者:
@小白创作中心

STM32F103单片机:轻松搞定无刷直流电机控制

引用
知乎
7
来源
1.
https://zhuanlan.zhihu.com/p/425324410
2.
https://blog.csdn.net/yuyan7045/article/details/118707663
3.
https://blog.csdn.net/snail_dongbin/article/details/82803076
4.
https://blog.csdn.net/xiaoshui117/article/details/127433090
5.
https://blog.csdn.net/corlin6688/article/details/133898573
6.
https://bbs.elecfans.com/jishu_2126529_1_1.html
7.
https://m.baigonglian.com/shop/139381/solutions/98957

使用STM32F103单片机控制无刷直流电机(BLDC)是一项热门技术。通过设置PWM频率和脉宽,可以精确地调节电机转速。这个过程不仅涉及硬件接线,还包括软件编程,例如初始化定时器和配置GPIO引脚。对于初学者来说,掌握这些基本步骤是关键。此外,调试时需要注意安全问题,如防止浆翼打伤手等。通过实践和不断尝试,你将能够成功制作出蓝牙遥控飞艇或其他有趣的项目。

01

硬件准备

三相H桥电路

三相H桥电路是BLDC控制的核心,通常由6个N沟道MOSFET组成。上桥臂和下桥臂分别控制电机的正向和反向电流。为了简化电路,可以使用集成驱动IC,如IR2101,它内部包含自举升压电路,可以方便地驱动上桥臂MOSFET。

霍尔传感器连接

霍尔传感器用于检测电机转子的位置,通常有3个传感器,分别相隔120度。这些传感器的输出是数字信号,可以直接连接到STM32F103的GPIO口。为了提高抗干扰能力,可以在信号线上添加RC滤波电路。

02

软件编程

定时器和PWM初始化

STM32F103具有两个高级定时器TIM1和TIM8,可以输出4组互补PWM信号。这些定时器支持死区时间设置,可以防止上下桥臂直通。以下是一个基本的PWM初始化代码示例:

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC4Init(TIM1, &TIM_OCInitStructure);

TIM_Cmd(TIM1, ENABLE);

霍尔传感器中断处理

霍尔传感器的信号变化需要触发中断,以便及时进行换相操作。以下是一个简单的中断处理函数示例:

void TIM5_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM5, TIM_IT_Trigger) != RESET)
  {
    TIM_ClearITPendingBit(TIM5, TIM_IT_Trigger);

    // 根据霍尔传感器状态进行换相
    uint8_t hall_state = (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) << 2) |
                         (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) << 1) |
                          GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);

    switch (hall_state)
    {
      case 0b001:
        // 换相逻辑
        break;
      case 0b010:
        // 换相逻辑
        break;
      // 其他状态...
    }
  }
}

速度调节

通过改变PWM的占空比可以调节电机的转速。以下是一个简单的速度调节函数示例:

void SetSpeed(uint16_t duty_cycle)
{
  TIM_SetCompare1(TIM1, duty_cycle);
  TIM_SetCompare2(TIM1, duty_cycle);
  TIM_SetCompare3(TIM1, duty_cycle);
  TIM_SetCompare4(TIM1, duty_cycle);
}
03

实际应用

无感控制

无感控制通过检测反电动势(BEMF)来估算转子位置,适用于航模等对成本敏感的应用。实现无感控制需要设计BEMF检测电路,并在软件中实现过零点检测算法。

航模应用

在航模应用中,STM32F103可以接收PWM信号作为输入,控制电机的转速。通过调整PWM频率和占空比,可以实现精确的速度控制,满足航模飞行的需要。

调试技巧

  • 使用示波器检查PWM波形和霍尔传感器信号
  • 确保电源电压稳定
  • 注意散热,防止MOSFET过热
  • 调试时先使用较低的PWM占空比,避免电机转速过高

通过以上步骤,你可以使用STM32F103实现基本的BLDC控制。随着经验的积累,你可以尝试更复杂的控制算法,如磁场定向控制(FOC),以获得更好的性能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号