STM32入门级别代码:对步进电机的控制(原理+亲测+对代码及原理讲解)

Posted CSINhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32入门级别代码:对步进电机的控制(原理+亲测+对代码及原理讲解)相关的知识,希望对你有一定的参考价值。

动,首先呢,我再次声明一下呢我本身专业没有开有关STM32的课程,是我花费近3个月 Hello,小伙伴们,大家好。你现在是不是很急切的想找一个拿来直接用的代码来完成手底下的设计,哈哈哈,先别慌慌吗,别急,看完我的这篇文章准能让你的步进电机驱动起来,我会用最通俗的语言来进行讲解。

在做这一期博客文章之前呢,咱们先聊点题外话,就先说一下我为什么要做这一期关于STM32控制步进电机的这样一个文章呢,其实啊,在两三个月以前呢我是个对stm32一窍不通的小白白~

 真正驱使我作这一期博客的初衷呢其实是因为我经历了那段从3个月前啥也不会到如今完成自己的毕设的这段艰难历程,这段时间遇到了各种各样的问题,没有办法,当时只能靠自己,于是我就上网找资料,上各种相关博客去查阅资料去学习,最终也克服了重重困难,完成了自己的设计。其实说这么多题外话,无非就是想告诉大家,从0到1这个过程很艰难,其实当你看到我的这篇文章时,你已经是在自我解决问题的道路上不断提升着自己,能看我这篇文章的无非就是初级阶段的朋友,相较于那些不上网去查阅资料解决问题的人来说,你们已经是进步的了,不说了,切入正题,总而言之,相信自己朋友,你可以的,加油干就完了!

咱们先来看一下今天的角色都有啥,咦~角色呢???哦,在下边儿,有请步进电机28BYJ4闪亮登场

 

先简单介绍一下它:

 

 

 

该电机类型具有A、B、C、D四对绕组,每正对着的一组绕组是串连的,当通电时,就会吸引中间具有永久磁性并带有6个齿的转子。本设计用到了步进电机的顺时传和逆时转,原理是相同的。以逆转为例,第一步,B相绕组通电,此时B相绕组对与其正对着的0和3号转子产生吸引,第二步,连通C相绕组,而这时B相和C相同时对其附近的转子都具有吸引,此刻两个转子的中心线正好对齐到B和C两个定子的中心线,也就是转过了5.625度。当以一定频率不断给其控制脉冲,它便可以连续转动。步进角度通过下方公式得到:

 

                                                                         

 

要想让它转动起来,单单只是让它接在I/O引脚上那是带不起来的,不要问为什么,问就是他就得用一个东西来驱动,不然就转不起来,你不用试了,因为我已经试过了,他就是转不起来,不用纠结了,OK?这个在淘宝上就有卖的很便宜的,也就6块多吧,我买的这个是4相5线5V的。

我是用ULN2003这个模块来驱动的上图这个步进电机,它长下边这样:

有点模糊,不用管,你就在某宝上搜ULN2003就行,这个是5线4相的模块,板载有XH-5P插座,这个应该就是那个白色的部分,将电机的5根线插进去就可以,注意不要接错了顺序。红线接到VCC那头,然后接6根杜邦线到这个ULN2003上边,接的时候看一下ULN2003底面有VCC和GND,不要接反了,插好就是我这样的:

然后把六根线连到板子上:

接下来就是代码了,重头戏:先是对连接的PG3、PG4、PG5、PG6四个引脚进行初始化,相关代码如下所示:

因为我们是用的定时器来实现对步进电机的转动,大概意思就是说用定时器中断来实现步进电机每一拍的转动,肯定设置的中断时间得是大于转一拍最少用的时间,但也不能中断时间太慢。

根据步进电机的启动频率可得到节拍刷新时间需大于1.8ms。相关ARR和PSC可通过分频系数和自动重装载关系得到:

中断溢出时间=(自动重装载寄存器周期的值+1)(预分频值+1)⁄输入时钟频率

相关定时器2初始化代码如下:

在头文件里来上一波重定义:

下边的是定时器2的中断处理函数:

上边这个中断处理函数:当每过一个设定的中断时间,就会进到中断执行函数里边,先判断是否真的是中断了,如果是,往下执行,这里边的record2是一个静态变量,也会是说中断函数退出去以后,再进来这个record2的值还是保持上一次record2的值。之所以有这个record2是因为步进电机执行完8拍之后,也就是还想让它转动,就要一直循环着。这里边的case是来决定执行哪儿一拍,执行顺序按下边这个驱动表来的:

导线颜色

1

2

3

4

5

6

7

8

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

GND

GND

 

 

 

 

 

GND

 

GND

GND

GND

 

 

 

 

 

 

 

GND

GND

GND

 

 

 

 

 

 

 

GND

GND

GND

然后主函数:

这样步进电机就转起来了,亲测的

刚开始玩CSDN,找了半天也没找到怎么上传压缩包,晕~,其实上边这些就基本上全了代码,如果懒得敲了,评论区留一下邮箱或者其他的都行,或者加我QQ也可以1056787470,我可以发给你们,基本我每天都会看看我的博客,当天中午或者晚上我就会发给你们。

以上是关于STM32入门级别代码:对步进电机的控制(原理+亲测+对代码及原理讲解)的主要内容,如果未能解决你的问题,请参考以下文章

STM32入门级别代码:对步进电机的控制(原理+亲测+对代码及原理讲解)

STM32入门级别代码:对步进电机的控制(原理+亲测+对代码及原理讲解)

如何用STM32做四轴飞控?

基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

stm32单片机能写复杂控制算法么

stm32控制步进电机回零