- Componenti richiesti
- Preparare il braccio robotico stampato in 3D
- Schema elettrico
- Fasi coinvolte nella programmazione di LPC2148 per braccio robotico
- Spiegazione della codifica
- Selezione del servomotore da ruotare utilizzando i pulsanti
- Funzionamento del braccio robotico Pick and Place
I bracci robotici sono una delle affascinanti creazioni ingegneristiche ed è sempre affascinante guardare queste cose inclinarsi e spostarsi per ottenere cose complesse proprio come farebbe un braccio umano. Questi bracci robotici possono essere comunemente trovati nelle industrie presso la linea di assemblaggio che eseguono lavori meccanici intensi come saldatura, perforazione, verniciatura, ecc., Sono inoltre in fase di sviluppo bracci robotici recentemente avanzati con alta precisione per eseguire operazioni chirurgiche complesse. Quindi in questo tutorial costruiamo un semplice braccio robotico utilizzando il microcontrollore ARM7-LPC2148 per prelevare e posizionare un oggetto controllando manualmente alcuni potenziometri.
In questo tutorial useremo un ARM robotico stampato in 3D che è stato costruito seguendo la procedura in thingiverse. L'ARM utilizza 4 servomotori per il movimento robotico ARM. Se non hai una stampante, puoi anche costruire il tuo braccio con semplici cartoni come abbiamo costruito per il nostro progetto Arduino Robotic Arm. Per ispirazione puoi anche fare riferimento al Braccio robotico Registra e suona che abbiamo costruito in precedenza utilizzando Arduino.
Quindi ora prepariamo le cose per il nostro progetto
Componenti richiesti
- Stampante 3D ARM robotica
- ARM7-LPC2148
- Servomotore SG-90 (4)
- Potenziometro 10k (4)
- Pulsante (4)
- LED (4)
- Adattatore di alimentazione CC da 5 V (1 A)
- Resistori (10k (4), 2.2k (4))
- Breadboard
- Collegamento dei cavi
Preparare il braccio robotico stampato in 3D
Il braccio robotico stampato in 3D utilizzato in questo tutorial è stato realizzato seguendo il design fornito da EEZYbotARM, disponibile nel Thingiverse. La procedura completa per realizzare il braccio robotico stampato in 3D e il dettaglio di assemblaggio con video sono presenti nel link thingiverse, che è condiviso sopra.
Questa è l'immagine del mio braccio robotico stampato in 3D dopo l'assemblaggio con 4 servomotori.
Schema elettrico
L'immagine seguente mostra le connessioni del circuito del braccio robotico basato su ARM.
I collegamenti del circuito per il progetto sono semplici. Assicurarsi di alimentare i servomotori con un adattatore di alimentazione CC da 5 V separato. Per potenziometri e pulsanti possiamo utilizzare 3,3 V disponibili dal microcontrollore LPC2148.
Qui stiamo usando i 4 pin ADC di LPC2148 con 4 potenziometri. E anche 4 pin PWM di LPC2148 collegati con i pin PWM del servomotore. Abbiamo anche collegato 4 pulsanti per selezionare quale motore far funzionare. Quindi, dopo aver premuto il pulsante rispettato potenziometro viene variato per cambiare la posizione del servomotore.
I pulsanti un'estremità che è collegata con GPIO di LPC2148 sono pull-down tramite un resistore da 10k e un'altra estremità è collegata a 3,3V. Inoltre sono collegati 4 LED per indicare quale servomotore è selezionato per cambiare la posizione.
Collegamenti del circuito tra 4 servomotori e LPC2148:
LPC2148 | Servomotore |
P0.1 | SERVO1 (PWM-arancione) |
P0.7 | SERVO2 (PWM-arancione) |
P0.8 | SERVO3 (PWM-arancione) |
P0.21 | SERVO4 (PWM-arancione) |
Collegamenti del circuito tra 4 potenziometri e LPC2148:
LPC2148 | Pin centrale del potenziometro Pin sinistro - 0 V GND di LPC2148 Pin destro - 3,3 V di LPC2148 |
P0.25 | Potenziometro 1 |
P0.28 | Potenziometro 2 |
P0.29 | Potenziometro 3 |
P0.30 | Potenziometro 4 |
Collegamenti del circuito di 4 LED con LPC2148:
LPC2148 | Anodo LED (il catodo di tutti i LED è GND) |
P1.28 | LED1 (anodo) |
P1.29 | LED2 (anodo) |
P1.30 | LED3 (anodo) |
P1.31 | LED4 (anodo) |
Collegamenti del circuito di 4 pulsanti con LPC2148:
LPC2148 | Pulsante (con resistenza pull-down 10k) |
P1.17 | Pulsante 1 |
P1.18 | Pulsante 2 |
P1.19 | Pulsante 3 |
P1.20 | Pulsante 4 |
Fasi coinvolte nella programmazione di LPC2148 per braccio robotico
Prima di programmare per questo braccio robotico, è necessario conoscere la generazione di PWM in LPC2148 e l'utilizzo di ADC in ARM7-LPC2148. Per questo, fare riferimento ai nostri progetti precedenti sull'interfacciamento del servomotore con LPC2148 e su come utilizzare l'ADC in LPC2148.
Conversione ADC utilizzando LPC2148
Poiché è necessario fornire i valori ADC per l'impostazione del valore del ciclo di lavoro per generare l'uscita PWM per il controllo della posizione del servomotore. Dobbiamo trovare i valori ADC del potenziometro. Poiché abbiamo quattro potenziometri per il controllo di quattro servomotori, abbiamo bisogno di 4 canali ADC di LPC2148. Qui in questo tutorial stiamo usando i pin ADC (P0.25, P0.28, P0.29, P0.30) dei canali ADC di 4,1,2,3 presenti rispettivamente in LPC2148.
Generazione di segnali PWM per servomotore utilizzando LPC2148
Poiché abbiamo bisogno di generare segnali PWM per controllare la posizione del servomotore. Dobbiamo impostare il ciclo di lavoro del PWM. Abbiamo quattro servomotori collegati al braccio robotico, quindi abbiamo bisogno di 4 canali PWM di LPC2148. Qui in questo tutorial stiamo usando pin PWM (P0.1, P0.7, P0.8, P0.21) dei canali PWM di 3,2,4,5 presenti rispettivamente in LPC2148.
File esadecimale di programmazione e lampeggiamento su LPC2148
Per programmare ARM7-LPC2148 abbiamo bisogno di keil uVision e per eseguire il flashing del codice HEX su LPC2148 è necessario lo strumento Flash Magic. Un cavo USB viene utilizzato qui per programmare ARM7 Stick tramite la porta micro USB. Scriviamo il codice usando Keil e creiamo un file esadecimale, quindi il file HEX viene flashato sulla chiavetta ARM7 usando Flash Magic. Per saperne di più sull'installazione di keil uVision e Flash Magic e su come usarli, segui il collegamento Guida introduttiva al microcontrollore ARM7 LPC2148 e programmalo utilizzando Keil uVision.
Spiegazione della codifica
Il programma completo per questo progetto di braccio robotico è fornito alla fine del tutorial. Vediamo ora la programmazione in dettaglio.
Configurazione della PORTA di LPC2148 per l'utilizzo di GPIO, PWM e ADC:
Utilizzando il registro PINSEL1 per abilitare i canali ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 per i pin P0.25, P0.28, P0.29, P0.30. E inoltre, per PWM5 per il pin P0.21 (1 << 10).
#define AD04 (1 << 18) // Seleziona la funzione AD0.4 per P0.25 #define AD01 (1 << 24) // Seleziona la funzione AD0.1 per P0.28 #define AD02 (1 << 26) / / Seleziona la funzione AD0.2 per P0.29 #define AD03 (1 << 28) // Seleziona la funzione AD0.3 per P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Utilizzando il registro PINSEL0 per abilitare i canali PWM PWM3, PWM2, PWM4 per i pin P0.1, P0.7, P0.8 di LPC2148.
PINSEL0 = 0x000A800A;
Utilizzo del registro PINSEL2 per abilitare la funzione pin GPIO per tutti i pin in PORT1 utilizzati per il collegamento del LED e del pulsante.
PINSEL2 = 0x00000000;
Per rendere i pin LED come output e i pin del pulsante come input, viene utilizzato il registro IODIR1. (0 per INPUT e 1 per OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Mentre i numeri dei pin sono definiti come
#define SwitchPinNumber1 17 // (Connected with P1.17) #define SwitchPinNumber2 18 // (Connected with P1.18) #define SwitchPinNumber3 19 // (Connected with P1.19) #define SwitchPinNumber4 20 // (Connected with P1. 20) #define LedPinNumber1 28 // (Connesso con P1.28) #define LedPinNumber2 29 // (Connesso con P1.29) #define LedPinNumber3 30 // (Connesso con P1.30) #define LedPinNumber4 31 // (Connesso con P1.31)
Configurazione dell'impostazione di conversione ADC
Successivamente, la modalità di conversione ADC e l'orologio per ADC vengono impostati utilizzando il registro AD0CR_setup.
non firmato lungo AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configurazione della modalità ADC
Mentre CLCKDIV, Burst Mode e PowerUP sono definiti come
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 per on e 0 per off #define PowerUP (1 << 21)
Impostazione dell'orologio per la conversione ADC (CLKDIV)
Viene utilizzato per produrre l'orologio per ADC. Orologio ADC da 4 Mhz (ADC_CLOCK = PCLK / CLKDIV) dove "CLKDIV-1" viene effettivamente utilizzato, nel nostro caso PCLK = 60 mhz
Modalità Burst (Bit-16): questo bit viene utilizzato per la conversione BURST. Se questo bit è impostato, il modulo ADC eseguirà la conversione per tutti i canali selezionati (SET) in bit SEL. L'impostazione di 0 in questo bit disabiliterà la conversione BURST.
Modalità di spegnimento (Bit-21): utilizzato per attivare o disattivare l'ADC. L'impostazione (1) in questo bit porta l'ADC fuori dalla modalità di spegnimento e lo rende operativo. La cancellazione di questo bit spegnerà l'ADC.
Configurazione dell'impostazione di conversione PWM
Per prima cosa resettare e disabilitare il contatore per PWM utilizzando il registro PWMTCR e impostare il registro di prescala del timer PWM con il valore del prescaler.
PWMTCR = 0x02; PWMPR = 0x1D;
Quindi impostare il numero massimo di conteggi in un ciclo. Questo viene fatto nel Match Register 0 (PWMMR0). Dato che abbiamo 20000 in quanto è un'onda PWM di 20 msec
PWMMR0 = 20000;
Dopo aver impostato il valore per il ciclo di lavoro nei registri di corrispondenza, stiamo usando PWMMR4, PWMMR2, PWMMR3, PWMMR5. Qui stiamo impostando i valori iniziali di 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Dopodiché, impostare il registro di controllo della corrispondenza PWM per causare un reset del contatore quando si verifica il registro di corrispondenza.
PWMMCR = 0x00000002; // Reimposta sulla corrispondenza MR0
Successivamente, il registro abilita latch PWM per abilitare l'uso del valore di corrispondenza (PWMLER)
PWMLER = 0x7C; // Abilitazione latch per PWM2, PWM4, PWM4 e PWM5
Azzera il contatore del timer usando un bit nel PWM Timer Control Register (PWMTCR) e abilita anche il PWM.
PWMTCR = 0x09; // Abilita PWM e contatore
Quindi abilitare le uscite PWM e impostare il PWM in modalità controllata da un solo fronte nel registro di controllo PWM (PWMPCR).
PWMPCR = 0x7C00; // Abilita PWM2, PWM4, PWM4 e PWM5, PWM controllato da un lato
Selezione del servomotore da ruotare utilizzando i pulsanti
Abbiamo quattro pulsanti che vengono utilizzati per ruotare quattro diversi servomotori. Selezionando un pulsante e variando il potenziometro corrispondente, il valore ADC imposta il ciclo di lavoro e il servomotore corrispondente cambia la sua posizione. Per ottenere lo stato dell'interruttore a pulsante
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Quindi, a seconda di quale valore dell'interruttore è ALTO, avviene la conversione dell'ADC e quindi, dopo la conversione riuscita del valore dell'ADC (da 0 a 1023), viene mappato in termini di (da 0 a 2045) e quindi viene scritto il valore del ciclo di lavoro il pin PWM (PWMMRx) collegato al servomotore. Inoltre, un LED si accende per indicare quale interruttore è stato premuto. Quello che segue è un esempio per il primo pulsante
if (switchStatus1 == 1) { IOPIN1 = (1 <
Funzionamento del braccio robotico Pick and Place
Dopo aver caricato il codice sull'LPC2148, premere un interruttore qualsiasi e variare il potenziometro corrispondente per modificare la posizione del braccio robotico.
Ogni interruttore e potenziometro controllano ogni movimento del servomotore che è il movimento della base sinistra o destra, il movimento su o giù, avanti o indietro e quindi la pinza per mantenere e rilasciare il movimento. Di seguito viene fornito il codice completo con un video di lavoro dettagliato.