- Componentes requeridos
- Preparando el brazo robótico impreso en 3D
- Diagrama de circuito
- Pasos involucrados en la programación de LPC2148 para brazo robótico
- Explicación de codificación
- Selección del servomotor para rotar usando botones pulsadores
- Trabajo del brazo robótico Pick and Place
Los brazos robóticos son una de las fascinantes creaciones de ingeniería y siempre es fascinante ver cómo estas cosas se inclinan y se mueven para hacer cosas complejas como lo haría un brazo humano. Estos brazos robóticos se pueden encontrar comúnmente en industrias en la línea de ensamblaje que realizan trabajos mecánicos intensos como soldadura, taladrado, pintura, etc. También se están desarrollando brazos robóticos recientemente avanzados con alta precisión para realizar operaciones quirúrgicas complejas. Entonces, en este tutorial, construyamos un brazo robótico simple usando el microcontrolador ARM7-LPC2148 para seleccionar y colocar un objeto controlando manualmente algunos potenciómetros.
En este tutorial usaremos un ARM robótico impreso en 3D que se construyó siguiendo el procedimiento en thingiverse. El ARM utiliza 4 servomotores para el movimiento del ARM robótico. Si no tiene una impresora, también puede construir su brazo con cartones simples como los que construimos para nuestro Proyecto Arduino Robotic Arm. Para inspirarse, también puede consultar el brazo robótico de grabación y reproducción que construimos anteriormente con Arduino.
Así que ahora preparemos las cosas para nuestro proyecto.
Componentes requeridos
- BRAZO robótico de la impresora 3D
- ARM7-LPC2148
- Servomotor SG-90 (4)
- Potenciómetro 10k (4)
- Botón pulsador (4)
- LED (4)
- Adaptador de corriente CC de 5 V (1 A)
- Resistencias (10k (4), 2,2k (4))
- Tablero de circuitos
- Conexión de cables
Preparando el brazo robótico impreso en 3D
El brazo robótico impreso en 3D utilizado en este tutorial se hizo siguiendo el diseño dado por EEZYbotARM que está disponible en Thingiverse. El procedimiento completo para hacer el brazo robótico impreso en 3D y el detalle de ensamblaje con video están presentes en el enlace de thingiverse, que se comparte arriba.
Esta es la imagen de mi brazo robótico impreso en 3D después de ensamblarlo con 4 servomotores.
Diagrama de circuito
La siguiente imagen muestra las conexiones del circuito del brazo robótico basado en ARM.
Las conexiones del circuito para el proyecto son simples. Asegúrese de alimentar los servomotores con un adaptador de corriente de 5 V CC por separado. Para potenciómetros y pulsadores podemos utilizar 3,3 V disponibles en el microcontrolador LPC2148.
Aquí estamos usando los 4 pines ADC de LPC2148 con 4 potenciómetros. Y también 4 pines PWM de LPC2148 conectados con los pines PWM del servomotor. También hemos conectado 4 pulsadores para seleccionar qué motor operar. Entonces, después de presionar el botón, el potenciómetro respetado se varía para cambiar la posición del servomotor.
Los pulsadores de un extremo que está conectado con GPIO de LPC2148 son desplegables a través de una resistencia de 10k y el otro extremo está conectado con 3.3V. También se conectan 4 LED para indicar qué servomotor está seleccionado para cambiar la posición.
Conexiones de circuito entre 4 servomotores y LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-Naranja) |
P0.7 | SERVO2 (PWM-Naranja) |
P0.8 | SERVO3 (PWM-Naranja) |
P0.21 | SERVO4 (PWM-Naranja) |
Conexiones de circuito entre 4 potenciómetros y LPC2148:
LPC2148 | Potenciómetro Pin central Pin izquierdo - 0V GND de LPC2148 Pin derecho - 3.3V de LPC2148 |
P0.25 | Potenciómetro 1 |
P0.28 | Potenciómetro2 |
P0.29 | Potenciómetro 3 |
P0.30 | Potenciómetro 4 |
Conexiones de circuito de 4 LED's con LPC2148:
LPC2148 | Ánodo LED (el cátodo de todos los LED es GND) |
P1.28 | LED1 (ánodo) |
P1.29 | LED2 (ánodo) |
P1.30 | LED3 (ánodo) |
P1.31 | LED4 (ánodo) |
Conexiones de circuito de 4 pulsadores con LPC2148:
LPC2148 | Botón pulsador (con resistencia desplegable 10k) |
P1.17 | Pulsador 1 |
P1.18 | Pulsador2 |
P1.19 | Pulsador3 |
P1.20 | Pulsador 4 |
Pasos involucrados en la programación de LPC2148 para brazo robótico
Antes de programar para este brazo robótico, necesitamos saber cómo generar PWM en LPC2148 y usar ADC en ARM7-LPC2148. Para eso, consulte nuestros proyectos anteriores sobre la interfaz del servomotor con LPC2148 y cómo usar ADC en LPC2148.
Conversión ADC usando LPC2148
Como necesitamos proporcionar valores ADC para configurar el valor del ciclo de trabajo para generar una salida PWM para controlar la posición del servomotor. Necesitamos encontrar los valores de ADC del potenciómetro. Como tenemos cuatro potenciómetros para controlar cuatro servomotores, necesitamos 4 canales ADC de LPC2148. Aquí en este tutorial estamos usando pines ADC (P0.25, P0.28, P0.29, P0.30) de canales ADC de 4,1,2,3 respectivamente presentes en LPC2148.
Generación de señales PWM para servomotor usando LPC2148
Como necesitamos generar señales PWM para controlar la posición del servomotor. Necesitamos establecer el ciclo de trabajo de PWM. Tenemos cuatro servomotores conectados al brazo robótico, por lo que necesitamos 4 canales PWM de LPC2148. Aquí en este tutorial estamos usando pines PWM (P0.1, P0.7, P0.8, P0.21) de canales PWM de 3,2,4,5 respectivamente presentes en LPC2148.
Programación y flasheo de archivos hexadecimales en LPC2148
Para programar ARM7-LPC2148 necesitamos keil uVision y flashear el código HEX en LPC2148 Se necesita la herramienta Flash Magic. Aquí se utiliza un cable USB para programar ARM7 Stick a través del puerto micro USB. Escribimos código usando Keil y creamos un archivo hexadecimal y luego el archivo HEX se actualiza a la barra ARM7 usando Flash Magic. Para saber más sobre la instalación de keil uVision y Flash Magic y cómo usarlos, siga el enlace Comenzando con el microcontrolador ARM7 LPC2148 y prográmelo usando Keil uVision.
Explicación de codificación
El programa completo para este proyecto de brazo robótico se proporciona al final del tutorial. Ahora veamos la programación en detalle.
Configuración del PUERTO de LPC2148 para usar GPIO, PWM y ADC:
Usando el registro PINSEL1 para habilitar los canales ADC: ADC0.4, ADC0.1, ADC0.2, ADC0.3 para los pines P0.25, P0.28, P0.29, P0.30. Y también, para PWM5 para el pin P0.21 (1 << 10).
#define AD04 (1 << 18) // Seleccione la función AD0.4 para P0.25 #define AD01 (1 << 24) // Seleccione la función AD0.1 para P0.28 #define AD02 (1 << 26) / / Seleccione la función AD0.2 para P0.29 #define AD03 (1 << 28) // Seleccione la función AD0.3 para P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Usando el registro PINSEL0 para habilitar los canales PWM PWM3, PWM2, PWM4 para los pines P0.1, P0.7, P0.8 de LPC2148.
PINSEL0 = 0x000A800A;
Usando el registro PINSEL2 para habilitar la función de pin GPIO para todos los pines en PORT1 usados para la conexión de LED y pulsador.
PINSEL2 = 0x00000000;
Para convertir los pines del LED como salida y los pines del pulsador como entrada, se utiliza el registro IODIR1. (0 para ENTRADA y 1 para SALIDA)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Si bien los números de pin se definen como
#define SwitchPinNumber1 17 // (Conectado con P1.17) #define SwitchPinNumber2 18 // (Conectado con P1.18) #define SwitchPinNumber3 19 // (Conectado con P1.19) #define SwitchPinNumber4 20 // (Conectado con P1. 20) #define LedPinNumber1 28 // (Conectado con P1.28) #define LedPinNumber2 29 // (Conectado con P1.29) #define LedPinNumber3 30 // (Conectado con P1.30) #define LedPinNumber4 31 // (Conectado con P1.31)
Configuración de la configuración de conversión de ADC
A continuación, el modo de conversión de ADC y el reloj para ADC se configuran utilizando el registro AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configuración del modo ADC
Mientras que el CLCKDIV, el modo de ráfaga y el encendido se definen como
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 para encendido y 0 para apagado #define PowerUP (1 << 21)
Configuración del reloj para la conversión de ADC (CLKDIV)
Esto se usa para producir el reloj para ADC. Reloj ADC de 4Mhz (ADC_CLOCK = PCLK / CLKDIV) donde "CLKDIV-1" se usa realmente, en nuestro caso PCLK = 60mhz
Modo de ráfaga (Bit-16): este bit se utiliza para la conversión BURST. Si este bit está establecido, el módulo ADC hará la conversión para todos los canales que estén seleccionados (SET) en bits SEL. Establecer 0 en este bit deshabilitará la conversión BURST.
Modo de apagado (Bit-21): se utiliza para encender o apagar el ADC. La configuración (1) en este bit saca al ADC del modo de apagado y lo hace operativo. Borrar este bit apagará el ADC.
Configurar el ajuste de conversión de PWM
Primero reinicie y desactive el contador para PWM usando el registro PWMTCR y configure el registro de preescala del temporizador PWM con el valor del preescalador.
PWMTCR = 0x02; PWMPR = 0x1D;
A continuación, establezca el número máximo de recuentos en un ciclo. Esto se hace en el registro de coincidencia 0 (PWMMR0). Como tenemos 20000, ya que es una onda PWM de 20 ms
PWMMR0 = 20000;
Después de establecer el valor para el ciclo de trabajo en los registros de coincidencia, estamos usando PWMMR4, PWMMR2, PWMMR3, PWMMR5. Aquí estamos configurando valores iniciales de 0 mseg (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Después de eso, configure el registro de control de coincidencia de PWM para que se reinicie el contador cuando se produzca el registro de coincidencia.
PWMMCR = 0x00000002; // Restablecer en el partido MR0
Después de eso, el PWM latch Enable Register para habilitar el uso del valor de coincidencia (PWMLER)
PWMLER = 0x7C; // Activar bloqueo para PWM2, PWM4, PWM4 y PWM5
Restablezca el contador del temporizador usando un bit en el Registro de control del temporizador PWM (PWMTCR) y también habilita el PWM.
PWMTCR = 0x09; // Habilita PWM y contador
A continuación, habilite las salidas PWM y configure el PWM en el modo controlado por un solo borde en el registro de control PWM (PWMPCR).
PWMPCR = 0x7C00; // Habilita PWM2, PWM4, PWM4 y PWM5, PWM controlado por un solo borde
Selección del servomotor para rotar usando botones pulsadores
Disponemos de cuatro pulsadores que se utilizan para rotar cuatro servomotores diferentes. Al seleccionar un botón y variar el potenciómetro correspondiente, el valor ADC establece el ciclo de trabajo y el servomotor correspondiente cambia su posición. Para obtener el estado del interruptor de botón
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Por lo tanto, dependiendo de qué valor de interruptor sea ALTO, la conversión de ADC tiene lugar y luego, después de la conversión exitosa del valor de ADC (0 a 1023), se asigna en términos de (0 a 2045) y luego se escribe el valor del ciclo de trabajo en el pin (PWMMRx) PWM conectado al servomotor. Y también, un LED se enciende en ALTO para indicar qué interruptor se presiona. El siguiente es un ejemplo del primer pulsador
si (switchStatus1 == 1) { IOPIN1 = (1 <
Trabajo del brazo robótico Pick and Place
Después de cargar el código al LPC2148, presione cualquier interruptor y varíe el potenciómetro correspondiente para cambiar la posición del brazo robótico.
Cada interruptor y potenciómetro controla cada movimiento del servomotor que es el movimiento de base hacia la izquierda o hacia la derecha, hacia arriba o hacia abajo, hacia adelante o hacia atrás y luego la pinza para sostener y soltar el movimiento. A continuación se proporciona el código completo con un video de trabajo detallado.