Autor Tema: Diagrama de flujo CCS  (Leído 12409 veces)

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

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #15 en: 09 de Mayo de 2008, 04:57:28 »
la pregunta va referente al PWM interno de mi pic, en el algoritmo de control envio cada ciclo el Duty a un convertidor, yo tengo puesto D=D+dx, pero se que no se escribe así, como hago para poner la instrucción de enviar (de salida) en CCS el Duty??

El "dx" me sale en el diagrama de flujo del metodo IncCond, no se si es una constante, supongo que si, que ahi marco la resolución, el mínimo cambio de estado, puede ser??

Gracias por explicarme lo del tiempo de retardo.

Saludos cordiales a todos.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #16 en: 09 de Mayo de 2008, 10:43:06 »
Saludos!  :-)
Lo que tienes que hacer es que dentro del main, pero antes del while, escribes:

setup_ccp1(CCP_PWM);                    //Esto le dice al modulo ccp que lo vas a usar como generador de PWM.
setup_timer_2(T2_DIV_BY_1,255,1);  //Aquí estableces el período mediante configurar el timer2 (pre-escala, postcala...)

y cuando quieras cambiar el duty, ya dentro del while, lo haces con la siguiente instrucción:

set_pwm1_duty(duty);

Donde duty es la variable que estás usando que reprenta la variación del ancho de pulso.
Y no más, es todo!  :)

Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #17 en: 20 de Mayo de 2008, 11:59:18 »
hola a todos, he intentado compilar mi programa, y no funcionó, me dice que tengo que declarar las variables, las declaro o defino y nada, me pueden ayudar, gracias

Código: C#
  1. #include <16f877.h>         //pic a utilizar
  2. #fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
  3. #use delay (clock=20000000)
  4.  
  5. int dx;
  6. static Vk,Ik,dV,dI,V,I;
  7. static D;
  8.  
  9. dx = 10;
  10.  
  11. void algoritmo()
  12. {
  13.  
  14. setup_ccp1(CCP_PWM);                    
  15. setup_timer_2(T2_DIV_BY_1,255,1);
  16.  
  17. // COMIENZO
  18. // Lecturas
  19.  
  20. while(TRUE)
  21.    {
  22. ...
  23.    set_adc_channel(0);

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #18 en: 20 de Mayo de 2008, 12:02:17 »
el codigo completo:

Código: C#
  1. #include <16f877.h>         //pic a utilizar
  2. #fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
  3. #use delay (clock=20000000)
  4.  
  5. int dx;
  6. static Vk,Ik,dV,dI,V,I;
  7. static D;
  8.  
  9. dx = 10;
  10.  
  11. void algoritmo()
  12. {
  13.  
  14. setup_ccp1(CCP_PWM);                    
  15. setup_timer_2(T2_DIV_BY_1,255,1);
  16.  
  17. // COMIENZO
  18. // Lecturas
  19.  
  20. while(TRUE)
  21.    {
  22.    set_adc_channel(0);
  23.    Vk = read_adc();            // Vk e Ik son el valor actual
  24.    
  25.    delay_us(50);  
  26.  
  27.    set_adc_channel(1);
  28.    Ik = read_adc();
  29.  
  30.    dV = Vk - V;          // V e I son el valor anterior  
  31.    dI = Ik - I;
  32.  
  33.    if(dV == 0)
  34.       {
  35.      
  36.       if(dI != 0)
  37.          {
  38.          
  39.          if(dI > 0)
  40.             {
  41.            
  42.             D = D + dx;
  43.            
  44.             }
  45.          else
  46.             {
  47.            
  48.             D = D - dx;
  49.            
  50.             }
  51.          
  52.          }
  53.      
  54.    else
  55.       {
  56.  
  57.       if(dI/dV != -(Ik/Vk))
  58.          {
  59.  
  60.          if(dI/dV > -(Ik/Vk))
  61.             {
  62.          
  63.             D = D - dx;
  64.          
  65.             }
  66.          else  
  67.             {
  68.  
  69.             D = D + dx;
  70.  
  71.             }
  72.  
  73.          }
  74.      
  75.       }
  76.    V = Vk;
  77.    I = Ik;
  78.    set_pwm1_duty(D);
  79.  
  80.    }
  81.  
  82. }
  83. }

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #19 en: 20 de Mayo de 2008, 12:05:14 »
Saludos mue!
Mira allí en las líneas 6 y 7 estás diciendo que las variables son estáticas, pero no las estás declarando, es decir, tienes que colocar el tipo de variable apropiada.
Por ejemplo:
Código: [Seleccionar]
static [u]int[/u] Vk,Ik,dV,dI,V,I;

Bueno eso es si fuese de tipo int; si es otro tipo lo colocas allí y listo.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #20 en: 20 de Mayo de 2008, 13:56:28 »
hola

Duda existencial, en el algoritmo de contro, Vk y Ik, les debo asignar una patilla analogica???

A la hora del esquema físico, a la misma patilla o diferente,

He mirado por manuales y por ejemplo AN0 (del pic) dicen que es una salida analogica...

Saludos cordiales.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #21 en: 20 de Mayo de 2008, 14:06:36 »
Según veo en tu código, Vk e Ik son los valores que estás leyendo de tensión y corriente... claro que ambos son tensiones, que estás colocando en los canales analógicos 0 y 1 (AN0 y AN1), respectivamente.
Lo que tienes que hacer es ver en la datasheet del pic que estás usando en qué pines están ubicados esos canales (AN0 y AN1) y allí conectar lo que correspondería a los valores analógicos de Vk e Ik.

He mirado por manuales y por ejemplo AN0 (del pic) dicen que es una salida analogica...
Me imagino que quieres decir "entrada analógica".

Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #22 en: 20 de Mayo de 2008, 19:46:45 »
gracias, si que son una entrada,

tengo un problemilla, el setup_timer_2(t2_div_1,255,1), que valores tengo que poner de t2_div,etc... para conseguir 5KHz de PWM en vez de 20KHz?? lo he provado de todas las maneras... t2_div_16,64,1.....

gracias, he mirado el funcionamiento del PWm y lo entiendo pero poder escalar la frecuencia....

un saludo.

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #23 en: 21 de Mayo de 2008, 09:56:17 »
Ya lo he encontrado, para una frecuencia de pwm de 5 KHz , con un cristal de 20 MHz, el timer se configura asi:

setup_timer_2(T2_DIV_By_4, 249, 1),  ahora bien lo he encontrado sin explicación, alguien me podria decir por que coge 249 y el periodo dividido entre 4??

gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #24 en: 21 de Mayo de 2008, 13:20:38 »
Saludos!

T2_DIV_BY_4: Indica que la pre-escala del timer es de 4. Es decir, por cada 4 ciclos del timer el contador (registro tmr2) incrementará en 1.
249: Indica el período. Es decir, el timer comienza a contar de 0 y termina cuando llega a 249 (Y otra vez vuelve a 0).
1: es la post -escala. En este caso cuando el timer llegue a 249 se activará la bandera de interrupción por timer2. Si por ejemplo, en vez de 1 fuera 3, el timer contaría 3 veces de 0 a 249 antes de hacer set la bandera.

Así que tenemos: (20E6)^-1*4*249=0.1992ms
(este es el período. El 4 es porque el reloj fuente para el tmr2 es la frecuencia de oscilación del cristal dividida entre 4, es decir el período es 4 veces más grande).
Entonces: Freq=1/P=1/(0.1992E^-3)=5.020Hz=5,02KHz.

Amigo mue, si en vez de 249 usas 250 te da exactamente 5KHz.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado kcire

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: Diagrama de flujo CCS
« Respuesta #25 en: 23 de Mayo de 2008, 17:04:29 »
Hola mue la verdad hasta ahora no entendi bien que es lo que quieres hacer, pero bueno aqui
dejo la simulación del codigo que propuso el maestro Modulay hice las correciones que dijo
firepic, bueno puedo decir que simula en Proteus pero no garantizo sea la solución.

Espero sirva de algo, adjunto la simulación y espero sus comentarios.
"La imaginación es más rica que el lenguaje... sugiere con palabras, la imaginación podrá hacer el resto."

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: Diagrama de flujo CCS
« Respuesta #26 en: 23 de Mayo de 2008, 23:48:42 »
Hola a todos. Firepic, en realidad el valor de PR2 de 249 es correcto, da una frecuencia de PWM de 5KHz exacta. Repasemos la formula de calculo de la frecuencia del PWM:

fPWM = 1/ ((PR2 + 1). 4 . (1/fosc). Prescalador)

donde fPWM es la frecuencia de salida del PWM, fosc es la frecuencia del cristal, y Prescalador y PR2 son los valores que configuramos mediante setup_timer_2 asi:

Código: [Seleccionar]
setup_timer_2(Prescalador, PR2, Postescalador);
Como pueden darse cuenta el postescalador no tiene influencia en el PWM y puede colocarse en un valor arbitrario cualquiera (dentro de los valores permitidos de mas esta decir).

Nos estamos escribiendo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #27 en: 26 de Mayo de 2008, 12:46:51 »
Gracias Gonzalo!
Tienes razón, había olvidado lo del PR2+1...  :?
Entonces en realidad 249 son 250 iteraciones.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado mue

  • PIC10
  • *
  • Mensajes: 21
Re: Diagrama de flujo CCS
« Respuesta #28 en: 26 de Mayo de 2008, 12:54:46 »
Hola amiguetes,

tengo problemas con mi algoritmo, estoy convirtiendo de analogico a digital bien??? device=8??? Float.........no se que es, y si el algoritmo esta bien como puedo saber si esta haciendo la conversion...

Código: C#
  1. #include <16f877.h>         //pic a utilizar
  2. #device adc=8   //????    
  3. #fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT //ordenes. para el programador
  4. #use delay (clock=20000000)
  5.  
  6. const int dx=10;
  7. static int Vk,Ik,dV,dI,V,I;
  8. int D;
  9.  
  10. //setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
  11.  
  12. void main()
  13. {
  14.  
  15. setup_ccp1(CCP_PWM);                    
  16. setup_timer_2(T2_DIV_BY_4,249,1);
  17.  
  18. // COMIENZO
  19. // Lecturas
  20.  
  21. setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
  22. setup_adc(ADC_CLOCK_DIV_2); //antigua setup_adc(ADC_CLOCK_DIV_32);
  23.  
  24.  //set_tris_a(0xff);
  25.  
  26. while(TRUE)
  27.    {
  28.    set_adc_channel(0);
  29.    delay_us(20);
  30.    Vk = (float)read_adc();            // Vk e Ik son el valor actual
  31.    
  32.    delay_us(50);  
  33.  
  34.    set_adc_channel(1);
  35.    delay_us(20);
  36.    Ik = (float)read_adc();


Habia pensado que para hacer la conversion meto la variable Vk en un puerto entero de 8 bits y miro bit por bit, que me da, como hago eso???

muchas gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Diagrama de flujo CCS
« Respuesta #29 en: 26 de Mayo de 2008, 13:13:49 »
Bueno con device adc=8 me parece que estás desaprovechando precisión en la medición... pues el pic 16f877 permite conversión a 10 bits...
Entonces mejor sería device adc=10.
Lo que no estoy seguro es lo que estás haciendo:
Código: [Seleccionar]
  Vk = (float)read_adc();            // Vk e Ik son el valor actual
Bueno ya algún experto nos explicará, pero no sé si es recomendable hacer la conversión A/D y la conversión de entero a float en una misma instrucción...
Pero dices que no sabes si está haciendo la conversión... lo has probado en proteus?
Pues así como lo tienes debería funcionar...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything