单片机秘籍:如何解决步进电机只颤不转

-回复 -浏览
楼主 2020-06-29 16:55:55
举报 只看此人 收藏本贴 楼主

这次来分享有关步进电机的编程经验。我这里以四线双极性步进电机为例:

 

 


上面就是常见的四线双极性步进电机的实物图,上一篇文章里面我已经说明了步进电机的相关基础概念,所以这里我就不说了。下面我们开始进行步进电机的编程:


首先要说明一下:我的步进电机的驱动芯片时 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() 函数的延时时间过短也会引起步进电机只颤动而不旋转。所以大家还是要具体问题具体分析。

我要推荐
转发到

友情链接