今天复变函数考试,发下试卷后,我看了看第一题,呃...不会,看第二题,呃,还不会...我就不信了,看第三题,直接绝望了...为什么全是积分变换的题啊!!朋友们一定要好好学习啊,不要步小编的后尘啊...555...

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

单片机控制步进电机转一圈(C51单片机编程技巧)(1)

单片机控制步进电机转一圈(C51单片机编程技巧)(2)

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

先说一下定义的引脚,上一篇里面说了,四线双极性步进电机有两个线圈(或者叫做绕组)要进行通电,所以我们就要用两个引脚来控制这两个线圈,我这里定义名字是:PHA 和 PHB,但是由于 L6219 的用法,这两个引脚仅仅只能算作一个标志,也就是仅仅只能说明给那个线圈通什么方向的电流,而不能决定通的电流的大小,比如:PHA = 0,PHB = 1;说明 A 线圈通负方向电流,B线圈通的是正方向电流,但是电流究竟多大不是由这两个引脚决定的,而是由另外两个引脚决定的。

这两个引脚我定义他们的名字是:A 线圈对应的是:A1,A2;B 线圈对应的就是 B1、B2;上图中的注释中也已经写明白了,我们姑且把通最大电流当作通电,把通最小电流当做不通电,那么就可以得出:

当 A1 = A2 = 0时:线圈 A 通电。

当 A1 = A2 = 1时:线圈 A 不通电。B 线圈同理。

但是如果我仅仅说到这里,大家就去写代码。假设你是大神,真的写了出来,那么肯定就会有不少人遇到一个大问题:“ 我明明就是按照你说的那个通电方式去写的啊,为什么我的步进电机总是在颤,死活就是不转,延时多长也没用,小编你是不是在骗我啊?”

呃。。。其实小编我是个好孩纸,是不骗人的,所以呢下面我就说明一下怎么解决这个问题,在这之前我先把我写的代码放出来:

一:单拍工作方式:

单片机控制步进电机转一圈(C51单片机编程技巧)(3)

二:双拍工作方式:

单片机控制步进电机转一圈(C51单片机编程技巧)(4)

三:单双拍工作方式:

单片机控制步进电机转一圈(C51单片机编程技巧)(5)

大家可以发现上面三块代码的第一行注释就是工作方式的线圈通电方式,但是第二行是啥?什么 “相同”、“不同”的?

这里就是解决步进电机只在颤动却不转的关键了,虽说步进电机的某个线圈在不通电的时候,电流的方向随便写(都不通电了,那不就随便写嘛),但是事实却不是这样,虽说当我们写 A1 = A2 = 1 时线圈应该是不通电的,但是事实上并不是,它还是有一点点电流的,所以即使我们写 A1 = A2 = 1,线圈的电流方向也不能随便写,而是要遵循:两个线圈的电流方向要 "不同" 、"相同" 交替。(单双拍工作方式时每两拍作为一组的规则去写。

如上面三个图中,PHA 和 PHB 的值都是在 “相同”、 “不同” 之间交替进行,单双拍的那个是每两拍作为一组,在 “不同”、“相同”之间进行。

这样就解决了步进电机只颤动不旋转的问题了,但是并不是所有人的问题都是出在这里,看见每一句代码后面都有一个 delay() 函数了吗?如果 delay() 函数的延时时间过短也会引起步进电机只颤动而不旋转。所以大家还是要具体问题具体分析。

再说一件事,我的第四篇文章:

单片机控制步进电机转一圈(C51单片机编程技巧)(6)

就仅仅因为加了个百度云链接然后就怎么审核也审不过,最终导致几乎整篇文章白写了,我实在是不敢再往文章里加链接了,我直接告诉大家吧,我在单片机贴吧里面都把源码分享出来了,大家直接搜索 “LCD1602初始化详解” 应该就可以搜到了,我的 ID 是:天蝎座王瑞杰。想要源码的就可以去那里直接下载就行,如果贴吧的链接挂了,可以在贴吧里面回复我,或者在下面的评论里回复我,我会及时把链接补上。

这次就先说到这里了,我们下次再见吧,拜拜( ^_^ )/~~

,