Brian Cardenas / Mbed 2 deprecated INTENTO1

Dependencies:   mbed

You are viewing an older revision! See the latest version

Homepage

SISTEMA DE ALMACENAMIENTO

  • Brian Alexis Cárdenas Castañeda 67574
  • Valeria Alejandra Bravo Bonilla 67577
  • Angela Manuela González Plazas 60534

En el siguiente informe se presentará la compilación de dos manuales; uno técnico y uno del usuario respectivamente; En el manual técnico se incluirá todo lo relacionado con las especificaciones de la tarjeta de desarrollo STM Nucleo 32F446-RE con la cual estaremos desarrollando el proyecto, indicaciones de conexión, desglose de los componentes que utilizamos más una explicación sustancial del código con el que se ha trabajado; en el manual del Usuario se explicará cómo y cuales son los pasos para poner en funcionamiento el proyecto y cumplir adecuadamente el proceso.

1.Manual Técnico

  • Tarjeta de Desarrollo STM Nucleo-F446RE.

/media/uploads/Brian12/f446re.jpg

La tarjeta Nucleo-F446RE es una placa de desarrollo STM32, que cuenta con un microcontrolador ARM cortex M4; la cual trabaja a una velocidad de 180Mhz y un sistema SRAM de 128 KB. También se cuentan con estás demás especificaciones. USB VBUS or external source (3.3 V, 5 V, 7 - 12 V). Two push buttons: USER and RESET. 512 KB Flash.

/media/uploads/Brian12/conexion.jpg

  • Diagrama de Conexiones.

/media/uploads/Brian12/diagrama.jpg

  • Servomotor:

/media/uploads/Brian12/servo.jpg

El servomotor es un dispositivo que en su interior dispone de un pequeño motor con un reductor de velocidad y multiplicador de fuerza, también dispone de un circuito que controla el sistema. Para controlar un servomotor se debe aplicar un pulso de duración y frecuencia específicos. Todos los servomotores disponen de tres cables, dos para alimentación Vcc y Gnd y un tercero para aplicar el tren de pulsos de control, que hace que el circuito de control diferencial interno ponga el servo en la posición indicada, dependiendo del ancho del pulso. En el servomotor SG90 el ángulo de giro del eje es de 180º . un servo es muy importante por que es el encargado de dar movilidad al robot.

  • Ángulos de giro de un servomotor:

/media/uploads/Brian12/captura.jpg

  • Modulación por Ancho de pulso (PWM).

Es una técnica utilizada para regular la velocidad de giro de los motores eléctricos de inducción o asíncronos.u Mantiene el par motor constante y no supone un desaprovechamiento de la energía eléctrica. Se utiliza tanto en corriente continua como en alterna, como su nombre lo indica, al controlar: un momento alto (encendido o alimentado) y un momento bajo (apagado o desconectado),

/media/uploads/Brian12/ciclo_util.jpg

COOLTERM: Es una sencilla aplicación creada por Roger Meier que permite tener una terminal para nuestros puertos serie, su menú de configuración esta muy completo, permitiendo elegir desde una lista los puertos disponibles y seleccionar su velocidad y demás parámetros; despliega los datos recibidos tanto en Ascii como en Hexadecimal. /media/uploads/Brian12/coolterm.jpg

MI CÓDIGO:

Se crean las clases para los objetos, que en este caso son los cuatro Servo-motores definiendo de una ves los pines de conexión.

PwmOut myservo1(PB_10);
PwmOut myservo2(PB_4);
PwmOut myservo3(PB_5);
PwmOut myservo4(PB_3);

Se habilita la comunicación serial y poder enviar datos y se mencionan las variables globales.

Serial pc(USBTX, USBRX);
uint8_t telecomando;
uint8_t parametro;
uint8_t nm;//variable de motores
uint8_t ng;

Se crea una función que permite controlar el ancho del pulso para el Servo-motor. Está función convierte el valor del ciclo útil dado en us dentro del periodo en una posición en grados para el servomotor.

uint32_t degrees2usec(uint8_t grados){
// Retorno el valor en usegundos, donde
//     y − y1 = m(x − x1 )
    if(grados <= 180)
        return int(750+grados*1900/180);// u6
    return 750;

Tasa de baudios para la comunicación serial.

pc.baud(9600); 

Comando de apertura para el envió de la trama desde Coolterm, expresado en Hexadecimal.

while (pc.getc()!=0XFF); //sincronizacion 

Configuramos el ancho de pulso para cada uno de los servos y así sus respectivos ángulos. Para el caso tenemos solo el servo 1.

myservo1.pulsewidth_us(2000);
    myservo1.period_ms(20)

Funciones para las rutinas del robot.

void home()
void material()
void celda1()
void celda2()
void celda3()
void celda4()

Se crea una función para abrir y cerrar la pinza.

if (parametro==01) 
    {
        myservo4.pulsewidth_us(degrees2usec(0));
     }   
    else if(parametro==02)
    {
        myservo4.pulsewidth_us(degrees2usec(180)); 

Se crea otra función para indicar el caso para cada una de las rutinas, previamente definidas en las funciones anteriores. Este Switch interpreta la variable parámetro

void mover_pos()

Se crea una función que indica sí lo que se quiere controlar es una de las funciones del brazo, la pinza o cada motor por individual.

void mover_servo(uint8_t nm, uint8_t ng)

Luego se inicializá el programa principal.

int main()
{
    config_uart();
    config_servo();
    
    while(1)
    {
        Leer_Datos();
        mover_servo(telecomando, parametro);
        
    }
}

2. Manual de Usuario

A continuación se describirán los pasos que el usuario debería seguir sí este quiere colocar en funcionamiento el proyecto del brazo de almacenamiento, todo ello con su respectiva imagen.

  1. Se debe tener conectada la tarjeta de desarrollo Núcleo STM F446RE.
  2. Descargar el código del software al Hardware.
  3. Iniciar desde el PC el programa Coolterm. /media/uploads/Brian12/2.jpg
  4. Ingresar los comandos funcionales para que el robot inicie ha realizar las rutinas. Para saber cuales son los comando interpretables por el software se presentara a siguiente tabla. /media/uploads/Brian12/tabladedatos_K8ipXH5.jpg

En la tabla se definió los comandos para dar inicio a el funcionamiento del robot. la primera columna inicializa la trama de datos en valores hexadecimales condicionando a que sea únicamente "0XFF" de lo contrario no se desarrollará el programa.

En la segunda columna se especifica el tipo de Telecomando siendo "0X01" funciones que determinan únicamente el movimiento del brazo y siendo "0X02" función para abrir y cerrar la pinza. Para la columna tercera y cuarta se especifican las posiciones de cada uno de los eslabones. Adicionalmente en la columna de telecomandos está configurada para que cada motor se mueva individualmente, esto se logra dándole valores en hexadecimal correspondientes a cada grado en la columna de parámetros, como por ejemplo si se desea 180° se debe ingresar B4 ó 0 grados se ingresa 01. para mejor explicación se adjunta la siguiente tabla donde se explican cada 10°.

/media/uploads/Brian12/tablagrados.jpg

  • Demostración del Funcionamiento.

A continuación se mostrarán las correspondientes imágenes al funcionamiento de cada función.

Home. /media/uploads/Brian12/10.jpg Material. /media/uploads/Brian12/11.jpg Celda 1. /media/uploads/Brian12/12.jpg Celda 2. /media/uploads/Brian12/13.jpg Celda 3. /media/uploads/Brian12/14.jpg Celda 4. /media/uploads/Brian12/15.jpg


All wikipages