0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用六步换相法实现直流无刷电机的正反转驱动

CHANBAEK 来源:旋转的电机 作者:小师兄1995 2023-05-24 11:18 次阅读

前言

主控板STM32F302R8+驱动板X-NUCLEO-IHM07M1+直流无刷电机WR36BL61,采用六步换相法实现电机的正反转驱动。

一、驱动板X-NUCLEO-IM07M1简单介绍

X-NUCLEO-IHM07M1驱动板有一颗MOS管集成芯片L6230,该驱动芯片集成有3个桥臂6颗MOS管可驱动PMSM及BLCD电机,内部结构如下图所示。

图片

其典型应用如下图所示:

图片

X-NUCLEO-IHM07M1驱动板的驱动电路如下图所示,采用桥臂1、桥臂2以及桥臂3构成的三相逆变电路驱动无刷直流电机,EN1、EN2以及EN3为为每相桥臂的使能控制输入,IN1、IN2以及IN3为每相桥臂的开关控制输入,OUT1、OUT2以及OUT3为输出,外接无刷直流电机。

图片

二、STM32F302R8+X-NUCLEO-IHM07M1驱动直流无刷电机

2.1.功能需求

采用六步换相法驱动无刷直流电机转动,并实现直流无刷电机的换向控制。按下一次按键电机正转;再按一次按键电机停止;再按一次按键电机反转;再按一次按键电机停止,以此循环。

2.2.硬件设计

图片

控制板:STM32F302R8

驱动板:X-NUCLEO-IHM07M1

直流无刷电机:WR36BL61,额定功率10W,额定电压24V,额定电流0.5A,转速2000RMP,极对数2。

图片

2.3.软件设计

本次软件设计框架为:STM32CubeMX配置底层代码;底层与应用层的接口代码在Keil环境下开发;应用层代码在Matlab/Simulink中开发。

STM32CubeMX底层配置

为了更直观简单地实现直流无刷电机的六步换相控制,将所用引脚均设置为普通I/O口模式。

1、RCC设置为外接时钟,72MHz

2、PA8、PA9、PA10、PC10、PC11、PC12设置为推挽输出、无上下拉电阻、高速,初始化状态设为0; PA15、PB3、PB10设置为输入,无上下拉电阻; PB13、PB2设置为推挽输出,下拉电阻、高速,初始化状态为0; PC13设置为输入,无上下拉电阻。

3、IDE设置为MDK-RAM,在Keil环境中完成编译下载

图片

图片

图片

Keil应用层与底层的接口开发

#include "Interface.h"


uint8_t EN1_State;
uint8_t EN2_State;
uint8_t EN3_State;
uint8_t IN1_State;
uint8_t IN2_State;
uint8_t IN3_State;
uint8_t LED1_State;
uint8_t LED2_State;


//获取按键状态
uint8_t Get_KeyState(void)
{
  return HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin);
}


//获取三路霍尔传感器状态
uint8_t Get_HallAState(void)
{
  return HAL_GPIO_ReadPin(H1_GPIO_Port, H1_Pin);
}


uint8_t Get_HallBState(void)
{
  return HAL_GPIO_ReadPin(GPIOB, H2_Pin);
}


uint8_t Get_HallCState(void)
{
  return HAL_GPIO_ReadPin(GPIOB, H3_Pin);
}


//设置引脚状态
void Set_EN1State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOC, EN1_Pin, (GPIO_PinState) PinState);
}


void Set_EN2State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOC, EN2_Pin, (GPIO_PinState) PinState);
}


void Set_EN3State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOC, EN3_Pin, (GPIO_PinState) PinState);
}


void Set_IN1State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOA, IN1_Pin, (GPIO_PinState) PinState);
}


void Set_IN2State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOA, IN2_Pin, (GPIO_PinState) PinState);
}


void Set_IN3State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOA, IN3_Pin, (GPIO_PinState) PinState);
}


void Set_LED1State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOB, LED1_Pin, (GPIO_PinState) PinState);
}


void Set_LED2State(uint8_t PinState)
{
  HAL_GPIO_WritePin(GPIOB, LED2_Pin, (GPIO_PinState) PinState);
}


//无刷直流电机驱动
void BLDC_SixStepDriver(void)
{
  Set_EN1State(EN1_State);
  Set_EN2State(EN2_State);
  Set_EN3State(EN3_State);
  Set_IN1State(IN1_State);
  Set_IN2State(IN2_State);
  Set_IN3State(IN3_State);
}


//LED驱动
void LED_Driver(void)
{
  Set_LED1State(LED1_State);
  Set_LED2State(LED2_State);
}

应用层开发

图片

输入处理:包括霍尔信号处理模块和按键处理模块。

图片

图片

图片

电机运行模式:设计有电机停止、电机正转、电机反转三种模式,LED1用于指示程序运行“500ms亮,500ms灭”。

图片

图片

电机模式运行执行模块:

电机停止:关闭引脚驱动输出

图片

电机正转:内部逻辑用Stateflow写,根据霍尔状态控制开关管进行六步换相控制

图片

电机反转:内部逻辑用Stateflow写,根据霍尔状态控制开关管进行六步换相控制

图片

输出处理:将需要的信号进行输出

图片

模型搭建完成仿真无误后生成代码,与底层代码在Keil中集成。

图片

应用层与底层的代码集成

将Matlab/Simulink模型生成的代码文件夹复制到底层生成的工程下。

图片

在工程中将Matlab/Simulink生成的代码文件BLDC_SixStep目录中的.c/.h文件都添加进工程。

图片

注:此时编译工程会报错,缺少“solver_zc.h”头文件,该头文件在Matlab/Simulink/Include路径下面,可以直接把该文件粘贴复制到Matlab/Simulink生成的代码文件BLDC_SixStep目录中,也可以将该文件的路径进行添加。

int main(void)
{
  /* USER CODE BEGIN 1 */


  /* 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_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  BLDC_SixStep_initialize();
  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
    BLDC_SixStep_step();

    BLDC_SixStepDriver();
    LED_Driver();

    HAL_Delay(1);
  }
  /* USER CODE END 3 */
}

在主函数中调用Matlab/Simulink生成代码中的函数,BLDC_SixStep_initialize()为模型初始化函数;BLDC_SixStep_step()为模型函数, 执行该函数一次,相当于在Matlab中运行模型一次, 根据BLDC_SixStep_step()函数的运算结果进行电机驱动。在Matlab/Simulink中设置模型1ms运行一次,所以在工程下也要确保BLDC_SixStep_step()函数1ms运行一次。

2.4下载验证

电机正转:A相和B相上的电压

图片

电机反转:A相和B相上的电压

图片

总结

本章节基于STM32F302R8控制板和X-NUCLEO-IHM07M1驱动板,采用六步换相法实现了直流无刷电机的正反转驱动,并且软件编程的工具链采用STM32CubeMX+Matlab/Simulink+Keil,大部分代码采用自动生成的方式简化了编程的难度。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MOS管
    +关注

    关注

    107

    文章

    2215

    浏览量

    64367
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348738
  • 正反转
    +关注

    关注

    2

    文章

    118

    浏览量

    18151
  • Simulink
    +关注

    关注

    22

    文章

    513

    浏览量

    61564
  • 直流无刷电机

    关注

    14

    文章

    259

    浏览量

    23515
收藏 人收藏

    评论

    相关推荐

    BLDC三无刷电机驱动,DC12-24V空气净化器电机驱动直流无刷电机驱动方案

    BLDC三无刷电机驱动,DC12-24V空气净化器电机驱动直流
    发表于 12-18 13:24

    如何实现直流无刷电机中的

    无刷电机的三组线圈必须根据转子的实际位置进行相互独立的控制。这种驱动方式就充分说明的对无刷电机控制的复杂性。二、直流无刷电机是怎样
    发表于 12-20 16:21

    无刷电机驱动调试问题

    采用STM32F103芯片、六步、方波驱动(频率为16K)、PI控制调节。目前无刷电动轮椅控制器(
    发表于 04-17 10:08

    采用六步驱动无刷直流电机,最高速度只有电机额定速度的一半

    本帖最后由 博科生化 于 2020-10-23 15:07 编辑 采用六步驱动无刷
    发表于 10-22 11:44

    怎么实现电机六步换向?

    怎么实现电机六步换向?几点关于无刷有感电机的连接线问题
    发表于 06-25 12:10

    无刷电机六步换向两两导通和三三导通的区别在哪儿?

    两两导通的工作原理是什么?三三导通的工作原理是什么?无刷电机六步换向两两导通和三三导通的区别在哪儿?
    发表于 06-26 06:21

    怎样去实现STM32与直流无刷电机正反转

    实现电机转动的原理是什么?实现电机转动的相位是什么?怎样去实现STM32与直流
    发表于 06-26 07:01

    无刷直流电机六步的原理是什么?

    什么是安培定则?六步的原理是什么?
    发表于 07-20 06:42

    直流无刷电机正反转控制与普通电机有哪些不同?

    无刷直流电机的工作原理是什么?PWM调制方式有哪几种?直流无刷电机正反转控制与普通电机有哪些不同?
    发表于 07-27 07:51

    电子无刷电机要对转子永磁体位置进行精确检测

    ,控制器跟据三个霍尔传感器输出的种不同信号输出相应的控制信号驱动电子开关向马达供电。这就是所谓六步
    发表于 09-07 09:19

    电子无刷电机

    ,控制器跟据三个霍尔传感器输出的种不同信号输出相应的控制信号驱动电子开关向马达供电。这就是所谓六步
    发表于 09-07 07:12

    什么是六步

    ,控制器跟据三个霍尔传感器输出的种不同信号输出相应的控制信号驱动电子开关向马达供电。这就是所谓六步
    发表于 09-07 06:45

    无刷无感直流电机方波驱动六步分析

    六步中的启动包括哪几个步骤?六步
    发表于 09-18 07:35

    详解BLDC六步***

    BLDC***的方法是什么?BLDC六步的软件架构是怎样组成的?
    发表于 11-19 06:57

    直流无刷电机如何控制正反转

     直流电机具有响应快速、较大的起动转矩、从零转速至额定转速具备可提供额定转矩的性能。我们知道直流无刷电机在许多场合不但要求电机具有良好的起动和调节特性,而且要求
    发表于 05-08 16:10 2.2w次阅读
    <b class='flag-5'>直流</b><b class='flag-5'>无刷电机</b>如何控制<b class='flag-5'>正反转</b>