El primer componente que voy a analizar en mi nueva placa para testear LibreServo es el sensor de corriente ZXCT1010, el cual es una versión mejorada del sensor ZXCT1009. La mejora sobre todo es en la parte baja del sensor, cuando hay poca caída en Rsense, parte en la que quería estar ya que no quiero que se desperdicie tensión en Rsense. Además, aparejado al sensor de corriente está el diodo Zener MMSZ5226BS para evitar que la tensión de salida del sensor de corriente pueda superar los 3,3V y quemar el microcontrolador.
Las pruebas y aspectos contemplados son los siguientes:
- Mínima corriente detectada, mediciones y errores
- Linealidad del sensor
- Velocidad del sensor ante cambios de corriente
- Comportamiento ante un cambio de polaridad en la alimentación, cuando conectas al revés tierra y Vcc
- Comportamiento del diodo Zener
Mínima corriente detectada, mediciones y errores
Para los primeros puntos, la mejor forma es tomar mediciones del sensor con diferentes cargas de corriente. Las mediciones se han tomado sin el diodo Zener instalado. Hay que recordar que el sensor ZXCT1010 actúa como un generador de corriente, cuanta más caída de tensión haya en Rsense, más corriente generará. Hay que tener en cuenta que el circuito consta de un Rsense de tan sólo 0,02 ohmios y un Rout de 1,1K Ohms. El valor de Rsense tan bajo es para asegurarnos que cuando el motor del servo esté a pleno rendimiento consumiendo 5A, por ejemplo, sólo se desperdicie 0,1V en Rsense.
Circuito de test básico ZXCT1010
En la siguiente tabla se muestran los resultados de las pruebas. Con un Rsense de tan sólo 0,02 ohmios, el sensor ZXCT1010 empieza a detectar corriente con sólo 35mA, que equivale a una caída en Rsense de 0.7mV. ¡Bastante impresionante! Aunque el error porcentual entre la medición y lo esperado es ciertamente elevado en corrientes bajas, lo cierto es que el error en mV es bastante contante y por lo tanto muy fácil de corregir en el programa.
Tabla comparativa de Smart Servos
Corriente (A) | V_Out (mV) | V_Out_Esperado (mV) | V_Out_Error (%) | V_Out_Esperado - V_Out |
0,035 | 1,72 | 7,7 | 77,66 | 5,98 |
0,070 | 9,44 | 15,4 | 38,70 | 5,96 |
0,140 | 24,1 | 30,8 | 21,75 | 6,7 |
0,280 | 54,1 | 61,6 | 12,17 | 7,5 |
1,485 | 312 | 326,7 | 4,50 | 14,7 |
2,770 | 590 | 609,4 | 3,18 | 19,4 |
Linealidad del sensor
En el siguiente gráfico se muestra la linealidad del sensor, el cual no presenta problema alguno:
Linealidad ZXCT1010
Velocidad del sensor ante cambios de corriente
En el siguiente gráfico se muestra la velocidad de respuesta del sensor, siendo de 7,9us su reacción y de unos 10us hasta que se estabiliza, lo que nos da un ancho de banda de unos 125-100KHz.
Velocidad ZXCT1010
Comportamiento ante un cambio de polaridad en la alimentación
Hasta ahora las pruebas han sido bastante satisfactorias, pero nos encontramos con el primer escollo, su comportamiento ante un cambio de polaridad en la alimentación, ósea, cuando conectamos al revés la batería. Ante esta situación, el sensor ZXCT1010 se comporta como si estuviera en cortocircuito y aparece el magic smoke al instante 😓 . En esta versión de LibreServo se buscaba proteger el circuito ante un cambio de polaridad, con un transistor mosfet se logra, pero desgraciadamente no se puede poner antes del sensor de corriente ya que toda la corriente del motor pasaría por dicho mosfet obligando entonces a que dicho mosfet fuera tan potente o más que los propios drivers del motor, algo que carece de sentido.
Comportamiento del diodo Zener
Por último toca analizar el diodo Zener. Este diodo no se extrictamente necesario, pero ante un problema con el motor o el puente en H, varias decenas de Amperios podrían pasar por el sensor de corriente ZXCT1010 provocando que la caída de tensión en Rout, al estar directamente relacionado con la caída en Rsense, pudiera superar con creces los 3,3V y por lo tanto quemar el microcontrolador. Quiero evitar que un posible fallo en el motor o en el puente en H arruine el resto de componentes de LibreServo en cascada, no sería un buen diseño.
Circuito básico ZXCT1010 con protección Zener
Desgraciadamente el diodo Zener a pesar de ser de 3,3V, ya desde 1,6-1,7V empieza a alterar la salida de V_Out claramente haciéndolo prácticamente inservible en dichos valores. Parece ser además, que en diodos Zener con un voltage de ruptura (Vz) tan bajo es lo normal y no he encontrado diodos Zener con un comportamiento más afilado en dichos rangos.
Siguientes pasos a seguir
Tras mucho meditarlo, he decidido cambiar el sensor de corriente ZXCT1010 por el Allegro ACS711KEXLT-15AB-T, el cual es un sensor de corriente de efecto Hall, lo cual significa que no necesita ninguna resistencia externa ni diodo Zener alguno. Como añadido mide la corriente en ambos sentidos. Además, dicho sensor, al tener una alimentación separada, sí estaría protegido contra un cambio de polaridad en la alimentación por el diodo Mosfet de protección de LibreServo.
Primer elemento que analizo y primer componente que tengo que cambiar y rediseñar. No es el inicio que esperaba, pero para eso he diseñado esta placa, para poder sacar todos los fallos de diseño ahora que se pueden corregir y no en el futuro.