PicManía by RedRaven
 

Búsqueda personalizada

 

EXPERIMENTOS : MOTOR DC con L298N

 
 

Ese es mi primer experimento con un Motor DC controlándolo desde el PIC. Para este caso he utilizado el driver de National L298N por la sencilla y simple razón de que era el único que tenía disponible.

 

Experimentando con un Motor d.c. usando el driver L298N

 
Primera parte: Los elementos reciclados.
 

Gracias a mi compañero de trabajo Jesús Mateos me he conseguido un artilugio que calza un par de motores d.c. Maxon A-Max (corriente continua) de 12V con reductoras y encoder incluido. Así que a desmontarlos y utilizarlos para este experimento.

 


Aquí lo tenéis mas en detalle:
 

 

La electrónica original comanda estos motores mediante unos Puente-H LMD18200T (de los que ya me he pedido unos samples) sin embargo mientras llegan vamos a acometer este trabajo con otro tipo de driver del que si tengo existencias.
 

 
Segunda parte: El driver a utilizar, el L298N.
 
Este driver sirve para dos motores, pero en este primer experimento solo vamos a utilizar uno de los "canales" olvidándonos terapéuticamente del segundo de ellos.
 
Lo primero es el Datasheet que no olvidemos es y debe ser siempre lo primero. En él tenemos el muy fundamental pinout del driver:
 

 
Tercera parte: Algo en forma de esquema y el PCB.
 
A modo de introducción, algo jocosa por cierto, pero interesante os pongo el primer esquema que monté a mano con bolígrafo, donde aparecen las notas que tomé del datasheet y otras de varios esquemas que encontré por Internet:
 

 
Sin embargo y de forma bastante mas académica también he realizado el mismo esquema en Eagle v4.16r2:
 

 
Cuya cara de componentes queda de la siguiente forma:
 

 
Y las pistas (haciendo click sobre ella la podéis descargar en formato PDF)
 

 
Cuarta (y última) parte: Haciendo que funcione.
 
No he podido resistirme, y antes de realizar el PCB como Dios manda me he tirado a rematar de cabeza sobre una de esas placas taladradas y he montado la versión cutre de este circuito:
 

 
Y aquí está todo completo: El PIC (18F1320) el Driver y el Motor, junto al MAX232 para monitorizar y comandar su funcionamiento:
 

.jpg

 
Y por último el programa que lo hace funcionar, con las funciones Stop(), Forward() y Reverse():
 
     
  #include <18f1320.h>
#fuses HS,NOMCLR,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(clock=20000000)
#use rs232(baud=115200, xmit=PIN_B1, rcv=PIN_B4)

#include <ctype.h>

#define MOTORDC_CTRL1 PIN_B2
#define MOTORDC_CTRL2 PIN_A3
#define MOTORDC_ENPWM PIN_B0

static char command;

#int_rda
void serial_isr(void){

  if(kbhit()){
    command=getc();
  }
}

void stop(void) {

  output_low(MOTORDC_CTRL1);
  output_low(MOTORDC_CTRL2);
  output_low(MOTORDC_ENPWM);
}

void forward(void) {

  output_low(MOTORDC_CTRL2);
  output_high(MOTORDC_CTRL1);
  output_high(MOTORDC_ENPWM);
}

void reverse(void) {

  output_low(MOTORDC_CTRL1);
  output_high(MOTORDC_CTRL2);
  output_high(MOTORDC_ENPWM);
}

void pres_menu(void){

  printf("\r\nA 18F1320 listen on RS-232");
  printf("\r\n Motor DC driver by L298N");
  printf("\r\n");
  printf("\r\n[?] This menu");
  printf("\r\n[F] Forward");
  printf("\r\n[R] Reverse");
  printf("\r\n[S] Stop");
  printf("\r\n\n>");

}

void main(void) {

  int1 valid_command;
  int8 i, step;

  disable_interrupts(global);
  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);
  setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
  setup_timer_0(RTCC_OFF);
  setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
  setup_timer_2(T2_DISABLED,0,1);
  setup_timer_3(T3_DISABLED);
  port_b_pullups(FALSE);
  set_tris_a(0b00000000);
  set_tris_b(0b00010000);

  stop();
  delay_ms(1000);

  command='\0';
  enable_interrupts(int_rda);
  enable_interrupts(global);
  pres_menu();

  do {

    if(command!='\0'){
      command=toupper(command);
      valid_command=0;
      printf("%c\r\n>",command);

      if(command=='?'){
        pres_menu();
        valid_command=1;
      }
      if(command=='F'){
        printf("> Forward\r\n>");
        Forward();
        valid_command=1;
      }
      if(command=='R'){
        printf("> Reverse\r\n>");
        Reverse();
        valid_command=1;
      }
      if(command=='S'){
        printf("> Stop\r\n>");
        Stop();
        valid_command=1;
      }

      if(!valid_command) printf("?\r\n>");
      command='\0';
    }
  } while (TRUE);
}
 
 
 

 

 

 

 

 

Esta página se modificó el 27/12/2008


Esta página usa la letra Ñ

Nota pública importante sobre las consultas al Webmaster de PicManía.


Sugerencias a Picmanía... (que serán leídas pero seguramente no podrán ser contestadas)

Esta página pertenece al grupo de páginas de Diego RedRaven

 

 



Nota: Esta página Web esta repleta de imágenes, textos, logotipos y demás material extraídos de los mas variados medios de los que no soy ni autor ni depositario de los correspondientes derechos de autor, uso y/o reproducción. Si Ud. es depositario de dichos derechos y desea que el material correspondiente sea eliminado de esta Web no dude en ponerse en contacto conmigo mediante e-mail y será inmediatamente retirado. Gracias.
 
Visitas
Totales : 16768 Hoy: 1 Activas: 1 Vistas: 16768

Esta página fue modificada el 07-08-2010 15:42:21

           
 DmSoft WAMP Escribir Unreal