BLDC控制实验:方波、霍尔、开环、调速、正反转

本文记录博主学习BLDC控制软件的过程。

1 概述

本文是博主学习BLDC控制的第三次实验。在上一篇博客《BLDC控制实验:方波、霍尔、开环、调速、正转》的基础上,实现按键控制电机正反转的功能,更改的地方主要在于应用层模型中:

  • 在电机状态机中加入反转等待的状态;
  • 在六步换相模块中根据正反转判断导通的开关;

在之前博客中已经实现的功能,本文不再赘述。

2 底层代码生成

本文实现的正反转功能需要通过Key3按键来识别正反转请求,因此只要在CubeMX中增加Key3按键的配置并重新生成代码即可。

从原理图可以看到,Key3按键对应芯片的PC14引脚。
在这里插入图片描述
与之前两个按键相似,在CubeMX中将PC14配置成Input模式的GPIO,并上拉。
在这里插入图片描述

3 接口及配置代码

按键输入接口函数也和前两个按键接口函数类似,调用该函数可以返回按键状态(1或0)。

uint8_t Get_Key3State(void)
{
    
    
	return((uint8_t)(!HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14)));
}

4 应用层模型及代码生成

4.1 换向请求模块

模型从接口函数读入Key3状态后,判断出换相请求,也是通过延时两个周期判断产生了上升沿。如下图,子系统的输入是Key3State,输出是DirectionReq。
在这里插入图片描述
后面的模块会根据DirectionReq的数值,来决定电机正转或反转。
在这里插入图片描述
当DirectionReq = 0时,没有请求换向,则Switch模块输出上一个周期的方向;当DirectionReq = 1时,检测到请求换向,则Switch模块输出上一个周期相反的方向;

4.2 换向等待状态机

换向的过程可以在电机停止的时候,也可以在电机转动的时候。当电机停止的时候按下Key3,下一次按下Key1的时候就会从0加速;但是电机转动的时候,就需要先停下来再反转方向。这里博主在状态机中加入了一个换向State,来让电机先停一会再反方向转起来。
在这里插入图片描述
如上图中,当输入的DirectionReq == 1时,会从Run状态跳转到ChangeDirection状态,并在进入的时候触发StopMotorEvent,这个事件会在后面的触发子系统中关闭三个上桥的MOS管。在状态机内,通过WaitCount计数10个周期后,再跳转到Start状态重新启动电机,然后结合4.1的换向请求模块,电机就会反转。

4.3 六步换相模块

前两篇博客中只考虑电机正转的情况,所以六步换相的查表过程只考虑了正转查表。本文需要通过4.1中的Direction信号来判断查正转的表还是反转的表。
在这里插入图片描述
如上图,利用Switch模块判断正转或反转,将会输出不同的查表结果。

4.4 代码生成及调用

将上面的模型生成代码后,代码文件数量都不变,直接拷贝到KEIL工程的路径下,并且也不用再修改原来的函数就可以编译了。

5 总结

相比于前两个实验,实现正反转还是比较容易的。经过了三个实验,博主也发现了自己在软件架构设计上不那么专业,因为每次修改都需要花费一番功夫,并且发现原来的一些不合理之处。希望以后能有所进步和提高吧。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/119577295