Autor Tema: Limitador de RPM con PIC16F628A  (Leído 13291 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Limitador de RPM con PIC16F628A
« Respuesta #15 en: 14 de Octubre de 2008, 16:07:02 »
sube el esquematico  a ver de que se trata

Hola amigo PIK....  Perdón por la demora pero es que me fui a unas mini vacaciones a Villa Urquiza Entre Rios, aprovecho para contarles que es un lugar hermoso y muy tranquilo en esta fecha para ir a descanzar......  Bueno volviendo al tema...   Que querés que te suba el esquematico del circuito con el LM2917??

Saludos Francisco

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Limitador de RPM con PIC16F628A
« Respuesta #16 en: 20 de Octubre de 2008, 15:21:27 »
Muchachos, de esta forma pienso ingresar los pulsos del platino al PIC...  Me parece muy buena  Corrijanmé si me equivoco




Pikman...  será necesario usar el modulo CCP??   que diferencia hay entre usar el CCP y usar interrupcion externa por RB0?


GRACIAS !!!
« Última modificación: 20 de Octubre de 2008, 15:32:29 por elfrancho »

Desconectado cbas2001

  • PIC10
  • *
  • Mensajes: 3
Re: Limitador de RPM con PIC16F628A
« Respuesta #17 en: 16 de Septiembre de 2010, 20:13:31 »

Citar
Que solucioón me darias amigo pikman??? 

elfrancho, en principio te cuento que para nada soy de los que no les gusta brindar informacion, solamante que estoy demasiado ocupado hace un tiempo y no le estoy dedicando al foro el tiempo que se merece, asi que perdon por no responderte.

No tenes resolucion porque cuando tenes bajas revoluciones la cantidad de pulsos no la podes dividir, lo que tenes que hacer es medir el tiempo entre pulso y pulso, que sera el periodo, y a eso le haces la inversa y listo tenes la frecuencia por lo tanto las revoluciones, aca te pego un codigo que funciona, y lo podes adaptar al 16f628 porque tiene modulo CCP, que lo usa capturando los valores del timer1 entre un pulso y el otro, podes usar un XTAL de 4 MHZ y asi vas a tener incremento de 1 ms en el timer1 y es mas facil sacar las cuentas, de cualquier manera con 10 Mhz podes tener mas resolucion pero para lo que vos queres con 4 Mhz sobra, espero que te sirva, de hecho la rutina hace lo que vos queres.

saludos
ARIEL



Código: [Seleccionar]
//**********************************************************************
//
// Calcula la velocidad de rotacion contando el tiempo entre pulsos
//
//**********************************************************************

#include <16F877.h>

#fuses HS, NOWDT, NOLVP
#device *=16 ADC=10

#define COMENZAR  0
#define CONTANDO  1
#define TERMINO   2
#define VECES 2

#use delay (clock=10000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)



// Variables Globales

char cEstado;
int32 int32Cont;
float fRpm;

//************************************************************************
// RUTINAS DE INTERRUPCION

#int_ccp1
void CCP1__isr(void) {

    if (cEstado == CONTANDO) {       // Segundo Pulso
        int32Cont += CCP_1;           // Toma el valor de captura
        cEstado = TERMINO;           // Evito que vuelva a procesarse durante esta interrupcion
    }
    if (cEstado == COMENZAR)  {      // Primer Pulso
        set_timer1(0);               // Restaura el timer1 en este pulso
        cEstado = CONTANDO;
        int32Cont = 0;
    }
} // Fin CCP1__isr()


//************************************************************************
// CALCULO DE LA VELOCIDAD de rotacion

void velocidad(void){

    char cCnt;
    int32 int32Suma;
    long tiempo;

    cEstado = TERMINO;
    while (TRUE) {
      int32Suma = 0;
      int32Cont = 0;
      for (cCnt = 0; cCnt < VECES; cCnt++) {       // Acumula VECES lecturas
        cEstado = COMENZAR;                        // Permite comenzar a la interrupcion
        while (cEstado != TERMINO) {               // Espera hasta que se activa la interrupcion
          tiempo =  get_timer1();
          if (tiempo > 65500) {                    // Controla si el contador excedio el tiempo. Valor Original = 60000
            set_timer1(0);                         // Restaura el timer1 para seguir sumando el tiempo de este pulso
            int32Cont += tiempo;                   // Acumula para velocidades de viento bajas
          }                                        // Fin if
        }                                          // Fin if
        int32Suma += int32Cont;                    // Acumula los tiempos
      }                                            // fin for

      int32Suma /= VECES;                          // Saca el promedio de las VECES que se tomo la medicion
      fRpm = 1 / ( float ) int32Suma / 8 * 2.5;    // Periodo en uS
      fRpm *= 1000000;                             // Periodo en segundos
      printf("\rFRECUENCIA %05.1f Hz\r\r",fRpm);
      fRpm *= 60;                                 // Periodo en minutos
     printf("               %f     \r", fRpm);
    }

}// Fin velocidad()





//*****************************************************************
// MAIN
//
void main (void){

    setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8 );
    setup_ccp1 (CCP_CAPTURE_FE);                    // Captura cada pulso = 0 (0v)

    delay_ms (200);

    enable_interrupts (INT_CCP1);
    enable_interrupts (GLOBAL);
    while(1){
      velocidad();
    }                                                //Fin While

} // Fin Main

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










que bueno que encontraste esa solucion tengo el mismo problema pero lamentablemente se programar en picbasic
te molesto mucho si me haces un ejemplo de cuenta el tiempo entre pulsos en basic???

desde ya te agradesco la molestia
saludos

Desconectado kyler182

  • PIC10
  • *
  • Mensajes: 10
Re: Limitador de RPM con PIC16F628A
« Respuesta #18 en: 10 de Noviembre de 2010, 16:24:28 »
sube el esquematico  a ver de que se trata

 Que querés que te suba el esquematico del circuito con el LM2917??

Saludos Francisco

Hola! El tema va muy interesante pero veo que ya se ha abandonado, al igual que pikman a mi tambié me gustaría que subieras el esquematico del circuito con el LM2917. Saludos!