Agregar limitador de corriente a un driver para PAP de desarrollo propio

#1
Hace años que vengo leyendo el foro, pero he preguntado muy pocas veces.
Ante todo, me dedico a la electrónica como hobby (entre otros que tengo). Tengo nociones pero hay cosas que no las domino.
La cuestión es la siguiente. Se me ocurrió automatizar un pequeño torno de banco que tengo. Invertí en motores NEMA 17, los drivers correspondientes (creo que el modelo es DM422 o algo así) y con paciencia, ayuda de instrumental y una placa arduino logré leer la salida de datos de los calibres digitales chinos. De manera que el torno lo puedo posicionar de dos maneras: ya sea enviando X cantidad de pulsos al correspondiente PAP hasta posicionar el carro o el charriot del torno donde quiero, o bien haciendo girrar los motores continuamente hasta que la lectura del calibre indique la distancia deseada y la placa arduino detenga el envío de pulsos. Realmente todo funciona bastante bien. Al punto que un amigo lo vio funcionando y quedó maravillado y quiere hacer los mismo pero en un torno de 2 metros de bancada. Para mover semejante torno tendremos que recurrir a motores más grandes y por ende a manejar corrientes más altas. Si bien debe haber drivers que tienen la capacidad de manejar corrientes de digamos 3 o más amper, la idea fue fabricar un driver propio. Aclaro, los PAP que se utilizarán serán bipolares.
La primera idea para el driver fue un L297 y dos puente H con TIP102 (porque los tenía a mano), pero me encontré con la limitación que el L297 solo ofrece paso completo, medio paso y wave stepping. Queriendo imitar al DM422 decidí reemplazar el L297 por una placa arduino (que también tenía a mano) y trazando diagramas fasoriales armé unas tablas de vectores para usar las salidas PWM del arduino. Debido la limitación de memo ria de la placa arduino nano (que fue la que usé) los micropasos que puedo manejar son, paso completo, medio paso, 4 8, 16 y hasta 32 micropasos, pero disponiendo de más memoria no hay problema en llegar a manejar más cantidad de micropasos.
El driver ya está funcionando con el arduino y los 2 puente H.
Ahora me gustaría incorporarle un limitador de corriente (creo que así se denominan) para poder elevar la tensión de alimentación sin dañar al PAP. Googleando encontré que lo mejor es usar un flip flop, con un oscilador y un operacional, y en base a una tensión de referencia en el opracional lograr manejar la corriente.
Alguien me puede orientar donde leer como funciona esto?, porque realmente desconozco el tema por completo.
Desde ya muchas gracias, y si alguien necesita el código para el arduino con gusto lo haré llegar.
Cordial saludo.


pd: me dice que el mensaje es mu corto y que agregue palabras...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
 
#3
Hola, debes añadir una resistencia shunt, en el común de alimentación de cada motor. La idea es tomar lectura de la corriente, pero antes acondicionando dicha señal, que será relativamente baja, mediante un operacional y luego leer dicho valor mediante Arduino.
 
#4
Acá va el circuito. Sepan disculpar que no sea muy ortodoxo el dibujo pero manejo mucho mejor autocad que los programas para diseño de circuitos.

Los 3 jumper que van a las patas 7, 8 y 13 serían para seleccionar la cantidad de micropasos haciendo una lectura de 3 dígitos binarios al iniciar el programa. Esto permite leer hasta 7 valores distintos, según los jumpers cerrados, de los cuales uso 6 (para 1, 2, 4 ,6, 8 , 16 y 32 micropasos).
El encoder rotativo lo utilizaría para variar la velocidad del motor, mientras que el pulsador del encoder haría un toggle enable/disable como para tener una parada de emergencia.
Los pines 3 y 9 del arduino controlarían los pulsos (PWM) para la primer bobina del motor a través del puente H superior, y los pines 10 y 11 (también PWM) para la otra bobina a través del segundo puente H.
Los archivos cpp y h, contienen una clase para agregar al programa arduino, solo sería necesario agregar esta clase al sketch y en el programa principal agregar la línea #include "pap_bipolar.h"
La variable que manejaría el motor se definiría como:
pap_bipolar motor(48, 32); donde 48 sería los pasos totales del motor (en el caso que estoy probando de un motor de una vieja impresora) y 32 representan los micropasos a usar. Este valor 32 tiene que venir desde el programa principal leyendo previamente los pines 7, 8 y 13 en el void setup. Ahora que me doy cuenta será más conveniente modificar la clase para que el constructor reciba solamente los pasos totales del motor y agregarle una propiedad a la clase para setear la cantidad de micropasos luego del void setup, si no no hay forma de leer previamente los pines (eso me pasa por laburar a altas horas de la noche y dar por sentado que los pines ya estaban leidos). Prometo modificarla, y si alguno entiende un poco de programar arduino la sabrá modificar.
Las propiedades y métodos de la clase están explicadas dentro del cpp.

Lo de la resistencia para sensar es lo único que sé, lo que no entiendo bien es el tema del limitador en sí, por eso pedí orientación de donde poder leer algo.

Imagino que en el circuito del puente H será más conveniente usar MOSFET. Lo armé con TIP102 porque eran los que tenía a mano.
Cualquier crítica, sugerencia o mejora es bienvenida. Sé que tal vez salga más barato adquirir algo fabricado y comprobado, pero en ese caso dejaría de tomarlo como un hobbie.
 

Adjuntos

Fogonazo

Exorcista & Moderador eventual
#5

Como te comentó Gudino Roberto Duberlin debes intercalar una resistencia de muy bajo valor entre el común de los emisores de los puentes "H" y GND.
Cuando exista consumo aparecerá sobre esa resistencia una tensión proporcional al consumo.
Esa tensión la amplificas, por ejemplo mediante un operacional y la salida de este la mandas a alguna entrada analógica del Arduino.
Si la tensión excede un cierto valor, Por ejemplo motor trabado al Arduino "Corta" la señal al puente "H"
 
#6
Buenísimo Fogonazo, me simplificaste la vida. Yo me estaba complicando con osciladores y flip flops entre los pines del arduino y los puentes H y me había olvidado de las entradas analógicas y que hacerlo por soft es más simple.
Esta noche me pongo a probar. De paso me di cuenta que al circuito le falta una conexión a 5V a los juper y al encoder si no no va a funcionar ni en broma. Hay que agregar además un switch más para que arduino pueda manejar el sentido de rotación del motor.
Muchísimas gracias por la idea.
 
Arriba