Práctica 13 – Motor DC + Driver L298N

 

INTRODUCCIÓN

 

En esta práctica se implementa el control de un motor de corriente directa, usando el módulo PWM (modulador de ancho de pulso) para aumentar o disminuir la velocidad y un driver LM298N para realizar un cambio de giro.

 

Selecciona la plataforma y entorno de programación.

 

 

PIC
AVR
ARDUINO
PIC
PIC C Compiler
PIC C Compiler
Bootloader PIC18FX5K50
Bootloader PIC18FX5K50

Descripción

En esta práctica se usa el módulo PWM (Pulse Width Modulation) del pin C2, para el aumento y disminución de la velocidad de giro de un motor DC. Con ayuda de un driver LM298N que se encuentra conectado a los pines C0 y C1 de los módulos X-TRAINER P8 o X-TRAINER P8 DIP40 o X-TRAINER P8 DIP28 con el PIC18F45K50 o el PIC18F25K50 se realiza una inversión de giro.

 

Materiales:

1 x Módulo X-TRAINER P8 o X-TRAINER P8 DIP40 o X-TRAINER P8 DIP28. Comprar

1 x Driver L298N.

1 x Motor DC 9 a 12 volts.

1 x Pila de 9 volts.

1 x Conector para pila cuadrada de 9 volts.

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
X-TRAINER P8 DIP 40
X-TRAINER P8 DIP 28
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
*/
/**************************************************************************
Esta práctica consiste en variar la velocidad de un motor usando el módulo
PWM.
**************************************************************************/

#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

//-------------------------------------------------------------------------------
#define IN_1 pin_C0
#define IN_2 pin_C1

int16 VELOCIDAD=0;                                 //Variable para ajustar el valor del PWM1 en CCP1

int1 SUBE=1;                                             //Variable para control de ascenso y descenso del valor del PWM


void main()
{
      setup_timer_2 (T2_DIV_BY_16, 255, 1);      //Configura Timer2, periodo ajustado a 342uS
      setup_ccp1 (CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);        //Configura el módulo CCP para uso del PWM
      while (TRUE)
            {
                output_bit (IN_1, 1);                                    //Dirección del motor
                output_bit (IN_2, 0) ;
                SUBE = 1;

                 while (VELOCIDAD < 1020&&SUBE)
                       {
                                                                                               //Se va incrementando del valor en el PWM hasta el máximo
                              VELOCIDAD += 5;                                     //Se incrementa en pasos de 15 el ciclo de trabajo
                              set_pwm1_duty (VELOCIDAD);                  //Salida Pin_C2
                              delay_ms (40);                                           //Cada 40 mili segundo
                        }

                     SUBE = 0;

                 while (VELOCIDAD > 5&& ! SUBE)
                          {
                                                                                                   //Se va reduciendo el valor en el PWM hasta el mí­nimo
                                  VELOCIDAD -= 5;                                      //Se reduce en pasos de 15 el ciclo de trabajo
                                  set_pwm1_duty (VELOCIDAD);                   //Salida Pin_C2
                                  delay_ms (40) ;
                            }

                            SUBE = 1;
                            output_bit (IN_1, 0);                                     //Alto del motor
                            output_bit (IN_2, 0);
                            delay_ms (1000) ;

                           output_bit (IN_1, 0);                                      //Dirección del motor
                           output_bit (IN_2, 1) ;
                            SUBE = 1;

                    while (VELOCIDAD < 1020&&SUBE)
                             {
                                                                                                        //Se va incrementando del valor en el PWM hasta el máximo
                                   VELOCIDAD += 5;                                      //Se incrementa en pasos de 15 el ciclo de trabajo
                                   set_pwm1_duty (VELOCIDAD);                    //Salida Pin_C2
                                   delay_ms (40);                                             //Cada 40 mili segundo
                              }

                             SUBE = 0;

                      while (VELOCIDAD > 5&& ! SUBE)
                               {
                                                                                                         //Se va reduciendo el valor en el PWM hasta el mí­nimo
                                     VELOCIDAD -= 5;                                         //Se reduce en pasos de 15 el ciclo de trabajo
                                     set_pwm1_duty (VELOCIDAD);                      //Salida Pin_C2
                                     delay_ms (40) ;
                                }

                          SUBE = 1;
                          output_bit (IN_1, 0);                                        //Alto del motor
                          output_bit (IN_2, 0);
 
                          delay_ms (500) ;
            }
}

 

 

 

 

Descargas

Software XIDE v1.0

Descarga el software XIDE v1.0 

Práctica 13– PIC – Bootloader – CCS

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

AVR
MikroC PRO
Atmel Studio 7
MikroC PRO
Programador XCU
Programador XCU

Descripción

En esta práctica se usa el módulo PWM (Pulse Width Modulation) del pin D6 para el aumento y disminución de la velocidad de giro de un motor DC. Con ayuda de un driver LM298N que se encuentra conectado a los pines B1 y B2 de los módulos X-UNO o X-NANO se realiza una inversión de giro.

 

Materiales:

1 x Módulo X-UNO o X-NANO. Comprar

1 x Módulo programador XCU. Comprar

1 x Módulo X-AVR. Comprar

1 x Driver L298N.

1 x Motor DC 9 a 12 volts.

1 x Pila de 9 volts.

1 x Conector para pila cuadrada de 9 volts.

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

1 x Cable micro USB.

 

Software:

Windows 7 o posterior.

MikroC PRO for AVR. 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, verifica en el apartado de librerías que este seleccionada la necesaria para esta práctica como se muestra en la siguiente imagen y realiza la compilación. En el siguiente link encontrarás un manual para compilar en MikroC PRO for AVR.

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-UNO
X-NANO
X-UNO

X-NANO

 

Código

Código

/*

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

FECHA: JUNIO 2019

*/

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

En esta práctica se usa el módulo PWM (Pulse Width Modulation), para el aumento y disminución de la velocidad, así como el uso del puente H LM298N para el cambio giro.

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

#define IN_1_ON PORTB |= (1<<PORTB1)                                                //Enciende IN_1

#define IN_1_OFF PORTB &= ~(1<<PORTB1)                                          //Apaga IN_1

#define IN_2_ON PORTB |= (1<<PORTB2)                                                //Enciende IN_2

#define IN_2_OFF PORTB &= ~(1<<PORTB2)                                           //Apaga IN_2

char i;                                                                                                           //Variable contadora

 

SisInit(void)

{

      i = 0;                                                                                                         // Se inicializa el valor de current_i

      DDD6_bit = 1;                                                                                          // Se establese PORTD pin 6 como salida para el PWM

      PWM1_Init (_PWM1_FAST_MODE, _PWM1_PRESCALER_64, _PWM1_INVERTED, i); //Inicializa el modo del PWM

      DDB1_bit = 1;                                                                                          //B1 como salida

      DDB2_bit = 1;                                                                                          //B2 como salida

 }

 

void main()

{

    SisInit ();                                                                                                      //Inicializa la función SisInit

 

     while (1)

     {

       IN_1_ON;                                                                                                 //Enciende IN_1

       IN_2_OFF;                                                                                                //Apaga IN_2

       for (i = 255; i > 0; i--)                                                                                 //Disminuye el valor del PWM

       {

        Delay_ms (10);                                                                                        // Retardo 10ms

        PWM1_Set_Duty (i);                                                                                // Establece elvalor de curren_i

       }

       for (i = 0; i < 255; i++)                                                                                 //Aumenta el valor del PWM

       {

       Delay_ms (10);                                                                                          // Retardo 10ms

       PWM1_Set_Duty (i);                                                                                  // Establece elvalor de curren_i

       }

      IN_1_OFF;                                                                                                  //Apaga IN_1

      IN_2_OFF;                                                                                                  //Apaga IN_2

      Delay_ms(1000);                                                                                         // Retardo 1000ms

      IN_1_OFF;                                                                                                   //Apaga IN_1

      IN_2_ON;                                                                                                     //Enciende IN_2

      for (i = 255; i > 0; i--)                                                                                    //Disminuye el valor del PWM

      {

      Delay_ms (10);                                                                                             // Retardo 10ms

      PWM1_Set_Duty (i);                                                                                    // Establece elvalor de curren_i

      }

      for (i = 0; i < 255; i++)                                                                                  //Aumenta el valor del PWM

      {

      Delay_ms (10);                                                                                            // Retardo 10ms

      PWM1_Set_Duty (i);                                                                                    // Establece elvalor de curren_i

      }

      IN_1_OFF;                                                                                                   //Apaga IN_1

      IN_2_OFF;                                                                                                   //Apaga IN_2

      Delay_ms(1000);                                                                                         // Retardo 1000ms

      }

}

 

Descargas

Software XIDE v1.0

Descarga el software XIDE v1.0 

Práctica 13-XCU-AVR

Descargar el código en mikroC PRO for AVR de la práctica 13.

Atmel Studio 7
Programador MKII LITE
Programador MKII LITE

Descripción

En esta práctica se usa el módulo PWM (Pulse Width Modulation) del pin D6 para el aumento y disminución de la velocidad de giro de un motor DC. Con ayuda de un driver LM298N que se encuentra conectado a los pines B1 y B2 de los módulos X-UNO o X-NANO se realiza una inversión de giro.

 

Materiales:

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

1 x Módulo Programador MKII LITE. Comprar

1 x Módulo X-AVR. Comprar

1 x Driver L298N.

1 x Motor DC 9 a 12 volts.

1 x Pila de 9 volts.

1 x Conector para pila cuadrada de 9 volts.

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 y programar tu proyecto en Atmel Studio 7.

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

*/

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

En esta práctica se usa el módulo PWM (Pulse Width Modulation), para el aumento y disminución de la velocidad, así como el uso del puente H LM298N para el cambio giro.

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

#define F_CPU 16000000

#include <avr/io.h>

#include <util/delay.h>

#define IN_1_ON PORTB |= (1<<PORTB1)                                                     //Enciende IN_1

#define IN_1_OFF PORTB &= ~(1<<PORTB1)                                                 //Apaga IN_1

#define IN_2_ON PORTB |= (1<<PORTB2)                                                       //Enciende IN_2

#define IN_2_OFF PORTB &= ~(1<<PORTB2)                                                   //Apaga IN_2

void SisInit(void)

{

 

   DDRB|= (1<<DDB1); // PIN B1 como salida

   DDRB|= (1<<DDB2); // PIN B2 como salida

}

 

int main(void)

{

  DDRD|=(1<<6);                                                                                              //PIN OC0A como salida obligatorio para PWM

  TCCR0A=0b10000011;                                                                                   //PWM por el OC0A, no invertido,

  TCCR0B=0b00000001;

  OCR0A=0;

  while(1)

  {

     IN_1_ON;                                                                                                   //Enciende IN_1

     IN_2_OFF;                                                                                                  //Apaga IN_2

     for (OCR0A=0;OCR0A<255;OCR0A++)                                                    //Aumenta el valor del PWM

     {

     _delay_ms(10);                                                                                           //Retardo de 10ms

     }

     for (OCR0A=255;OCR0A>0;OCR0A--)                                                       //Disminuye el valor del PWM

     {

      _delay_ms(10);                                                                                          //Retardo de 10ms

     }

     IN_1_OFF;                                                                                                    //Apaga IN_1

     IN_2_OFF;                                                                                                   //Apaga IN_2

     _delay_ms(1000);                                                                                       //Retardo de 1000ms

     IN_1_OFF;                                                                                                  //Apaga IN_1

     IN_2_ON;                                                                                                   //Enciende IN_2

     for (OCR0A=0;OCR0A<255;OCR0A++)                                                   //Aumenta el valor del PWM

     {

      _delay_ms(10);                                                                                          //Retardo de 10ms

      }

     for (OCR0A=255;OCR0A>0;OCR0A--)                                                       //Disminuye el valor del PWM

     {

       _delay_ms(10);                                                                                          //Retardo de 10ms

      }

       IN_1_OFF;                                                                                                 //Apaga IN_1

       IN_2_OFF;                                                                                                //Apaga IN_2

       _delay_ms(1000);                                                                                     //Retardo de 1000ms

       }

}

 

Descargas

Práctica 13-MKII-AVR

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

ARDUINO

Descripción

En esta práctica se usa el módulo PWM (Pulse Width Modulation) del pin D11 para el aumento y disminución de la velocidad de giro de un motor DC. Con ayuda de un driver LM298N que se encuentra conectado a los pines D9 y D10 de los módulos X-UNO, X-MEGA o X-NANO se realiza una inversión de giro.

 

Materiales:

1 x Módulo X-UNO, X-MEGA o X-NANO. Comprar

1 x Módulo Programador XCU. Comprar

1 x Driver L298N.

1 x Motor DC 9 a 12 volts.

1 x Pila de 9 volts.

1 x Conector para pila cuadrada de 9 volts.

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

1 x Cable micro USB.

 

Software:

Windows 7 o posterior.

Arduino IDE. 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 software Arduino IDE, pega el código en un nuevo proyecto, 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 y programar en Arduino IDE.

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

 

Diagrama esquemático

 

X-UNO
X-MEGA
X-NANO
X-UNO

X-MEGA

X-NANO

 

Código

Código

/*

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

FECHA: JUNIO 2019

*/

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

En esta práctica se usa el módulo PWM (Pulse Width Modulation), para el aumento y disminución de la

velocidad, así como el uso del puente H LM298N para el cambio giro.

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

int IN_1 = 9;                                                         //Pin de control de dirección 1

int IN_2 = 10;                                                       //Pin de control de dirección 2

int MOTOR = 11;                                                  //Pin de control de velocidad

int SUBE;                                                             //Control e indicador de dirección

int VELOCIDAD;                                                 //Almacena valor de la velocidad

void setup()

{

  pinMode(IN_1, OUTPUT);                               //Configuramos como salida

  pinMode(IN_2, OUTPUT);                               // Configuramos como salida

  pinMode(MOTOR, OUTPUT);                         // Configuramos como salida

}

void loop()

{

      digitalWrite(IN_1,1 );                                  //Dirección del motor

      digitalWrite(IN_2,0 );

      SUBE=1;

      while(VELOCIDAD<255 && SUBE){        //Se va incrementando del valor en el PWM hasta el máximo

      VELOCIDAD++;                                       //Se incrementa el ciclo de trabajo

      analogWrite(MOTOR,VELOCIDAD);       //Salida Pin 11

      delay(10);                            

      }

      SUBE=0;

      while(VELOCIDAD>0 && !SUBE) {        //Se va reduciendo el valor en el PWM hasta el mí­nimo

      VELOCIDAD--;                                       //Se reduce el ciclo de trabajo

      analogWrite(MOTOR,VELOCIDAD);     //Salida Pin 11

      delay(10);

      }

      SUBE=1;

      digitalWrite(IN_1,0 );                              //Alto del motor

      digitalWrite(IN_2,0 );            

      delay(1000);

      digitalWrite(IN_1,0 );                              //Dirección del motor

      digitalWrite(IN_2,1 );

      SUBE=1;

      while(VELOCIDAD<255 && SUBE){     //Se va incrementando del valor en el PWM hasta el máximo

      VELOCIDAD++;                                     //Se incrementa el ciclo de trabajo

      analogWrite(MOTOR,VELOCIDAD);     //Salida Pin 11

      delay(10);                       

      }

      SUBE=0;

      while(VELOCIDAD>0 && !SUBE) {      //Se va reduciendo el valor en el PWM hasta el mí­nimo

      VELOCIDAD--;                                     //Se reduce el ciclo de trabajo

      analogWrite(MOTOR,VELOCIDAD);    //Salida Pin 11

      delay(10);

      }

      SUBE=1;

      digitalWrite(IN_1,0 );                             //Alto del motor

      digitalWrite(IN_2,0 );

      delay(1000);

}

 

 

Descargas

Práctica 13 – Arduino

Descarga código en Arduino de la práctica 13.

Fecha

agosto 13, 2019

Categoría

Prácticas XIDE

× WhatsApp