Autor Tema: Fuente de corriente con Buck y PIC  (Leído 6771 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Fuente de corriente con Buck y PIC
« en: 02 de Marzo de 2019, 16:14:06 »
Estoy haciendo una fuente de corriente para cargar baterías, basado en un regulador Buck, y controlado con un PIC con un PID digital.

El esquema es el siguiente:

 

* image-2019-03-02 (2).jpg
(42.35 kB, 1280x853 - visto 317 veces)
 

La frecuencia del PWM del PIC es de 31KHz, con 10 bit de resolución. El problema que tengo, que no regula bien la corriente, si pongo en corto la salida (con R11=1ohm y R8=6k8) regula a una corriente de 1A, si coloco una lampara de 12v y 21w, regula a 0.5A, y si pongo una lampara de 12v y 5w, regula a 0.2A, la consigna la tengo puesta para que regule a 310mA.

Pienso que el problema viene por el sensado de corriente, pues si lo configuro para que funcione como un regulador de voltaje a 7v (levanto R7 del operacional y lo conecto a través de un divisor de voltaje en la salida) ese valor se mantiene constante con diferentes cargas.

Para el código del pic me baso en la an258 de microchip:

https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en012103

Y el código que uso es el siguiente:

Código: C
  1. unsigned int outPID, currSENS, currAJUSTE;
  2. signed short long Ik_old, ek_old;
  3.  
  4. /*
  5.                          Main application
  6.  */
  7. void main(void) {
  8.     // initialize the device
  9.     SYSTEM_Initialize();
  10.     EPWM1_Initialize();
  11.     Ik_old = Ki;
  12.     ek_old = 0;
  13.    
  14.     while (1) {
  15.         IO_RB5_Toggle();
  16.         currAJUSTE = 500;
  17.         currSENS = ADC_GetConversion(10);//Leo corriente con el ADC
  18.         outPID = salidaControlPID(currSENS, currAJUSTE, & Ik_old, & ek_old);
  19.         EPWM1_LoadDutyValue(outPID);//Actualizo PWM
  20.     }
  21. }

Y la función del PID:

Código: C
  1. #include <xc.h>
  2. #include "pid.h"
  3.  
  4. #define Kp 100
  5. #define Ki 10
  6. #define Kd 5
  7.  
  8. unsigned int salidaControlPID(unsigned int ADC, unsigned int Consigna, signed short long * Ik_old, signed short long * ek_old){
  9.     signed short long CV;//Control variable, valor del pwm.
  10.     signed short long Pk, Ik, Dk;
  11.     signed short long eK;//Salida comparador de error
  12.     signed short long SP;//Set Point o consigna
  13.     signed short long PVk;//Present Variable, es la lectura del ADC
  14.    
  15.    
  16.     SP = (signed short long)Consigna;
  17.     PVk = (signed short long)ADC;
  18.    
  19.     eK = SP - PVk;//Calculo del error.
  20.    
  21.     Pk = Kp * eK;//Calculo de la parte proporcional.
  22.    
  23.     Ik = *(Ik_old) + Ki*eK;//Calculo de la parte integral. Ik_old es el estado anterior de Ik.
  24.     *(Ik_old) = Ik;//Salvamos la parte integral.
  25.    
  26.     Dk = Kd * (*(ek_old) - eK);//Calculo de la parte derivativa.
  27.     *(ek_old) = eK;//Salvamos el error.
  28.    
  29.    
  30.     CV = (Pk + Ik + Dk);
  31.     if(CV > 1023)
  32.         CV = 1023;
  33.     if(CV < 0)
  34.         CV = 0;
  35.     return (unsigned int)CV;
  36. }

Variando las constantes Kp, Ki y Kd no veo diferencia en cuanto a que la corriente se mantenga en el valor deseado (310mA), por lo que pienso que es un problema hardware ¿Alguna idea?

Saludos!!!
« Última modificación: 02 de Marzo de 2019, 16:21:07 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Fuente de corriente con Buck y PIC
« Respuesta #1 en: 10 de Marzo de 2019, 01:28:29 »
Hola micro_pepe, en mi humilde opinión, lel LM358 es de muy baja calidad para un control por corriente, el LM358 es un operacional de no mucha exactitud y alto offset, por tal estás consiguiendo los bajos resultados que obtienes. Yo usaría un operacional tal como el OP77.

Por otro lado, ten en cuenta que cuando se realiza un control por corriente, la ganancia del lazo de realimentación es muy alta, casi seguro que la ganancia que estás usando es muy baja.

Un saludo.

Atte. CARLOS.

« Última modificación: 10 de Marzo de 2019, 01:33:37 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re:Fuente de corriente con Buck y PIC
« Respuesta #2 en: 10 de Marzo de 2019, 03:18:45 »
El lm358 no es muy preciso para estas funciones pero cumple, hay en el circuito faltaría un capacitor en R10 y el pin 3 del lm358 con GND porque siempre manda y un pico de voltaje al inicio del ciclo eso lo puedes ver en los pdf de los reguladores de corriente como uc384x. Puedes usar otro Uc que tienen hardware especial para este tipo de funciones y no son muy caros como los STM32 cortex m0 que cuestan menos de 0.5 dolar.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #3 en: 11 de Marzo de 2019, 16:57:28 »
Probé a subir la ganancia en el código, y no veo diferencias; tengo un OP07 por ahí, lo tengo que buscar y probar.

El condensador no hace nada, es cierto que en los uc384x lo ponen, pero no es la misma configuración, en los uc filtran los pulsos de conmutación del transistor, en mi caso es un regulador reductor o buck, y en el sitio que está colocada la resistencia de sensado de corriente (R11), la forma de onda de la corriente depende del tipo de carga, en mi caso una lampara o una batería, que no tiene cambios bruscos.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 562
Re:Fuente de corriente con Buck y PIC
« Respuesta #4 en: 11 de Marzo de 2019, 22:00:00 »
Hola, que función cumple Q2?
Yo he tenido problemas similares, pero no usaba PIC, sino que utilizaba un PWM análogo, sensando la corriente directamente desde la resistencia SHUNT.
El problema que descubrí, es que el sistema tenía baja respuesta para cambiar el ciclo de dicho PWM, por lo que afectaba variando la corriente de salida en función de la carga.
« Última modificación: 12 de Marzo de 2019, 11:45:20 por Robert76 »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #5 en: 12 de Marzo de 2019, 10:16:02 »
Hola, que función cumple Q2?

Un MOSFET entre puerta y surtidor tiene una capacidad que hay que cargar y descargar lo más rápido posible, para que la conmutación del mosfet sea rápida, Q2 lo que hace es descargar la capacidad más rápido, para que el mosfet se ponga en corte.

Yo he tenido problemas similares, pero no usaba PIC, sino que utilizaba un PWM análogo, sensando la corriente directamente desde la resistencia SHUNT.
El problema que descubrí, es que el sistema tenía baja respuesta para cambiar la fcia. de dicho PWM, por lo que afectaba variando la corriente de salida en función de la carga.

Supongo que te refieres a cambiar el ciclo de trabajo del PWM, puede que por ahí esté el problema, quizás el bucle del programa principal donde leo el valor de la corriente, aplico el PId y luego actualizo el PWM sea muy lento, o muy rápido.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 562
Re:Fuente de corriente con Buck y PIC
« Respuesta #6 en: 12 de Marzo de 2019, 11:44:44 »
Perdón quise decir ciclo.
Así es, es fundamental cambiar el ciclo de trabajo del PWM en función de la demanda de corriente de la carga.
« Última modificación: 12 de Marzo de 2019, 11:47:11 por Robert76 »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #7 en: 12 de Marzo de 2019, 14:59:44 »
He medido la salida del pwm usando como carga una lampara de 21w, y veo que el PWM tiene una frecuencia muy inferior a 31KHz, que es a la frecuencia que funciona si pruebo a darle un valor fijo (hice la prueba de medir un pin con el ADC entre 0 y 5v, y ese valor darselo al pwm, y este varia de 0 al 100% con una frecuencia de 31KHz), lo que veo es esto:

 

* pic_725_1.gif
(18.44 kB, 800x480 - visto 250 veces)


Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #8 en: 12 de Marzo de 2019, 19:23:43 »
He probado con un OP07, y no mejora en nada... pienso que el PIC no es lo suficiente rápido para hacer el control, estoy pensando en usar un integrado especifico para hacer una fuente de corriente constante controlada por un voltaje de 0 a 5v, un LM78s40 por ejemplo.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 200
Re:Fuente de corriente con Buck y PIC
« Respuesta #9 en: 13 de Marzo de 2019, 15:12:46 »
¿Revisaste el valor que te da la entrada del pic con el sensor de corriente a 1A y 100 mA?
¿Si agregas un delay entre cada ciclo de lectura tenes siguiendo ese error?

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #10 en: 13 de Marzo de 2019, 17:28:42 »
¿Revisaste el valor que te da la entrada del pic con el sensor de corriente a 1A y 100 mA?
¿Si agregas un delay entre cada ciclo de lectura tenes siguiendo ese error?

Con una resistencia shunt de 1ohm y ganancia del amplificador 9.2 (R8 = 8k2 y R9 = 1k) el voltaje a la entrada del pic es el esperado, la idea es que como máximo regulase a un poco menos de 600mA, pero como no regula bien en corto da 1A.

Probé a poner un retardo de 33us, que es un periodo del PWM, y da el mismo error.

Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 200
Re:Fuente de corriente con Buck y PIC
« Respuesta #11 en: 13 de Marzo de 2019, 18:30:01 »
Con una resistencia shunt de 1ohm y ganancia del amplificador 9.2 (R8 = 8k2 y R9 = 1k) el voltaje a la entrada del pic es el esperado, la idea es que como máximo regulase a un poco menos de 600mA, pero como no regula bien en corto da 1A.

Probé a poner un retardo de 33us, que es un periodo del PWM, y da el mismo error.

600mA me parece mucho con esa ganancia (0.6v*9.2= 5.52v)

¿Revisaste el cargador que habia hecho felixls?


« Última modificación: 13 de Marzo de 2019, 18:34:08 por Yoshua »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #12 en: 13 de Marzo de 2019, 19:07:21 »
Con una resistencia shunt de 1ohm y ganancia del amplificador 9.2 (R8 = 8k2 y R9 = 1k) el voltaje a la entrada del pic es el esperado, la idea es que como máximo regulase a un poco menos de 600mA, pero como no regula bien en corto da 1A.

Probé a poner un retardo de 33us, que es un periodo del PWM, y da el mismo error.

600mA me parece mucho con esa ganancia (0.6v*9.2= 5.52v)


Puse una resistencia de 8k2 que tenia a mano, en realidad es de 6k8:

0.6*7.8 = 4.68v

Pero con una consigna de 500 tenía que dar menos de 1A.

¿Revisaste el cargador que habia hecho felixls?

Sí, no usa un PID, lo que hace es ir subiendo poco a poco hasta llegar a la consigna, y luego hace algo así:

Código: [Seleccionar]
  if (actualcurrent < chargecurrentcontrol)
    incduty(1);
  else if (actualcurrent > chargecurrentcontrol)
    decduty(1);

Mi idea es hacerlo con un PID simplemente por aprender a hacerlo de esa manera.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Fuente de corriente con Buck y PIC
« Respuesta #13 en: 13 de Marzo de 2019, 19:10:18 »
Yo pondría el mosfet conectado a masa a través de la resistencia de sensado.
Y haría funcionar el circuito en modo corriente.

Filtrando la señal de R11, tendrás la corriente media para el lazo de realimentación.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re:Fuente de corriente con Buck y PIC
« Respuesta #14 en: 13 de Marzo de 2019, 20:12:46 »
Yo pondría el mosfet conectado a masa a través de la resistencia de sensado.
Y haría funcionar el circuito en modo corriente.

Filtrando la señal de R11, tendrás la corriente media para el lazo de realimentación.

Algo así?

 

* 001.jpg
(46.58 kB, 1225x786 - visto 251 veces)
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡