Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Leer RPM optoelectronicamente con micrcontrolador

ivandeadlocked

Becerro
Desde
19 Jul 2009
Mensajes
11
Que tal, tengo poca experiencia con microcontroladores,
manejo pics y el arduino en C, ya he medido RPM de motores con arduino pero lo hice con una libreria exclusiva para eso, mi pregunta es: como puedo leer RPM o el intervalo de tiempo que hay entre cada barra de un encoder ( uso una rueda encoder como la de los mouse) ? Solamente necesito saber como leerlo no importa si es en pseudocodigo o si es directamente lenguaje C o basic, ya con ese untervalo de tiempo y con unas cuantas formulas sacaria las RM de un motor y las manejaria "a mi antojo" , gracias. XD

:bakayin:
 
Este es el codigo de ejemplo que provee MikroC en su documentacion:
Cuenta los pulsos que llegan al pin T1CKI con muestreo de 1 segundo
Ocupa un LCD, un 16F887 y un Osc 20MHz

Código:
 // LCD module connections
  sbit LCD_RS at RB4_bit;
  sbit LCD_EN at RB5_bit;
  sbit LCD_D4 at RB0_bit;
  sbit LCD_D5 at RB1_bit;
  sbit LCD_D6 at RB2_bit;
  sbit LCD_D7 at RB3_bit;

  sbit LCD_RS_Direction at TRISB4_bit;
  sbit LCD_EN_Direction at TRISB5_bit;
  sbit LCD_D4_Direction at TRISB0_bit;
  sbit LCD_D5_Direction at TRISB1_bit;
  sbit LCD_D6_Direction at TRISB2_bit;
  sbit LCD_D7_Direction at TRISB3_bit;
  // End LCD module connections

  const unsigned short FILLER = 256-132;    // = 132 * 128us = 16896us
  unsigned int FREQ;
  unsigned char TALLY;
  unsigned int TIMER1 absolute 0x0E;
  char HertzStr[12];

void interrupt(){
  TALLY--;
  if (TALLY == 0){
    TMR2 = TMR2 + FILLER;
    TALLY = 31;
  }
  if (TALLY == 30){
    TMR1ON_bit = 0;
    FREQ = TIMER1;
    TIMER1 = 0;
    TMR1ON_bit = 1;
    TMR2 = 0;
  }
  TMR2IF_bit = 0;
}

void SetupT1asCounter(){

  T1CON = 0b00000110;
  TIMER1 = 0x0000;
  TMR1ON_bit = 1;
  TMR1CS_bit = 1;
  TALLY = 30;
}

void SetupT2asTimer(){
  TMR2 = 0;
  T2CON =  0b01111110;
  PIR1 = 0x00;
  PIE1 = 0x02;
  INTCON = 0b11000000;
}

void General_Init(){

  TRISA = 0;
  PORTA = 0;
  TRISB = 0;
  PORTB = 0;
  TRISC = 1;
  PORTC = 0;
  TRISD = 0;
  PORTD = 0;

  ANSEL = 0;
  ANSELH = 0;
  
  C1ON_bit = 0;
  C2ON_bit = 0;

  CCP1CON = 0;
  FREQ = 0;

  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);

  SetupT1asCounter();
  SetupT2asTimer();

}
void main(){

  General_Init();

  while(1){

    Delay_ms(50);
    WordToStr(FREQ, HertzStr);

    Lcd_Out(1, 1, "HERTZ");
    Lcd_Out(2, 1, HertzStr);
  }
}

Y aca encontraras muchos ejemplos en OpenSource.
 
Gracias por el link, estoy en proceso de aprendizaje... ñ_ñ
 
Que tal! no se si todavía necesites eso pero para medir los RPM yo lo haría midiendo la frecuencia y para esto necesitas un microcontrolador que contenga el modulo CCP especialmente captura digital. Ojala te sirva esto como orientación o si necesitas puedo pasarte un ejemplo que hice ya hace tiempo saludos!!
 
Ya implemente este programa(gracias por la pag y el codigo naziel), pero aun asi, entre mas opciones tenga mejor,
y si, si me gustaria que compartas con la comunidad como hacerlo, gracias ingelektron.
 
Volver
Arriba