TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: darck_khronos en 16 de Mayo de 2010, 20:40:04

Título: Pulsos a ciertos grados de una senoide
Publicado por: darck_khronos en 16 de Mayo de 2010, 20:40:04
Que tal colegas, espero alguien pueda ayudarme ya que me enrede un poco con mi programa.

Les explico estoy trabajando en un envio de señales a ciertos angulos de una onda Senoidal, ya tengo mi circuito para detectar el cruce por cero y el micro con las pequeñas pruebas que le eh realizado trabaja justo como lo espero, ahora entro a la parte de realizar las maniobras para que pueda yo mover este pulso solo a cierto angulo.

Un ejemplo si quiero que el pulso se trabaje cada 90 grados, al detectar el cruce por cero haria un delay de aproximadamente 4.16x10-3S.

Ponga uno que el calculo sea lo de menos mi problema es el querer hacerlo con delay que por el momento es la idea que se me ah ocurrido claro.

Código: C
  1. #include <12F675.h>
  2. #use delay(clock=4000000)
  3. #fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
  4. #use standard_io (a)
  5. int i;
  6. void main(void)
  7. {
  8.    for(;;)
  9.     {
  10.   if(input(PIN_a0)){
  11.     output_high(PIN_a4);
  12.     delay_us(10);
  13.     output_low(PIN_a4);
  14.     while(input(PIN_a0));}  
  15.        
  16.       if(input(pin_a0)==0)
  17.        output_low( PIN_A4 );
  18.     }
  19. }

este es mi programita de ejemplo.

como yo lo pensaba era realizar dos Delay, el primero determinaría hasta que punto se prendiera y el segundo el tiempo de encendido, el cual seria mas o menos de 10 a 20 us.

Si alguien puede aportar alguna otra idea le agradezco, mientras continuo con el programa, espero tambien que a alguien le sirva.
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: MLO__ en 16 de Mayo de 2010, 20:48:31
Es para algun control de fase?

Puedes usar un timer tambien no?

Saludos
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: darck_khronos en 16 de Mayo de 2010, 21:14:56
Estoy buscando la manera de controlar el disparo de un SCR, pero sin la necesidad de usar potenciómetros ni capacitores, por mucho un optoacoplador, y también mas que nada para que el disparo de este sea en algun angulo deseado, como comente arriba por decir ah 10º, 90º, 160º, etc.
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: migsantiago en 16 de Mayo de 2010, 23:23:59
Hola, en la última sección de mi semitesis puedes encontrar un ejemplo de control de iluminación con triac, pic y lcd.

http://www.migsantiago.com/index.php?option=com_content&view=article&id=4&Itemid=5
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: darck_khronos en 20 de Mayo de 2010, 21:15:42
Que tal colegas aqui les traigo un avance.

(http://img299.imageshack.us/img299/6428/pulsos.jpg)
Esto es lo que esto haciendo con el pulso, como veran estoy moviendo el pulzo Azul dentro de toda la senoide amarilla.

El detalle ahora dentro de mi codigo es que no me permite trabajar con la Lcd de 3 pines, al parecer tengo problemas con mi Mclr, aun que ya lo declare como puerto de salida aqui les muesto mi codigo.

Código: C
  1. #include <12F675.h>
  2. #use delay(clock=4M)
  3. #fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
  4. #define GP0 PIN_A0
  5. #define GP1 PIN_A1
  6. #define GP2 PIN_A2
  7. #define GP4 PIN_A4
  8. #define GP5 PIN_A5
  9. #use standard_io (a)
  10. #define LCD_E     PIN_A2
  11. #define LCD_CK    PIN_A3  
  12. #define LCD_DAT   PIN_A4
  13. #include "lcd3.c"
  14. int s;
  15. void pulsos()
  16. {
  17.   if(input(PIN_a0)==1)
  18.       {
  19.     s=s*100;  
  20.     delay_us(s);
  21.     output_high(PIN_a1);
  22.     delay_us(10);
  23.     output_low(PIN_a1);
  24.     while(input(PIN_a0));
  25.       }
  26. }
  27.  
  28. void tiempo()
  29. {
  30.    if(input(pin_a5)==1);
  31.    s=s+10;
  32.    printf(lcd_putc,"Incrementando %d",s);
  33. }
  34.  
  35. void main()
  36. {
  37. s=s*0;
  38. lcd_init();
  39. delay_ms(100);
  40.    for(;;)
  41.    {
  42.       tiempo();
  43.       pulsos();
  44.    }
  45. }

Otra cosa, estoy usando el detector de Cruce por cero que muestras en tu tesis Santiago, mas que jeje lo tengo simulado ya que solo corrígeme, la gnd de mi circuito la conectaría a la corriente alterna o seria mediante o como aqui muestro mi simulación

(http://img72.imageshack.us/img72/3810/circuito.jpg)

Claro que en Simulacion no pasa nada pero ya en el potro puedo hacer lumbre
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: migsantiago en 20 de Mayo de 2010, 21:40:41
Usa fusibles para prevenir accidentes.

La tierra del circuito se une al NEUTRO de la pared. Asegúrate de identificar plenamente cuál es LINEA y cuál es NEUTRO.
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: darck_khronos en 20 de Mayo de 2010, 22:10:25
Usa fusibles para prevenir accidentes.

La tierra del circuito se une al NEUTRO de la pared. Asegúrate de identificar plenamente cuál es LINEA y cuál es NEUTRO.

Ok Por esa parte no habra problema, sobre mi codigo, no sabes por que el Mclr no me lo detecta como salida?
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: migsantiago en 20 de Mayo de 2010, 22:37:10
GP3 sólo funciona como entrada en los PIC12.
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: Diego E. en 20 de Mayo de 2010, 22:59:45
Hola darck_khronos, para mis aplicaciones yo utilizo lo siguiente, mira si te sirve algo.

saludos.
(http://galeon.com/aselmo/fotos-foros/PWM-AC.GIF)

Acá te dejo el ejemplo completo.
Título: Re: Pulsos a ciertos grados de una senoide
Publicado por: darck_khronos en 21 de Mayo de 2010, 00:06:59
Gracias por el Aporte Diego, Mañana en la escuela checare un detalle que me pareció interesante dentro de la simulación

(http://img237.imageshack.us/img237/165/ruido.png)

y también con esto me ayudas a ver mi error y corroborar lo que dice Santiago.