-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
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.");
}
}
}
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