| 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: |
| 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
|