Autor Tema: Eficacia con el PWM por software....  (Leído 24901 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #15 en: 08 de Mayo de 2005, 15:26:00 »
y si nadie me corrige creo recordar que en el datasheet del pic indica que no se puede utilizar el pos-escaler con el modulo CCP -> PWM...
Saludos desde Granada, España.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Eficacia con el PWM por software....
« Respuesta #16 en: 09 de Mayo de 2005, 00:07:00 »
Perdona dogflu66, pero ahora mirando de nuevo mis propias palabras creo que me equivoqué.

Es cierto que basándonos en: T=(PR2+1) · 4 · (1/fosc) · TMR2preescaler

El periodo máximo que admite el pwm del PIC es de 4,096ms:

Tmax=(255+1) · 4 · (1/4Mhz) · 16 = 4,096ms  lo que implica que el módulo hardware CCP nunca va a poder conseguir los 20 ms de periodo que hacen falta para el control del Servo.

Los 20ms no va a haber más remedio que conseguirlos mediante temporización de un TMR.

De nuevo pido excusas, esta tarde pasaré a corregir el otro mensaje.

Un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #17 en: 09 de Mayo de 2005, 06:49:00 »
A mi entender Pocher,  de tu antiguo mensaje se deduce, que con el periodo restante hay que buscarse la vida con un timer...
Saludos desde Granada, España.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Eficacia con el PWM por software....
« Respuesta #18 en: 09 de Mayo de 2005, 09:33:00 »
Imagina dogflu66 que con el modulo CCP generamos una onda de 1ms en estado alto y 3ms en estado bajo, bueno pués cuando pasen esos 3ms en estado bajo te va a aparecer de nuevo, el 1ms en estado alto fastidiándote el funcionamiento del Servo, ya que hasta pasados 19ms no tenía que haber aparecido de nuevo el estado alto. Se podría quizá mediante software bloquear los pulsos intermedios (salvo el primero) en el interior de los 20ms, pero creo que es más sencillo hacerlo todo desde el principio con un temporizador.

Un saludo

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Eficacia con el PWM por software....
« Respuesta #19 en: 09 de Mayo de 2005, 12:27:00 »
Tomo nota de esa ventaja dogflu66, cuando pueda lo pruebo físicamente.

Desconectado Jimmy_pop

  • PIC12
  • **
  • Mensajes: 72
RE: Eficacia con el PWM por software....
« Respuesta #20 en: 10 de Mayo de 2005, 15:42:00 »
Yo creo que estamos errando en el planteamiento de toda la historia,

El servo corregidme si me equivoco está pensado para recibir una entrada analógica cuyo valor de tensión el servo lo traduce en respuesta de posición del eje. Nosotros entramos directamente una salida de pwm generada por el controlador aprovechando que la entrada analogica del servo tendrá impedancia practicamente infinita y confiamos en que el servo por su transmitancia (que juraría que es la de un sistema lineal de 2o orden de tipo 1, debido a que debe contener un motor DC con una realimentación analogica a modo de P.I.) hará de pasabajos y se cargará las componentes de alta frecuencia del pwm dejando una señal finita que se traduzca en respuesta de posicion del servo de modo fluído sin salto. No obstante, por lo que leo aquí decís que hay que usar un ciclo dutty de como mínimo 20ms... supongo que eso se debe a que los tiempos de propagacion de los integrados del control del servo hacen una mala pasada y se cargan la señal, no?¡

Si eso es verdad mas que usar un dutty tan lento (que entre otras cosas puede producir discontinuidades en las velocidades del eje) yo lo que pensaría es aprovechar esta excusa para usar un periodo muy pequeño de dutty del pwm y poner un pequeño filtro pasabajos entre la salida del PWM y la entrada del servo para cargarnos las altas frecuencias, es algo que se hace muchas veces y no tiene demasiada dificultad...

la ventaja es que generaremos una señal muy fina que dará una respuesta del servo mucho mas buena.

para hacer el filtro quizás con un amplificador operacional se puede montar alguna historia sin demasiada complicación, solo hay q tener en cuenta antes de eso qué frecuencia de dutty se elige para dimensionar correctamente el filtro poniendo de frecuencia de corte por ejemplo la frecuencia del armonico principal del pwm.

bueno comentad que os parece la idea si os apetece

saludos

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #21 en: 10 de Mayo de 2005, 15:56:00 »
Estoooooo.... Pocher comentalo tu primero que yo tengo que ir a pasear al perro....
Saludos desde Granada, España.

Desconectado Cristianxx

  • PIC10
  • *
  • Mensajes: 34
RE: Eficacia con el PWM por software....
« Respuesta #22 en: 10 de Mayo de 2005, 21:06:00 »
Bueno, la verdad no soy experto en PIC y estoy tratando también de controlar 4 servos con un pic de la serie 18f...

Leyendo el datasheet me he dado cuenta que se puede conectar un segundo cristal al pic, y queria ver si alguien mas experto me podria decir si este segundo cristal puede ser usado como reloj para el modulo pwm, asi se podria conectar un cristal de 1 mhz o 32 khz y de esa manera tener al pic funcionando rapido y al pwm lento como para manejar el servo.

---EDITADO----

Acabo de descubrir que la serie pic xx31 (2431, 4431, etc), los de control de motores, tienen entre otras cosas, la capacidad de producir frecuencias mucho mas bajas, hasta de 30hz con un cristal de 10 mhz, pero no pude dar con las formulas en el datasheet para controlar frecuencia y duty cycle. A ver si alguien entiende un poco mas que yo y nos ayuda

RebotadoRebotado

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #23 en: 11 de Mayo de 2005, 18:25:00 »
He estado echando un vistazo al circuito del servo con un osciloscopio, y tengo que decirte que la señal de entrada digital con el ducty prefijado por ejemplo a 2 mSg, que es el máximo aconsejado por el fabricaten del servo va directamente a un pin del C.I. por lo que en un principio no tiene componentes externos que la modifiquen o filtre, he observado que en uno de los pin del C.I. se puede observar una señal de diente de sierra con un periodo parecido al de la señal de entrada y la salida que controla el motor parese que es un sistema de pwm con una frecuencia distinta a la señal de control, pero hasta que no quite el motor para que no me distorsione la señal no podría asegurarlo, hay un problema y es que no conozco el esquema del servo y en este caso el circuito de control esta formado por un único C.I. y algunos componentes discretos...
Ya que trabajo con los servomotores desde hace poco tiempo y solo conozco las indicaciones de la hoja de características, alimentación entre 5 y 6v, una entrada de control que trabaja a una frecuencia de 50Hz y solo puede estar a positivo como máximo 2 mSg, estando la variación de esta entrada comprendida entre 1 y 2 mSeg y completando el resto del periodo con la señal a cero...

Yo no conozco realmente el funcionamiento del circuito del servo, pero imagino que la señal de entrada sera convertida a una señal continua debidamente filtrada y traducida a señal de control de sentido de giro y velocidad pwm... que según deduzco es algo parecido a lo que tu te refieres en tu mensaje...

Realmente tengo problemas para seguirte, tengo que decirte que mi rutina realmente trabaja con una frecuencia de 500Hz, que tuve que ajustar con un frecuencimetro, lo que ocurre como es natural es que tiene grandes periodos muertos en los que sus salidas estan a cero hasta completar los 18 mSg de periodo que faltan 500Hz -> 2mSg + 18 mSg que no hace nada = 50Hz -> 20mSg en total según las especificaciones del fabricante del servo motor...
Por lo que en principio si te entendi bien estoy trabajando como tu indicas... a una frecuencia muy superior a 50Hz...

Cristianxx el tema del segundo cristal es algo que no profundice en ello por la limitación del modulo ccp -> pwm a solo dos salidas, y para mi pequeño proyecto necesito mas, cuando tenga un rato libre le daré un vistazo y te cuento, y con respecto a la otra serie de pic no la he estudiado por lo que la desconozco...
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #24 en: 11 de Mayo de 2005, 19:26:00 »
Y otra vez...

Si yo inyecto una señal de control con una duración de 2mSg a 1 y 18 mSg a cero, que esto equivale a una frecuencia de 50Hz, esta señal sera convertida a una señal analógica (en este caso al ser siempre la misma no variara de valor), la entrada tiene que ser de alta impedancia para mantener la señal generada durante el periodo de tiempo que la señal de control esta a cero, esta señal sera analizada y convertida a valor de sentido de giro y velocidad del motor.... esto seria lo normal según el fabricante...

Entonces si inyecto una señal de control con una duración de 1.5 mSg a 1 y 0.5 mSg a cero, esto equivale a una frecuencia de 500Hz, esta señal habría que filtrar para eliminar los armonicos jodidos, después entraria a la circuiteria con lo que tendría el mismo proceso que la anterior, entrada de alta impedancia convertida a valor de tensión, y traducida a sentido de giro y velocidad de motor (en este caso motor parado), es decir este es el caso que tu expones y que debería de funcionar... igualmente que el anterior que es el que especifica el fabricante...
Saludos desde Granada, España.

Desconectado Cristianxx

  • PIC10
  • *
  • Mensajes: 34
RE: Eficacia con el PWM por software....
« Respuesta #25 en: 11 de Mayo de 2005, 20:34:00 »
Gracias por tu información dogflu. Como te digo, estoy intentando probar con los pic de la serie 31, ya que el pwm especial para control de motores que traen se puede poner incluso a frecuencias de 30 hz y tiene resolución de 14 bits, por lo que incluso es mucho mejor para controlar servos digitales. Lo que no he podido encontrar es la manera de configurarlos para esta frecuencia, ya que las opciones de configuración son distintas a las del pwm normal, pero estoy preguntando en el foro de microchip a ver que me responden. Si no, tendré que probar programando y reprogramando, ya que el proteus no soporta el 2431 ni el 4431 Enfurruñado

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Eficacia con el PWM por software....
« Respuesta #26 en: 12 de Mayo de 2005, 06:08:00 »
Ya he encontrado una solución para poder usar los módulos hardware CCP en modo PWM con un Servo. Es una tontería, pero en su momento no la ví.

Bien, la fórmula era: T=(PR2+1) · 4 · (1/fosc) · TMR2preescaler

El periodo máximo que admite el pwm del PIC es de 4,096ms: Tmax=(255+1) · 4 · (1/4Mhz) · 16 = 4,096ms con lo cual falta mucho para los 20ms.

Sí, pero los cálculos de arriba son para una fosc=4MHz, si queremos aumentar T, lo único que hay que hacer es disminuir la fosc. Empleando por ejemplo una fosc=1MHz tendríamos T=16ms que son suficientes para controlar al Servo ya que los 20ms no son estrictos hay un margen de aproximadamente 5ms por arriba y por abajo, y si quieres los 20ms exactos pues coges otro cristal. ¡ A que la solución era tonta!

Bien, avanzando un poco más estaba pensando en que con los 2 módulos CCP pués solo se podrían controlar 2 Servos (uno por módulo). He intentado asignar la señal pwm que sale por RC2 (ó RC1) a otro pin del PIC, por ejemplo a RB0,  con output_bit(pin_b0,input(pin_C2)) pero no va bien, no sé si va a ser posible, si lo fuera conseguiríamos controlar más de 2 servos con pwm del CCP.

Un saludo


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Eficacia con el PWM por software....
« Respuesta #27 en: 12 de Mayo de 2005, 10:48:00 »
He estado probando el servo con una frecuencia de control de 500Hz, y no recomiendo su uso, porque se hace muy critico el ajuste de cero (utilizo una resistencia ajustable multivuelta) y cuando se logra ajustar en principio funciona pero algunas veces le da por girar solo, y a motor parado esta mas blando de girar hacia un lado que otro.... es decir el freno no esta equilibrado...
Saludos desde Granada, España.

Desconectado Cristianxx

  • PIC10
  • *
  • Mensajes: 34
RE: Eficacia con el PWM por software....
« Respuesta #28 en: 12 de Mayo de 2005, 11:02:00 »
Escrito originalmente por pocher
Ya he encontrado una solución para poder usar los módulos hardware CCP en modo PWM con un Servo. Es una tontería, pero en su momento no la ví.

Bien, la fórmula era: T=(PR2+1) · 4 · (1/fosc) · TMR2preescaler

El periodo máximo que admite el pwm del PIC es de 4,096ms: Tmax=(255+1) · 4 · (1/4Mhz) · 16 = 4,096ms con lo cual falta mucho para los 20ms.

Sí, pero los cálculos de arriba son para una fosc=4MHz, si queremos aumentar T, lo único que hay que hacer es disminuir la fosc. Empleando por ejemplo una fosc=1MHz tendríamos T=16ms que son suficientes para controlar al Servo ya que los 20ms no son estrictos hay un margen de aproximadamente 5ms por arriba y por abajo, y si quieres los 20ms exactos pues coges otro cristal. ¡ A que la solución era tonta!

Bien, avanzando un poco más estaba pensando en que con los 2 módulos CCP pués solo se podrían controlar 2 Servos (uno por módulo). He intentado asignar la señal pwm que sale por RC2 (ó RC1) a otro pin del PIC, por ejemplo a RB0,  con output_bit(pin_b0,input(pin_C2)) pero no va bien, no sé si va a ser posible, si lo fuera conseguiríamos controlar más de 2 servos con pwm del CCP.

Un saludo





El Prescaler que tiene el modulo especial de pwm del 2431/4431 admite un prescaler de hasta 128, pero no estoy seguro si la formula es la misma. Además me parece que permite un postscaler... El modulo está especialmente diseñado para producir frecuencias que puedan alcanzar valores bajos, para poder controlar motores de inducción de 3 fases y cosas asi... pero sigo sin dar con la formula para calcular la frecuencia.


Desconectado aupadeportivo

  • PIC10
  • *
  • Mensajes: 18
RE: Eficacia con el PWM por software....
« Respuesta #29 en: 12 de Mayo de 2005, 12:32:00 »
Respecto a lo que hablais de utilizar un cristal mas pequeño para poder controlar un servo pocher:

Mi robotito es gobernado por 2 pics 16F876, uno el master que recog4e la informacion de los sensores y me manda un byte mediante i2c al esclavo que se encarga de mover en motor dc controlado por pwm y girar un servo. Para el giro del servo, cree una interrupcion con base de tiempo de 100us y mediante un contador dar el duty necesario a 1 y el resto a cero. El programita esta en el subforo de robotica en el tema robots cooperativos.

Ahi viene mi problema:

Tengo un programita sencillo de maestro y esclavo. Envio un Byte el cual es recibido correctamente. Al insertar el codigo de recpcion i2c en el esclavo (el que me recibe el byte del master y controla el motor dc y el servo) no me funciona y me falla parece ser debido a la interrupcion genrada por el timer 1 para poder controlar el servo. Con proteus veo que funciona bastante bien, pero cuando configuro timer1 y le mato la interrupcion se queda sin recibir el byte del master. Es quitar las lineas de codigo referidas al timer 1 y su correspondiente interrupcion y me funciona.

No tengo claro como arreglar esto, o si hay otra forma de enviar datos i2c y que siga funcionando la rutina de interrupcion del servo y recibiendo ese byte qe me marca todo el movimiento.

Respecto a lo de usar otro cristal mas bajo y de esa forma ahorrarme esa interrupcion, pudiera ser que me funionara el i2c?

Ademas , en mi sistema constituido por 2 pics, ¿no debemn tener los dos el mismo cristal? Si es asi no me interesaria bajarlo.

Un saludo desde Valencia!