RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Control de un brazo Robot de 4 ejes con PIC

Se trata del control de un brazo de 4 ejes para aplicar a un robot. El principio de funcionamiento es similar al empleado en el artículo Control de 8 servos con PIC.


Lo lógico es que la fuente de energía de los robots sean baterías o similares. Cuando intentamos hacer funcionar varios ejes del brazo a la vez, puede pasar que se produzcan bajadas de tensión momentaneas que ocasione el reset del PIC e impidan el movimiento del brazo. Para evitarlo hay que indicar en la configuración del programa:

#fuses NOBROWNOUT        //No reset por baja tensión

Mediante interrupción por desborde del Timer 0 generaremos las señales de control de los servos. Y mediante el valor numérico contenido en una variable la posición de giro. Estas variables las hemos denominado 'pinza' , 'muneca' , 'brazo' y 'hombro', e identifican a cada uno de los ejes. Con otra variable, 'velocidad' especificaremos la rapidez de los movimientos.



pulsa en la imagen para ampliarla        

Para conseguir controlar la velocidad de los movimientos se ha establecido este procedimiento:

//Modificará posición del servo mientras flag=1
while (flag){
  flag=0;  
  //Si el eje brazo no está en su posición... 
  if (pwm_brazo != brazo){    
      //...retrocede una posición si la nueva es menor
      if (pwm_brazo > brazo) --pwm_brazo; 
      //...o avanza una posición si la nueva es mayor     
      else if (pwm_brazo < brazo) ++pwm_brazo; 
      //Con retardo de movimiento de posición indicado  
      delay_ms(velocidad);  
      //Y se comprueba otra vez si coincide posición actual
      //con posición deseada
      flag=1;
  }
}
    
Y la forma de indicar las posiciones del servo mediante dos procedimientos. Por un lado indicando numéricamente las nuevas posiciones de los servos que han de cambiar:

velocidad=5;                   //Velocidad del movimiento
muneca= 16;                    //Nueva posición muñeca
brazo=20;                      //Nueva posición brazo
hombro=13;                     //Nueva posición hombro

//Acceso a la función del cambio de posiciones
movimiento_brazo_num (muneca, pinza, brazo, hombro, velocidad);

O tener unas posiciones preestablecidas definidas por una opción que se envía para obtener la nueva posición:

brazo_pos=2;               //Brazo levantado 

//Acceso a la función del cambio de posiciones
movimiento_brazo (brazo_pos,velocidad);


Donde brazo_pos indicará la posición genericamente preestablecida:

switch (brazo_pos){
//Brazo recogido

case0:muneca=8;pinza=8;brazo=5;hombro=21;break;  
//Brazo recogido
case1:muneca=pwm_muneca;pinza=pwm_pinza;brazo=5;hombro=21;break;  
//Brazo levantado
case2:muneca=pwm_muneca;pinza=pwm_pinza;brazo=16;hombro=16;break;  
  |
  |
  |
//Brazo abajo extendido
case9:muneca=pwm_muneca;pinza=pwm_pinza;brazo=16;hombro=11;break;
}

La generación de las señales pulsatorias para el control de los servos se realiza mediante la interrupción por rebose del timer 0. Con cada rebose del timer 0 se accede a la función de interrupción donde se incrementa la variable "Ancho_pulso" y comparandola con cada una de las variables que contienen la posición de los servos se decide cuando la señal de control correspondiente a cada servo debe pasar a cero. Cuando la variable "Ancho_pulso" incrementandose pasa de 0xff a 0x00, comienza un nuevo ciclo y por tanto un nuevo pulso para todos los servos. De esta forma se consigue un pulso cíclico para los servos de entre unos 0,9 ms a 2,1 ms cuando establecemos valores de la variable del servo de entre unos 7 y 21, correspondientes a las posiciones extremas. ¡Ojo! Todos estos valores corresponden al uso de un cristal de cuarzo de 4 MHz y un preescaler de 32 del timer 0.     

[+/-] Ver / Ocultar programa completo en C

Todos los archivos se pueden descargar en el siguiente enlace:

Descarga de archivos Brazo Robot


El proyecto contenido en el artículo ha sido diseñado con la versión v4.084 de CCS PIC C COMPILER


 CÓDIGO DE COLORES Y NOMENCLATURA PARA CONDENSADORES





CÓDIGO DE COLORES  PARA RESISTENCIAS







No hay comentarios:

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)