mBlock & Arduino(16)控制步进电机

小小云提示:教程作者caterpillar是来自台湾的programmer(kinda),所以在一些专有名词的使用上会和我们这边使用的不太一样啦,不过作者也有标注出英文名称,大家自行转换哟(⁎⁍̴̛ᴗ⁍̴̛⁎)


步进电机这东西的学问真不少,就结论而言,控制步进电机最好的方式,就是找到与手边步进电机可以配合的程式库来使用。Arduino IDE 不是有 Stepper 程式库可以使用吗?嗯!它是可以用一些步进电机上,不过,不见得能完全发挥步进电机应有的控制能力,控制某些电机则会有些问题,正巧,我手上这颗 28BYJ-48 5V DC 就是!… XD

认识步进电机

在 Arduino 官方网站的Arduino – Stepper文件中,谈到了步进电机的两个基本分类:单极步进电机(Unipolar Stepper)与双极步进电机(Bipolar Stepper)。那么就从这两个分类开始认识!

单极步进电机是提供单一方向的电流来驱动电机,例如:

在上图中,可以看到线圈各有一个共同接点,通常接电源,只要改变其他接点的电压讯号,就可以产生电流,而电流都是固定的方向,而由于有四个线圈,这样的电机被称为四相(Phase)电机。

双极步进电机的电流则是双向的,例如:

这类电机在驱动时,需要改变电流的方向来达到不同激磁的效果,而由于有两个线圈,这样的电机被称为二相电机。

电机的相数除了二向、四相之外,还有单相、三相、五相等,这是为了达到不同程度的控制,电机的控制是运用电流通过线圈会产生磁场,并与另一永久磁铁产生作用,来达到转动的效果,以四相步进电机为例:

如果做为定子的线圈激磁后,面对转子一面是 S 极,就会吸引转子的 N 极,只要依顺序对各相线圈激磁,就会产生转动效果,像上面这种一次激磁一个线圈的方式,称为一相激磁,因为每次只激磁一个线圈,电力消耗小,不过缺点是振动大、转距小。

常见的激磁方式是二相激磁,顾名思义,一次激磁两相,由于有两相用以吸引住转子,因此振动小、转距大:

也有一相、二相轮流激磁,称为一/二相激磁,顺序其实就是上面两张图的结合:

可以看出这种激磁方式,每次转动的角度为一相或二相激磁的一半,可以得到更精确的控制。

步进电机控制电路

步进电机需要比较高的电压或电流驱动,在 Arduino 官方网站的Arduino – Stepper文件中,有Unipolar SteppersBipolar Steppers两个页面,介绍了如何连接出能驱动步进电机的电路,分别有可以接成两个控制脚位与四个控制脚位的方式。

其中会用到的 IC 是达灵顿阵列(Darlington Array),如先前〈mBlock & Arduino(15)认识晶体管与继电器〉谈到的,若想运用晶体管提供更大的电流来驱动电机,可以使用两个或多个晶体管的组合,达灵顿阵列中有多组达灵顿电路,以ULN2003APG来说,里头有七组达灵顿电路。

如果不想那么麻烦地自己接电路,那么可以依使用的步进电机来搭配现成的步进电机驱动模组:

这个步进电机驱动模组,左上四个脚位可以接到 Arduino 的数位输出脚位,下方有 +、- 两个脚位,分别接 Vcc 与 GND,右上白色插槽用来连接我手边这颗五线四相的 28BYJ-48 5V DC,上图步进电机驱动模组中的 ULN2003APG,可搭配 28BYJ-48 5V DC 这个步进电机:

28BYJ-48 5V DC 这个步进电机,其中红线是接 5V 电源,各线的连接是:

如果搭配 ULN2003,要对 28BYJ-48 5V DC 步进电机做激磁,那么 ULN2003 的输入脚位 4、3、2、1,提供电位以进行激磁的顺序为 …

一相激磁:1000-0100-0010-0001

二相激磁:1100-0110-0011-1001

一/二相激磁:1000-1100-0100-0110-0010-0011-0001-1001

以 mBlock 控制步进电机

如果想要体验一下步进电机转动,那么可以简单地如下实作,脚位 D8 到 D11 分别对应至澄、黄、粉、蓝,例如一相激磁:

执行程式之后,你可以见到步进电机缓慢的转动,将顺序改为 S4 到 S1,就会看到电机缓慢的逆转,这边没有设任何的工作时间延迟,这是因为 mBlock 执行速度的关系,直接使用 Arduino 积木方块,只能是这个速度了。

类似地,以下是二相激磁:

以下是一/二相激磁:

关于 Stepper 程式库

如果想更进一步试试步进电机控制,可以使用 Arduino IDE 中的 Stepper 范例,它们使用到 Arduino 的 Stepper 程式库,不过,如果你手边是 28BYJ-48 5V DC 步进电机,就要注意一下了,以 stepper_oneRevolution 范例为例:

直接执行的话,你的电机只会有一个方向的转动,无法逆转,这是因为 28BYJ-48 5V DC 的接线顺序,与 Stepper 程式库预期的不同,如果你的 28BYJ-48 5V DC 的接线顺序由澄、黄、粉、蓝分别是接至 D8 到 D11,那么有两个方式可以解决,一个方式是在 Arduino 上将 D9 与 D10 接线对调,另一个方式是在建立Stepper时,9与10对调:

再来是stepsPerRevolution必须设定为你的电机实际上一圈会有多少步,如果是 28BYJ-48 5V DC 的话,查询到的规格上写着,步进角为5.625 / 64,因此这电机转一圈需要的步数是360 / (5.625 / 64),也就是4096步,不过,这是一/二相激磁才会有的步数,如果你查看 Stepper 程式库原始码,会发现,它是采二相激磁的实作方式,因此,使用这个 Stepper 程式库,你实际上要设的stepsPerRevolution必须是2048步。

不过,如果你改了脚位也将stepsPerRevolution设为2048,步进电机还是不会动,这是因为 Stepper 程式库中setSpeed函式的关系:

这是以毫秒为单位来设置step_delay,如果你设为2048步,那number_of_steps就是2048,那么step_delay就会是29.296875 / whatSpeed,如果whatSpeed设为60,那结果就会是0.48828125,然而step_delay是unsigned long,也就是实际上结果只会储存0,那么step函式中millis() - this->last_step_time >= this->step_delay该行,就会一直是成立的,也就是完全没给工作时间,这么一来电机就不会动了。

因此,如果你直接使用 Stepper 程式库,设为 2048 步之后,那么速度就不能设太高,例如以下就可以正常正反转了:

如果你会使用 Arduino 官方语言的话,改写 Stepper 应该不是难事,可以试着实作一/二相激磁,并令其能支援 28BYJ-48 5V DC 的4096步与高转速,懒的话,网路上是也有人已经实作或改写好的版本,不过,想要精确控制的话,重点还是在于,认识你的步进电机与程式库!


感谢CodeData用户:caterpillar的贡献 著作权归作者所有

整理:宁波家电物联网云平台,中科极动云

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容