- Components necessaris
- Preparant el braç robòtic imprès en 3D
- Esquema de connexions
- Passos relacionats amb la programació LPC2148 per a Robotic Arm
- Explicació de la codificació
- Selecció del servomotor per girar mitjançant botons polsadors
- Funcionament del braç robòtic Pick and Place
Els braços robòtics són una de les creacions d’enginyeria fascinants i sempre és fascinant veure com aquestes coses s’inclinen i es desplacen per fer coses complexes tal com ho faria un braç humà. Aquests braços robòtics es poden trobar comunament en indústries de la cadena de muntatge que realitzen treballs mecànics intensos com soldadura, perforació, pintura, etc. Així doncs, en aquest tutorial construïm un simple braç robòtic amb microcontrolador ARM7-LPC2148 per seleccionar i col·locar un objecte mitjançant el control manual de pocs potenciòmetres.
En aquest tutorial utilitzarem un ARM robòtic imprès en 3D que es va crear seguint el procediment de thingiverse. El braç utilitza 4 servomotors per al moviment robotitzat del braç. Si no teniu cap impressora, també podeu construir el vostre braç amb cartrons senzills com el que vam crear per al nostre projecte Arduino Robotic Arm. Per inspirar-vos, també podeu consultar el braç robòtic Record and Play que hem creat anteriorment amb Arduino.
Així que ara preparem les coses per al nostre projecte
Components necessaris
- Impressora 3D robotitzada ARM
- ARM7-LPC2148
- Servomotor SG-90 (4)
- Potenciòmetre de 10 k (4)
- Polsador (4)
- LED (4)
- Adaptador de corrent continu de 5V (1A)
- Resistències (10 k (4), 2,2 k (4))
- Taula de pa
- Connexió de cables
Preparant el braç robòtic imprès en 3D
El braç robòtic imprès en 3D utilitzat en aquest tutorial es va fer seguint el disseny donat per EEZYbotARM que està disponible al Thingiverse. El procediment complet per fer el braç robòtic imprès en 3D i el detall del muntatge amb vídeo es troben a l’enllaç thingiverse, que es comparteix més amunt.

Aquesta és la imatge del meu braç robòtic imprès en 3D després de muntar-lo amb 4 servomotors.
Esquema de connexions
La següent imatge mostra les connexions de circuits del braç robòtic basat en ARM.

Les connexions del circuit per al projecte són senzilles. Assegureu-vos d’alimentar els servomotors amb un adaptador de corrent de 5V CC separat. Per a potenciòmetres i polsadors, podem utilitzar 3.3V disponibles al microcontrolador LPC2148.
Aquí estem utilitzant els 4 pins ADC de LPC2148 amb 4 potenciòmetres. I també 4 pins PWM de LPC2148 connectats amb els pins PWM del servomotor. També hem connectat 4 polsadors per seleccionar quin motor funcionar. Així doncs, després de prémer el botó es respecta el potenciòmetre per canviar la posició del servomotor.
Els botons polsadors d’un extrem que estan connectats amb GPIO de LPC2148 són desplegables mitjançant una resistència de 10 k i un altre extrem està connectat amb 3,3 V. També es connecten 4 LEDs per indicar quin servomotor està seleccionat per canviar la posició.

Connexions de circuits entre 4 servomotors i LPC2148:
| LPC2148 | Servomotor |
| P0.1 | SERVO1 (PWM-Orange) |
| P0.7 | SERVO2 (PWM-Taronja) |
| P0.8 | SERVO3 (PWM-Taronja) |
| P0.21 | SERVO4 (PWM-Taronja) |
Connexions de circuits entre 4 Potentiometer i LPC2148:
| LPC2148 | Pin central del potenciòmetre Pin esquerre - 0V GND de LPC2148 Pin dret - 3,3V de LPC2148 |
| P0.25 | Potenciòmetre1 |
| P0.28 | Potenciòmetre2 |
| P0.29 | Potenciòmetre3 |
| P0.30 | Potenciòmetre4 |
Connexions de circuits de 4 LEDs amb LPC2148:
| LPC2148 | Ànode LED (el càtode de tots els LED és GND) |
| P1.28 | LED1 (ànode) |
| P1.29 | LED2 (ànode) |
| P1.30 | LED3 (ànode) |
| P1.31 | LED4 (ànode) |
Connexions de circuits de 4 polsadors amb LPC2148:
| LPC2148 | Polsador (amb resistència desplegable 10k) |
| P1.17 | Polsador1 |
| P1.18 | Polsador2 |
| P1.19 | Polsador3 |
| P1.20 | Polsador4 |
Passos relacionats amb la programació LPC2148 per a Robotic Arm
Abans de programar aquest braç robòtic, hem de saber sobre la generació de PWM a LPC2148 i l’ús d’ADC a ARM7-LPC2148. Per a això, consulteu els nostres projectes anteriors sobre Interfacing Servo motor amb LPC2148 i com utilitzar ADC a LPC2148.
Conversió ADC mitjançant LPC2148
Com que hem de proporcionar valors ADC per establir el valor del cicle de treball per generar sortida PWM per controlar la posició del servo motor. Hem de trobar valors ADC del potenciòmetre. Com que tenim quatre potenciòmetres per controlar quatre servomotors, necessitem 4 canals ADC de LPC2148. Aquí en aquest tutorial estem utilitzant pins ADC (P0.25, P0.28, P0.29, P0.30) de canals ADC de 4,1,2,3 presents respectivament a LPC2148.
Generació de senyals PWM per al servomotor mitjançant LPC2148
Com que hem de generar senyals PWM per controlar la posició del servomotor. Hem d’establir el cicle de treball de PWM. Tenim quatre servomotors connectats al braç robòtic, de manera que necessitem 4 canals PWM de LPC2148. Aquí en aquest tutorial estem utilitzant pins PWM (P0.1, P0.7, P0.8, P0.21) de canals PWM de 3,2,4,5, respectivament, presents a LPC2148.
Programació i intermitència del fitxer hexadecimal a LPC2148
Per programar ARM7-LPC2148 necessitem keil uVision i cal fer flash el codi HEX a LPC2148 és necessària una eina Flash Magic. Aquí s’utilitza un cable USB per programar ARM7 Stick mitjançant un port micro USB. Escrivim codi amb Keil i creem un fitxer hexadecimal i, a continuació, el fitxer HEX es converteix en un pal ARM7 mitjançant Flash Magic. Per obtenir més informació sobre com instal·lar keil uVision i Flash Magic i com utilitzar-los, seguiu l'enllaç Introducció al microcontrolador ARM7 LPC2148 i programeu-lo mitjançant Keil uVision.
Explicació de la codificació
El programa complet per a aquest projecte de braç robòtic es dóna al final del tutorial. Ara anem a veure la programació en detall.
Configuració del PORT de LPC2148 per utilitzar GPIO, PWM i ADC:
Mitjançant el registre PINSEL1 per habilitar els canals ADC: ADC0.4, ADC0.1, ADC0.2, ADC0.3 per als pins P0.25, P0.28, P0.29, P0.30. I també, per a PWM5 per al pin P0.21 (1 << 10).
#define AD04 (1 << 18) // Selecciona la funció AD0.4 per P0.25 #define AD01 (1 << 24) // Selecciona la funció AD0.1 per P0.28 #define AD02 (1 << 26) / / Selecciona la funció AD0.2 per a P0.29 #define AD03 (1 << 28) // Selecciona la funció AD0.3 per a P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Utilitzant el registre PINSEL0 per habilitar els canals PWM PWM3, PWM2, PWM4 per als pins P0.1, P0.7, P0.8 de LPC2148.
PINSEL0 = 0x000A800A;
Utilitzant el registre PINSEL2 per habilitar la funció de pin GPIO per a tots els pins de PORT1 utilitzats per a la connexió de LED i polsador.
PINSEL2 = 0x00000000;
Per fer els pins LED com a sortida i els pins de botó com a entrada, s’utilitza el registre IODIR1. (0 per a INPUT i 1 per a OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Mentre que els números de pin es defineixen com
#define SwitchPinNumber1 17 // (Connectat amb P1.17) #define SwitchPinNumber2 18 // (Connectat amb P1.18) #define SwitchPinNumber3 19 // (Connectat amb P1.19) #define SwitchPinNumber4 20 // (Connectat amb P1. 20) #define LedPinNumber1 28 // (Connectat amb P1.28) #define LedPinNumber2 29 // (Connectat amb P1.29) #define LedPinNumber3 30 // (Connectat amb P1.30) #define LedPinNumber4 31 // (Connectat amb P1.31)
Configuració de la configuració de conversió ADC
A continuació, es configurarà el mode de conversió ADC i el rellotge per ADC mitjançant el registre AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configuració del mode ADC
Mentre que CLCKDIV, Mode de ràfega i PowerUP es defineixen com
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 per a activat i 0 per a apagat #define PowerUP (1 << 21)
Configuració del rellotge per a la conversió ADC (CLKDIV)
S'utilitza per produir el rellotge de l'ADC. Rellotge ADC de 4Mhz (ADC_CLOCK = PCLK / CLKDIV) on realment s’utilitza "CLKDIV-1", en el nostre cas PCLK = 60mhz
Mode de ràfega (Bit-16): aquest bit s’utilitza per a la conversió BURST. Si es defineix aquest bit, el mòdul ADC farà la conversió de tots els canals seleccionats (SET) en bits SEL. Si definiu 0 en aquest bit, es desactivarà la conversió BURST.
Mode d’apagat (Bit-21): s’utilitza per activar o desactivar ADC. La configuració (1) d'aquest bit fa que l'ADC quedi fora del mode de desconnexió i el faci operatiu. Si esborreu aquest bit, l’ADC s’apagarà.
Configuració del paràmetre de conversió PWM
Primer Restableix i desactiva el comptador per a PWM mitjançant el registre PWMTCR i configura el registre de prescala del temporitzador PWM amb el valor del precalificador.
PWMTCR = 0x02; PWMPR = 0x1D;
A continuació, definiu el nombre màxim de recomptes en un cicle. Això es fa a Match Register 0 (PWMMR0). Com tenim 20000, ja que és una ona PWM de 20 msecs
PWMMR0 = 20000;
Després d'establir el valor del cicle de treball als registres de coincidència, estem utilitzant PWMMR4, PWMMR2, PWMMR3, PWMMR5. Aquí estem establint valors inicials de 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Després d'això, configureu el registre de control de coincidències PWM perquè provoqui un restabliment del comptador quan es produeixi el registre de coincidències.
PWMMCR = 0x00000002; // Restableix el partit MR0
Després d'això, el registre d'activació del tancament PWM per habilitar l'ús del valor de coincidència (PWMLER)
PWMLER = 0x7C; // Activació de bloqueig per a PWM2, PWM4, PWM4 i PWM5
Restableix el comptador del temporitzador utilitzant una mica al registre de control del temporitzador PWM (PWMTCR) i també habilita el PWM.
PWMTCR = 0x09; // Activeu PWM i comptador
A continuació, activeu les sortides PWM i configureu el PWM en mode controlat per una sola vora al registre de control PWM (PWMPCR).
PWMPCR = 0x7C00; // Activa PWM2, PWM4, PWM4 i PWM5, PWM controlat per una sola vora
Selecció del servomotor per girar mitjançant botons polsadors
Tenim quatre polsadors que s’utilitzen per girar quatre servomotors diferents. En seleccionar un polsador i variar el potenciòmetre corresponent, el valor ADC estableix el cicle de treball i el servomotor corresponent canvia de posició. Per obtenir l’estat del polsador
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Per tant, en funció del valor del commutador que sigui ALT, es produirà la conversió ADC i, després d’una conversió satisfactòria del valor ADC (0 a 1023), s’assignarà en termes de (0 a 2045) i, a continuació, s’escriu el valor del cicle de treball el pin (PWMMRx) PWM connectat al servomotor. A més, un LED es gira ALTA per indicar quin interruptor es prem. El següent és un exemple per al primer polsador
if (switchStatus1 == 1) { IOPIN1 = (1 <
Funcionament del braç robòtic Pick and Place
Després de carregar el codi al LPC2148, premeu qualsevol interruptor i varieu el potenciòmetre corresponent per canviar la posició del braç robotitzat.

Cada interruptor i potenciòmetre controla cada moviment del servomotor que és el moviment de la base esquerra o dreta, el moviment cap amunt o cap avall, cap endavant o cap enrere i després la pinça per mantenir i alliberar el moviment. A continuació es mostra el codi complet amb un vídeo de treball detallat.
