Controlador BTS 7960

Buen dia estoy intentando utilizar el controlador BTS 7960 mi problema es que no logro entender como puedo conectar lo pines de medicion de corriente a mi arduino he logrado averiguar que se necesita un filtro pasa baja para regular las señales no deseadas y obtener señales de baja frecuencia estoy utilizando el factor de escala del manual el cual es 8500 pero quisiera saber si todo lo consultado es cierto y si las conexiones son hacia los pines analogicos de mi arduino muchas gracias. :slight_smile:

Para la próxima lee las normas del foro y comparte todo el contexto del problema, pdf, hoja de datos, esquemas, código, etc.
Algo asi:

  1. Hoja de datos: Fundamental!!
    BTS7960 Datasheet PDF Download - Infineon Technologies

  2. Algún sitio que hable del tema
    Control de motor de alta potencia BTS7960 con Arduino | ¿Cómo funciona un BTS7960? | BricoGeek Lab
    En la primer pagina menciona los circuitos de sensado de corriente que viene por defecto

  3. De la hoja de datos extraje tu pregunta puntual.

  4. Ahora empiezo a tirar ideas, algunas buenas otras no tanto:
    Tampoco hay mucha información. Yo pondría un Osciloscopio y haría pruebas con el Puente H.

  5. Acá di con tu respuesta
    Esto es lo que dice la hoja de datos: Copio textual

4.4.4 Status Flag Diagnosis With Current Sense Capability
The status pin IS is used as a combined current sense and error flag output. In normal
operation (current sense mode), a current source is connected to the status pin, which
delivers a current proportional to the forward load current flowing through the active high
side switch. If the high side switch is inactive or the current is flowing in the reverse
direction no current will be driven except for a marginal leakage current IIS(LK). The
external resistor RIS determines the voltage per output current. E.g. with the nominal
value of 8500 for the current sense ratio kILIS = IL / IIS, a resistor value of RIS = 1kΩ leads
to VIS = (IL / 8.5 A)V. In case of a fault condition the status output is connected to a
current source which is independent of the load current and provides IIS(lim). The
maximum voltage at the IS pin is determined by the choice of the external resistor and
the supply voltage. In case of current limitation the IIS(lim) is activated for 2 * tCLS.

  1. Entendiendo lo anterior.
    Vamos a lo relevante.
    Dice que con un resistor de 1k obtienes 1V por cada 8.5A.
    es decir que Si tienes un UNO/NANO/MEGA y lees 2V, la corriente en ese momento será de 28.5A = 17A
    Cuando tengas 5V la corriente será de 42.5A = 5
    8.5A

  2. Un pin del ADC de un arduino a 5V o uno de 3.3V con divisor de tensión y lo que leas divido 8.5A será tu corriente en Amperes.

float corrienteBTS = analogRead(pinADC) * 5.0 / 1023.0 * 8.5;

como no me gustan tantas cuentas, simplificamos mediante calculadora
5.0 * 8.5 / 1023.0 = 0,041544477

float corrienteBTS = analogRead(pinADC) * 0,041544477; // En Amper directo.

muchas gracias doy mas contexto sobre mi problema:

estoy realizo un proyecto para el cual estoy un motorreductor de 12 v el cual despues de 9 A este se podria quemar la parte del control de velocidad y cambios de giro decidi utilizar el driver BTS 7960 para lo cual utilizo un arduino para su control de PWM y cambios de giro

void loop() {
  // Leer el valor analógico de R_IS
  int valorRIS = analogRead(pinRIS);
  // Convertir a voltaje
  float voltajeRIS = (valorRIS / 1023.0) * 5.0;
  // Calcular la corriente
  float corrienteDerecha = (voltajeRIS / resistencia) * kILIS;

con este codigo realizo la conversion de analogo a digital y hago una conversion de V a A mi problema son las conexiones fisicas desde mi Driver BTS7960 a mi arduino ya que en caso de que mi motor tenga una sobretension se puede quemar porque la proteccion de el driver es de 43 A lo cual excede por mucho el A de mi motor y quiero medir la corriente en tiempo real para realizar mi proteccion.

Lo siento por el contexto estoy empezando en este foro desde hace muy poco muchas gracias.

Te mostré como la hoja de datos indica que 1V son 8.5A entonces en tu caso algo mas de 1V son tus 9A.
Es mas exactamente 9/8.5 = 1,0588 ya tienes tus 9A por lo que yo usaría 1V como una primer alerta y bajaría el PWM y por lo tanto con eso se reduciría la corriente del Puente H pero si emitiría una Advertencia.

Pregunta: que micro estas usando?

estoy utilizando arduino

Bueno entonces lo que te pasé con 5V esta bien.
Si no te vas a pasar de NINGUN MODO de 9A, entonces podrias usar valor de referencia del UNO/NANO que es de 1.1V
En el UNO estoy seguro en el NANO debería ser igual

void setup()
{
   Serial.begin(9600);
   analogReference(INTERNAL);     //1.1V for Vref point of ADC; input signal: 0V to 1.1V
}

void loop()
{
    unsigned int x = analogRead(A0);  //connect wiper point of pot connected between 3.3V and GND
    Serial.println(x, DEC);        //slowly vary pot and check that display changes.
    delay(2000);     //test interval
}

Probá esto conectado el pin Is y deberías leer mucho mejor, si usas esto cambia el código asi

float corrienteBTS = analogRead(pinADC) * 1.1 / 1023.0 * 8.5;

YO pondría un fusible rápido en la linea de alimentación del motor. Igualmente no se si el fusible funcione a tiempo para proteger el puente H.

¿Cuál?
UNO R3, UNO R4, Nano V3, Nano RP2040, Mega, Leonardo, etc., etc., etc...