Cómo controlar Par en Motor

Hola a todos,
Tengo una eterna pregunta que nadie sabe resolverme. Estoy intentando controlar el par que me da un motor (de corriente continua, es el motor emg30, los datos están aquí: EMG30 data) , lo que quiero es obtener un determinado par que variaré en cada momento. Sólo puedo controlarlo mediante tensión (tengo una controladora de motores a la que le doy una señal PWM de arduino y ésta alimenta al motor).

Creía que para controlar el par sólo puedo medir la intensidad que circula por el motor, y como el par es proporcional a la intensidad, obtenerlo de esa forma (esta forma la quería evitar porque al suministrar al motor con una señal PWM, la intensidad medida tendría mucho ruido). Pero también he leido que existe una curva característica de par-velocidad para cada motor, por tanto según eso conociendo la velocidad a la que se mueva el motor, queda definido el par que entrega.

Esto no me queda muy claro porque por ejemplo, si le doy poca tensión al motor y por tanto poca velocidad ¿me está dando mucho par el motor? ¿Qué pasa en el caso límite cuando la tensión que le doy al motor es 0 y por tanto la velocidad es 0? (obviamente en este caso el par sería cero también) ¿qué pasa tambien en los casos en los que el motor está funcionando en vacío y a diferente velocidad de la máxima? En esos casos está claro que el motor está entregando par=0, por tanto no creo que sirva de mucho el razonamiento de la curva (velocidad-par) salvo si siempre tenemos aplicado una tensión (voltaje) constante.

En caso de que esto sucediera, lo que pasa es que estoy utilizando el motor Emg30 y de él sólo conozco:
• Rated voltage: 12v
• Rated torque: 1.5kg/cm
• Rated speed: 170rpm
• Rated current: 530mA
• No load speed: 216
• No load current: 150mA
• Stall Current: 2.5A

¿Podría de aquí obtener la curva velocidad-par?

Por otra parte, estos motores tienen instalado un encoder, de forma que pretendo calcular la velocidad de forma incremental, contando pasos ¿cómo creeis que es la mejor forma de hacerlo? ¿Dejar pasar varios pulsos y dividir el ángulo por el tiempo que haya pasado? ¿se podría hacer de pulso en pulso o sería menos preciso? ¿Es mejor tomar un tiempo fijo y contar los pulsos que hayan pasado para así calcular la velocidad?

Espero que alguien pueda ayudarme porque este proyecto se está extendiendo demasiado en el tiempo sin avances ninguno...
Muchas gracias a todos

Un saludo :slight_smile:

a q t refieres a " controlar par que me da un motor" ??

Naruto128:
a q t refieres a " controlar par que me da un motor" ??

Hola Naruto128, antes de nada gracias por contestar.
Me refiero a que quiero que el motor me de un determinado par (tambien llamado torque, o momento) que yo quiera.

pero , no esto no es porpocional a la velocidad del motor ?.
este motor tiene una reducion, una seria de engranages que a mayor velocidad mas torques obtienes ,
claro esta que esta reducion , se ve reprcutidad en la velocidad final.

jua, estaba viendo ese link, y habla de la terminales del motor, que tiene sensor hall.
no entiendo, que tiene que ver esto con sensores hall ?? que alguien me explique.

dime, como los ha conectado ?, lo has enchufado directo al arduino ?
yo he visto que usan un driver, aparte de arduino para hecharlo a andar. he visto este MD25

http://www.robot-electronics.co.uk/htm/arduino_examples.htm#MD25%20RD02%20Motor%20Controller

Hola de nuevo,
Te explico: ese driver que pones es uno que venden aparte la misma compañía, pero yo no lo tengo. Yo estoy usando un driver L298N, que es capaz de admitir señales PWM de Arduino y él se encarga de mandar la tensión troceada (de forma que la tensión efectiva pueda ser menor que 12V, que es la tensión a la que funciona el motor nominalmente usando una batería externa) que queremos que le llegue al motor.

Lo de los sensores de efecto hall no tiene nada que ver con el funcionamiento del motor, eso símplemente son encoders, esto es, emiten pulsos cada cierto ángulo de giro, con lo que puedes ir contando el ángulo que han girado.

Lo de que el motor tenga una reductora pues no implica nada, simplemente que si tienes los datos a la salida del motor se pueden conocer los datos a la salida de la reductora teniendo en cuenta la relación de reducción. Es decir, a la salida de la reductora habrá más par y menos velocidad que a la salida del motor. Pero esto es una relación constante, que siempre se puede calcular (el par se multiplica por la relación de reducción y la velocidad se divide).

Yo lo que quería es saber si puedo saber qué PWM tengo que meterle para obtener un par determinado a la salida. Estuve pensando acerca de que un motor tiene definida una curva característica par-velocidad, pero claro se me olvidó que esto es sólo válido cuando se considera una tensión constante. Como yo pretendo variar el par con la tensión esta relación velocidad-par ya no se cumple. Esto puede comprobarse por ejemplo con que si a un motor en vacío le meto menos tensión, también va a menor velocidad, pero el par es cero puesto que está en vacío.

Me estoy temiendo que la única forma de saber el par que me está dando un motor (y poder así ajustar la tensión para obtener un par deseado) es midiendo la intensidad de corriente que pasa por el motor. Mi profesor me ha dicho que podemos también calcular el par que da, calculando la aceleración del motor. Pero esto me plantea la duda de que cuando no hay aceleración el motor también da un par (por ejemplo cuando está frenado y quiere arrancar o cuando se está decelerando y se para pero sigue alimentándose). Por lo que no veo muy viable esa opción.

¿A alguien se le ocurre otra forma de obtener el par o hacer un control en par?

Espero que más gente se anime a contestar y muchas gracias Naruto128 por contestar.

Un saludo

para cambiar el par tendría que cambiar la tensión de alimentación al motor. cuando usas el PWM, al motor le das una tensión variable jugando con los anchos de los pulsos. Pero la tensión de cada cresta es un valor alto, por lo que el par es alta incluso a bajas velocidades. Es curioso, pero no es lo mismo alimentar un motor a 10V con un PWM al 50% (5V de media) que con una corriente continua de 5V. La velocidad de giro debería ser similar, pero no el par del motor. O al menos eso creo. No tomes mis palabras al 100%. Ya no recuerdo muy bien lo que en su día aprendí.

Hola grasshopper.
No existe una curva característica par-velocidad para un motor ya que depende de la carga. Podría establecerse conociendo la carga en todo momento pero no lo veo práctico. Mi recomendación sin duda es que midas la intensidad como en principio tenías previsto y así sabes el par que el motor está ejerciendo.
Lo que sí existe para cada tipo de motor es una curva característica del máximo par que puede suministrar para cada velocidad, pero el par que está dando en cada momento dependerá también de la carga.
Sin duda esa lectura tendrá ruido pero como el pwm suele ser a cierta frecuencia y un motor es una carga muy inductiva, aunque la tensión de alimentación sea por pulsos pwm, la corriente no tiene esas variaciones, es prácticamente plano. Lo que te encontrarás al medir la corriente es ruido que puedes filtrar, no una señal en escalón.

Cheyenne:
Hola grasshopper.
No existe una curva característica par-velocidad para un motor ya que depende de la carga. Podría establecerse conociendo la carga en todo momento pero no lo veo práctico. Mi recomendación sin duda es que midas la intensidad como en principio tenías previsto y así sabes el par que el motor está ejerciendo.
Lo que sí existe para cada tipo de motor es una curva característica del máximo par que puede suministrar para cada velocidad, pero el par que está dando en cada momento dependerá también de la carga.
Sin duda esa lectura tendrá ruido pero como el pwm suele ser a cierta frecuencia y un motor es una carga muy inductiva, aunque la tensión de alimentación sea por pulsos pwm, la corriente no tiene esas variaciones, es prácticamente plano. Lo que te encontrarás al medir la corriente es ruido que puedes filtrar, no una señal en escalón.

Muchas gracias por tu respuesta. ¡Por fin alguien me comprende! jajajajaja. Es cierto, estaba entendiendo mal el problema de la curva par-velocidad, obviamente depende de la carga que tenga en cada momento. La opción de la intensidad parece que es la mejor, pero ahora me arrepiento de haber comprado las placas controladoras sin un sensor de intensidad... Ahora tendré que comprar otro sensor de intensidad (mi profesor me va a mandar a tomar viento) o hacerlo yo con una resistencia shunt creo que le llaman. ¿Sabes cuál es la mejor/mas barata forma de medirla intensidad eficientemente? ¿Algún filtro que se te ocurra que pueda usar? El problema de la PWM de Arduino es que creo que es a una frecuencia demasiado baja, debería usar una a una frecuencia alta, aunque de momento no sé como se hace.

Mi profesor me dijo que podría medir el par considerando que es proporcional a la aceleración (que sería facil de medir porque tenemos unos encoders), pero el problema vuelve a ser que el par dependería de nuevo de la carga, que sigue sin ser conocida, creo, pues se trata de un vehículo tipo péndulo invertido, por lo que la carga sería mayor según la inclinación del péndulo ¿verdad? No sé, ya me estoy liando mucho...

Creo que para nada te estás liando. Es como dices. Cualquier método que no sea medir la intensidad es una forma indirecta de calcular el par y dependerá de otros factores que complican su cálculo.
Para medir la corriente lo mejor es con un sensor hall, te los venden por ebay a un precio razonable. Por ejemplo busca "arduino acs712" y te saldrán unos cuantos en diferentes rangos, imagino que el de 5 A te irá bien. A la salida puedes calcular un filtro paso bajo mediante RC para eliminar el rizado y lleguen a Arduino las lecturas más limpias.
Hay formas de elevar la frecuencia del PWM de Arduino pero yo no lo he hecho. Una búsqueda en Google te dirá cómo hacerlo.

Cheyenne:
Creo que para nada te estás liando. Es como dices. Cualquier método que no sea medir la intensidad es una forma indirecta de calcular el par y dependerá de otros factores que complican su cálculo.
Para medir la corriente lo mejor es con un sensor hall, te los venden por ebay a un precio razonable. Por ejemplo busca "arduino acs712" y te saldrán unos cuantos en diferentes rangos, imagino que el de 5 A te irá bien. A la salida puedes calcular un filtro paso bajo mediante RC para eliminar el rizado y lleguen a Arduino las lecturas más limpias.
Hay formas de elevar la frecuencia del PWM de Arduino pero yo no lo he hecho. Una búsqueda en Google te dirá cómo hacerlo.

Gracias de nuevo por tu respuesta. Ya he encontrado el sensor que me has indicado que mide bajas corrientes y además tiene opción de ajustar ganancias SparkFun Current Sensor Breakout - ACS723 (Low Current) - SEN-14544 - SparkFun Electronics. Además pone que incluye un filtro a 35Hz por lo que parece que puede venirme bien (¿cómo se calcularía el filtro paso bajo con RC que necesito?). Pero también he leido que este tipo de sensores son inestables y que con cero intensidad pueden tener inestabilidades en la medida aquí: ACS712 sparkfun breakout questions - too unstable to be useful? - Sensors - Arduino Forum. Ahí también dicen que los de sparkfun no tuvieron en cuenta que existe una resistencia mínima (o algo así¿?), la verdad es que no hablan muy bien de él.

Dicen que para corrientes pequeñas (como la mía, que va a llegar como mucho a 2.5A), es mejor usar una resistencia shunt. Esto creo que es poner una resistencia a tierra desde el puente H controlador del motor y de ahí medir la caida de tensión, lo malo es que creo que habría que usar un amplificador y todo el rollo... Aquí explican un poco acerca de ese tema en el caso de motores: http://www-app.etsit.upm.es/departamentos/teat/asignaturas/lab-ingel/1668.pdf

La verdad es que no sé por donde tirar, pues yo quiero ahorrar el mayor tiempo posible en esto porque el proyecto ya en sí tiene mucho más desarrollo detrás... Quizá la mejor opción sea comprar el paquete ya hecho como es el del enlace de sparkfun con el filtro y todo, aunque luego obtenga medidas un poco inestables ¿qué opinas? quizá podría meterse un poco de filtración software en caso que no sea suficiente con el filtro que trae...

Gracias por adelantado por tu opinión. Un saludo.

Visto los problemas que hablan de la placa de Sparkfun yo compraría cualquier otra sin etapa amplificadora ya que no te va a hacer falta. Compras el de rango de 5 A y te irá bien. A la salida le pones el filtro RC en paso bajo y lo calculas para el tiempo de respuesta que necesitas. Yo empezaría así y compruebas resultados.

Cheyenne:
Visto los problemas que hablan de la placa de Sparkfun yo compraría cualquier otra sin etapa amplificadora ya que no te va a hacer falta. Compras el de rango de 5 A y te irá bien. A la salida le pones el filtro RC en paso bajo y lo calculas para el tiempo de respuesta que necesitas. Yo empezaría así y compruebas resultados.

La verdad es que eso de que no voy a necesitar etapa amplificadora no lo tengo claro. Yo pretendo utilizar la intensidad como una medida del par, desde 0 hasta máximo. Por tanto habrá momentos en los que la intensidad sea menor (o alrededor de) de 100mA.

Pero con amplificador o sin él tienes que cubrir hasta 2,5 A. Si te coge ese rango un sensor sin amplificador, no ganas nada con otro que sí lo tenga.