Control de velocidad de un motor desde una PC

Hola, este es el primer tema q creo, el tema lo busqué y no encuentre algun tema relacionada (O no lo busqué bien), bueno el trabajo que quiero realizar es enviar las revoluciones desde la pc (100RPM) y q el motor gire a esa velocidad, y tambien cuando este este girando a esa velocidad se envie datos hacia la PC y que me grafique esa velocidad.
Ha estuve haciendo un codigo que cuenta los pulsos del encoder por RB0 en un cierto tiempo, y asi convertirlo a RPM y enviarlo a la PC para que sea graficado(VB6.0). Lo armé y si funciona hasta frecuencias 1k-1.5Khz.
Este es el codigo que envia los RPM hacia la PC (De seguro q no sea muy bueno)

BUeno el problema es que he intentado recibir(en el pic) los RPM, pero no logro visualizar si realmente ha llegado, como haria esto......... y estoy pensando luego de obtener los rpm, usar PWM

PHP:
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=20000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>
long contador,pulsos;
Int valor,desborde;
float rpm;

#INT_EXT
ext_isr()
{
Contador=contador+1;
}
#INT_TIMER0
void timer0_isr(void)
{
desborde=desborde+1;
}
void main()
{
  enable_interrupts(global);
  enable_interrupts(int_ext);
  enable_interrupts(int_timer0);
  setup_counters(rtcc_internal,rtcc_div_128);
  set_timer0(0);
  ext_int_edge(h_to_l);
  lcd_init();
  contador=0;
  desborde=0;
      while (1)
        {
           if(contador==1)
             {
                set_timer0(0);
             }   
           if (desborde<15) //38
             {
               pulsos=contador;
               delay_ms(200);
               set_timer0(0);
               contador=0;
               desborde=0;
             }
            rpm=pulsos/2.33333;//2.8944; //2.345  ultimo dividir por 3.1034
            //putc(rpm);
           printf("%3.2f\n\r ",rpm);  //\n\r
           lcd_gotoxy(1,1);
           printf(lcd_putc,"c=%lu",pulsos);
           delay_ms(100);
           lcd_putc("\f");  //aumentado
           lcd_gotoxy(1,2);
           printf(lcd_putc,"vel=%frpm",rpm);
           delay_ms(100);
           }
}
 
Última edición por un moderador:
saludos jormer.. me preguntaba si ese control de rpm te funciono??... estoy interesado en hacer uno..
gracias
 
Atrás
Arriba