- 필요한 구성 요소
- 3D 프린팅 된 Robotic ARM 준비하기
- 회로도
- 로봇 팔용 LPC2148 프로그래밍에 관련된 단계
- 코딩 설명
- 누름 버튼을 사용하여 회전 할 서보 모터 선택
- 픽앤 플레이스 로봇 팔의 작동
Robotic Arms는 매혹적인 엔지니어링 창작물 중 하나이며, 인간의 팔처럼 복잡한 작업을 수행하기 위해 이러한 작업이 기울어지고 움직이는 것을 보는 것은 항상 매력적입니다. 이 로봇 팔은 용접, 드릴링, 페인팅 등과 같은 강렬한 기계 작업을 수행하는 조립 라인의 산업에서 일반적으로 볼 수 있으며 최근에는 복잡한 수술 작업을 수행하기 위해 고정밀 첨단 로봇 팔도 개발되고 있습니다. 따라서이 튜토리얼에서는 몇 개의 전위차계를 수동으로 제어하여 물체를 선택하고 배치하기 위해 ARM7-LPC2148 마이크로 컨트롤러 를 사용하여 간단한 로봇 암 을 구축해 보겠습니다.
이 튜토리얼에서는 thingiverse 의 절차에 따라 구축 된 3D 프린팅 로봇 ARM을 사용합니다. ARM은 로봇 식 ARM 이동을 위해 4 개의 서보 모터를 사용합니다. 프린터가없는 경우 Arduino Robotic Arm 프로젝트를 위해 만든 것처럼 간단한 판지로 팔을 만들 수도 있습니다. 영감을 얻으려면 이전에 Arduino를 사용하여 만든 Record and Play Robotic Arm을 참조 할 수도 있습니다.
이제 우리 프로젝트를위한 준비를합시다
필요한 구성 요소
- 3D 프린터 로봇 팔
- ARM7-LPC2148
- SG-90 서보 모터 (4)
- 10k 전위차계 (4)
- 푸시 버튼 (4)
- LED (4)
- 5V (1A) DC 전원 어댑터
- 저항기 (10k (4), 2.2k (4))
- 브레드 보드
- 전선 연결
3D 프린팅 된 Robotic ARM 준비하기
이 튜토리얼에서 사용 된 3D 프린팅 로봇 팔은 Thingiverse에서 제공되는 EEZYbotARM 이 제공 한 디자인을 따라 만들어 졌습니다. 3D 프린트 된 로봇 팔을 만들기위한 전체 절차와 비디오와 함께 조립 세부 사항은 위의 공유 링크에 있습니다.
4 개의 서보 모터로 조립 한 후 3D 프린팅 된 Robotic Arm 이미지입니다.
회로도
다음 이미지는 ARM 기반 Robotic Arm 의 회로 연결을 보여줍니다 .
프로젝트의 회로 연결은 간단합니다. 별도의 5V DC 전원 어댑터를 사용하여 서보 모터에 전원을 공급해야합니다. 전위차계 및 푸시 버튼의 경우 LPC2148 마이크로 컨트롤러에서 제공되는 3.3V를 사용할 수 있습니다.
여기서 우리는 4 개의 전위차계와 함께 LPC2148의 4 개의 ADC 핀을 사용하고 있습니다. 또한 서보 모터의 PWM 핀과 연결된 LPC2148의 4 개의 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 오른쪽 핀 – 3.3V의 LPC2148 |
P0.25 | 전위차계 1 |
P0.28 | 전위차계 2 |
P0.29 | 전위차계 3 |
P0.30 | 전위차계 4 |
4 개의 LED와 LPC2148의 회로 연결:
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 프로그래밍에 관련된 단계
이 Robotic Arm을 프로그래밍하기 전에 LPC2148에서 PWM을 생성하고 ARM7-LPC2148에서 ADC를 사용하는 방법을 알아야합니다. 이를 위해 LPC2148과 서보 모터 인터페이스 및 LPC2148에서 ADC를 사용하는 방법에 대한 이전 프로젝트를 참조하십시오.
LPC2148을 사용한 ADC 변환
서보 모터 위치 제어를위한 PWM 출력 생성을위한 듀티 사이클 값 설정을위한 ADC 값을 제공해야하므로 전위차계의 ADC 값을 찾아야합니다. 4 개의 서보 모터를 제어하기위한 4 개의 전위차계가 있으므로 LPC2148의 4 개의 ADC 채널 이 필요합니다. 이 튜토리얼에서는 LPC2148에 각각 존재하는 4,1,2,3의 ADC 채널의 ADC 핀 (P0.25, P0.28, P0.29, P0.30)을 사용합니다.
LPC2148을 사용하여 서보 모터 용 PWM 신호 생성
서보 모터 위치를 제어하기 위해 PWM 신호를 생성해야하기 때문입니다. PWM의 듀티 사이클을 설정해야합니다. 로봇 팔에 연결된 4 개의 서보 모터가 있으므로 LPC2148의 4 개의 PWM 채널이 필요합니다. 이 튜토리얼 에서는 LPC2148에 각각 존재하는 3,2,4,5 PWM 채널 의 PWM 핀 (P0.1, P0.7, P0.8, P0.21)을 사용 합니다.
16 진수 파일을 LPC2148로 프로그래밍 및 플래싱
프로그램 ARM7 - LPC2148에 우리는 필요 uVision을 KEIL & 플래시 HEX 코드 LPC2148 플래시 마법 도구가 필요합니다. 여기에서 USB 케이블은 마이크로 USB 포트를 통해 ARM7 Stick 을 프로그래밍하는 데 사용됩니다. Keil을 사용하여 코드를 작성하고 16 진수 파일을 만든 다음 Flash Magic을 사용하여 HEX 파일을 ARM7 스틱에 플래시 합니다. keil uVision 및 Flash Magic 설치 및 사용 방법에 대한 자세한 내용은 ARM7 LPC2148 마이크로 컨트롤러 시작하기 링크를 클릭하고 Keil uVision을 사용하여 프로그래밍하십시오.
코딩 설명
이 로봇 팔 프로젝트를 위한 완전한 프로그램 은 튜토리얼의 끝에 제공됩니다. 이제 프로그래밍을 자세히 살펴 보겠습니다.
GPIO, PWM 및 ADC 사용을 위해 LPC2148의 PORT 구성:
PINSEL1 레지스터를 사용하여 ADC 채널 (핀 P0.25, P0.28, P0.29, P0.30에 대해 ADC0.4, ADC0.1, ADC0.2, ADC0.3)을 활성화합니다. 또한 핀 P0.21 (1 << 10)에 대한 PWM5의 경우.
#define AD04 (1 << 18) //P0.25에 대한 AD0.4 기능 선택 #define AD01 (1 << 24) //P0.28에 대한 AD0.1 기능 선택 #define AD02 (1 << 26) / /P0.29에 대한 AD0.2 기능 선택 #define 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 레지스터를 사용하여 LED 및 푸시 버튼 연결에 사용되는 PORT1의 모든 핀에 대해 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.17 과 연결됨) 20) #define LedPinNumber1 28 // (P1.28과 연결됨) #define LedPinNumber2 29 // (P1.29와 연결됨) #define LedPinNumber3 30 // (P1.30과 연결됨) #define LedPinNumber4 31 // (연결됨 P1.31)
ADC 변환 설정 구성
다음으로 ADC 변환 모드와 ADC의 클럭은 AD0CR_setup 레지스터를 사용하여 설정됩니다.
부호없는 long AD0CR_setup = (CLKDIV << 8)-BURST_MODE_OFF-PowerUP; // ADC 모드 설정
CLCKDIV, Burst Mode 및 PowerUP는 다음과 같이 정의됩니다.
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1은 on, 0은 off #define PowerUP (1 << 21)
ADC 변환을위한 클록 설정 (CLKDIV)
이것은 ADC 용 클럭을 생성하는 데 사용됩니다. "CLKDIV-1"이 실제로 사용되는 4Mhz ADC 클록 (ADC_CLOCK = PCLK / CLKDIV), 여기서는 PCLK = 60mhz
버스트 모드 (Bit-16): 이 비트는 BURST 변환에 사용됩니다. 이 비트가 설정되면 ADC 모듈은 SEL 비트에서 선택된 (SET) 모든 채널에 대해 변환을 수행합니다. 이 비트에서 0을 설정하면 BURST 변환이 비활성화됩니다.
Power Down Mode (Bit-21): ADC를 켜거나 끄는 데 사용됩니다. 이 비트에서 (1)을 설정하면 ADC가 전원 차단 모드에서 벗어나 작동하게됩니다. 이 비트를 지우면 ADC의 전원이 꺼집니다.
PWM 변환 설정 구성
먼저 PWMTCR 레지스터를 사용하여 PWM 카운터를 재설정하고 비활성화하고 프리스케일러 값으로 PWM 타이머 프리 스케일 레지스터를 설정합니다.
PWMTCR = 0x02; PWMPR = 0x1D;
다음으로 한 사이클에서 최대 카운트 수를 설정합니다. 이것은 Match Register 0 (PWMMR0) 에서 수행됩니다. 20msecs의 PWM 파동이므로 20000이 있으므로
PWMMR0 = 20000;
그 후 일치 레지스터에서 듀티 사이클 값을 설정 한 후 PWMMR4, PWMMR2, PWMMR3, PWMMR5를 사용합니다. 여기서는 초기 값을 0msec (Toff)로 설정합니다.
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
그런 다음 PWM Match Control Register를 설정하여 일치 레지스터가 발생할 때 카운터를 재설정합니다.
PWMMCR = 0x00000002; // MR0 일치시 재설정
그 후 PWM 래치 활성화 레지스터를 통해 일치 값 (PWMLER)을 사용할 수 있습니다.
PWMLER = 0x7C; // PWM2, PWM4, PWM4 및 PWM5에 대한 래치 활성화
PWMTCR (PWM 타이머 제어 레지스터)의 비트를 사용하여 타이머 카운터를 재설정하고 PWM 을 활성화합니다.
PWMTCR = 0x09; // PWM 및 카운터 활성화
다음으로 PWM 출력을 활성화하고 PWM 제어 레지스터 (PWMPCR) 에서 단일 에지 제어 모드에서 PWM을 설정합니다.
PWMPCR = 0x7C00; // PWM2, PWM4, PWM4 및 PWM5, 단일 에지 제어 PWM 활성화
누름 버튼을 사용하여 회전 할 서보 모터 선택
4 개의 서로 다른 서보 모터를 회전하는 데 사용되는 4 개의 푸시 버튼이 있습니다. 하나의 푸시 버튼을 선택하고 해당 전위차계를 변경함으로써 ADC 값은 듀티 사이클을 설정 하고 해당 서보 모터의 위치를 변경합니다. 푸시 버튼 스위치의 상태를 얻으려면
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
따라서 어떤 스위치 값이 HIGH인지에 따라 ADC 변환이 수행되고 ADC (0 ~ 1023) 값이 성공적으로 변환 된 후 (0 ~ 2045)로 매핑되고 듀티 사이클 값이 서보 모터에 연결된 (PWMMRx) PWM 핀. 또한 어떤 스위치를 눌렀는지 표시하기 위해 LED가 HIGH로 바뀝니다. 다음은 첫 번째 푸시 버튼의 예입니다.
if (switchStatus1 == 1) { IOPIN1 = (1 <
픽앤 플레이스 로봇 팔의 작동
LPC2148에 코드를 업로드 한 후 스위치를 누르고 해당 전위차계를 변경하여 로봇 팔의 위치를 변경합니다.
각 스위치와 전위차계는 기본 왼쪽 또는 오른쪽 이동, 위 또는 아래 이동, 전진 또는 후진, 그리퍼가 움직임을 유지 및 해제하는 각 서보 모터 동작을 제어합니다. 자세한 작업 비디오와 함께 완전한 코드가 아래에 나와 있습니다.