- Componentes necessários
- Preparando o ARM Robótico impresso em 3D
- Diagrama de circuito
- Etapas envolvidas na programação LPC2148 para braço robótico
- Explicação de codificação
- Selecionando o servo motor para girar usando botões de pressão
- Trabalho do braço robótico do Pick and Place
Braços robóticos são uma das criações de engenharia fascinantes e é sempre fascinante observar essas coisas se inclinando e girando para fazer coisas complexas como um braço humano faria. Esses braços robóticos podem ser comumente encontrados em indústrias na linha de montagem que realizam trabalhos mecânicos intensos como soldagem, perfuração, pintura, etc., braços robóticos avançados recentemente com alta precisão também estão sendo desenvolvidos para realizar operações cirúrgicas complexas. Portanto, neste tutorial, vamos construir um braço robótico simples usando o microcontrolador ARM7-LPC2148 para pegar e colocar um objeto pelo controle manual de alguns potenciômetros.
Neste tutorial, usaremos um ARM robótico impresso em 3D que foi construído seguindo o procedimento em thingiverse. O ARM usa 4 servo motores para o movimento do ARM robótico. Se você não tem uma impressora, também pode construir seu braço com cartolinas simples, como as que construímos para nosso Projeto de braço robótico Arduino. Para inspiração, você também pode consultar o Braço Robótico Gravar e Reproduzir que construímos anteriormente usando o Arduino.
Então, agora vamos deixar as coisas prontas para nosso projeto
Componentes necessários
- ARM Robótico para Impressora 3D
- ARM7-LPC2148
- Servo motor SG-90 (4)
- Potenciômetro de 10k (4)
- Botão (4)
- LED (4)
- Adaptador de energia 5V (1A) DC
- Resistores (10k (4), 2,2k (4))
- Tábua de pão
- Fios de conexão
Preparando o ARM Robótico impresso em 3D
O braço robótico impresso em 3D usado neste tutorial foi feito seguindo o design fornecido por EEZYbotARM que está disponível no Thingiverse. O procedimento completo de confecção do braço robótico impresso em 3D e o detalhe da montagem com vídeo estão presentes no link thingiverse, que é compartilhado acima.
Esta é a imagem do meu braço robótico impressa em 3D após a montagem com 4 servo motores.
Diagrama de circuito
A imagem a seguir mostra as conexões de circuito do braço robótico baseado em ARM.
As conexões do circuito para o projeto são simples. Certifique-se de alimentar os servo motores com um adaptador de energia 5 V DC separado. Para potenciômetros e botões, podemos usar 3,3 V disponíveis no microcontrolador LPC2148.
Aqui estamos usando os 4 pinos ADC do LPC2148 com 4 potenciômetros. E também 4 pinos PWM do LPC2148 conectados aos pinos PWM do servo motor. Também conectamos 4 botões para selecionar qual motor operar. Assim, após pressionar o botão respeitado o potenciômetro é variado para alterar a posição do servo motor.
Os botões de pressão em uma extremidade que está conectada com GPIO de LPC2148 são puxados para baixo via resistor de 10k e outra extremidade é conectada com 3,3V. Além disso, 4 LEDs são conectados para indicar qual servo motor está selecionado para alterar a posição.
Conexões de circuito entre 4 Servo Motor e LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0,21 | SERVO4 (PWM-Orange) |
Conexões de circuito entre 4 Potenciômetro e LPC2148:
LPC2148 | Pino central do potenciômetro Pino esquerdo - 0V GND de LPC2148 Pino direito - 3,3V de LPC2148 |
P0.25 | Potenciômetro 1 |
P0,28 | Potenciômetro 2 |
P0,29 | Potenciômetro 3 |
P0.30 | Potenciômetro 4 |
Conexões de circuito de 4 LEDs com LPC2148:
LPC2148 | Ânodo de LED (o cátodo de todos os LED é GND) |
P1.28 | LED1 (ânodo) |
P1.29 | LED2 (ânodo) |
P1.30 | LED3 (ânodo) |
P1.31 | LED4 (ânodo) |
Conexões de circuito de 4 botões de pressão com LPC2148:
LPC2148 | Botão de pressão (com resistor pull-down 10k) |
P1.17 | Botão 1 |
P1.18 | Botão 2 |
P1.19 | Botão 3 |
P1.20 | Botão 4 |
Etapas envolvidas na programação LPC2148 para braço robótico
Antes de programar para este braço robótico, precisamos saber como gerar PWM em LPC2148 e usar ADC em ARM7-LPC2148. Para isso, consulte nossos projetos anteriores sobre a interface do servo motor com o LPC2148 e como usar o ADC no LPC2148.
Conversão ADC usando LPC2148
Como precisamos fornecer valores ADC para definir o valor do ciclo de trabalho para gerar saída PWM para controlar a posição do servo motor. Precisamos encontrar os valores ADC do potenciômetro. Como temos quatro potenciômetros para controlar quatro servo motores, precisamos de 4 canais ADC de LPC2148. Aqui neste tutorial estamos usando os pinos ADC (P0.25, P0.28, P0.29, P0.30) de canais ADC de 4,1,2,3 respectivamente presentes no LPC2148.
Gerando sinais PWM para servo motor usando LPC2148
Como precisamos gerar sinais PWM para controlar a posição do servo motor. Precisamos definir o ciclo de trabalho do PWM. Temos quatro servo motores conectados ao braço robótico, portanto, precisamos de 4 canais PWM do LPC2148. Aqui neste tutorial estamos usando os pinos PWM (P0.1, P0.7, P0.8, P0.21) de canais PWM de 3,2,4,5 respectivamente presentes no LPC2148.
Programando e atualizando arquivo hexadecimal para LPC2148
Para programar ARM7-LPC2148, precisamos de keil uVision e para fazer o flash do código HEX para LPC2148 a ferramenta Flash Magic é necessária. Um cabo USB é usado aqui para programar o ARM7 Stick via porta micro USB. Nós escrevemos código usando Keil e criamos um arquivo hexadecimal e então o arquivo HEX é enviado para o stick ARM7 usando Flash Magic. Para saber mais sobre como instalar keil uVision e Flash Magic e como usá-los, siga o link Getting Started With ARM7 LPC2148 Microcontroller e programe-o usando Keil uVision.
Explicação de codificação
O programa completo para este projeto de braço robótico é fornecido no final do tutorial. Agora vamos ver a programação em detalhes.
Configurando a PORTA de LPC2148 para usar GPIO, PWM e ADC:
Usando o registro PINSEL1 para habilitar os canais ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 para os pinos P0.25, P0.28, P0.29, P0.30. E também, para PWM5 para o pino P0.21 (1 << 10).
#define AD04 (1 << 18) // Selecione a função AD0.4 para P0.25 #define AD01 (1 << 24) // Selecione a função AD0.1 para P0.28 #define AD02 (1 << 26) / / Selecionar função AD0.2 para P0.29 #define AD03 (1 << 28) // Selecionar função AD0.3 para P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Usando o registro PINSEL0 para habilitar os canais PWM PWM3, PWM2, PWM4 para os pinos P0.1, P0.7, P0.8 de LPC2148.
PINSEL0 = 0x000A800A;
Usando o registro PINSEL2 para habilitar a função de pino GPIO para todos os pinos em PORT1 usados para a conexão de LED e botão de pressão.
PINSEL2 = 0x00000000;
Para tornar os pinos do LED como saída e pinos do botão como entrada, o registro IODIR1 é usado. (0 para INPUT e 1 para OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Embora os números dos pinos sejam definidos como
#define SwitchPinNumber1 17 // (Conectado com P1.17) #define SwitchPinNumber2 18 // (Conectado com P1.18) #define SwitchPinNumber3 19 // (Conectado com P1.19) #define SwitchPinNumber4 20 // (Conectado com P1. 20) #define LedPinNumber1 28 // (Conectado com P1.28) #define LedPinNumber2 29 // (Conectado com P1.29) #define LedPinNumber3 30 // (Conectado com P1.30) #define LedPinNumber4 31 // (Conectado com P1.31)
Configurando a configuração de conversão ADC
Em seguida, o modo de conversão ADC e o relógio para ADC são definidos usando o registro AD0CR_setup.
longo sem sinal AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configurando o modo ADC
Enquanto o CLCKDIV, Modo Burst e PowerUP são definidos como
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 para ligado e 0 para desligado #define PowerUP (1 << 21)
Configurando o relógio para conversão ADC (CLKDIV)
Isso é usado para produzir o relógio para ADC. 4Mhz ADC clock (ADC_CLOCK = PCLK / CLKDIV) onde "CLKDIV-1" é realmente usado, no nosso caso PCLK = 60mhz
Modo Burst (Bit-16): Este bit é usado para conversão de BURST. Se este bit for definido, o módulo ADC fará a conversão de todos os canais selecionados (SET) em bits SEL. Definir 0 neste bit desabilitará a conversão BURST.
Modo de desligamento (Bit-21): É usado para ligar ou desligar o ADC. A configuração (1) neste bit tira o ADC do modo de desligamento e o torna operacional. Limpar esse bit desligará o ADC.
Configurando a configuração de conversão PWM
Primeiro, redefina e desabilite o contador para PWM usando o registro PWMTCR e configure o registro de pré-escala do temporizador PWM com o valor do pré-calibrador.
PWMTCR = 0x02; PWMPR = 0x1D;
Em seguida, defina o número máximo de contagens em um ciclo. Isso é feito no Match Register 0 (PWMMR0). Como temos 20000, pois é uma onda PWM de 20 msegs
PWMMR0 = 20000;
Depois de definir o valor do ciclo de trabalho nos registradores de correspondência, estamos usando PWMMR4, PWMMR2, PWMMR3, PWMMR5. Aqui, estamos definindo valores iniciais de 0 mseg (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Depois disso, configure o PWM Match Control Register para causar uma reinicialização do contador quando o registro de correspondência ocorrer.
PWMMCR = 0x00000002; // Reiniciar na partida MR0
Depois disso, o PWM latch Enable Register para habilitar o uso do valor de correspondência (PWMLER)
PWMLER = 0x7C; // Habilitar trava para PWM2, PWM4, PWM4 e PWM5
Reinicialize o contador do temporizador usando um bit no PWM Timer Control Register (PWMTCR) e também habilite o PWM.
PWMTCR = 0x09; // Habilita PWM e contador
Em seguida, habilite as saídas PWM e defina o PWM no modo controlado por borda única no registro de controle PWM (PWMPCR).
PWMPCR = 0x7C00; // Habilita PWM2, PWM4, PWM4 e PWM5, PWM controlado por borda única
Selecionando o servo motor para girar usando botões de pressão
Temos quatro botões que são usados para girar quatro servo motores diferentes. Selecionando um botão e variando o potenciômetro correspondente, o valor ADC define o ciclo de trabalho e o servo motor correspondente muda sua posição. Para obter o status do interruptor de botão
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Portanto, dependendo de qual valor de switch é ALTO, a conversão ADC ocorre e, em seguida, após a conversão bem-sucedida do valor ADC (0 a 1023), ele é mapeado em termos de (0 a 2045) e, em seguida, o valor do ciclo de trabalho é gravado em o pino (PWMMRx) PWM conectado ao servo motor. E também, um LED é colocado em ALTO para indicar qual chave está pressionada. A seguir está um exemplo para o primeiro botão de pressão
if (switchStatus1 == 1) { IOPIN1 = (1 <
Trabalho do braço robótico do Pick and Place
Após fazer o upload do código para o LPC2148, pressione qualquer botão e varie o potenciômetro correspondente para alterar a posição do braço robótico.
Cada interruptor e potenciômetro controlam cada movimento do servomotor que é o movimento básico para a esquerda ou direita, para cima ou para baixo, para frente ou para trás e a pinça para segurar e liberar o movimento. O código completo com um vídeo de trabalho detalhado é fornecido abaixo.