# Controlar LM2576-ADJ con un PIC



## callecuatro1976 (Nov 2, 2016)

Hola. Les consulto.
Estoy tratando de regular el voltaje del LM2576-ADJ con un PIC.
Tengo el programa de PWM, coloco la resistencia de 100 KΩ, el capacitor de 100 nF.
El operacional LM358 lo conecto a la pata del regulador, (la pata del feedback) y regula pero se cae la tensión con mínima carga.

No sé qué puede ser, hice la prueba con un LM317 y regula bien y sin problema.
Con el LM2576 no me funciona. ¿Qué puede ser? ¿Me falta alguna resistencia?


----------



## D@rkbytes (Nov 2, 2016)

callecuatro1976 dijo:


> No sé qué puede ser, hice la prueba con un LM317 y regula bien y sin problema.
> Con el LM2576 no me funciona. ¿Qué puede ser? ¿Me falta alguna resistencia?


Por lo que veo, tu problema debe ser con el hardware.

¿Ya viste la hoja de datos del LM2576?


----------



## papirrin (Nov 2, 2016)

No vi el adjunto pero casi estoy seguro que no funciona porque el lm317 es un regulador lineal y el 2576 es switching, funcionan totalmente diferente.
Tienes que considerar la retroalimentación.


----------



## elaficionado (Nov 2, 2016)

Hola.

Haz probado el regulador sin usar el PIC.

Publica el circuito.

Chao.
elaficionado.


----------



## callecuatro1976 (Nov 2, 2016)

Si revise la hoja de datos muchas veces arme la placa con las masas bien cerca del pin 3,  en la prueba funciona regulando pero con carga se cae, coloco el pote de 25k y anda perfecto,  pero con el pic no me anda. Y no lo puedo simular en el proteus para ir probando.


----------



## callecuatro1976 (Nov 3, 2016)

Con esta librería se podría simular el lm2576 en proteus voy a probar...


----------



## papirrin (Nov 3, 2016)

Utilizando mi instinto yo intentaría buscarle por aquí...  
	

	
	
		
		

		
		
	


	




El pwm ataca al operacional.

La pagina donde lo saque esta en ruso y no tengo traductor, y no se que realmente hace por eso digo que por instinto electrónico...XD


----------



## callecuatro1976 (Nov 4, 2016)

Y esta complicado ya probé de todo la que me funciono mejor fue colocar un transistor pero cuando está llegando a los 3 volt se dispara a 10 volt???? Tengo que seguir trabajando

Ya logre que encienda y apague con el pic con este circuito


----------



## papirrin (Nov 4, 2016)

probaste el que te puse?, en teoria ese esquema esta probado, pero tiene que ser el lm393 que es un comparador dual de alta precision, no creo que funcione con otro como el 358 que amplificaria como en lazo abierto...

otra manera que se me ocurre con un 358 es como restador 

en fin a mi tambien me interesa sacar algo asi. XD

por cierto dudo muchisimo que funcione solo simulado... no confio en el proteus para esos menesteres...


----------



## callecuatro1976 (Nov 4, 2016)

Si estoy probando de todo pero no me funciona bien ya va salir...


----------



## papirrin (Nov 4, 2016)

me inspira mas confianza el que puse.... pero a ver que te resulta


----------



## callecuatro1976 (Nov 5, 2016)

Funciona con las resistencias pero me regula todo con el 10% del pwm tengo que ver como calcular las resistencias


----------



## papirrin (Nov 5, 2016)

Me parece que no estas claro como funciona ese regulador...
Según recuerdo funciona con un voltaje de referencia de 1.2v y tiene un comparador en sus entrañas... Eso quiere decir que al usar un divisor resistivo el voltaje de salida deseado se divide hasta llegar a 1.2v... Es decir que si quieres un voltaje de 5v pones un divisor de por ejemplo 3.1k con una en serie de 1k y te da 1.2v. Siempre debe dar 1.2v y lo mas rápido posible que no recuerdo la mínima frecuencia,  ahora lo que necesitas hacer es que el voltaje de salida +  el Dac y el divisor te de 1.2v siempre en cualquier rango. El problema esta que lo tienes que escalar porque si quieres un voltaje de salida de 30v en el DAC solo manejas  5v máximo. Es decir que 5v es a 30v y ya esta haces matemáticas....


----------



## papirrin (Nov 5, 2016)

A ver... un divague con el lm358 como restador...
para la simulacion puse una fuente simetrica, pero quizas se puede hacer la forma que sea una simple...



cuando en el DAC hay 250mV (en un rango de 0v a 5V) en el Feedback tendre los 1.2V mas o menos lo que me dara un voltaje de salida de 7.5V cuando el maximo sea un rango de 1.2V a 21V....




cuando tenga 5V en el dac habra 21V en Vout...




creo que es posible asi... seria cuestion de hacer pruebas y ver resultados XD


----------



## callecuatro1976 (Nov 5, 2016)

Si voy a probar lo que decís yo estaba haciendo algo así y usaba el lm358 como amplificador para regular de 1,2 a 18 volt


----------



## papirrin (Nov 7, 2016)

creo que voy a probar este diseño para ver como se comporta el 358... en la simulacion se ve que trabaja...


----------



## callecuatro1976 (Nov 7, 2016)

Como serían las conexiones con respecto a la salida del pic y el lm2576?


----------



## papirrin (Nov 8, 2016)

la idea general es mas o menos asi...
utilizar un 4550 con los dos PWM para poder ajustar fino..



vere en las pruebas reales si es posible... (el que tenga algo que decir que hable ahora o calle para siempre XD)


----------



## papirrin (Nov 10, 2016)

Parece que va a funcionar el diseño...

estoy alimentando con 19V y en el DAC Coarse 5V... la salida del feedback me da los 1.2V

solo falta hacxer el codigo del pic y agregarselo al regulador ... a ver que pasa.



hice unos pequeños cambios y correcciones en algunas resistencias para ajustarlo a 19V


----------



## callecuatro1976 (Nov 11, 2016)

La conexión de un dac serviría?


----------



## papirrin (Nov 11, 2016)

ese no es un DAC o si, creo que es un potenciometro digital programable, checa el voltaje maximo que soporta y es posible que si pueda funcionar... aca es difil encontrar esos bichos, llevo años intentando comprar uno sin tener que importarlo.

aaahh ya cheque y si es un dac... igual aca no es facil de conseguir... y si puede servir si agregas algo como lo que estoy haciendo y estaria mas cool


----------



## callecuatro1976 (Nov 12, 2016)

Encontré esto en Internet no es mio.
Igual tengo dudas de como se conecta el dac al pic?

Con el tiempo me he dado cuenta de que algunas personas que piden la forma de controlar, por ejemplo, un regulador Buck con un DAC sobre I2C o SPI para su uso en, por exmple, una fuente de alimentación controlada PIC banco o de manera eficiente la conducción de un enfriador Peltier. (El Microchip MCP4725 es ideal para esto). 
He visto varios métodos propuestos, incluido Digital Pot, amplificadores operacionales en el ciclo de retroalimentación, etc. Sin embargo, he encontrado que la forma más sencilla es la mejor  
El siguiente circuito requiere sólo 1 componente extra (no incluyendo el CAD, por supuesto) - una simple resistencia. Cómo funciona: - se explica mejor teniendo en cuenta la corriente a / fuera de las resistencias donde se adhieren a la clavija de retorno del regulador. el regulador siempre se impulsará la salida de tal manera que el voltaje en el pin de realimentación es en un valor fijo (véase hoja de datos para su regulador). En el caso de la LM2670 de la foto, es 1.21V. Siendo este el caso, la corriente a través de R1 (IR1) será constante e igual a la suma de las corrientes a través de R2 y Rb (Ley de Kirchoff!) (Tenga en cuenta la corriente en el pasador de retroalimentación va a generar un pequeño error, sin embargo, ya que es tan baja, que por lo general puede ser ignorada). la corriente a través de Rb (IRB) es simplemente x RB (DAC de salida - 1.21V.) la corriente a través de R2 (IR2) es igual a IR1 - IRB la caída de tensión al otro lado de R2 (VR2) está entonces R2 x Ir2, que da la tensión de salida regulada como VR2 + 1.21V Un trabajó ejemplo: - R1 = 1k33 R2 = 2k87 Rb = 2k87 DAC salida máxima = Vdd = 5.0 V Para el código de entrada del DAC = 0 IR1 = 1,21 / 1,330 = 0.909mA IRB = (0 - 1,21) / 2870 = - 0.4216mA IR2 = 0,909 - (-0,4216) = 1.3313mA VR2 = 1.3313mA x 2.870 = 3.82V salida regulada = 3,82 + 1,21 = 5.03V Para DAC código de entrada = 4095 IR1 = 1,21 / 1,330 = 0.909mA IRB = (5,0 - 1,21) / 2870 = 1.3206mA IR2 = 0,909 -1,3206 = -0.4108mA VR2 = -0.4108mA x 2870 = -1.1790V salida regulada = -1,1790 + 1,21 = 0.03V la salida es lineal para los valores del CAD entre estos dos. la salida de un circuito de prueba real (con los valores de las resistencias anteriores) se muestra en la siguiente imagen. Tenga en cuenta que 0V en la salida no es en realidad achieveable en la vida real, de tocar fondo en ~ 0.11V. Más o menos se puede lograr cualquier rango de tensión, mediante el ajuste de los valores de resistencia. Por ejemplo: - R1 = 1K3 R2 = 2k0 Rb = 6K8 da . un rango de voltaje de salida de 1.96V - 3.43V R1 = 1k R2 = 5k36 Rb = 2k67 da un rango de salida de 0.08V - 10.12V Nota: - el circuito anterior es sólo para ilustración. No contiene ningún circuito de filtrado o de protección. Se recomienda que la salida DAC se filtra como mínimo. Cuidado tendría que ser tomada en la selección del inductor. Cuestiones legales - USO DEL CIRCUITO DE ARRIBA, bajo su propio riesgo.


----------



## papirrin (Nov 12, 2016)

opino que seria cuestion de que si lo consigues lo pruebes, a mi honestamente no me inspira confianza... puedo equivocarme... y aclaro que puede ser una de las mil maneras de hacerlo... para mi hacerlo como lo quiero hacer es la manera mas facil tomando en cuenta que ese circuito no lo venden en cualquier lado (es obvio que tardo mucho en armarlo y probar el que estoy haciendo porque lo estoy haciendo a materia de juego, si se quiere hacer en menos de un dia se prueba y si funciona se arma), es decir que yo para probar ese circuito tendria que importarlo cuyo costo no creo que sea mayor a unos 5usd mas otros 10usd de envio y 30dias por lo menos para que me llegue, igual y si quisiera hacer cientos de fuentes sin dudarlo lo haria... y peor aun si no esta ni probado, quizas si no hubiera puesto eso de "bajo su propio riego",

0tra manera que se me ocurre hacerlo es tomando esa idea pero en lugar del dac usar el pwm del pic para hacer el dac y un 358 como seguidor de tension y las resistencias que estan ahi....


----------



## callecuatro1976 (Nov 12, 2016)

Si da desconfianza.

Trabajando el domingo en el lm2576 y con esto funciona pero me regula de 5 volt a 12 y por mas que cambio resistencia es re difícil tener una regulación de 1,2 a 15 volt


----------



## papirrin (Nov 13, 2016)

¡ de cuanto es tu fuente? ¿15V o 18? ¡con cuanto alimentas el lm358?
prueba asi:


te da 5v y 12v porque no llega a los 1.2v en el feedback para  los 18V de Vout , se queda corto digamos que te estas comiendo de 0V a 5V y de 12V a 17V. por los 1.8 volts que te faltan en el feedback o sea que 10k y 2k  da un divisor de 3V menos los 1.2 son 1.8v  ... espero haberme explicado XD


----------



## callecuatro1976 (Nov 13, 2016)

La fuente que uso es de 15 volt, alimento el lm358 con 15 volt,  con la configuración que subí me gusto la regulación de 100mv por cada pulso, voy a probar la modificación que me agregas a ver como resulta.


----------



## papirrin (Nov 13, 2016)

Si no da buen resultado las de 180k las pones de 150k


----------



## papirrin (Nov 14, 2016)

probe tu circuito y parece que funciona... solo que hay que para llegar a 1.2V, se va a batallar porque el lm358 no da hasta 0v.puse una fuente de 19V y me llega desde 2v8 hasta 18v5, que es bastante aceptable.


----------



## callecuatro1976 (Nov 14, 2016)

Tengo el mismo problema como llego a 1,2 y otro problema que noto es que la llevas a lo más bajo que pude que es 4 volt y empieza a subir solo


----------



## papirrin (Nov 14, 2016)

a mi no me hace eso de subir solo... eso de llegar al 1.2v es cuestion de hacer que la saila del 358 llegue a cero volts, se supone que es rail to rail pero no es cierto, y como estamos amplificando unos pocos milivolts los amplifica, una solucion seria usar una fuente simetrica o parece que por algun lado vi como hacer que llegue a 0V. voy a ver si encuentro la manera.

el cambio que hice es que las resistencias de 180K las puse de 10K, y la de 13K le puse un preset ajustado a 680R, pero yo uso una fuente de 19V y obvui que ajuste las resistencias del amplificador no inversor para los 19V en lugar de 15V.


----------



## callecuatro1976 (Nov 15, 2016)

Ahí quedo buena regulación de 1.6 a 16 volt sube cada 150 mv hay probarla con carga y ver que hace, la voy armar en una caja y a probar.....


----------



## papirrin (Nov 15, 2016)

Bien... Parece que funciona... Lo raro es que usas una fuente de 15v y te llega a 16v, hasta quedo con ganancia jajajjja.


----------



## callecuatro1976 (Nov 15, 2016)

Si funciona muy bien con carga va de 0,3 a 15,7 lo único son las oscilaciones que tiene con la lectura del pic...  Y tengo que afinar las resistencias para que quede en 1,2 y 15 volt,  si los 16 se caen a 14 con carga...


----------



## papirrin (Nov 15, 2016)

Pues bueno, si te funciona y te gusta esta excelente...
Supongo que mides. El voltaje con el pic y lo muestras en un LCD, necesitas hacer promedios para que no oscile tanto osea un rango de muestreo.
Por otro lado creo que puedo conseguir un dac programable a muy buen precio y aquí en mi país, en 2usd mas envió y es SPI voy a intentar comprarlo y hacer pruebas.
En teoría ese integrado ya tiene un seguidor de tensión en su salida y puede ser cierto la información que pusiste.


----------



## callecuatro1976 (Nov 15, 2016)

Consulta si escribo esta línea de código dentro del while 
if (!input(pin_a6)==1){
output_toggle(pin_b4);
}
Resistencia a positivo pulsador negativo.
no tendría que encender y apagar cada ves que preciono el pulsador?


----------



## papirrin (Nov 15, 2016)

no, prenderia y apagaria de forma muy rapida, necesitas poner un antirrebote, con un delay, o hay un monton de metodos mas

y para que sea mas estable pon un capacitor de tantalio de un 1uF por boton.


----------



## callecuatro1976 (Nov 15, 2016)

Ok el delay va entre las líneas de código?


----------



## papirrin (Nov 15, 2016)

no me acuerdo como es la instruccion delay... pero creo que asi:

if (!input(pin_a6)==1){
output_toggle(pin_b4);
delay 500;
}


----------



## callecuatro1976 (Nov 15, 2016)

Si eso lo probé y no me funciona lo que quiero hacer es agregar al programa una función que con un pulsador encienda y apaga del on off del lm2576 y se me resulta bastante difícil....


----------



## papirrin (Nov 15, 2016)

ahi si dale una buscada... debe haber un trillon de ejemplos


----------



## callecuatro1976 (Nov 15, 2016)

Estoy probando esta función:

```
void funcion(){ 
  if (input(pin_a6)==0){
      while(!input(PIN_a6));         
   output_HIGH(pin_b4);
 delay_ms(50);
 }
   if (input(pin_a6)==1){
      while(!input(PIN_a6));
   output_low(pin_b4);
   delay_ms(50);
  }
 }
```


----------



## roberttorres (Nov 15, 2016)

callecuatro1976 dijo:


> Estoy probando esta función:
> 
> ```
> void funcion(){
> ...



lo estas  haciendo mal, con esas sentencias al pulsar el botón encenderá, y al soltarla se apagara, prueba de esta forma:

```
void funcion(){
 while(!input(PIN_A6)){                             
   output_toggle(PIN_B4);
   while(!input(PIN_A6));        
   }  
 }
```


----------



## callecuatro1976 (Nov 15, 2016)

Si ya me funciona solo tengo unos tildes en el programa que hicimos lo subo si alguien me puede dar una mano para ver porque se me tilda cuando activo el pulsador para que encienda el led por el pin b4 , gracias a todos por la ayuda


----------



## callecuatro1976 (Nov 16, 2016)

Y tengo otro problema con mi fuente cuando la apagó y enciendo arranca al máximo de tensión y tendría que guardar el último valor en pantalla y cuando enciende mostrar ese otro problema más a resolver con su ayuda...


----------



## papirrin (Nov 16, 2016)

pusiste el on/off del regulador con un transistor no?

inicialo apagado cuan el pic arranque, y guarda el ultimo valor del pwm en la eeprom.. eso no es complicado..


----------



## callecuatro1976 (Nov 16, 2016)

Si lo puse con un transistor.
 esto estuve pensando si conecto un pin x y coloco un diodo y un capacitor para aislarlo y coloco un capacitor mas grande en la alimentación del pic para que cuando se apague la fuente tarde un segundo para leer el pin x que si esta a cero grabe la memoria y como hago que cuando este a uno la lea?

 void energia()
{
 int16 cont;     
   if(input(pin_xx)==0){

          cont++;
          delay_ms(5);
          if (cont >50){

          write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo
         delay_ms(50);
         cont = 0;
          }         
           ciclo_activo =read_eeprom(00); // paso el dato a la variable ciclo_activo
           cont=0;
            delay_ms(50);
             establecer_ciclo(ciclo_activo);
            }


----------



## roberttorres (Nov 18, 2016)

callecuatro1976 dijo:


> Si lo puse con un transistor.
> esto estuve pensando si conecto un pin x y coloco un diodo y un capacitor para aislarlo y coloco un capacitor mas grande en la alimentación del pic para que cuando se apague la fuente tarde un segundo para leer el pin x que si esta a cero grabe la memoria y como hago que cuando este a uno la lea?
> 
> void energia()
> ...



Buenas
No se si ya solucionaste, pero te doy una idea en cuanto a la programación, esta bien la forma de guardar el ciclo activo en la eeprom(salvo lo de leer en pin por un segundo y luego guardar me parece mucho tiempo para el pic), en cuanto al leer la memoria y establecer el ciclo activo al encenderla yo lo pondría en el Main del porgrama.
Asi:

```
//Cabezera del programa
 int16 cont;  

void energia()   
{
if(input(pin_B7)==0){ 
cont++;
delay_ms(1);
if (cont >10) {
write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo
delay_ms(50);
cont = 0;             
               } 
                  } 
} 
void main()
{ 
ciclo_activo =read_eeprom(00);                   
    establecer_ciclo(ciclo_activo);

While(true){

codigos
}
}
```


----------



## callecuatro1976 (Nov 18, 2016)

Voy a probar ahora como conecto el pin para saber cuando está baja la tensión,  yo pensaba un divisor resistivo para que leea el valor más bajo antes que se apague el pic


----------



## roberttorres (Nov 18, 2016)

callecuatro1976 dijo:


> Voy a probar ahora como conecto el pin para saber cuando está baja la tensión,  yo pensaba un divisor resistivo para que leea el valor más bajo antes que se apague el pic



También podrías leer por por un puerto con adc y si el voltaje es menor, guarda en la memoria el ciclo activo.
en ese caso seria If (adc < 200) {write_eeprom(00,ciclo_activo )}


----------



## callecuatro1976 (Nov 18, 2016)

Si ya lo probé y funciona perfectamente bien coloque un diodo que me quita los 0,7 me falta estabilizar la medición del adc para el voltimetro y probar bien el lm2576 y ya quedo mi fuente,  gracias a todos este proyecto bienes de mucho trabajo mio y de los integrantes del foro les debo un buen asado a todos........


----------



## gonpa (Dic 13, 2016)

callecuatro1976 dijo:


> Con esta librería se podría simular el lm2576 en proteus voy a probar...



Hola!, para qué proteus funciona esa librería? Yo tengo proteus 8.1 sp1 pero no se como agregar esa librería, me dices como?. Saludos!


----------



## D@rkbytes (Dic 13, 2016)

gonpa dijo:


> ¿Para qué proteus funciona esa librería?
> Yo tengo proteus 8.1 sp1 pero no sé cómo agregar esa librería. ¿Me dices cómo?


También funciona en Proteus 8.x
Mira por aquí: _*LM2576-ADJ*_

Si no puedes cargar el proyecto por tener una versión anterior a la 8.5, carga el proyecto del _post anterior_ usando "Import Legacy Project"


----------



## gonpa (Dic 15, 2016)

D@rkbytes dijo:


> También funciona en Proteus 8.x
> Mira por aquí: _*LM2576-ADJ*_
> 
> Si no puedes cargar el proyecto por tener una versión anterior a la 8.5, carga el proyecto del _post anterior_ usando "Import Legacy Project"




Muchas gracias, ya pude ver el proyecto!. Podré usar ese componente para simular unas cosas. Saludos!.


----------

