上图是常见的四线双极步进电机的实物图。上一篇文章已经解释了步进电机的基本概念。现在让我们开始对步进电机进行编程:
首先说明一下:我的步进电机的驱动芯片是L6219芯片,有细分功能,但是由于我不想在这里讲细分(其实我也不知道怎么做,呵呵,不知道)别打我~(_)~),所以我就不深入解释L6219了。如果我详细解释的话,大家都会感到头晕。知识的学习应该循序渐进。所以我只简单介绍一下L6219。同时,为了大家方便理解,我先放出代码,然后根据代码进行解释:
我们先来谈谈定义的引脚。四线双极步进电机有两个线圈(或绕组)需要通电,因此我们必须使用两个引脚来控制这两个线圈。我这里定义的名称是:PHA和PHB,但是由于使用了L6219,这两个引脚只能算是一个标志,也就是说,它们只能指示流过该线圈的电流方向,而不能确定该线圈的电流方向。流过的电流大小,如:PHA=0,PHB=1;表示线圈A带负向电流,线圈B带正向电流,但电流大小不是由这两个引脚决定,而是由另外两个引脚决定。
我将这两个引脚的名称定义为:一个线圈对应:A1、A2; B线圈对应B1、B2;上图中的注释也已经说清楚了,我们将最大电流视为通电,如果将最小电流视为不通电,则可以得到:
当A1=A2=0时:线圈A得电。
当A1=A2=1时:线圈A不通电。线圈B 也同样如此。
但只要我这么说,大家就都去写代码了。假设你是高手,真正写出来了,那么很多人肯定会遇到一个大问题:“我明明是按照你说的供电方式写的,为什么我的步进电机一直亮着呢?”瑟瑟发抖,生死不转,耽搁多久都没关系,你是在骗我吗?”
出色地。其实我是个好孩子,不会说谎,所以下面我就来解释一下如何解决这个问题。在此之前,我先放出我写的代码:
可以发现上面三块代码中第一行注释是给线圈通电的工作方法,但是第二行是什么呢?什么是“相同”和“不同”?
这里是解决步进电机只振动不旋转问题的关键。虽然步进电机的某个线圈不通电时,电流的方向可以随便写(都不通电的话就不能随便写吗?),但事实并非如此。虽然当我们写A1=A2=1时线圈应该断电,但实际上并非如此。它还是有一点电流的,所以即使我们写A1=A2=1,线圈的电流方向也不能随便写,而是必须遵循:两个线圈的电流方向必须‘不同’和‘相同’交替。 (使用单镜头和双镜头时,每两个镜头被视为一组)。
如上面三张图所示,PHA和PHB的值在“相同”和“不同”之间交替。对于单镜头和双镜头,每两个镜头为一组,介于“不同”和“相同”行为之间。
这样就解决了步进电机只振动不旋转的问题,但并不是所有人的问题都在这里。你看到每行代码后面都有一个delay()函数了吗?如果delay()函数的延迟时间太短,会导致步进电机振动但不旋转。所以,我们还是需要具体问题具体分析。