DRV8876 limitación de corriente

Como vamos gente?

componentes electrónicos:

-DRV8876
-ESP32
-Micro motor con eje extendido de 12V

Alimentación:

-Fuente de 0-32V y 0-3A

Objetivo del proyecto:

-lograr limitar la corriente de salida del motor a partir del código y configuración de pines del DRV8876.

situación: El asunto con este tema es que poseo poca experiencia en manejo del DRV8876, y si me lo pueden confirmar la limitación de corriente de los pines que aportan a esto son CS, VREF, IMODE, llevo haciendo varias pruebas con estos pines pero no se si realmente son los pines apropiados.

por otro lado es primera vez que intento limitar la corriente de un componente electrónico a partir del código, por lo que no tengo mucha experiencia tengo un código base pero me encuentro escéptico de este código.

por lo tanto si me podrían ayudar con la verificación de los pines y el código estaría agradecido, muchas gracias

Pines en uso del DRV8876
VIN
2 GNDS
IMODE
PMODE
SLEEP
en duda el PIN VREF

IMAGENES DE REFERENCIA Y CONEXIONES

0J11429.601

const int PH_PIN = 22; // Pin PH del DRV8876
const int EN_PIN = 23; // Pin EN del DRV8876
const int CS_PIN = 5;  // Pin CS del DRV8876
const int VREF_PIN = 25; // Pin VREF del DRV8876
int pwmValue = 0; // Valor inicial del PWM (0-255)
int currentLimit = 10; // Límite de corriente inicial (30mA = 0.03A)
int vrefValue = 100; // Valor inicial de VREF (50% de 3.3V)

void setup() {
  // Configurar los pines como salidas
  pinMode(PH_PIN, OUTPUT);
  pinMode(EN_PIN, OUTPUT);
  pinMode(CS_PIN, OUTPUT);
  pinMode(VREF_PIN, OUTPUT);

  // Inicializar comunicación serial
  Serial.begin(115200);
  Serial.println("Ingrese un valor de PWM (0-255):");
  Serial.println("Ingrese un valor de límite de corriente (0-100mA):");
  Serial.println("Ingrese un valor de VREF (0-100%):");
  delay(2000);
}

void loop() {
  // Verificar si hay datos disponibles en el monitor serial
  if (Serial.available() > 0) {
    // Leer el valor ingresado en el monitor serial
    String input = Serial.readStringUntil('\n');

    // Verificar si el input es un valor de PWM, un valor de límite de corriente o un valor de VREF
    if (input.toInt() >= 0 && input.toInt() <= 255) {
      // Actualizar el valor PWM
      pwmValue = input.toInt();
      Serial.print("Valor PWM actualizado a: ");
      Serial.println(pwmValue);
      analogWrite(EN_PIN, pwmValue);
    } else if (input.toInt() >= 0 && input.toInt() <= 100) {
      // Actualizar el límite de corriente
      currentLimit = input.toInt();
      Serial.print("Límite de corriente actualizado a: ");
      Serial.print(currentLimit);
      Serial.println("mA");
      digitalWrite(CS_PIN, LOW); // Modo de control de corriente
    } else if (input.toInt() >= 0 && input.toInt() <= 100) {
      // Actualizar el valor de VREF
      vrefValue = input.toInt();
      Serial.print("Valor VREF actualizado a: ");
      Serial.print(vrefValue);
      Serial.println("%");
      analogWrite(VREF_PIN, map(vrefValue, 0, 100, 0, 255));
    } else {
      Serial.println("Por favor, ingrese un valor válido.");
    }
  }
}

No tengo idea como controlar la corriente pero lo puedo buscar en 5 minutos en internet, de lo que si estoy seguro es que ese código está mal.

Si el valor está entre 0 y 255
  Ajustar pwm
Sino si está entre 0 y 100
  Ajustar corriente
Sino si está entre 0 y 100
  Ajustar Vref
Sino
  Reingresar valor

¿Cuál valor entre 0 y 100 no cumple la primer condición?
Nunca se puede ajustar corriente ni Vref se ingrese el valor que se ingrese.

El driver tiene medicion de corriente integrada

  • Integrated current sensing and adjustable active current regulation

IMODE PULLED LOW Four-state input for current regulation and overcurrent protection mode (see below). This carrier pulls down IMODE to GND through a 20 kΩ resistor setting the current chopping mode to cycle-by-cycle, the over-current response to automatic retry, and FAULT response to current chopping and over-current.
4 etapas de regulación de corriente o sobrecorriente.

IMODE PULLED LOW es una entrada de cuatro estados para la regulación de corriente y la protección contra sobrecorriente (ver abajo). Este pin hace un pull-down via una resistencia de 20 kΩ, configurando el modo de corte de corriente a ciclo por ciclo, la respuesta a sobrecorriente a reintento automático, y la respuesta de FAULT (falla) a corte de corriente y sobrecorriente. (traducido por ChatGPT con alguna ayuda de mi parte)

Y una vez mas:

Limitación de corriente
El DRV8874/DRV8876 se puede configurar para limitar activamente la corriente a través de los motores utilizando una regulación de corriente PWM con tiempo de apagado fijo (corte de corriente) o un esquema de corte de corriente PWM ciclo a ciclo. El esquema de corte de corriente y la respuesta a sobrecorriente se seleccionan a través de la entrada de cuatro niveles IMODE. Este portador tira de IMODE a GND a través de una resistencia de 20 kΩ, configurando el modo de corte de corriente a ciclo a ciclo. El límite de corriente se determina por el voltaje en el pin VREF, que esta placa portadora eleva a SLEEP a través de una resistencia de 10 kΩ, y la resistencia en el pin CS, que esta placa portadora tira hacia GND a través de una resistencia de 2.49 kΩ. Cuando SLEEP está conectado a 5 V, el límite de corriente se establece en aproximadamente 4.4 A en el portador DRV8874 o 2 A en los portadores DRV8876; un voltaje lógico más bajo en SLEEP disminuye el límite de corriente proporcionalmente. El límite de corriente se puede reducir conectando una resistencia adicional entre VREF y GND o conectando un voltaje de referencia externo directamente a VREF; el límite de corriente se puede aumentar conectando una resistencia adicional entre CS y GND. La limitación de corriente se puede desactivar conectando CS directamente a GND, aunque la protección contra sobrecorriente del controlador aún limitará la corriente a aproximadamente 6 A en el DRV8874 o 3.5 A en el DRV8876. Consulte la hoja de datos del DRV8874/DRV8876 para obtener más información sobre la regulación de corriente del controlador.

por lo visto el controlar o limitar la corriente del DRV8876 no es programable, por lo tanto se ajusta por circuito, estaré haciendo unos experimentos para confirmar, gracias colegas por las sugerencias realmente soy nuevo con este DRIVER y no conozco mucho de este

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