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 总结

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

>>返回个人博客总目录

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值