Autor Tema: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)  (Leído 23247 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« en: 18 de Febrero de 2010, 18:00:40 »
Este proyecto lo hice en Marzo del 2009 pero por ser un trabajo pagado no pude publicarlo en ese entonces. Sin embargo, lo redacte (un viernes 27 de ese tiempo) y todo listo para ser publicado... hasta hoy, asi que ahi va  :mrgreen:  

Hace 3 dias un amigo me dijo que hiciera un proyecto que involucrara un PICTeMoL (xD) y bueno, ayer lo termine y oy lo publico.

La idea era que se pudiera controlar la velocidad del motor con el teclado y que se mostrara en el LCD y asi. Bueno, en si, lo que hace alfinal de cuentas es: Controla la velocidad de giro del motor (RPM) con PWM, siendo esta modificable atravez del teclado (tb el giro), y en el lcd se muestra los RPM, el PWM actual, y el sentido del motro (horario u antihorario).

El pic, lcd y demas, enconcreto que he usado son: PIC18F4550 a 48mhz (entrada 4 mhz), LCD 16x2, Teclado matricial 4x4, 2 relays de 12v y un motor DC DMM-F019A0-F01 de 24V KITASHIBA que viene con un encoder (H9700).

Mas detalles sobre el motor y el encoder: AQUI y AQUI

El esquema, echo en proteus 7.2 SP0


Aglunas imagenes:


Un videito:

Y como no! el frimware del pic echo en CCS 4.023
Código: [Seleccionar]
 
#INCLUDE <18F4550.h>

#FUSES XTPLL, NOMCLR, PLL1, CPUDIV1, NOUSBDIV, PUT, NOBROWNOUT, NOWDT, NOVREGEN, NOPBADEN, NOLVP, PROTECT

#USE DELAY (CLOCK = 48 000 000)

#USE FAST_IO(D)


#INCLUDE "INC\kbd_lib.c"


#DEFINE LCD_DB4   PIN_B2
#DEFINE LCD_DB5   PIN_B3
#DEFINE LCD_DB6   PIN_B4
#DEFINE LCD_DB7   PIN_B5

#DEFINE LCD_RS    PIN_A3
#DEFINE LCD_RW    PIN_A2
#DEFINE LCD_E     PIN_A1

#INCLUDE "INC\flex_lcd.c"


#DEFINE NumeroDeRejillasDelEncoder  100
#DEFINE SumarBoton   10
#DEFINE RestarBoton   10
#DEFINE MSTiempoDeEspera   600
#DEFINE MSMuestreoLCD   250

#DEFINE B0  0
#DEFINE B1  110
#DEFINE B2  210
#DEFINE B3  310
#DEFINE B4  410
#DEFINE B5  510
#DEFINE B6  610
#DEFINE B7  710
#DEFINE B8  850
#DEFINE B9  1023

int16 B[10] = {B0, B1, B2, B3, B4, B5, B6, B7, B8, B9};

char StrGiro[3][13] = {"Horario\0", "Antihorario\0", "-\0"};
int8 Giro = 2;

int8 segundos = 0, minutos = 0;
int16 ms = 0, ms2 = 0;

int1 HayPulsoNuevoYSinProcesar = false, HayPulsosDelSensor = false;
int16 veces_desbordado = 0, periodo_alto_en_ticks = 0, TMR1_NumVecsDesbordado = 0;

int16 ValPWM = 0;

float const SegPorCadaTick = 0.00000008333;


void main (void)
{
   char mitecla = 0;
   float PeriodoDelPulsoEnS = 0;
   int16 RPM = 0;
  
   disable_interrupts(GLOBAL);
  
   delay_ms(300);
  
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   set_timer1(0);
   ext_int_edge(L_TO_H);  
  
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32);
   set_timer0(28036);
  
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16, 255, 1);
  
   kbd_init();
  
   lcd_init();
  
   delay_ms(100);
  
   lcd_putc("\f");
  
   delay_ms(100);
  
   enable_interrupts(INT_TIMER0);
   enable_interrupts(Int_Ext);      
   enable_interrupts(Int_Timer1);    
   enable_interrupts(GLOBAL);
  
   while(true)
   {      
      if (ms >= MSMuestreoLCD)
      {
         ms = 0;
            
         printf(lcd_putc, "\fRPM:%04LuPWM:%04Lu\nGiro:%s", RPM, ValPWM, StrGiro[Giro]);
      }
  
      set_pwm1_duty(ValPWM);
      
      mitecla = kbd_getc();
      switch (mitecla)
      {
         case '+':
            if (ValPWM != 1023)
            {
               if (ValPWM > (1023 - SumarBoton))
               {
                  ValPWM = 1023;
               }
               else
               {
                  ValPWM += SumarBoton;
               }
            }
            else
            {
               ValPWM = 0;
            }
            break;
        
         case '-':
            if (ValPWM != 0)
            {
               if (ValPWM < (RestarBoton))
               {
                  ValPWM = 0;
               }
               else
               {
                  ValPWM -= RestarBoton;
               }
            }
            else
            {
               ValPWM = 1023;
            }
            break;    
            
         case 'S':
            output_toggle(PIN_A0);
            break;
            
         case 'C':
            ValPWM = 0;
            output_toggle(PIN_A0);
            break;
        
         case 'H':
            break;
            
         case 'E':
            break;
            
         case '\0':
            break;
            
         default:
            ValPWM = B[mitecla - 48];
            break;
      }
      
      if (HayPulsoNuevoYSinProcesar)
      {
         PeriodoDelPulsoEnS = (SegPorCadaTick * ((65536 * TMR1_NumVecsDesbordado) + periodo_alto_en_ticks));      
      
         RPM = (int16)(60 / (PeriodoDelPulsoEnS * NumeroDeRejillasDelEncoder));
              
         HayPulsoNuevoYSinProcesar = false;
      }
      else
      {
         if (ms2 >= MSTiempoDeEspera)
         {
            RPM = 0;
            Giro = 2;
         }
      }
   }  
}


#INT_TIMER0
void Contador(void)
{
   set_timer0(28036);
  
   output_toggle(PIN_C0);

   ms += 100;
   ms2 += 100;
}

#INT_TIMER1
void InterrupcionTimer1(void)
{
   veces_desbordado++;
}

#INT_EXT
void Encoder(void)
{  
   periodo_alto_en_ticks = get_timer1();
   TMR1_NumVecsDesbordado = veces_desbordado;
  
   set_timer1(0);
   veces_desbordado = 0;
  
   Giro = input(PIN_B1);
      
   HayPulsoNuevoYSinProcesar = true;
   HayPulsosDelSensor = true;  
  
   ms2 = 0;
}

Quemado al PIC a travez del MPLAB 8.0 y el ICD2.

Y bueno, tb dejo todo adjuntado en un .RAR donde esta el hex, librerias y eso  :mrgreen:

Agradecer a LA PAGINA DE REDPIC y al mismo Redpic porque de ahi me he basado en hacer el teclado 4x4 que nunca habia usado y a Cryn que en un TEMA ANTIGUO menciona este motor diciedno todo su nombre completo del motor, ya que en el que yo tenia no se veia bien.

Agregar tb, que compatibilice este codigo para un PIC16F877 y un PIC18F452 pero con resultados malos debido a la fuente y que estos PIC's no tienen la posibilidad de quitar el hardware del MCLR por software que, en unos fallos anteriores con el 18F4550, eso daba problemas pero lo resolvi quitando el MCLR. Bueno, nose si el problma sera ese pero en el 18F4550 funciona bien.

Bueno, creo que eso es todo, espero no olvidarme de nada. Ojala les sirva de algo, cualquier duda, preguntar y sugerencia sobre filtros (porque es poca mi experiencia en motores y muchos los ruidos que causa) o lo que sea darlas porfavor :mrgreen:

Un saludete.


Todo eso es lo que escribi en ese entonces, espero le resulte de gran ayuda a alguien.

salu2.


Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #1 en: 18 de Febrero de 2010, 22:35:47 »
uuuy pero te quedó muy bien el proyecto jeremylf, felicidades.

Y gracias a ti por mencionarme, aunque creo que no hice mucho jeje, y al final terminé destrozando ese motorcito que tenía, porque me dio rabieta por quitarle ese fierro horrendo de la parte del eje de arriba y de paso que mi encoder más lo fregé.

Entonces rojo y verde era la alimentación y los datos no necesitaban pull-up, nose si podré conseguir un motor como ese, aunque vi que el fabricante hizo varios :D, creo que es de fotocopiadora no?

Igualito el motor que tenía :-/

muy buena jeremylf, saludos.
.

Desconectado JOJOJORGE5

  • PIC16
  • ***
  • Mensajes: 167
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #2 en: 19 de Febrero de 2010, 16:03:33 »
Hola

Yo tambien tengo un motor con encoder de esos, en realidad tengo varios ;-) y los pude usar, pero tambien queme algunos(2) para averiguar el coneccionado. cuando estaba construyendo mi pequeño robot, aunque al final no los use porque me fue muy dificil acoplarle reductores al motor.

me gustaria probar con los encoders que todavia tengo vivos.
gracias por publicar esta valiosa informacion.

salu2:)

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #3 en: 19 de Febrero de 2010, 20:34:47 »
Vaya, menos mal que por suerte no se me quemo a mi, y era el unico que tenia  :D

De nada, para eso estamos.

Salu2.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #4 en: 22 de Febrero de 2010, 14:52:44 »
Vaya, menos mal que por suerte no se me quemo a mi, y era el unico que tenia  :D

De nada, para eso estamos.

Salu2.

esos cables del protoboard me dan panico jejejeje a ver si lo pasas a PCB para que lo puedas trasladar sin dificultades. Felicitaciones!!!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado rozamoxo

  • PIC10
  • *
  • Mensajes: 1
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #5 en: 28 de Noviembre de 2012, 14:39:53 »
dizculpa no tendraz una imagen mejor del circuito lo ke paza ez ke no puedo vizualizar bien la imagen. :( :(

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #6 en: 28 de Noviembre de 2012, 14:51:55 »
 En el archivo .rar  esta todo.Tanto el codigo como el circutio diseñado para proteus

Desconectado ovalegar

  • PIC10
  • *
  • Mensajes: 1
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #7 en: 16 de Mayo de 2013, 00:46:33 »
buen proyecto, felicitaciones por el trabajo hecho. tengo una consulta: tengo el mismo motor pero necesito saber de cuantos puntos es para saber si me va a servir ya que necesito uno de 1000, como averiguo esto?. El numero de rendijas del disco (al lado del encoder) es el que me indica el numero de puntos?. gracias de antemano
« Última modificación: 16 de Mayo de 2013, 00:52:37 por ovalegar »

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #8 en: 25 de Mayo de 2013, 02:25:31 »
Que tipo de controlador usaste? un PID? o algo asi con una carga en el motor sigue controlando de igual manera? de antemano gracias

Desconectado caliman

  • PIC10
  • *
  • Mensajes: 1
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #9 en: 21 de Marzo de 2014, 01:20:20 »
Muchas personas se aprovechan y juegan con nuestra ignorancia, pocas como ustedes incentivan nuestros sueños de aprender lo deseado.
Mil gracias por regalarnos sus valiosos conocimientos!!!!   ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #10 en: 21 de Marzo de 2014, 08:33:59 »
No se ve el circuito, podrías ponerlo con mas definición??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #11 en: 21 de Marzo de 2014, 11:59:17 »
En el .rar esta el circuito MGLSOFT.

Desconectado akrs

  • PIC10
  • *
  • Mensajes: 11
Re: PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #12 en: 18 de Julio de 2015, 18:54:10 »
cuando le cargo el programa y le pongo encender me bota esto el proteus " no power supply specified for net 12v in power rail configuration" , que significa eso ???

Desconectado jorge luis

  • PIC10
  • *
  • Mensajes: 13
Re:PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #13 en: 23 de Octubre de 2015, 03:28:05 »
Hola jeremylf, una pregunta de cuantos PPR(pulsos por revolución) son estos motores?, agradeceria mucho tu respuesta.

Desconectado akrs

  • PIC10
  • *
  • Mensajes: 11
Re:PIC + Teclado + Motor + LCD = PICTeMoL (xD!)
« Respuesta #14 en: 19 de Noviembre de 2015, 22:42:09 »
que version de proteus utilizaste ?


 

anything