Práctica 16 – Servomotor + Potenciómetro

 

INTRODUCCIÓN

 

En esta práctica se implementa el control de giro de un servomotor a través de un potenciómetro. Se usa el módulo PWM para el control del servomotor y el módulo ADC para variar la posición por medio del potenciómetro.

 

 

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, a través de un potenciómetro. Se usa el módulo PWM para el control del servomotor y el módulo ADC para variar la posición por medio del potenciómetro conectado a los módulos X-TRAINER P8 o X-TRAINER P8 DIP40 o X-TRAINER P8 DIP28 con el PIC18F45K50 o PIC18F25K50.

 

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 Potenciómetro de 10 KOhms. 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 posición de un servomotor por medio de un potenciometro

utilizando los modulos PWM y ADC

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

#include <18F45K50.h>                                         // Incluye la librería para el PIC ( para X-TRAINERp8DIP28: #include <18F25K50.h> )

#device ADC=10                                                   // 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 Duty;                                                             //variable para ajustar el valor del PWM

int1 SUBE;

#int_TIMER0

void TIMER0_isr()

{

output_high( PIN_C2);                                                //Salida Pin_C2 50Hz

SUBE=1;

set_timer0(5780);                                                         // 20 miliSegundos

}

void main()

{

  set_tris_c (0xFB);                                                           // C2 salida de pulsos

  setup_timer_0 (T0_INTERNAL|T0_DIV_4);

  enable_interrupts (int_TIMER0) ;

enable_interrupts (GLOBAL) ;

  setup_adc_ports (sAN3);                                                  //configuracion deL canal ADC en A0

  setup_adc (ADC_CLOCK_INTERNAL);

  set_adc_channel (3);                                                         //conversion analogica por canal 0

    while(1)

         {

                if (SUBE == 1)

               {

                    delay_us (DUTY);

                    output_low (PIN_C2) ;

                     SUBE = 0;

                 }

 

                  if (SUBE == 0)

                      {

                          DUTY = read_adc ();                                                            //lectura del potenciometro

                          DUTY = DUTY * 2;                                                             //ajuste de rango según cada motor

                          DUTY += 500;

                          }

 

                           while (SUBE == 0) ;

                }

}

 

 

Descargas

Software XIDE v1.0

Descarga el software XIDE v1.0 

Práctica 16– PIC – Bootloader – CCS

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

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, a través de un potenciómetro. Se usa el módulo PWM para el control del servomotor y el módulo ADC para variar la posición por medio del potenciómetro conectado a los módulos X-UNO o X-NANO.

 

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 Potenciómetro de 10 KOhms. 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-NANO
X-UNO

X-NANO

 

Código 

Código
“”]

 

/**

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

FECHA: JUNIO 2019

*/

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

Controlar la posición de un servomotor por medio de un potenciómetro utilizando los módulos PWM y ADC.

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

#include <stdio.h>

#include <avr/io.h>

#define F_CPU 16000000

#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 ValorPot;                                                                     //Variable para la lectura del pot
unsigned int i = 0;                                                                            //Variable para los for del pulso
unsigned int Tam = 2;                                                                      //Tiempo mínimo en alto
unsigned int TbM = 198;                                                                  //Tiempo máximo en bajo
                                                                                                          //Tam + TbM = 200. Es igual a 20ms de ciclo de trabajo
unsigned int Al = 0;                                                                            //Variable de tiempo en alto
unsigned int Ba = 0;                                                                          //Variable de tiempo en bajo
unsigned int Pasos = 0;                                                                     //Pasos


  void SistIni()

  {

     ADMUX|= (1<<REFS0);                                                                // Selecciona Vref

     ADCSRA|= (1<<ADPS2)| (1<<ADPS1)| (1<<ADPS0)| (1<<ADEN);    //Habilita ADC.

   }

 void SERVO()                                                                                    //Subrutina ciclo de trabajo
{
   for(i=0;i<=Al;i++)                                                                              //Tiempo en alto
 {
    SERVO_ON;
    _delay_us(100);                                                                               //Retardo en 100 us = .1 ms
 }
  for(i=Ba;i>=1;i–)                                                                                 //Tiempo en bajo
 {
  SERVO_OFF;
  _delay_us(100);                                                                                  //Retardo en 100 us = .1 ms
 }
}

uint16_t ReadADC(uint8_t ADCchannel)

  {

   ADMUX = (ADMUX&0xF0)| (ADCchannel&0x0F);                             //Selecciona el canal del ADC.

   ADCSRA|= (1<<ADSC);                                                                      // Modo de conversión unica.

   while (ADCSRA& (1<<ADSC));                                                         //Espera hasta que se complete la conversión de ADC.

   return ADC;

 }

int main()

{

 SistIni ();                                                                                                   //Inicializa SisInit

 while (1)

 {

   ValorPot = ReadADC (0);                                                                     //Lectura del valor del potenciómetro.
   Pasos=ValorPot*.0195;                                                                        //ValorPot * .0195 para que el valor de Pasos no sea mayor que 20
   Al=Tam+Pasos;                                                                                    //Asigna valor de tiempo en alto de 2 a 22
   Ba=TbM-Pasos;                                                                                   //Asigna valor de tiempo en bajo de 198 a 178
   SERVO();                                                                                             //Se llama a la subrutina ciclo de trabajo
 }

}

 

Descargas

Práctica 16-AVR-XCU

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

 

 

 

 

Fecha

agosto 13, 2019

Categoría

Prácticas CCS-AS7

EnglishSpanish