机械臂是引人入胜的工程创新之一,看着这些东西倾斜和摇动以完成复杂的事情就像人类的手臂一样总是令人着迷。这些机械臂可以在装配线中执行焊接,钻孔,喷漆等高强度机械工作的行业中找到,最近还开发了高精度的先进机械臂来执行复杂的外科手术。因此,在本教程中,让我们使用ARM7-LPC2148微控制器构建一个简单的机械臂,以通过手动控制几个电位器来拾取和放置对象。
在本教程中,我们将使用3D打印的机器人ARM,该ARM通过遵循whativerse中的步骤构建。ARM使用4伺服电机进行ARM机械手移动。如果您没有打印机,也可以使用简单的纸板来构建手臂,就像我们为Arduino机器人手臂项目构建的那样。为了获得启发,您还可以参考我们之前使用Arduino构建的Record and Play Robotic Arm。
现在让我们为项目做好准备
所需组件
- 3D打印机机器人ARM
- ARM7-LPC2148
- SG-90伺服马达(4)
- 10k电位器(4)
- 按钮(4)
- LED灯(4)
- 5V(1A)直流电源适配器
- 电阻器(10k(4),2.2k(4))
- 面包板
- 连接线
准备好3D打印的机械手臂
本教程中使用的3D打印机械手是按照ThinGive中可用的EEZYbotARM给出的设计制作的。事物链接中包含制作3D打印机械臂的完整过程以及带有视频的组装细节,以上内容是共享的。
这是我的4D伺服电机组装后3D打印的机械臂的图像。
电路原理图
下图显示了基于ARM的机械手的电路连接。
该项目的电路连接很简单。确保使用单独的5V DC电源适配器为伺服电机供电。对于电位计和按钮,我们可以使用LPC2148微控制器提供的3.3V。
在这里,我们使用带有4个电位计的LPC2148的4个ADC引脚。LPC2148的4个PWM引脚与伺服电机的PWM引脚连接。我们还连接了4个按钮来选择要运行的电动机。因此,按下按钮后,改变相应的电位器以改变伺服电动机的位置。
与LPC2148的GPIO相连的按钮的一端通过10k电阻下拉,另一端与3.3V相连。另外还连接了4个LED,以指示选择了哪个伺服电动机来改变位置。
4个伺服电机和LPC2148之间的电路连接:
LPC2148 | 伺服马达 |
P0.1 | SERVO1(PWM橙色) |
P0.7 | SERVO2(PWM橙色) |
P0.8 | SERVO3(PWM橙色) |
P0.21 | SERVO4(PWM橙色) |
4个电位器和LPC2148之间的电路连接:
LPC2148 | 电位器中心引脚 左引脚– LPC2148的0V GND 右引脚– LPC2148的3.3V |
P0.25 | 电位计1 |
P0.28 | 电位计2 |
P0.29 | 电位器3 |
P0.30 | 电位计4 |
LPC2148的4个LED的电路连接:
LPC2148 | LED阳极(所有LED的阴极均为GND) |
P1.28 | LED1(阳极) |
P1.29 | LED2(阳极) |
P1.30 | LED3(阳极) |
P1.31 | LED4(阳极) |
LPC2148的4个按钮的电路连接:
LPC2148 | 按钮(带有下拉电阻10k) |
P1.17 | 按钮1 |
P1.18 | 按钮2 |
P1.19 | 按钮3 |
P1.20 | 按钮4 |
对LPC2148进行机械臂编程的步骤
在对该机器人手臂进行编程之前,我们需要了解有关在LPC2148中生成PWM和在ARM7-LPC2148中使用ADC的知识。为此,请参考我们之前有关将伺服电机与LPC2148接口以及如何在LPC2148中使用ADC的项目。
使用LPC2148的ADC转换
因为我们需要提供ADC值来设置占空比值,以生成用于控制伺服电机位置的PWM输出。我们需要找到电位计的ADC值。由于我们有四个用于控制四个伺服电动机的电位器,因此需要LPC2148的四个ADC通道。在本教程的此处,我们将使用LPC2148中分别具有4,1,2,3个ADC通道的ADC引脚(P0.25,P0.28,P0.29,P0.30)。
使用LPC2148生成伺服电机的PWM信号
由于我们需要生成PWM信号来控制伺服电机的位置。我们需要设置PWM的占空比。我们有四个伺服电机连接到机械手,因此我们需要LPC2148的4个PWM通道。在本教程的此处,我们将使用LPC2148中分别具有3、2、4、5的PWM通道的PWM引脚(P0.1,P0.7,P0.8,P0.21)。
将十六进制文件编程并刷新到LPC2148
要编程ARM7-LPC2148,我们需要使用keil uVision并将HEX代码闪存到LPC2148 Flash Magic工具。此处使用USB电缆通过微型USB端口对ARM7 Stick进行编程。我们使用Keil编写代码并创建一个十六进制文件,然后使用Flash Magic将HEX文件闪存到ARM7 Stick 。要了解有关安装keil uVision和Flash Magic以及如何使用它们的更多信息,请单击链接ARM7 LPC2148微控制器入门并使用Keil uVision对其进行编程。
编码说明
本机器人手臂项目的完整程序在教程的结尾给出。现在,让我们详细了解编程。
配置LPC2148的PORT以使用GPIO,PWM和ADC:
使用PINSEL1寄存器为引脚P0.25,P0.28,P0.29,P0.30启用ADC通道ADC0.4,ADC0.1,ADC0.2,ADC0.3。同样,对于PWM5引脚P0.21(1 << 10)。
#定义AD04(1 << 18)//为P0.25选择AD0.4功能#定义 AD01(1 << 24)//为P0.28选择AD0.1功能#定义 AD02(1 << 26)/ /为P0.29选择AD0.2功能#定义 AD03(1 << 28)//为P0.30选择AD0.3功能 PINSEL1-= AD04-AD01-AD02-AD03-(1 << 10);
使用PINSEL0寄存器为LPC2148的引脚P0.1,P0.7,P0.8启用PWM通道PWM3,PWM2,PWM4。
PINSEL0 = 0x000A800A;
使用PINSEL2寄存器为PORT1中用于连接LED和按钮的所有引脚启用GPIO引脚功能。
PINSEL2 = 0x00000000;
要将LED引脚设置为输出,将按钮引脚设置为输入,则使用IODIR1寄存器。(0表示输入,1表示输出)
IODIR1 =(((0 << 17)-(0 << 18)-(0 << 19)-(0 << 20)-(1 << 28)-(1 << 29)-(1 << 30 )-(1 << 31));
引脚号定义为
#define SwitchPinNumber1 17 //(与P1.17连接) #define SwitchPinNumber2 18 //(与P1.18连接) #define SwitchPinNumber3 19 //(与P1.19连接) #define SwitchPinNumber4 20 //(与P1连接。 20) #define LedPinNumber1 28 //(已连接P1.28) #define LedPinNumber2 29 //(已连接P1.29) #define LedPinNumber3 30 //(已连接P1.30) #define LedPinNumber4 31 //(已连接P1.31)
配置ADC转换设置
接下来,使用AD0CR_setup寄存器设置ADC转换模式和ADC时钟。
无符号长AD0CR_setup =(CLKDIV << 8)-BURST_MODE_OFF-上电; //设置ADC模式
而CLCKDIV,突发模式和PowerUP被定义为
#定义CLKDIV(15-1) #定义BURST_MODE_OFF(0 << 16)// 1表示开启,0表示关闭 #define PowerUP(1 << 21)
设置ADC转换的时钟(CLKDIV)
这用于产生ADC的时钟。4Mhz ADC时钟(ADC_CLOCK = PCLK / CLKDIV),其中实际使用“ CLKDIV-1”,在本例中为PCLK = 60mhz
突发模式(位16):该位用于突发转换。如果该位置1,则ADC模块将对SEL位中选择的所有通道(SET)进行转换。在该位设置0将禁用突发转换。
省电模式(位21):用于打开或关闭ADC。将该位置1(1),可使ADC退出掉电模式并使它工作。清除该位将使ADC掉电。
配置PWM转换设置
首先使用PWMTCR寄存器复位和禁用PWM计数器,并使用预分频器值设置PWM定时器预分频寄存器。
PWMTCR = 0x02; PWMPR = 0x1D;
接下来设置一个周期内的最大计数数。这是在匹配寄存器0(PWMMR0)中完成的。因为我们有20000,所以它是20毫秒的PWM波
PWMMR0 = 20000;
在匹配寄存器中设置占空比值之后,我们将使用PWMMR4,PWMMR2,PWMMR3,PWMMR5。在这里,我们将初始值设置为0毫秒(Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
之后,设置PWM匹配控制寄存器,以在发生匹配寄存器时引起计数器复位。
PWMMCR = 0x00000002; // MR0匹配时重置
之后,PWM锁存器启用寄存器启用匹配值的使用(PWMLER)
PWMLER = 0x7C; // PWM2,PWM4,PWM4和PWM5的锁存使能
使用PWM定时器控制寄存器(PWMTCR)中的一位复位定时器计数器,并启用PWM。
PWMTCR = 0x09; //启用PWM和计数器
接下来,启用PWM输出,并在PWM控制寄存器(PWMPCR)中将PWM设置为单边沿控制模式。
PWMPCR = 0x7C00; //启用PWM2,PWM4,PWM4和PWM5,单边沿控制PWM
使用按钮选择要旋转的伺服电机
我们有四个按钮,用于旋转四个不同的伺服电机。通过选择一个按钮并更改相应的电位计,ADC值将设置占空比,相应的伺服电动机将更改其位置。获取按钮开关的状态
switchStatus1 =(IOPIN1 >> SwitchPinNumber1)&0x01;
因此,根据哪个开关值为高,进行ADC转换,然后在成功转换ADC(0至1023)值后,将其映射为(0至2045),然后将占空比值写入(PWMMRx)PWM引脚连接到伺服电机。并且,LED变为高电平以指示按下了哪个开关。以下是第一个按钮的示例
if(switchStatus1 == 1) { IOPIN1 =(1 <
拾放机械臂的工作
将代码上传到LPC2148后,按任意开关并改变相应的电位计即可更改机械臂的位置。
每个开关和电位计控制每个伺服电动机的运动,该运动是基本向左或向右运动,向上或向下运动,向前或向后运动,然后是夹具保持和释放运动。以下是完整的代码以及详细的工作视频。