之前在项目中心发了一个开源项目——基于ROS MoveIt!的Scara机械臂设计,计划是8月20号开始,为期一个月的开发工作。现在已经有二十多个小伙伴联系我们开始一起动手进行开发啦~

很多接触这个的小伙伴还只是萌新,想通过这个项目的学习来对自己做一个技能提升,这里我们也来关照一下这些同学们,这里我们先来分析下整个的项目的设计及准备工作。

通过和大家的交流,我们最终确定选择这款机械臂进行ROS开发!

这个也是在闲鱼收的机械臂模型,是一个三轴步进电机的平面型机械臂——Sacra机械臂。

这个机械臂需要三个步进电机进行驱动,第一个步进电机在底部,负责整个机械臂的升降工作,第二个步进电机和第三个步进电机在同一个位置,分别控制两个关节进行转动。这里我们没有设计夹爪部分的结构,夹爪部分的话,可以考虑使用舵机夹取或者气泵吸盘的方式来进行设计,这个大家可以自己动手来设计一下。

整套机械臂的话采用3D打印的结构,需要三个42步进电机进行驱动,电机1连接的是一个螺旋杆,电机2和电机3则是通过皮带的方式进行驱动,有了皮带的减速,我们可以让关节具备更大的动力。

42步进电机是指这个电机的尺寸是42mm*42mm,这种步进电机属于是“两相四线制”步进电机,这种也是常用的步进电机。有很多刚接触单片机的同学在买的套件里面带的是28BYJ4的步进电机(听不懂没关系,我们接下来会讲),这是一种“四相五线制”步进电机。那么这两种电机有什么区别呢?我们该如何去选择步进电机的型号呢?我们继续来看。

我们先来聊聊28BYJ4着款“四相位、五接线”的步进电机,这个电机通常是配合ULN2003芯片作为驱动器进行工作。大家在淘宝可以找到,这也是很便宜的一款步进电机。

这种步进电机有五根线,电机内部有四个线圈,其中一根是公共线,另外四根线分别对应四个线圈。

步进电机是一种将电脉冲转化为角位移的执行机构,什么意思呢?别着急,我们先来看看这个电机是怎么工作的,为什么这个电机叫做“四相五线制”步进电机。

在这个电机里面呢,有四组线圈,我们将公共线(5号线)接到VCC,另外的四根线进行闭合控制,当线圈闭和通电,会产生一个磁力,导致转子转动。这个时候电机会动一下,我们叫做产生了一个脉冲。当我们挨个高速的闭合、断开线圈的时候,转子就会咔咔咔咔的进行转动。

28BYJ4这个电机有五根线、四个线圈,每个线圈进行触发来驱动转子达到转动的效果,这种电机被叫做“四相五线制”步进电机。

这个电机配套的驱动芯片是ULN2003,那么ULN2003是什么呢?为什么选择这个芯片呢?我们继续。

这个是ULN2003的芯片+应用电路,ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

驱动线圈的电流是要很大的,单片机引脚产生的微弱电流不足以支撑线圈的驱动,所以我们通过使用晶体管来驱动,小电流、弱信号来驱动大电流,而ULN2003就是由7个NPN符合晶体管组成的芯片。有小伙伴要问我晶体管啊、可控硅啊、三极管啊之类的,别急,一段视频帮你理解!

社区上传视频好麻烦,这里我给处理成了GIF,老铁们可以去快手啊抖音啊搜索一波,这些动画展示介绍的很多。

然后是我们这次要用到电机,42步进电机,这是一种“两相四线制”的步进电机,从这个名字,我们可以猜到,这个步进电机有两个线圈、四根接线。没错,就是这样!

42步进电机的尺寸是42mm*42mm,厚度有很多个版本,大家可以根据需要自己来找。这种电机四根线组成了两个线圈,通过切换四根线是否通电、通电后电流流向来驱动转子进行转动。
步进电机的驱动考激励线圈来搞实在是太麻烦了,四相五线制的电机这样玩玩就好,但是42电机的话,这样子玩效率实在是低。所以我们对于两相四线制的电机有专门的驱动器,常用的A4988、DRV8825、TB6600等等,它们根据性能,可以来很方便的操控步进电机。怎么个方便法?我们这里以DRV8825步进电机驱动器为案例,做出讲解,而DRV8825步进电机驱动器也是我们此次项目要用到的步进电机驱动器。至于为啥选用DRV8825,大家可以搜索下A4988、DRV8825、TB6600三个参数,做下对比即可,它们的驱动原理是一样的。
这个是我从淘宝找的,淘宝也有这个模块的专用驱动板,我买过一块,还挺好使,价格也还可以。
扩展板先稍微往边靠靠,我们来讲下DRV8825咋玩的。
我们先来看DRV8825的右侧,从上到下来看分别是:
VMOT、GND这两个引脚用来接外部供电,12V到30V耐压,我基本都是12V来玩的,电流的话,根据功耗来算,我们在下面的电路设计会来计算,电机驱动供电的位置基本会加一个35V 100uF的电容来对电源进行滤波保护。
然后是B2、B1、A1、A2,这四个引脚是接步进电机的,其中B1和B2、A1和A2分别是一对线圈,这里大家可以根据颜色来区分,当然这个不绝对,如果你买到次品电机,很有可能线序不对,这里有个小技巧。
高中时代的理科生们啊,电生磁、磁生电还记得吗?没错,就是这个原理!当我们分不清线序的时候,我们讲任意两条线进行短接一下,然后用手来转动电机轴,如果这两跟线是同一个线圈的话,转动的时候你会感觉到阻力,甚至听到咔咔咔咔的声音。我们将线圈闭合了以后,转动转子做出切割磁感线运动,这个时候转子产生电流,产生阻力。
然后再往下是FAULT、GND,这个位置是逻辑电压。FAULT接单片机的5V为IO口提供一个参考电压。(我是这样理解的,可能不是很准确。关于单片机IO基准电压的概念请自行了解。)
然后是左侧部分,从上往下看分别是:
ENABLE,能够、可以的意思。玩电气的看到这个词汇不用想,就是使能的意思。我们通过切换这个引脚的高低电平来切换是否启动电机。这里该引脚上面有个上划线,说明这个引脚处于上拉状态,即处于高电平。高电平的状态下处于脱机模式,我们可以用手来转动电机轴;当该引脚出意低电平状态时,处于工作状态,同时用手无法转动电机轴。大家可以试一下。
然后往下是M0、M1、M2,这里是控制步进电机细分数量的。DRV8825的细分表模式如下。
我们先记住这张图,什么是细分呢?
我们先来补充一些步进电机的知识。
相数:步进电机的相数就是指步进电机内部线圈的组数。分别有二相,三相,四相,五相。相数越高,步距角越小,精度也就越高。
步距角:表示控制系统每发一个步进脉冲信号,电机所转动的角度。该参数反映了步进电机的实际精度。步进电机的基本步距角为两相1.8度,三相1.2度。步距角为1.8度的步进电机,转一圈所用的脉冲数为 n = 360/1.8 = 200 个脉冲。
保持转矩: 是指步进电机通电但没有转动时,定子锁住转子的力矩。
制动转矩:是指步进电机没有通电的情况下,定子锁住转子的力矩。
步进电机旋转一圈需要200个脉冲(怎么操作往下看),也就是没产生一个脉冲,电机轴会转动1.8°,这是处于Full Step(全步)的状态下,当通过配置M0、M1、M2在Half Step(半步)模式下的时候,我们需要400个脉冲才能使步进电机旋转一圈,也就是一个脉冲控制电机轴旋转0.9°;而其他的以此类推。
DRV8825驱动器最高可达到1/32 Step,也就是200*32=6400个脉冲转一圈,每个脉冲使电机轴旋转360/6400=0.5625°,这个是很精细的转动。我们在此次机械臂的设计当中,会有动态分频融合PID控制的算法设计,这里大家一定要理解。
紧接着是RESET和SLEEP,这两个引脚基本不用管,把这两个引脚接一块就可以了,它们处于上拉状态。
最后是STEP引脚和DIR引脚,DIR(direction,方向)引脚控制步进电机的转向,通过高低电平控制正反转(正反不绝对,到时候看情况);STEP(步数)引脚产生脉冲信号来驱动电机。
一个脉冲信号就是一高一低的电平变化。我们通过DIR来控制方向之后,我们在STEP引脚进行一次高电平、一次低电平,这样就产生了一个脉冲,驱动芯片会将这个脉冲信号来控制线圈激励一次,实现步进电机转动一步
我们此次设计的Scara机械臂的驱动板部分将使用三个DRV8825来控制三个步进电机进行驱动设计。我们在电路设计的部分需要有一个主控、一个电源管理、三个DRV8825驱动电路组成。这里我先设计了一下,分两个版本。
首先是Arduino Nano作为驱动的版本,如下所示。
Arduino Nano版本的驱动器没有对细分引脚进行驱动,也就意味着我们只能使用固定的分频模式。这块板子的设计方面,引脚定义符合GRBL固件的引脚,也就是说这个板子大家可以扩展一下做成一个写字机器人、激光切割机器人、CNC机器人等内容。关于GRBL的内容,大家可以在github搜索即可,下面是我做的一个成品。
对于我们此次的项目来说,使用12V 2A的电源足够,板子预留了串口,可以接一些无线模块实现无线控制,也可以使用一个12V的电池来工作,彻底无线。
另外的一个版本是树莓派扩展板版本。
这个版本用了16个引脚,将树莓派的所有IO口(具备通讯功能的IO除外)用尽,预留的GPIO40用于接一个气泵或者舵机。这里的细分引脚由IO口进行控制,可以在工作过程当中进行动态细分切换,关于GRBL的支持,后续再说~
项目的ROS开发方面,我们需要将这个机械臂做出一个URDF文件,通过订阅关节数据的相关话题来实现对实物机械臂的控制。关于ROS和Arduino驱动部分的代码,项目组的小伙伴们会在接下来一个月内完成,大家敬请期待吧~
当然在开发过程当中的趣事也会向大家做出分享,相关的资料及教程会在后续做出整理汇总。