Práctica 15 – Servomotor

 

INTRODUCCIÓN

 

En esta práctica se implementa el control de giro de un servomotor usando el módulo PWM. El servomotor podrá girar a las siguientes posiciones: 0°, 90° y 180°.

 

 

Selecciona la plataforma y entorno de programación.

 

 

PIC
AVR
PIC
PIC C Compiler
PIC C Compiler
Bootloader X-TRAINER
Bootloader X-TRAINER

Descripción

En esta práctica se implementa el control de giro de un servomotor, usando el PWM de los módulos X-TRAINER P8 o X-TRAINER P8 DIP40 o X-TRAINER P8 DIP28 con el PIC18F45K50 o PIC18F25K50. El servomotor podrá girar en las siguientes posiciones: 0º, 90º, 180º.

 

Materiales:

1 x Módulo X-TRAINER P8 o X-TRAINER P8 DIP40 o X-TRAINER P8 DIP28Comprar

1 x Servomotor SG90. Comprar

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

1 x Cable micro USB.

 

Software:

Windows 7 o posterior.

PIC C Compiler v5.069 o posterior. Descarga

XIDE v1.0 Descarga

 

Procedimiento

1. En el apartado de "Diagrama esquemático", que se encuentra a continuación, selecciona tu módulo, realiza las conexiones que se muestran en la imagen y conéctalo a la computadora.

2. Al final de esta práctica, en el apartado de "Descargas", puedes encontrar los archivos del código fuente, o bien copiarlo del apartado de "Código" que se encuentra más abajo.

3. Si descargaste el archivo del paso 2, omite este paso. Si copiaste el código, abre el compilador, pega el código en un nuevo proyecto. En el siguiente link encontrarás un manual para compilar en PIC C Compiler.

4.Abre el Software XIDE v1.0 y programa el código que descargaste o compilaste en el módulo. En el siguiente link encontrarás el manual de usuario para el Software XIDE v1.0. 

5.Al terminar de programar, el módulo se reiniciará y el programa de esta práctica se ejecutará.

 

Diagrama esquemático

 

X-TRAINER P8 LITE
X-TRAINER P8
X-TRAINER P8 DIP 40
X-TRAINER P8 DIP 28
X-TRAINER P8 LITE

X-TRAINER P8

X-TRAINER P8 DIP 40

X-TRAINER P8 DIP 28

 

Código

Código

/*
AUTOR: MICROSIDE TECHNOLOGY S.A. DE C.V.
FECHA: JUNIO 2019
*/
/**************************************************************************
Controlar la posicíon de un servo por medio del módulo PWM interno
**************************************************************************/

#include <18F45K50.h>                      // Incluye la librería para el PIC ( para X-TRAINERp8DIP28: #include <18F25K50.h> )
#device ADC=8                                  // Configura el ADC a 8 bits
#use delay(internal=48MHz)                // Configura frecuencia del oscilador interno
#build(reset=0x02000,interrupt=0x02008)  // Asigna los vectores de reset e interrupción para la versión con bootloader
#org 0x0000,0x1FFF {}                       // Reserva espacio en memoria para el bootloader


int16 DURY;                                       //variable para ajustar el valor del PWM
int1 SUBE;
int i;

void SisInit()
{
  set_tris_c(0xFB);                                 // C2 salida
  setup_timer_0( T0_INTERNAL|T0_DIV_4);
  enable_interrupts(INT_TIMER0);
  enable_interrupts(GLOBAL);

}

#int_TIMER0

 
void TIMER0_isr(){
output_high( PIN_C2);                              //Salida Pin_C2 50Hz
SUBE=1;
set_timer0(5780);                                      // 20 miliSegundos
}

void main()
{
        SisInit();
        while(1)
              {

                    for(i=0;i<255;i++)
                         {
                             if(SUBE==1)
                             {
                                delay_us(500); //0°
                                 output_low( PIN_C2);
                                 SUBE=0;
                              }
                                while(SUBE==0);
                            }

                      for(i=0;i<255;i++)
                           {
                              if(SUBE==1)
                               {
                                  delay_us(1500); //90°
                                   output_low( PIN_C2);
                                   SUBE=0;
                                }
                                while(SUBE==0);
                          } 

                        for(i=0;i<255;i++)
                               {
                                  if(SUBE==1)
                                  {
                                      delay_us(2500); //180°
                                      output_low( PIN_C2);
                                       SUBE=0;
                                   }
                                  while(SUBE==0);
                                    }

                 }
}

 

 

Descargas

Software XIDE v1.0

Descarga el software XIDE v1.0 

Práctica 15 – PIC – Bootloader – CCS

Descargar código en PIC C Compiler de la práctica 15.

AVR
Atmel Studio 7
Atmel Studio 7
Programador XCU
Programador XCU

Descripción

En esta práctica se implementa el control de giro de un servomotor, usando el PWM de los módulos X-UNO o X-NANO. El servomotor podrá girar en las siguientes posiciones: 0º, 90º, 180º.

 

Materiales:

1 x Módulo X-UNOX-NANO. Comprar

1 x Módulo programador XCU. Comprar

1 x Módulo X-AVR. Comprar

1 x Servomotor SG90. Comprar

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

1 x Cable micro USB.

 

Software:

Windows 7 o posterior.

Atmel Studio 7. Descarga

 

Procedimiento

1. En el apartado de "Diagrama esquemático", que se encuentra a continuación, selecciona tu módulo, realiza las conexiones que se muestran en la imagen y conéctalo a la computadora.

2. Al final de esta práctica, en el apartado de "Descargas", puedes encontrar los archivos del código fuente, o bien copiarlo del apartado de "Código" que se encuentra más abajo.

3. Si descargaste el archivo del paso 2, omite este paso. Si copiaste el código, ejecuta Atmel Studio 7, pega el código en un nuevo proyecto y realiza la compilación.

4. Programa el código que descargaste o compilaste en el módulo. En el siguiente link encontrarás un manual para compilar tu proyecto en Atmel Studio 7. En el siguiente link encontrarás un manual de Atmel Studio para programador XCU.

5. Al terminar de programar, el programa de esta práctica se ejecutará.

 

Diagrama esquemático

 

X-UNO
X-UNO

 

Código

Código

/*

AUTOR: MICROSIDE TECHNOLOGY S.A. DE C.V.

FECHA: JUNIO 2019

*/

/**************************************************************************

Controlar la posición de un servo por medio del módulo PWM interno.

**************************************************************************/
#define F_CPU 16000000
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#define SERVO_ON PORTB |= (1<<PORTB1)                                    //Se define SERVO_ON que envía en alto el pin B1
#define SERVO_OFF PORTB &= ~(1<<PORTB1)                              //Se define SERVO_OFF que envía en bajo el pin B1
unsigned int i = 0;                                                                                 //Variable para los for
unsigned int q = 0;                                                                                 //Variable para los for principal
unsigned int Ta = 2;                                                                               //Tiempo mínimo en alto
unsigned int Tb = 198;                                                                          //Tiempo máximo en bajo
                                                                                                             //Ta+Tb = 200. Es igual a 20ms de ciclo de trabajo

void PWM()                                                                                           //Subrutina ciclo de trabajo
 {
   for(i=0;i<=Ta;i++)                                                                                  //Tiempo en alto
   {
     SERVO_ON;
     _delay_us(100);                                                                                 //Retardo en 100 us = .1 ms
   }
    for(i=Tb;i>=1;i–)                                                                                 //Tiempo en bajo
   {
    SERVO_OFF;
    _delay_us(100);                                                                               //Retardo en 100 us = .1 ms
   }
 }
int main() {
   while(1)
   {
      for(int C=0;C<=5;C++)
      {
        _delay_ms(50);
        Ta=2;
        Tb=198;                                                                  //Ciclo para 0°
        PWM();
      }
    _delay_ms(1000);
     for(int C=0;C<=5;C++)
      {
       _delay_ms(50);
       Ta=13;
       Tb=187;                                                                 //Ciclo para 90°
       PWM();
      }
      _delay_ms(1000);
    for(int C=0;C<=5;C++)
     {
      _delay_ms(50);
      Ta=22;
      Tb=178;                                                                 //Ciclo para 90°
      PWM();
     }
      _delay_ms(1000);
    }
}

 

 

Descargas

Práctica 15-AVR-XCU

Descargar código en Atmel Studio 7 de la práctica 15.

 

 

 

 

Fecha

agosto 13, 2019

Categoría

Prácticas CCS-AS7

EnglishSpanish