# Convertidor buck casero controlado por arduino

**URL:** <https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738>\
**Category:** Hardware\
**Created:** [January 6, 2026, 11:40am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738 "2026-01-06T11:40:48Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![alexpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/alexpd/32/1254192_2.png) [@alexpd](https://forum.arduino.cc/u/alexpd)\
**Post date:** [January 6, 2026, 11:40am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/1 "2026-01-06T11:40:48Z")

</div>

Tengo en mente realizar un convertidor buck que pase de 12V a 5V, para el control utilizo un Arduino R4, antes de pasar a la parte física estoy llevando a cabo simulaciones en simulink. La simulación completa del convertidor buck ha sido correcta con la implementación de un controlador PI, sin embargo a la hora de simular una conexion serial bidireccional con el Arduino ( encargado de calcular el DUTY Cicle) estoy teniendo múltiples fallos y no entiendo muy bien el como solucionarlos.  
Los valores que he elegido son los siguientes:  
BUCK IDEAL  
50KHz  
Vout=12V  
Vin=5V  
D=0.416  
Io=2A  
Pout=10  
AVout=0.05V  
AIout=0.6A  
L=100uH  
C=33uF  
R=2.5

El ts es de 20e-6.

Entiendo que el problema se deba al codigo o acaso no es posible llevar a cabo el proyecto?

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [January 6, 2026, 11:40am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/2 "2026-01-06T11:40:54Z")

</div>



---

<div class="post-metadata">

**Author:** ![UKHeliBob](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/ukhelibob/32/215663_2.png) [@UKHeliBob](https://forum.arduino.cc/u/UKHeliBob)\
**Post date:** [January 6, 2026, 11:42am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/3 "2026-01-06T11:42:20Z")

</div>

Su publicacion se **MUEVE** a su ubicacion actual ya que es mas adecuada.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [January 6, 2026, 11:42am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/4 "2026-01-06T11:42:30Z")

</div>



---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [January 6, 2026, 2:47pm UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/5 "2026-01-06T14:47:25Z")

</div>

Hola Alex, sos el mismo Alexpd de siempre?  
No entiendo para que reinventar la rueda, cual es el sentido? Es solo aprendizaje o el convertidor será una parte de un sistema que luego sumará mas elementos?

Si requieres control de un DC-DC puedes hacer lo mismo con un LM2596 por ejemplo

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/0/b/5/0b54929e026857843f89b29ef9a7b08d621cb926.jpeg)

actuando sobre el lazo de realimentación del divisor de tensión.

[![](https://europe1.discourse-cdn.com/arduino/original/4X/c/9/c/c9c08e46d65b378871f4e638022fc20ce0a4e498.jpeg "Fuente DC DC LM2596 | Control con Arduino PWM") ](https://www.youtube.com/watch?v=OQA1omkzP0Y)

---

<div class="post-metadata">

**Author:** ![alexpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/alexpd/32/1254192_2.png) [@alexpd](https://forum.arduino.cc/u/alexpd)\
**Post date:** [January 6, 2026, 3:29pm UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/6 "2026-01-06T15:29:13Z")

</div>

Hola, se trata de un trabajo para la universidad, el cual se me esta complicando mas de la cuenta.

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [January 7, 2026, 4:41pm UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/7 "2026-01-07T16:41:05Z")

</div>

Entonces lo tienes que hacer completo. Ya entiendo.

Esto debería ayudarte

[![](https://europe1.discourse-cdn.com/arduino/original/4X/b/0/f/b0fb02deccffb79bca8fd4e4ef15585adcb867ba.jpeg "Pr#18 Convertidor reductor de voltaje | buck DC-DC converter") ](https://www.youtube.com/watch?v=PX1eFU0KPD4)

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [January 8, 2026, 3:53am UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/8 "2026-01-08T03:53:08Z")

</div>

Publica código (usa etiquetas, lee las normas),  
publica esquema de tu buck converter.

---

<div class="post-metadata">

**Author:** ![alexpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/alexpd/32/1254192_2.png) [@alexpd](https://forum.arduino.cc/u/alexpd)\
**Post date:** [January 8, 2026, 4:29pm UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/9 "2026-01-08T16:29:53Z")

</div>

Hola Surbyte,  
El convertidor buck estará controlado por un PI por si en algun momento aumenta la carga este calcule el DUTY para poder mantener el voltaje de salida a 5V.  
De momento estoy simulando un convertidor buck en simulink el cual manda y recibe datos del Arduino, este es el circuito en cuestión que he realizado.

El PI lo he calculado con la herramienta de sisotool que da matlab

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/4/7/e/47e7a89eb45a9c35bb6525b1142a9c8f7a2e7210.png)

Por otro lado el código que he desarrollado en Arduino es este:  
( hay cosas que de momento no hacen falta como librerio pwm.h....eso lo tendre que usar mas adelante cuando haga el prototipo)

`#include <pwm.h>`

```arduino

//Variables
int entrada=A0;
int AVout; //valor analogica de Vou
float DVout; //valor digital de Vout
float Vref=5; //señal de referencia de Vout que sera 2.5V
float DUTY;

// PARAMETROS PID DISCXRETO
float kp=0.32154486;
float ti=0.00151831986;

float Ts=20e-6; //periodo de muestreo

float u=0.0; //accion de control presente u(k)
float u_1=0.0; //accion de control pasada u(k-1)

float u_control; // en esta se gardaran los valores de u calculados en el PID

float q0,q1;

float e=0.0; //error presente e(k)
float e_1=0.0; //error un instante pasado e(k-1)

/*----------------------ESTRUCTURA DE UNION----------------------------------------*/
typedef union{
    float number;
    uint8_t bytes[4];
}valor;
// variable union 
valor PWM;
/*---------------------------------------------------------------------------------*/

/*------------------------Configuracion de los puertos------------------------------*/
void setup() 
{
 //pwmPin.begin(50000.0f, 46f); //con este comando establecemos la frecuencia del pin 9 a la especificada

 pinMode(13,OUTPUT);
 pinMode(entrada,INPUT);
 //alpha = td / (td + 1/N); //filtro de la derivada
 
 q0=kp*(1+(Ts/(2*ti)));
 q1=-kp*(1-(Ts/(2*ti)));

 Serial.begin(9600);
}
/*---------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------*/
void loop()
{
  if(Serial.available()>0){
    DVout=recepcion();
  }
  u_control= PID (DVout); //llamamos a la funcion PID
  DUTY=u_control;

  PWM.number = DUTY;
        //mandamos el valor de PWM a simulink
  for (int i=0;i<4;i++)
  {
  Serial.write(PWM.bytes[i]);
  }

}
/*---------------------------------------------------------------------------------*/

/*------------------------------FUNCION PID----------------------------------------*/
float PID (float DVout)
{
  e=Vref-DVout;
  //control PID
  u=u_1 + q0*e + q1*e_1; // ley control PI discreto

        // saturamos la accion de control a unos limites
  //if (u > 1.0) u = 1.0;
  //if (u < 0.0) u = 0;

  // retorno a los valores reales
  e_1=e;
  u_1=u;

  return u;
}
/*---------------------------------------------------------------------------------*/

/*------------------------FUNCION RECIBIR VALORES----------------------------------*/
float recepcion()
{
    int i;
    valor buf;
    for(i=0;i<4;i++)
    {
        while (Serial.available() == 0);
        buf.bytes[i] = Serial.read();
    }
    return buf.number;
}
/*---------------------------------------------------------------------------------*/

```

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 7, 2026, 4:31pm UTC](https://forum.arduino.cc/t/convertidor-buck-casero-controlado-por-arduino/1423738/10 "2026-07-07T16:31:49Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
