Autor Tema: Rampas de aceleracion en motor DC con PIC  (Leído 8440 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado oetamnas

  • PIC10
  • *
  • Mensajes: 5
Rampas de aceleracion en motor DC con PIC
« en: 18 de Octubre de 2005, 12:13:00 »
Hola a todos!
 He empezado hace poco con esto de los PICs y me esta enganchando bastante. El tema es que estoy empezando a realizar un proyecto para controlar un motor de continua mediante una serie de parametros previamente introducidos.

 Primero se deben de introducir la velocidad deseada y el tiempo de aceleracion, luego el tiempo de mantenimiento y finalmente el tiempo de desaceleracion. La idea es hacerlo aprovechando el modulo CCP2 de un PIC16f876 o similar funcionando en modo PWM para controlar un motor de poca potencia en principio aunque tambien lo podría hacer para disparar triacs.
La cuestion es que  no tengo muy claro como deberia realizar estas rampas de aceleracion y deceleracion, para variar la velocidad linealmente

Si alguien tuviera alguna idea, le estaria muy agradecido si me la comentase para saber por donde empezar.

Muchas gracias por todo.

Un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #1 en: 21 de Octubre de 2005, 14:38:00 »
Bueno, me llene de bronca porque te estaba escribiendo una respuesta bien detallada, y se me borro todo. Me llena de bronca...Pero bueno

Aca va:

La velocidad es la derivada de la posicion, la aceleracion es la derivada de la velocidad, o, lo que es lo mismo, la segunda derivada de la posicion.
Defino Vi como Velocidad inicial
Defino Vf como velocidad final
Defino Vmax como velocidad maxima

Bien:

Como vemos en el grafico que te hice, tenemos 5 sectores claves:

(1) Vi, es la velocidad inicial, la cual necesariamente no tiene que ser 0.
(2) Comienza la aceleracion, como vos queres aceleracion lineal, la velocidad se ira incrementando de manera lineal, y la aceleracion permanecera constante valiendo c1
(3)Vmax, aqui el motor alcanza la velocidad maxima deseada, y la mantiene durante X tiempo.
(4) Comienza la desaceleracion, tambien se produce una variacion de velocidad lineal, por lo que la aceleracion adopta un valor negativo constante.
(5) Vf, velocidad final, no necesariamente 0.

Cabe destacar que depende de cuanta resolucion de velocidades y tiempo depende el metodo que uses, aqui yo te lo explico
para que coloques un conversor DA en el puertoB del pic supongamos...16F84.El conversor DA se hace con resistencias(o lo que vos quieras), hay muchos dando vuelta por la web. fijate
Te hago una aclaracion, la mejor manera de controlar la velocidad de un motor DC, no es variando su voltaje de entrada, sino variando su intensidad y mantendiendo voltaje constante.
Entonces para poner al motor en reposo, la Intensidad debe tender a cero:
(lim   x
 I-> 0 )

Por lo tanto tendremos 256 velocidades distintas.
El tiempo, lo seteo en pasos de 10ms, lo podes cambiar cuando gustes.

En los graficos explico las curvas que genera tu proyecto.
Destaco que en realidad, el grafico no es lineal sino que escalonado, pero lo hice lineal para representar bien la idea.

El programaEnfurruñadopuede tener errores, ya que te lo estoy haciendo en el momento y sin probarlo)


El otro grafico que hice:





El programa:

Programa DC

               ;Diseño completo por: BrunoF brunodini@yahoo.com.ar


Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #2 en: 23 de Octubre de 2005, 02:43:00 »
Encontre 2 o 3 errores tambien en los comentarios de mi programa, nada grave, mañana lo modifico. Si necesitas mas informacion, no dudes en consultarme. ok?
Espero el programa con la modificacion pa usar el PWM..Giño
He testeado el programa y anda de maravillas Giño tenia mis dudas sobre si iba a funcionar con aceleracion constante, pero funciono perfecto.
Ha salido mejor de lo que me esperaba, y tan solo me llevo en 3 hora hacer todo!RebotadoRebotadoRebotadoRebotadoRebotado
Te comento los valores que le di para lograr tanto aceleracion como desaceleracion constantes.Este es un simple ejemplo, hay infinidad de combinaciones posibles...

Vi= 5
tinit=100
Vmax=255
tmax=220
tacel=50
Vf=55
tdesacel=100
tfinal=180

Nos mantenemos en contacto. Si necesitas mas explicacion, especialmente teorica y/o matematica, pues has dado con el picopata correctoSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Jimmy_pop

  • PIC12
  • **
  • Mensajes: 72
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #3 en: 23 de Octubre de 2005, 06:26:00 »
Hola,

para alimentar un motor DC pequeño no es necesario que uses Tríacs pero sí puedes usar un puente en H de transistores (como el integrado L293B) si al motor le quieres dar entre 5 y 30 V de tensión y no va a superar el amperio de consumo en estacionario. Usar éste integrado es sumamente simple (el diagrama que viene en el datasheet lo deja clarísimo) pero es necesario, piensa que los picos de corriente que puede consumir el motor en los transitorios pueden ser de 15A tranquilamente en un motor pequeño y pueden mandar al cuerno el PIC si no se va con cuidado, alimentar cargas directamente de las patas del PIC es peligroso y solo debe hacerse para cosas que no den sustos como led"s y tonterías de muy baja potencia.

por otra parte el tema de los motores DC, los pequeños que solo tienen 2 terminales suelen ser lo que se llama motores de contínua de imante permanente, estos motores en régimen contínuo (e impulsando cargas estáticas como inercias y rozamientos o en vacío) dan una velocidad de salida del eje constante que depende del módulo de la tensión de entrada: a mas tensión mayor velocidad de régimen permanente. La relación entre la tensión y la velocidad de régimen permanente depende de la masa del rotor y la carga que impulse así como del frotamiento que produce pérdidas mecánicas de modo que al variar la carga la relación cambia.

En principio si vas a usarlo con un carga constante y no necesitas ninguna precisión, partiendo del reposo puedes alimentar el motor con una tensión constante y la velocidad de rotación irá augmentando hasta estabilizarse en un valor proporcional a la tensión. El incremento de la velocidad se produce de forma exponencial algo parecido a la función v(t)=Vfinal·(1-e^(-lambda·t)) donde lambda es la famosa constante de tiempo del motor. Desconozco el motivo por el que quieres que la velocidad vaya augmentando linealmente pero si eso es lo que quieres puedes ir incrementando linealmente la tensión de entrada y si la rampa tiene una inclinación pequeña la velocidad irá incrementando de un modo parecido.

Si quieres algo mas fino como por ejemplo controlar con precisión la velocidad del motor y evitar que perturbaciones externas te cambien mucho la velocidad (hacerlo insensible) deberás usar algun tipo de sensor como una dinamo tacométrica o un sensor angular para hacer una realimentación a través del microcontrolador.

Finalmente te desaconsejo que controles el motor por corriente, a pesar de que prácticamente es lo mismo que hacerlo en tensión, el motivo es porque el hardware necesario puede ser mas complejo de controlar (bjt"s y otras cosas suxeantes). Xcierto: paradójicamente para controlar por corriente hay que jugar con la tensión, así que BrunoF no sé como quieres variar la intensidad dejando la tensión quieta.

Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #4 en: 23 de Octubre de 2005, 18:15:00 »
Bueno, pues con una resistencia digital! Me estas haciendo escarbar en un area que no es mi especialidad...
Esta bien que si la I decae x debajo de un cierto valor, comienza a caer la tension para ajustar...Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado oetamnas

  • PIC10
  • *
  • Mensajes: 5
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #5 en: 24 de Octubre de 2005, 13:34:00 »
Al fin he conseguido realizar el control. Lo he simulado con Proteus y funciona correctamente. Si hay alguien interesado en ello le puedo pasar el asm, xq estoy intentando colocarlo como fichero adjunto pero no me deja(  tambien tengo  el esquema en Proteus )
El control lo hago con el modulo CCP del PIC y lo aplico a un driver para controlar un motor de pequeña potencia.
Ahora voy a intentar adaptarla para que dispare un puente de tiristores para poder controlar motores de mayor potencia.
Saludos.

Desconectado oetamnas

  • PIC10
  • *
  • Mensajes: 5
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #6 en: 24 de Octubre de 2005, 13:55:00 »
Hola de nuevo.

Acabo de leer tu mensaje Jimmy_Pop y como veo que controlas del tema te voy a hacer otra pregunta. El tema de este proyectillo consiste en el control de una maquina que hace bobinas de hilo, que debe seguir una grafica similar a la que esta en el mensaje de Bruno, pero con la salvedad de que los parametros de tiempo y velocidad deben de ser introducidos por el usuario y a partir de ello realizar el PWM para controlar el motor. Ya lo tengo hecho para un motor de peq potencia con el driver que comentas en tu mensaje, pero ahora tengo que realizar tb la etapa de potencia con realimentación de velocidad con una dinamo tacométrica. La etapa de potencia en ppo va a ser un puente de tiristores, pero no tengo muy claro como realizar el disparo de los mismos a partir de la señal PWM. Habia pensado en pasar la señal por un filtro paso-bajo y compararlo con una rampa sincronizada con la red para disparar los tiristores, pero no tengo muy claro como usar la realimentacion.

Si alguien supiera como se hace esto, le estaria muy agradecido si lo comentase.

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #7 en: 24 de Octubre de 2005, 21:45:00 »
Hola, yo hice tu programa para que puedas cambiar los valores cuando desees, simplemente debes hacer una interfaz en la que vayas ingresando los valores, y el programa calculara y ajustara la aceleracion solo. No se si te habias percatado de eso. Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Jimmy_pop

  • PIC12
  • **
  • Mensajes: 72
RE: Rampas de aceleracion en motor DC con PIC
« Respuesta #8 en: 28 de Octubre de 2005, 12:28:00 »
Bueno a ver,  supongo que el nuevo motor que quieres controlar será un motor DC a pesar de ser de mas potencia, no? Es que lo del filtrado y la comparación creo que no lo he entendido demasiado. A mi lo que se me ocurre siempre es lo mas elemental: rectificar la corriente alterna con un puente de diodos, un trafo y unos condensadores para disminuir el rizado, y luego usar el puente de tiristores o lo que sea para dar tensión a los bornes del motor dando la consigna des del micro.

Si usas una dinamo tacométrica como sensor de velocidad es como usar un motor dc pero funcionando a la inversa es decir que se pone el tacómetro, (que en el fondo es un motorcito pequeño con una resistencia cortocircuitando los bornes) con el eje solidario al eje que mueve un motor mas potente y luego se mide la tensión que cae en bornes de la resistencia desde un conversor A/D para usar ese dato en un microcontrolador.

A partir de la lectura de esa tensión se debe deducir la relación tensión del tacómetro - velocidad de giro, en tacómetros comerciales obviamente ese dato ya se da.

Cerrar el lazo:

Explicar aquí como diseñar un controlador no sería sencillo, pero puedo dar unas directrices. Existe muchisima literatura acerca del diseño de controladores PID, PI, PD, P.. así que no te será dificil encontrar algun texto. No obstante para ayudarte te voy a dar un par de claves para simplificarte la tarea:

Para el caso particular de ese control se suele usar un P o bien un PI. El P hace que el motor evolucione de un modo parecido a como lo hacía sin controlador, sigue una curva parecida PERO la sensibilidad a perturbaciones exteriores disminuye: es decir que parámetros como fluctuaciones de la carga que se le somete y cosas así afectarán MENOS que con el motor sin controlador. No obstante si se quiere tener cierta exactitud en el valor de la velocidad que se desea obtener hay que tener en cuenta que el P da un error permanente no-nulo. Para ser mas precisos se necesita un PI. El PI da error estacionario nulo en este tipo de sistema pero es mas dificil de diseñar y es mas inestable. Mi consejo es que primero pruebes de hacer un PI observando qué tal responde tu motor con distintos parámetros de la constante proporcional y luego pruebes añadiendo la parte integradora del PI para hacer el error estacionario nulo.

Sobre el periodo de muestreo se dice que hay que usar algo así como una frecuencia 20 veces superior a la frecuencia de la banda de paso del sistema. Elegir una frecuencia demasiado baja puede hacer que el sistema sea inestable con el controlador, y usar una de demasiado alta puede no tener sentido. Mi consejo es probar un poco y elegir un periodo razonable: 10-20Hz? algo así puede ser mas que bueno.

Espero que estas directrices te sirvan de algo y te animo a no asustarte y consultar algo de bibliografía. Si necesitas hacerte tu tacómetro y todo eso para conocer la velocidad yo casi casi te plantearía la posibilidad de que te hicieses mas que un tacómetro un encoder óptico con un poco de maña pq al ser puramente digital puede simplificar la tarea de descubrir la correspondencia lectura-velocidad si no se dispone de instrumentación ni de nada.

En fin, ánimo!