Autor Tema: Control de Posicion Motor DC  (Leído 18727 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Control de Posicion Motor DC
« Respuesta #15 en: 16 de Junio de 2014, 11:17:28 »
En este caso, estamos hablando de un motor que no tiene prácticamente masa (pesrá 100grs?) y que no tiene nada acoplado por ahora.

Lo importante en un motor no es la masa. Al ser giratorio, su parámetro es el momento de inercia o inercia de giro.

Pero que obtuso que sos! el momento de inercia es directamente proporcional a la masa!!!  es mas dependiente del radio, obvio, pero como sabrás los servos suelen ser motores con pequeño diámtreo y mas bien largos. En los motores como el del video, motores comunes, hablar de momento de inercia es lo mismo que hablar de masa...

bue, ya fue, por lo menos me quedo con esta frase:

"En el caso de control de posición de motores, suele ser necesario el derivativo para conseguir un buen rendimiento y es imprescindible cuando la carga tiene inercia y poco rozamiento, en cuyo caso hay que añadirlo después del proporcional."

y me quedo con que no refutes que con un control PD no se alcanza nunca el SP establecido, mientras que con un PI si y es por ello que es más importante establecer un buen control PI y luego mejorarlo con derivativo.

Por cierto, quizá no sepas que hay hoy dos grandes tipos de estrategias de control, el rechazo a disturbio (el caso del amortiguador y la rueda) y el caso de alcanzar el SP lo más rápido y sin sobreimpulso posible. Para ambos casos se usan estrategias (paràmetros del PID) totalmente distintos. Entonces no podes comparar la sintonía de un PID para amortiguar con la sintonia de un PID para control de posicion...

Ahora, si, último mensaje. Por mi ni te molestes en poner un excel con simulacion, el tema original por el que interrumpi tus consejos es por la conveniencia de agrgar control integral como segundo paso y derivativo como tercer paso. No tiene sentido seguir debatiendo sobre esto, ni siquiera le interesa a la persona original del post...
-
Leonardo Garberoglio

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #16 en: 16 de Junio de 2014, 13:35:40 »
Pero que obtuso que sos! el momento de inercia es directamente proporcional a la masa!!!  

Querido elgarbe, más bien soy agudo. He sacado punta a tu comentario, que no era del todo preciso.
Si no te interesa seguir discutiendo, no lo hagas, pero si quieres comentar más, tendrás que hacerlo en otro tono.

Desde mi punto de vista, creo que no conoces la importancia del control derivativo en el control de posición de un motor y estoy intentado que la comprendas. Este es un tema que interesa a mucha gente en el foro y del que quieren y pueden aprender.

Ten en cuenta que estás en público y muchos foreros te leen y aprenden. Si un comentario no es preciso (la masa del motor no es lo mismo que el momento de inercia) lo suyo es darme las gracias por aclararlo y, si conoces bien el tema, aprovechar para explicarlo a todos.

No se trata de tener razón, sino de aprender y enseñar. ¿Qué es lo que te interesa?

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #17 en: 16 de Junio de 2014, 13:44:19 »
Adjunto hoja de cálculo Excel con una simulación de control de posición de un motor Maxon de 2.5 vatios y 6 voltios.

Se pueden ajustar los parámetros P, I, D por separado

Se puede establecer un par de giro externo para generar error de posición.

Saludos.
« Última modificación: 16 de Junio de 2014, 18:08:06 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #18 en: 16 de Junio de 2014, 13:53:55 »
Por encima de 1, el control proporcional se hace muy inestable y es necesario añadir derivativo.

Añadiendo ganancia derivativa de 0.02, podemos incrementar el proporcional hasta el valor 2.

Ahora podemos añadir Integral con valor 0.07 y el sistema funcionará rápido, estable y sin error.
Para que el término integral funcione bien, hay que ajustar la ventana de error a 2 (es un término anti-windup que mejora la respuesta del sistema metiendo el término integral sólo cuando el sistema se encuentra cerca de conseguir su posición)

Proportional                    2   
Integral Ki                     0,07   
Derivativo Kd                   0,02   
Ventana error integral          2       [rad]




Adjunto imagen de la posición del motor simulada.

La referencia de posición va de 0 a 12 radianes (cerca de 2 vueltas completas)

Saludos.
« Última modificación: 16 de Junio de 2014, 13:56:08 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #19 en: 16 de Junio de 2014, 14:07:22 »
Este caso simula un motor subiendo una carga que supone un poco más de la mitad de su par de giro.

Este caso lleva mucho tiempo ajustarlo si se añade como segundo paso el integral.
Hay que hacer muchos pasos para llegar al resultado final (el resultado anterior podría ser un buen final)

El paso intermedio con sólo Proporcional e Integral sería este:
Proporcional:      0.7
Integral:            0.01
Ventana integral: 5

Adjunto gráfica.

Saludos.
« Última modificación: 16 de Junio de 2014, 18:10:05 por Picuino »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Control de Posicion Motor DC
« Respuesta #20 en: 16 de Junio de 2014, 14:38:27 »
cuanto nivel en conocimientos sobre PID picuino y elgarbe uff no se que decir solo seguir leyendo e intentar aprender  :shock:



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Control de Posicion Motor DC
« Respuesta #21 en: 16 de Junio de 2014, 16:17:50 »
Yo tambien estoy aprendiendo con el posteo de ambos, picuino muy buena la hoja de excel gracias por compartirla.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #22 en: 16 de Junio de 2014, 17:59:25 »
Dejo una versión de la hoja con la que es fácil copiar imágenes de la gráfica.

La he subido para que se animen a ajustar el control PID a ver que le sale a cada uno.
Tiene una macro muy sencilla que copia el área de la gráfica y los valores PID al pulsar un botón azul.


Saludos.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Control de Posicion Motor DC
« Respuesta #23 en: 16 de Junio de 2014, 19:53:46 »
Muy intersante lo que comentan... solo una dudilla insignificante  :D
Como se implementa el control PID en un pic?

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #24 en: 17 de Junio de 2014, 05:13:01 »
Muy fácil. Está en la hoja de cálculo.

1º Calcular el error

   error = posición actual - posición deseada


2º Calcular el control proporcional:

   control_proporcional = error * kp


3º Calcular el control derivativo:

   control_derivativo = (error - error_old) * kd / dt

   error_old = error

Siendo dt el tiempo de muestreo. En el caso de la hoja de cálculo es  dt = 0.001 s
Depende de la constante de tiempo del motor. Debe ser unas 10 veces menor que la constante de tiempo del motor (tiempo de respuesta del motor)


4º Calcular el control integral:

   control_integral = control_integral + error * ki  * dt

Para añadir anti-windup, hay que poner una condición:

   if (abs(error) > ventana_integral)
      control_integral = 0


5º Calcular el control PID y aplicarlo al PWM:

   control_PID = control_proporcional + control_derivativo + control_integral

   if (control_PID>255)  control_PID = 255
   if (control_PID<-255)  control_PID = -255
   control_PWM(control_PID)

RESUMIDO:

Código: [Seleccionar]
   dt = 0.001;   // Tiempo entre llamadas a esta rutina.
   kp = 2.0;      // Constante proporcional
   kd = 0.03;     // Constante derivativa
   ki = 0.07;      // Constante integral

   error = posición_actual - posición_deseada;

   control_proporcional = error * kp;

   control_derivativo = (error - error_old) * kd / dt;

   error_old = error;

   control_integral = control_integral + error * ki  * dt

   if (abs(error) > ventana_integral)
      control_integral = 0;

   control_PID = control_proporcional + control_derivativo + control_integral;

   if (control_PID>255)  control_PID = 255;
   if (control_PID<-255)  control_PID = -255;
   control_PWM(control_PID);
Saludos.
« Última modificación: 17 de Junio de 2014, 05:17:54 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #25 en: 17 de Junio de 2014, 05:44:34 »
El procedimiento para ajustar el PID sería:

1º Aumentar el control proporcional.
Con esto conseguimos más velocidad de respuesta, menor error de posición y más inestabilidad.


2º Aumentar el control derivativo
Se oye mucho que el control derivativo aumenta la velocidad del sistema. No es cierto.
El control derivativo hace que el sistema sea más lento.
Otro efecto del derivativo consiste en que hace la respuesta del sistema más estable. Quita oscilaciones.
Al aumentar el control proporcional, veremos que las oscilaciones comienzan a aumentar, hasta ser demasiado grandes.
Antes de seguir aumentando el control proporcional es necesario estabilizar el sistema. Aquí es donde el control derivativo entra a cumplir su función.

En la hoja de cálculo, con un valor proporcional por encima de 1 el sistema es completamente inestable el sistema tiene muchas oscilaciones. Añadiendo derivativo, el sistema se estabiliza, se eliminan las oscilaciones y podemos seguir aumentando el control proporcional hasta 2 o 4 sin problema.


3º Añadir control Integral
Una vez que el sistema es rápido (con el control proporcional) y es estable (con el control derivativo) todavía tendrá errores de posición.
Aquí es donde el control integral cumple su función. Este control elimina el error permanente.
Hay que ir aumentando el control integral poco a poco y veremos que el error se hace cero cada vez más pronto.
La desventaja del control integral consiste en que hace que el sistema sea más inestable y tenga oscilaciones, de manera que hay un límite por encima del cual no merece la pena aumentar el control integral, porque al hacer el sistema inestable, la posición se alcanza más tarde.
La inestabilidad del control integral se puede compensar un poco aumentando el derivativo.

Saludos.
« Última modificación: 17 de Junio de 2014, 15:21:08 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #26 en: 17 de Junio de 2014, 15:41:41 »
He modificado la hoja de cálculo para que aparezca el error en régimen permanente ampliado por 100, en una línea azul.
Ahora es más fácil ver el efecto de los 3 parámetros PID sobre el sistema.
He aumentado las constantes y funcionan bien:

P = 20
I = 0.5
D = 0.15

Saludos.
« Última modificación: 17 de Junio de 2014, 15:43:45 por Picuino »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Control de Posicion Motor DC
« Respuesta #27 en: 18 de Junio de 2014, 01:33:32 »
Otra lección magistral de Picuino. Y el usuario que abrió el hilo ni se asoma para agradecerla.
En fin, yo me suscribo al hilo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #28 en: 18 de Junio de 2014, 04:14:52 »
Gracias Manolo.

Voy a continuar con el tema de la inercia. Es un punto interesante y no siempre bien conocido.
Conviene saber valorarlo bien, porque en ciertos sistemas puede ayudar y en otros ser un problema que tenemos que saber manejar.

La inercia es la propiedad que tienen los cuerpos de permanecer en movimiento (o reposo) mientras una fuerza externa no cambie su estado. La inercia permite que los cuerpos almacenen energía.

Hay dos clases de inercia: lineal y la giratoria

Inercia lineal:
La inercia lineal depende de la masa. La energía que almacena un cuerpo al moverse se calcula con la fórmula siguiente.

   E = 0.5 * M * V^2

   E = Energía en Julios
   M = Masa en kilogramos
   V = Velocidad en metros/segundo

Por ejemplo, un pequeño coche automático que pesa 1 kilogramo y se desplaza a 1 metro por segundo (1 m/s * 3.6 =  3.6 km/h)
la energía que almacena es:

   E = 0.5 * 1 * 1^2 = 0.5 * 1 * 1 = 0.5 Julios



Inercia giratoria:
Esta es la inercia que tienen los cuerpos que giran. Por ejemplo un motor, una reductora, una rueda o un volante de inercia.

La energía que almacena un cuerpo giratorio depende de su momento de inercia y de la velocidad de giro.
El momento de inercia suele darse en el datasheet de los motores, se puede calcular y también se puede estimar.

La fórmula para calcular la energía que almacena un cuerpo que gira es:

   E = 0.5 * I * w^2

   E = Energía en Julios
   I = Momento de inercia en kilogramos*metro cuadrado
   w = Velocidad de giro en radianes/segundo


A veces es conveniente saber traducir unidades:

   w (radianes/segundo) = w (rpm) * 2*pi/60 = w (rpm) * 0.10472

   I (kilogramos·m2) = I (gr·cm2) / 10 000 000


Ahora, siguiendo el ejemplo anterior del coche, tomamos un motor con las siguientes características:

   I = 10 gr·cm2 = 0.000 001 kg·m2

   w = 10000 rpm = 1047 rad/s


La energía que almacena es:

   E = 0.5 * 0.000 001 * 1047^2 = 0.548 Julios.


Como podemos ver, la inercia del coche (que pesa 1 kilo) es menor que la inercia de giro del motor (que pesa unos pocos gramos y tiene un momento de inercia de 10gr·cm2) Esto es así porque el motor gira a mucha velocidad, mientras que el coche se desplaza relativamente despacio.
Este resultado es muy común con los motores que tienen reductora.

De hecho hay coches de juguete que aprovechan esta propiedad para almacenar energía en un pequeño volante de inercia para que al empujarlos se mantengan en marcha durante bastante tiempo.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control de Posicion Motor DC
« Respuesta #29 en: 18 de Junio de 2014, 04:21:01 »
Coche de juguete con volante de inercia:




Volante de inercia:


Saludos.