这里以四线双极性步进电机为例:
上面就是常见的四线双极性步进电机的实物图,上一篇文章里面已经说明了步进电机的相关基础概念,下面开始进行步进电机的编程:
首先要说明一下:我的步进电机的驱动芯片时L6219芯片,它是具有细分功能的,但是由于这里我不想说细分(其实是我不会啦,嘿嘿,不要打我~(>_<)~),所以我就不深入说明L6219了,我详细说明的话大家听着也头晕,知识的学习是要循序渐进的嘛。所以呢我就只大概地说明一下L6219,同时为了大家好理解,我先把代码放出来,然后对照着代码进行讲解:
先说一下定义的引脚,四线双极性步进电机有两个线圈(或者叫做绕组)要进行通电,所以我们就要用两个引脚来控制这两个线圈,我这里定义名字是:PHA和PHB,但是由于L6219的用法,这两个引脚仅仅只能算作一个标志,也就是仅仅只能说明给那个线圈通什么方向的电流,而不能决定通的电流的大小,比如:PHA=0,PHB=1;说明A线圈通负方向电流,B线圈通的是正方向电流,但是电流究竟多大不是由这两个引脚决定的,而是由另外两个引脚决定的。
这两个引脚我定义他们的名字是:A线圈对应的是:A1,A2;B线圈对应的就是B1、B2;上图中的注释中也已经写明白了,我们姑且把通最大电流当作通电,把通最小电流当做不通电,那么就可以得出:
当A1=A2=0时:线圈A通电。
当A1=A2=1时:线圈A不通电。B线圈同理。
但是如果我仅仅说到这里,大家就去写代码。假设你是大神,真的写了出来,那么肯定就会有不少人遇到一个大问题:“我明明就是按照你说的那个通电方式去写的啊,为什么我的步进电机总是在颤,死活就是不转,延时多长也没用,你是不是在骗我啊?”
呃。。。其实我是个好孩纸,不骗人的,所以下面我就说明一下怎么解决这个问题,在这之前我先把我写的代码放出来:
一:单拍工作方式:
二:单双拍工作方式:
大家可以发现上面三块代码的第一行注释就是工作方式的线圈通电方式,但是第二行是啥?什么“相同”、“不同”的?
这里就是解决步进电机只在颤动却不转的关键了,虽说步进电机的某个线圈在不通电的时候,电流的方向随便写(都不通电了,那不就可以随便写吗?),但是事实却不是这样,虽说当我们写A1=A2=1时线圈应该是不通电的,但是事实上并不是,它还是有一点点电流的,所以即使我们写A1=A2=1,线圈的电流方向也不能随便写,而是要遵循:两个线圈的电流方向要"不同"、"相同"交替。(单双拍工作方式时每两拍作为一组)的规则去写。
如上面三个图中,PHA和PHB的值都是在“相同”、“不同”之间交替进行,单双拍的那个是每两拍作为一组,在“不同”、“相同”之间进行。
这样就解决了步进电机只颤动不旋转的问题了,但是并不是所有人的问题都是出在这里,看见每一句代码后面都有一个delay()函数了吗?如果delay()函数的延时时间过短也会引起步进电机只颤动而不旋转。所以大家还是要具体问题具体分析。