Autor Tema: Ayuda con un proyecto!!!  (Leído 2016 veces)

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

Desconectado mansoconductor

  • PIC10
  • *
  • Mensajes: 5
Ayuda con un proyecto!!!
« en: 11 de Enero de 2005, 10:25:00 »
Este consiste en contar pulsos de un encoder en un cierto deltat y meterlo a una formula de Ts, y luego disparar unos IGBTs, es bien rebuscado, pues necesito llevar una maquina asincronica de 2 pares de polos, con rotor devanado , a velocidades superior a la sincronica(sobre 1500 rpm),  solo necesito como adquirir los pulsos para completar el programa..el convertidor con Igbts esta en el lado del rotor, el estator esta conectado ala linea.
ademas  debo poder adelantar,atrasar las secuencias de disparo, con el objetivo de "mover" la Fmm del rotor respecto a la del estator, para obtener torke maximo

solo necesito una ayuda con la adquisicion de pulsos(Px), no lo tengo muy claro eso..


#include <16f877.h>


#pragma  use delay (clock=20000000)   /*Reloj del microprocesador*/


#fuses   XT,NOPROTECT,NOWDT


tris_a(11111)///   ver entradas
#use fixed_io(b_outputs=PIN_B1,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6)

// inputs
#define encoder     PIN_C0
#define adelantar   PIN_A2
#define atrasar     PIN_A3

// OUTPUTs
#define IGBT1       PIN_B1
#define IGBT2       PIN_B2
#define IGBT3       PIN_B3
#define IGBT4       PIN_B4
#define IGBT5       PIN_B5
#define IGBT6       PIN_B6

// constantes

#define deltat       0.015
#define Pe           3755.86

char contador;


void seleccion(float ts)
{


   switch (contador) {
   case 1:  output_high(IGBT1);   // encender IGBT 1,3,5
            output_low(IGBT2);
            output_high(IGBT3);
            output_low(IGBT4);
            output_high(IGBT5);
            output_low(IGBT6);

         delay_ms(ts);

            output_low(IGBT1);   // apagar IGBT 1,3,5
            output_low(IGBT3);
            output_low(IGBT5);

   break;

   case 2: output_high(IGBT1);  // encender IGBT 1,5,6
           output_low(IGBT2);
           output_low(IGBT3);
           output_low(IGBT4);
           output_high(IGBT5);
           output_high(IGBT6);

         delay_ms(ts);

           output_low(IGBT1);   // apagar IGBT 1,5,6
           output_low(IGBT5);
           output_low(IGBT6);

    break;

   case 3: output_high(IGBT1);  // encender IGBT 1,2,6
           output_high(IGBT2);
           output_low(IGBT3);
           output_low(IGBT4);
           output_low(IGBT5);
           output_high(IGBT6);
         delay_ms(ts);

          output_low(IGBT1);   // apagar IGBT 1,2,6
          output_low(IGBT2);
          output_low(IGBT6);

      break;

   case 4: output_low(IGBT1);    // encender IGBT 2,4,6
           output_high(IGBT2);
           output_low(IGBT3);
           output_high(IGBT4);
           output_low(IGBT5);
           output_high(IGBT6);

         delay_ms(ts);

          output_low(IGBT2);   // apagar IGBT 2,4,6
          output_low(IGBT4);
          output_low(IGBT6);

      break;


   case 5: output_low(IGBT1);    // encender IGBT 2,3,4
           output_high(IGBT2);
           output_high(IGBT3);
           output_high(IGBT4);
           output_low(IGBT5);
           output_low(IGBT6);

         delay_ms(ts);

         output_low(IGBT2);   // apagar IGBT 2,3,4
         output_low(IGBT3);
         output_low(IGBT4);



      break;

   case 6: output_low(IGBT1);   // encender IGBT 3,4,5
           output_low(IGBT2);
           output_high(IGBT3);
           output_high(IGBT4);
           output_high(IGBT5);
           output_low(IGBT6);

         delay_ms(ts);

         output_low(IGBT3);   // apagar IGBT 3,4,5
         output_low(IGBT4);
         output_low(IGBT5);


   };

}

//#int_timer1               //   esto no lo tengo claro
// Px=get_timer1()


main()
{
   contador=0;

   int Px;
   float a;
   float b;
   float ts;

//   setup_timer1( T1_internal);                        // esta parte no me esta clara

//  periodotimer0=4*preescaler*(8-valor inicial)/20*10e6



   a = 0.04*Pe*deltat;
   b = 6*(Pe*deltat - 0.04*Px);


   if (b > 0)
   {
    ts =1000* a/b;
    if (contador == 6) contador = 0;
    contador++;
   };

   if (b < 0)
   {
    ts = -1000*a/b;
    if (contador == 1) contador = 7;
    contador--;
   };


   seleccion(ts);





           if  (!input(pin_A2))
              {

                        if (contador == 6) contador = 0;
               contador++;
              };
            if (!input(pin_A3))
                {
            if (contador == 1) contador = 7;
               contador--;
                };

}



Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Ayuda con un proyecto!!!
« Respuesta #1 en: 11 de Enero de 2005, 20:14:00 »
Asi que haciendo una especie de variador de frecuencia con el metodo de los seis pasos. Aqui hay un pequeño codigo que te puede servir para hacer la captura del la frecuencia, con interrupcion del timer0 a los 65ms y cuenta de pulsos externos en el timer1. Pudes ver la frecuencia con el hiperteminal.

Salud2

#include <16F873A.h>
#device adc=10
#use delay(clock=4000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

int16 pulsos=0;

#INT_TIMER0
captura_pulsos()
{
  pulsos=get_timer1();
  printf("cuenta: %lu",pulsos);
  disable_interrupts(INT_TIMER0);
  disable_interrupts(GLOBAL);
  while(input(pin_b7));
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_EXTERNAL);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   disable_interrupts(INT_TIMER0);
   disable_interrupts(GLOBAL);
   set_tris_a(0x00);
   set_tris_b(0xff);

   while(!input(PIN_B7));
   puts("prueba"Giño;
   delay_ms(1000);

   while(1)
   {
      if (input(PIN_B7))
      {
         set_timer0(0);
         enable_interrupts(INT_TIMER0);
         enable_interrupts(GLOBAL);
         set_timer0(2);    // cuenta 4/4000000*256*(256-2) aprox 65ms
         set_timer1(0);
         delay_ms(500);
      }
   }
}


 

anything