- Thành phần bắt buộc
- Chuẩn bị sẵn sàng ARM robot in 3D
- Sơ đồ mạch
- Các bước liên quan đến lập trình LPC2148 cho cánh tay robot
- Giải thích mã hóa
- Chọn Động cơ Servo để xoay bằng các nút Nhấn
- Hoạt động của Chọn và Đặt Cánh tay Robot
Robotic Arms, là một trong những sáng tạo kỹ thuật hấp dẫn và luôn hấp dẫn khi xem những thứ này nghiêng và xoay để hoàn thành những việc phức tạp giống như cánh tay của con người. Những cánh tay robot này thường được tìm thấy trong các ngành công nghiệp tại dây chuyền lắp ráp thực hiện các công việc cơ khí cường độ cao như hàn, khoan, sơn, v.v., gần đây các cánh tay robot tiên tiến với độ chính xác cao cũng đang được phát triển để thực hiện các hoạt động phẫu thuật phức tạp. Vì vậy, trong hướng dẫn này, chúng ta hãy xây dựng một Cánh tay robot đơn giản bằng vi điều khiển ARM7-LPC2148 để chọn và đặt một đối tượng bằng cách điều khiển thủ công một vài chiết áp.
Trong hướng dẫn này, chúng tôi sẽ sử dụng một ARM robot in 3D được tạo ra bằng cách làm theo quy trình ngược lại. ARM sử dụng 4 động cơ servo cho chuyển động ARM của robot. Nếu bạn không có máy in, bạn cũng có thể tạo cánh tay của mình bằng các tấm bìa cứng đơn giản như chúng tôi đã tạo cho Dự án cánh tay robot Arduino của mình. Để có thêm cảm hứng, bạn cũng có thể tham khảo Ghi và chơi Cánh tay robot mà chúng tôi đã xây dựng trước đó bằng Arduino.
Vì vậy, bây giờ chúng ta hãy chuẩn bị mọi thứ sẵn sàng cho dự án của chúng ta
Thành phần bắt buộc
- Máy in 3D Robot ARM
- ARM7-LPC2148
- Động cơ Servo SG-90 (4)
- Chiết áp 10k (4)
- Nút ấn (4)
- LED (4)
- Bộ đổi nguồn DC 5V (1A)
- Điện trở (10k (4), 2,2k (4))
- Breadboard
- Kết nối dây
Chuẩn bị sẵn sàng ARM robot in 3D
Cánh tay rô bốt in 3D được sử dụng trong hướng dẫn này được thực hiện theo thiết kế do EEZYbotARM đưa ra có sẵn trong Thingiverse. Quy trình hoàn chỉnh để tạo cánh tay robot in 3D và chi tiết lắp ráp bằng video có trong liên kết ngược được chia sẻ ở trên.
Đây là hình ảnh Cánh tay robot in 3D của tôi sau khi lắp ráp với 4 Động cơ Servo.
Sơ đồ mạch
Hình ảnh sau đây cho thấy các kết nối mạch của Cánh tay robot dựa trên ARM.
Các kết nối mạch cho dự án rất đơn giản. Đảm bảo cấp nguồn cho Động cơ Servo bằng bộ chuyển đổi nguồn 5V DC riêng biệt. Đối với chiết áp và nút nhấn, chúng ta có thể sử dụng 3.3V có sẵn từ vi điều khiển LPC2148.
Ở đây chúng tôi đang sử dụng 4 chân ADC của LPC2148 với 4 chiết áp. Và cả 4 chân PWM của LPC2148 kết nối với các chân PWM của động cơ servo. Chúng tôi cũng đã kết nối 4 nút nhấn để chọn động cơ hoạt động. Vì vậy, sau khi nhấn nút, chiết áp có thể thay đổi để thay đổi vị trí của động cơ servo.
Các nút ấn một đầu được kết nối với GPIO của LPC2148 được kéo xuống thông qua điện trở 10k và một đầu khác được kết nối với 3,3V. Ngoài ra 4 đèn LED được kết nối để cho biết động cơ servo nào được chọn để thay đổi vị trí.
Kết nối mạch giữa 4 Động cơ Servo & LPC2148:
LPC2148 | Động cơ Servo |
P0.1 | SERVO1 (PWM-Màu cam) |
P0.7 | SERVO2 (PWM-Màu cam) |
P0.8 | SERVO3 (PWM-Màu cam) |
P0.21 | SERVO4 (PWM-Cam) |
Kết nối mạch giữa 4 Potentiometer & LPC2148:
LPC2148 | Chiết áp Trung tâm Pin Pin trái - 0V GND của LPC2148 Pin phải - 3.3V của LPC2148 |
P0,25 | Chiết áp1 |
P0.28 | Chiết áp2 |
P0.29 | Chiết áp3 |
P0.30 | Chiết áp4 |
Kết nối mạch của 4 LED với LPC2148:
LPC2148 | Cực dương LED (Cực âm của tất cả đèn LED là GND) |
P1.28 | LED1 (Cực dương) |
P1.29 | LED2 (Cực dương) |
P1.30 | LED3 (Cực dương) |
P1.31 | LED4 (Cực dương) |
Kết nối mạch của 4 nút nhấn với LPC2148:
LPC2148 | Nút ấn (Với điện trở kéo xuống 10k) |
P1.17 | Nút ấn1 |
P1.18 | Nút ấn2 |
P1.19 | Nút ấn3 |
P1.20 | Nút nhấn4 |
Các bước liên quan đến lập trình LPC2148 cho cánh tay robot
Trước khi lập trình cho Cánh tay robot này, chúng ta cần biết về cách tạo PWM trong LPC2148 và sử dụng ADC trong ARM7-LPC2148. Để làm được điều đó, hãy tham khảo các dự án trước đây của chúng tôi về động cơ Giao tiếp Servo với LPC2148 và cách sử dụng ADC trong LPC2148.
Chuyển đổi ADC bằng LPC2148
Vì chúng ta cần cung cấp giá trị ADC để thiết lập giá trị chu kỳ nhiệm vụ để tạo đầu ra PWM để điều khiển vị trí Động cơ servo. Chúng ta cần tìm các giá trị ADC của chiết áp. Vì chúng tôi có bốn chiết áp để điều khiển bốn động cơ Servo, chúng tôi cần 4 kênh ADC của LPC2148. Ở đây trong hướng dẫn này, chúng tôi đang sử dụng các chân ADC (P0,25, P0,28, P0,29, P0,30) của các kênh ADC 4,1,2,3 tương ứng có trong LPC2148.
Tạo tín hiệu PWM cho Động cơ Servo bằng LPC2148
Vì chúng ta cần tạo tín hiệu PWM để điều khiển vị trí động cơ servo. Chúng ta cần thiết lập chu kỳ nhiệm vụ của PWM. Chúng tôi có bốn động cơ Servo được kết nối với cánh tay robot vì vậy chúng tôi cần 4 kênh PWM của LPC2148. Ở đây trong hướng dẫn này, chúng tôi đang sử dụng các chân PWM (P0.1, P0.7, P0.8, P0.21) của các kênh PWM 3,2,4,5 tương ứng có trong LPC2148.
Lập trình và nhấp nháy tệp Hex sang LPC2148
Để lập trình ARM7-LPC2148, chúng ta cần keil uVision & để flash mã HEX sang LPC2148 công cụ Flash Magic là cần thiết. Cáp USB được sử dụng ở đây để lập trình ARM7 Stick qua cổng micro USB. Chúng tôi viết mã bằng Keil và tạo một tệp hex và sau đó tệp HEX được chuyển sang thanh ARM7 bằng Flash Magic. Để biết thêm về cách cài đặt keil uVision và Flash Magic cũng như cách sử dụng chúng, hãy truy cập liên kết Bắt đầu với Vi điều khiển ARM7 LPC2148 và Lập trình bằng Keil uVision.
Giải thích mã hóa
Chương trình hoàn chỉnh cho Dự án Cánh tay robot này được đưa ra ở cuối hướng dẫn. Bây giờ chúng ta hãy xem chương trình một cách chi tiết.
Định cấu hình PORT của LPC2148 để sử dụng GPIO, PWM và ADC:
Sử dụng thanh ghi PINSEL1 để bật các kênh ADC- ADC0.4, ADC0.1, ADC0.2, ADC0.3 cho các chân P0.25, P0.28, P0.29, P0.30. Ngoài ra, đối với PWM5 cho chân P0.21 (1 << 10).
#define AD04 (1 << 18) // Chọn hàm AD0.4 cho P0.25 #define AD01 (1 << 24) // Chọn hàm AD0.1 cho P0.28 #define AD02 (1 << 26) / / Chọn chức năng AD0.2 cho P0.29 #define AD03 (1 << 28) // Chọn chức năng AD0.3 cho P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Sử dụng thanh ghi PINSEL0 để bật các kênh PWM PWM3, PWM2, PWM4 cho các chân P0.1, P0.7, P0.8 của LPC2148.
PINSEL0 = 0x000A800A;
Sử dụng thanh ghi PINSEL2 để bật chức năng chân GPIO cho tất cả các chân trong PORT1 được sử dụng để kết nối đèn LED và nút nhấn.
PINSEL2 = 0x00000000;
Để tạo các chân LED làm chân Đầu ra và Chân nút bấm làm Đầu vào, thanh ghi IODIR1 được sử dụng. (0 cho INPUT và 1 cho OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 <<31));
Trong khi số pin được xác định là
#define SwitchPinNumber1 17 // (Đã kết nối với P1.17) #define SwitchPinNumber2 18 // (Đã kết nối với P1.18) #define SwitchPinNumber3 19 // (Đã kết nối với P1.19) #define SwitchPinNumber4 20 // (Đã kết nối với P1. 20) #define LedPinNumber1 28 // (Đã kết nối với P1.28) #define LedPinNumber2 29 // (Đã kết nối với P1.29) #define LedPinNumber3 30 // (Đã kết nối với P1.30) #define LedPinNumber4 31 // (Đã kết nối với P1.31)
Định cấu hình cài đặt chuyển đổi ADC
Tiếp theo, chế độ chuyển đổi ADC và đồng hồ cho ADC được thiết lập bằng cách sử dụng thanh ghi AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Thiết lập Chế độ ADC
Trong khi CLCKDIV, Chế độ Burst và PowerUP được định nghĩa là
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 để bật và 0 cho tắt #define PowerUP (1 << 21)
Đặt đồng hồ cho Chuyển đổi ADC (CLKDIV)
Điều này được sử dụng để sản xuất đồng hồ cho ADC. Đồng hồ ADC 4Mhz (ADC_CLOCK = PCLK / CLKDIV) trong đó "CLKDIV-1" thực sự được sử dụng, trong trường hợp của chúng tôi là PCLK = 60mhz
Chế độ Burst (Bit-16): Bit này được sử dụng để chuyển đổi BURST. Nếu bit này được đặt, mô-đun ADC sẽ thực hiện chuyển đổi cho tất cả các kênh được chọn (SET) trong các bit SEL. Đặt 0 trong bit này sẽ vô hiệu hóa chuyển đổi BURST.
Chế độ ngắt nguồn (Bit-21): Chế độ này được sử dụng để BẬT hoặc TẮT ADC. Cài đặt (1) trong bit này đưa ADC ra khỏi chế độ tắt nguồn và làm cho nó hoạt động. Xóa bit này sẽ tắt ADC.
Định cấu hình cài đặt chuyển đổi PWM
Đầu tiên Đặt lại và vô hiệu hóa bộ đếm cho PWM bằng cách sử dụng thanh ghi PWMTCR và thiết lập Thanh ghi Bộ đếm thời gian PWM với giá trị bộ đếm trước.
PWMTCR = 0x02; PWMPR = 0x1D;
Tiếp theo, thiết lập số lần đếm tối đa trong một chu kỳ. Điều này được thực hiện trong Thanh ghi trận đấu 0 (PWMMR0). Vì chúng ta có 20000 vì nó là sóng PWM 20msec
PWMMR0 = 20000;
Sau đó, đặt giá trị cho chu kỳ nhiệm vụ trong thanh ghi đối sánh, chúng tôi đang sử dụng PWMMR4, PWMMR2, PWMMR3, PWMMR5. Ở đây chúng tôi đang đặt các giá trị ban đầu là 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Sau đó, thiết lập Thanh ghi điều khiển đối sánh PWM để thiết lập lại bộ đếm khi thanh ghi đối sánh xảy ra.
PWMMCR = 0x00000002; // Đặt lại trên trận đấu MR0
Sau đó, chốt PWM Bật Đăng ký để cho phép sử dụng giá trị khớp (PWMLER)
PWMLER = 0x7C; // Kích hoạt chốt cho PWM2, PWM4, PWM4 và PWM5
Đặt lại bộ đếm hẹn giờ bằng cách sử dụng một chút trong Thanh ghi điều khiển bộ định thời PWM (PWMTCR) và nó cũng bật PWM.
PWMTCR = 0x09; // Bật PWM và bộ đếm
Tiếp theo kích hoạt các đầu ra PWM và đặt PWM ở chế độ điều khiển cạnh đơn trong thanh ghi điều khiển PWM (PWMPCR).
PWMPCR = 0x7C00; // Bật PWM2, PWM4, PWM4 và PWM5, PWM điều khiển cạnh đơn
Chọn Động cơ Servo để xoay bằng các nút Nhấn
Chúng tôi có bốn nút ấn được sử dụng để xoay bốn động cơ servo khác nhau. Bằng cách chọn một nút nhấn và thay đổi chiết áp tương ứng, giá trị ADC đặt chu kỳ làm việc và động cơ servo tương ứng thay đổi vị trí của nó. Để có được trạng thái của công tắc nút nhấn
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Vì vậy, tùy thuộc vào giá trị chuyển đổi nào là CAO, quá trình chuyển đổi ADC diễn ra và sau đó sau khi chuyển đổi thành công giá trị ADC (0 thành 1023), nó được ánh xạ theo (0 đến 2045) và sau đó giá trị chu kỳ nhiệm vụ được ghi thành chân PWM (PWMMRx) được kết nối với động cơ servo. Ngoài ra, một đèn LED được bật CAO để cho biết công tắc nào được nhấn. Sau đây là một ví dụ cho nút nhấn đầu tiên
if (switchStatus1 == 1) { IOPIN1 = (1 <
Hoạt động của Chọn và Đặt Cánh tay Robot
Sau khi tải mã lên LPC2148, nhấn bất kỳ công tắc nào và thay đổi chiết áp tương ứng để thay đổi vị trí của cánh tay robot.
Mỗi công tắc và chiết áp điều khiển từng chuyển động của động cơ servo là chuyển động cơ bản sang trái hoặc phải, chuyển động lên hoặc xuống, tiến hoặc lùi và sau đó là bộ kẹp để giữ và nhả chuyển động. Mã hoàn chỉnh với video làm việc chi tiết được đưa ra bên dưới.