基于Arduino的四自由度机械臂控制
2022-12-21连百万韩静卜周乐涛
连百万,韩静卜,周乐涛
(西京学院,陕西 西安 710123)
0 引言
工业机器人技术迅速发展,越来越多地用于机械、电子、汽车等行业。在工业加工中使用机械臂不仅能提高生产率,而且还能降低工人的劳动密度[1]。
1 系统总体设计
本文提出一种四自由度机械臂的设计,以Arduino为核心,通过按键模块检测用户的控制信号,当Arduino对控制信号进行识别后,驱动舵机控制模块来操作相应的舵机转动,从而带动整个机械臂的运动[2]。硬件部分主要有Arduino UN3、PWM舵机(MG996R,MG90S)、舵机驱动模块PCA9685、5V3A开关电源、轻触按键。使用本文设计的基于Arduino的机械臂可以对机械臂进行多关节的控制,并且能够利用按键控制其抓取一定体积的物体。总体设计框架如图1所示。
图1 总体设计框架
1.1 系统功能
本文基于Arduino的机械臂的设计,实现了机械臂的控制功能,完整的功能包括以下3点:
(1)按键控制功能。
基于Arduino的机械臂需要通过输入器件(按键模块)来获取用户的操作要求,再根据按键信号的种类驱动外围电路进行控制。
(2)机械臂四自由度控制功能。
系统的机械臂采用4个舵机进行转轴控制,可以实现机械臂的四自由度控制。
(3)抓取物体功能。
机械臂组件中顶部的舵机用于对金属爪子进行控制,通过控制金属爪子,对应舵机转动便可控制其抓取一定体积的物体。
1.2 主控模块设计
本文设计的基于Arduino的四自由度机械臂无须进行复杂的算法运算,只需要检测用户的按键输入信号以及输出控制信号到舵机驱动电路。选用的Arduino主控模块使用的单片机型号为ATmega328,采用最小系统实现基本的控制功能,包括主控芯片、时钟电路、复位电路。其中复位电路如图2所示。
图2 复位电路
1.3 舵机驱动与选择
本文选用的是PWM舵机,控制舵机转动时需要向舵机输入PWM信号。常见的PWM舵机控制方式有两种:
(1)处理器使用IO直接输出PWM信号控制。
该方式需要处理器选择具有信号输出功能的IO连接PWM舵机的控制引脚,通过软件编程输出特定的PWM信号。
(2)使用舵机驱动模块控制。
舵机驱动模块内部具有驱动器实现对舵机的精准控制,当控制PWM舵机时,PWM信号由舵机驱动模块产生。当处理器通过舵机驱动模块,间接对PWM舵机进行控制时,处理器无须与每一路的PWM舵机进行连接,舵机直接与舵机驱动模块连接,处理器只需与舵机驱动模块的数字通信接口连接,然后根据特定的控制协议向舵机驱动模块发送控制指令,便可实现舵机的简单控制。处理器通过舵机驱动模块控制舵机转动时,一个角度只需发送一次控制指令便可,无须持续发送占用系统资源。同时舵机驱动模块由于主要工作是负责PWM舵机的控制,因此常常支持多路PWM舵机的控制。
本文选择使用的是:舵机驱动模块对PWM舵机进行控制,模块使用的舵机驱动芯片为PCA9685。
1.4 PCA9685舵机驱动电路
PCA9685使用的通信协议是I2C,所以Arduino只需要使用两个IO口与PCA9685芯片进行连接。PCA9685是一个最大输出十六路PWM信号的驱动芯片[3],并且每一路的PWM信号分辨率都能达到12位。PCA9685舵机驱动电路的电源电路是为模块提供稳定电源的首要电路,主要包括两部分电路,MP1584电路以及RT9193-33电路。其中MP1584电路如图3所示。
图3 MP1584电路
1.5 按键模块
通过轻触按键来获取用户的控制需求,由于需要控制4个舵机,每个舵机需要对机械臂进行顺时针和逆时针的转动控制,因此四自由度共需要8个轻触按键来获取用户的控制信号。当按下轻触按键时,只需要将其中一个按键触点连接到处理器的IO口,同一自由度的另一个按键触点连接到电源或者GND,通过软件判断处理器的IO电平高低,便可识别当前轻触按键处于按下或是弹起的状态。按键电路如图4所示。
图4 按键电路
1.6 软件设计
作品包含了系统初始化软件设计、主循环软件设计、Arduino按键IO软件设计、舵机控制软件设计等,软件设计流程如图5所示。
图5 软件设计流程
本设计中系统软件的初始化程序为轻触按键初始化、舵机驱动模块初始化和TTL串行口初始化。由于舵机驱动模块(PCA9685)与Arduino使用I2C的协议来进行通信,因此舵机驱动模块的初始化是将PCA9685芯片与I2C接口连接的,Arduino的接口设置为I2C模式,然后通过I2C通信协议来设定模块的工作频率,最后为了实现每次系统上电,机械臂可以恢复到初始化状态,将在舵机驱动模块初始化中,为每一路舵机设置一个默认的初始摆动角度。为了方便整个系统的运行调试,本文为Arduino主控模块编写了串口调试信息输出功能,因此在初始化软件中需要设置调试的TTL串行接口。串行通信需要通信方均设置同样的数据传输速率后,才能进行通信。在TTL串行口通信的数据传输速率称为波特率。TTL串口初始化主要是将Arduino主控模块的TTL串行口的通信波特率设置为与PC进行通信时相同波特率,而常用的通信波特率为9 600 bps,则Arduino主控模块系统软件的TTL串行口初始化,主要将串行口通信波特率设置为9 600 bps。
2 结语
在整个软硬件系统搭建完成后,需要测试每个舵机对机械臂的控制精度,从而了解整个机械臂的控制精准度[4]。具体测试时,实现使用8个轻触按键分别控制4个舵机按特定角度进行转动,记录每个舵机的理论控制角度和实际控制角度,统计成表后对数据进行分析。其中一路舵机的测试数据如表1所示,实际控制角度为多组数据中的最大值。
表1 舵机精度测试
由表1可以看出,整个Arduino软件的舵机控制精度均保持在95%以上。因此,本文设计的基于Arduino的机械臂,控制精准度较高,能够满足实际使用需求。