Convertir pulsos del encoder a valor analogico

Hola!

tengo un problemilla....quiero saber la velocidad de un motor para controlar la velocidad mediante un LOGO! de Siemens. Utilizo el LogoSoft v.5 para programarlo. Necesito saber si existe alguna funci=F3n que lea en un determinado tiempo el numero de pulsos que ha recibido y los convierta a un valor anal=F3gico. =C9se valor ir=E1 a un controlador PI y comparando con otro valor que habr=E9 introducido manejar un se=F1al PWM.

hmmm....y si por software no fuera posible, c=F3mo hacerlo? me refiero a los pulsos del encoder, antes de conectarlo al Logo que pasen por un DAC. pero....no tengo un valor en binario para convertirlo, sino un tren de pulsos que var=EDan en la frecuencia (longitud de onda y tb ancho de pulso) segun la velocidad del motor, asi que no s=E9 si un DAC servir=EDa....

alguna solucion al respecto? me estoy volviendo loco......=20

gracias!

Reply to
ALioLi
Loading thread data ...

ALioLi escribió:

Puedes usar el LM2917 de National. Es un conversor frecuencia a tensión.

--
Saludos
Miguel Giménez
Reply to
Miguel Gimenez

hmmm....se me acaba de ocurrir... que tal no cambiar nada? no s=E9 si funcionar=EDa, igual estoy diciendo de nuevo alguna burrada (tipo la de la corriente en una bater=EDa,juajuajua). Y si utilizara simplemente el contador de pulsos, y =E9se valor lo meto a una marca anal=F3gica? luego utilizo el valor de esa marca anal=F3gica en el PI.....

:-) es que ya ni idea de lo que hacer!

ALioLi schrieb:

Reply to
ALioLi

Dios, ni caso a mi comentario anterior !!! :D no tiene ni l=F3gica ni n=E1 lo que acabo de escribir, asi que no intent=E9is entenderlo. si es que ya con este cal=F3 y los agobios no s=E9 ni lo que digo.

:-) aparte de eso.... el valor del contador no lo puedo conectar a la marca analogica (como era de esperar), jojojo!

ey, gracias por la respuesta del LM2917!

ALioLi schrieb:

Reply to
ALioLi

Puedes usar un chip especializado, como te han dicho, o hacerte un conversor frecuencia-tensión tú. Con dos o tres puertas nand schmitt-triger (por ejemplo un 4093) y cuatro o cinco componentes discretos te puedes hacer uno simple, con ciertas limitaciones (la relación frecuencia-tensión no es lineal).

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"ALioLi" escribió en el mensaje news: snipped-for-privacy@b28g2000cwb.googlegroups.com... Dios, ni caso a mi comentario anterior !!! :D no tiene ni lógica ni ná lo que acabo de escribir, asi que no intentéis entenderlo. si es que ya con este caló y los agobios no sé ni lo que digo.

:-) aparte de eso.... el valor del contador no lo puedo conectar a la marca analogica (como era de esperar), jojojo!

ey, gracias por la respuesta del LM2917!

ALioLi schrieb:

Reply to
Pepitof

Integra y a correr (resistencia en serie, seguida de condensador en paralelo). Eso del DAC, es un lio mental que tienes, y que no guarda relación alguna con el problema.

"ALioLi" escribió en el mensaje news: snipped-for-privacy@i3g2000cwc.googlegroups.com... Hola!

tengo un problemilla....quiero saber la velocidad de un motor para controlar la velocidad mediante un LOGO! de Siemens. Utilizo el LogoSoft v.5 para programarlo. Necesito saber si existe alguna función que lea en un determinado tiempo el numero de pulsos que ha recibido y los convierta a un valor analógico. Ése valor irá a un controlador PI y comparando con otro valor que habré introducido manejar un señal PWM.

hmmm....y si por software no fuera posible, cómo hacerlo? me refiero a los pulsos del encoder, antes de conectarlo al Logo que pasen por un DAC. pero....no tengo un valor en binario para convertirlo, sino un tren de pulsos que varían en la frecuencia (longitud de onda y tb ancho de pulso) segun la velocidad del motor, asi que no sé si un DAC serviría....

alguna solucion al respecto? me estoy volviendo loco......

gracias!

Reply to
Cangrejo Moruno

No creo que eso sea suficiente. Ten en cuenta que la señal del encoder es siempre cuadrada, así que al integrar va a salir lo mismo sea de la frecuencia que sea.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Cangrejo Moruno" escribió en el mensaje news:ALOxg.8390$ snipped-for-privacy@news.ono.com...

Reply to
Pepitof

sor

no

Por que dices que no es lineal? Lo mas sencillo de implementar con compuertas es un monoestable disparado por el encoder y salida filtrada. La limitacion no es la linealidad (porque es lineal) sino que a bajas frecuencias el ripple es enorme, y un buen filtrado a BF da tiempos de estabilizacion de varios segundos.

Eduardo.

tro

o a

AC

Reply to
Eduardo

Sí, la idea era esa, implementar un detector de flancos (por ejemplo positivos) con un par de puertas y una red de retardo (ese sería el monoestable), y luego integrar la salida de ese monoestable (o filtrar, como tú lo llamas). Y efectivamente, llevas razón y es lineal dentro del rango de medida. Es que me equivoqué en una cosilla al calcularlo.

También habría que saber el rango de frecuencias que hay que medir, y la precisión que se necesita, porque a lo mejor un frecuencímetro digital podría ser una solución, si el PLC tiene forma de leer un dato de unos cuantos bits.

Ahora bien, para el uso que se le quiere dar, tal vez lo más lógico fuera sacar del PLC una señal de frecuencia proporcional a la velocidad a la que debe girar el motor, y compararla con la real procedente del encoder mediante un PLL. Luego, leyendo la salida del PLL, el PLC puede saber si le tiene que dar más caña al motor o menos.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Eduardo" escribió en el mensaje news: snipped-for-privacy@i3g2000cwc.googlegroups.com...

Pepitof wrote:

conversor

uno

Por que dices que no es lineal? Lo mas sencillo de implementar con compuertas es un monoestable disparado por el encoder y salida filtrada. La limitacion no es la linealidad (porque es lineal) sino que a bajas frecuencias el ripple es enorme, y un buen filtrado a BF da tiempos de estabilizacion de varios segundos.

Eduardo.

Reply to
Pepitof

Si integra, saldrá un voltaje proporcional a la frecuencia y al ancho de pulso, que es lo que busca. La forma de onda da igual.

Puede que necesite rectificar, para convertir en corriente pulsante, antes de integrar, pero que saldrá un voltaje proporcional a la frecuencia y el ancho de pulso, seguro.

Reply to
Cangrejo Moruno

"Cangrejo Moruno" escribió en el mensaje news:VvTxg.7861$ snipped-for-privacy@news.ono.com...

Estas equivocado, una señal cuadrada con Vh=5 y Vl=0 por ejemplo a la salida de un filtro RC te dara siempre 2.5V, no importa si es de 100 Hz o

100 kHz.

Para poder tener una tension proporcional a la frecuencia necesitas que el ancho del pulso sea fijo.

La señal la saca de un encoder, es pulsante y cuadrada, lo que no dijo es que tipo de encoder tiene y con que salida.

Reply to
Eduardo

cierto, lo de integrar y listo tampoco lo veo del todo claro por lo que dec=EDs, me saldr=EDa siempre el mismo valor, no depender=EDa del ancho de pulso. o? el encoder es un HEDL 5540 de 3 canales y 500 ppv de la marca MAXON. os pego la hoja de caracteristicas:

formatting link
p=2Epdf software uso el LOGO!Soft Comfort v.5 y el PLC es el Siemens Logo! 24o / OBA5

ahora bien, el tema este tendr=EDa que hacerlo aparte supongo...el logosoft tampoco me da muchas posibilidades.

pepitof:

*=2E..sacar del PLC una se=F1al de frecuencia proporcional a la velocidad a la que debe girar el motor, y compararla con la real procedente del encoder mediante un PLL. Luego, leyendo la salida del PLL, el PLC puede saber si le tiene que dar m=E1s ca=F1a al motor o menos. *

que es un PLL ?

Eduardo schrieb:

er es

de

la

tes

y el

es

Reply to
ALioLi

No. La señal de salida de un encoder, tendrá siempre el mismo duty-cycle, y por tanto al integrar te saldrá siempre el mismo valor. Si el ancho del pulso fuera fijo, la salida del integrador sí sería proporcional a la frecuencia, ya que al aumentar la frecuencia, aumentaría el duty-cycle, pero en este caso no es así. Precisamente, al intercalar un monoestable, lo que se consigue es mantener fijo el ancho del pulso.

Lo de rectificar no tiene mucho sentido. ¿Rectificar una señal cuadrada que discurre entre 0V y 5V? Obtendrías la misma señal (salvo por las caídas de tensión en los diodos).

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Cangrejo Moruno" escribió en el mensaje news:VvTxg.7861$ snipped-for-privacy@news.ono.com...

es

Reply to
Pepitof

duda del PLL googleada y casi resuelta ;)

acerca del monoestable....el conseguir que el ancho de pulso obtenido sea fijo (siempre de la misma frec) no conllevar=EDa a obtener un valor de tensi=F3n que no corresponda a la velocidad real?

puf, va a ser q tendr=E9 que usar el lm2917 entre el encoder y el PLC si o si. esto es bastante m=E1s complicado de lo que cre=EDa. pero muy interesante de todas maneras. mil gracias a todos por las respuestas!

Pepitof schrieb:

cle, y

pero

que

da que

=EDdas de

der

de

tes

y el

Reply to
ALioLi

"ALioLi" escribió en el mensaje news: snipped-for-privacy@h48g2000cwc.googlegroups.com...

Vale, ¿pero a qué velocidad máxima girará ese motor? O lo que es lo mismo, ¿Cual es la frecuencia máxima que saldrá del encoder?

Tienes buenas explicaciones en Google. Básicamente, un PLL compara la fase y frecuencia de dos señales F1 y F2. F1 es una señal externa, y F2 es una señal generada en un VCO interno (un VCO es un oscilador cuya frecuencia es proporcional a la tensión de su entrada de control). A la salida de ese comparador tienes una tensión de error, proporcional a la diferencia de fase y frecuencia de F1 y F2.

Esa tensión de error, se filtra (y se amplifica) y se usa como tensión de control del VCO. Así que, si la frecuencia del VCO (F2) es menor que la de entrada (F1), la tensión de error hará que el VCO eleve la frecuencia, y viceversa, de manera que al final, la frecuencia que genera el VCO es la misma que la de entrada. Entonces se dice que el PLL ha enganchado.

Luego hay otras variaciones y añadidos, según lo que se quiera lograr, pero eso es lo esencial.

Para aplicarlo a tu caso, la frecuencia F1 la generaría el PLC (supongo que tendrá funciones para generar una señal de una frecuencia fija).

Y el VCO sería el bloque formado por el control del motor, más el motor, más el encoder. El control del motor tendría que ser capaz de mandarle más o menos potencia (mediante técnicas PWM) en función de una tensión de entrada, que sería la tensión de error proporcionada por el comparador de fase y frecuencia. Es decir, este bloque se comportaría como un VCO, ya que su frecuencia de salida dependería de la tensión de entrada. Para implementar ese control del motor, se podría usar el propio PLC, o un circuito independiente.

Así, sólo con que el PLC variara la frecuencia F1, el resto del sistema se encargaría de variar la velocidad del motor hasta conseguir que volviera a enganchar a la velocidad correspondiente a esa frecuencia.

De todas formas, este sistema, que es interesante para un control muy preciso de la velocidad, quizás sería demasiado complicado si los requerimientos de precisión no son muy exagerados. Además, tiene otros problemas, ya que en la práctica, hay que limitar el rango de frecuencias en las que el sistema puede enganchar.

--


Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124
Reply to
Pepitof

"ALioLi" escribió en el mensaje news: snipped-for-privacy@h48g2000cwc.googlegroups.com...

Tarde, acabo de enviarte una explicación. De todas formas, seguro que las hay mejores que la mía, porque tampoco es que yo haya hecho gran cosa con PLLs.

No, no, es que ahí estás confundido. Un monoestable, por cada pulso que recibe, sea del ancho que sea, genera un pulso de un ancho fijo. Es decir, aunque el ancho del pulso es fijo, la frecuencia sigue siendo la del encoder.

Por ejemplo, pongamos que implementas un monoestable que genera pulsos de

1ms.

A). Supongamos que la salida del encoder es una onda cuadrada de 100Hz. Quiere decir que su periodo serán 10ms, es decir, 5ms a 1, y 5ms a 0. Pero la salida del monoestable, será 1ms a 1 y 9ms a 0. Esto te da un duty-cycle del 10%.

B). Supongamos ahora que la salida del encoder es una onda cuadrada de

200Hz. Quiere decir que su periodo serán 5ms, es decir, 2.5ms a 1, y 2.5ms a
  1. La salida del monoestable será entonces 1ms a 1 y 4ms a 0. Esto te da un duty-cycle del 20%.

Es decir, a doble frecuencia, doble duty-cycle, o lo que es lo mismo, un duty-cycle proporcional a la frecuencia, que es lo que interesa. Si luego integras eso en un periodo finito, tendrás una tensión proporcional a la frecuencia, mientras no llegues al límite.

En ese ejemplo, el límite sería 1000Hz, ya que a partir de esa frecuencia, el duty-cycle a la salida del monoestable sería siempre del 100% (el monoestable se redispararía antes de que su salida hubiera vuelto a ser 0).

--


Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124
Reply to
Pepitof

o mismo, =BFCual es la frecuencia m=E1xima que saldr=E1 del encoder?

el motor girar=E1 a una velocidad m=E1xima de 380 rpm. lo que equivale a que a la salida del encoder obtendr=E9 una senal de frec m=E1x 3,2 kHz.

tio, con tu explicacion del PLL me he aclarado mucho m=E1s que con el google, un millon de gracias! y gracias tambien por aclararme lo del monoestable...no lo hab=EDa visto de esa manera. Ahora tengo las ideas algo m=E1s claras. eres un crack

Pepitof schrieb:

as

on

ue

ero

ycle

5ms a

a un

la

ncia,

0).
Reply to
ALioLi

Pero entonces, ¿no se trata de velocidad variable, sino que quieres que siempre gire a esa velocidad? Porque si es eso, quizás habría métodos simples y muy precisos, con un par o tres de integrados estandar y poco más.

También sería bueno saber de qué entradas dispones en ese PLC y qué precisión necesitas en la velocidad de giro.

--


Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124


"ALioLi"  escribió en el mensaje
news:1153996341.163994.238900@i42g2000cwa.googlegroups.com...


el motor girará a una velocidad máxima de 380 rpm. lo que equivale a
que a la salida del encoder obtendré una senal de frec máx 3,2 kHz.
Reply to
Pepitof

a ver, el movimiento que deben hacer los motores durar=E1 como mucho 2 segundos. en ese tiempo deber=EDa haber acelerado hasta esa velocidad como m=E1ximo. luego lo frenaria. el problema que tendr=EDa es que dependiendo de la carga que tenga que mover, el motor tendr=E1 que hacer m=E1s o menos fuerza. hab=EDa pensado en controlarlo por velocidad mediante pwm, ya que si la carga es pequena, mediante el control de velocidad impediria que se me embale. si la carga es grande al reves, forzar=EDa a que vaya mas rapido.

antes del control pwm, he implementado un PI, con un valor de 380rpm de referencia. es este regulador el que me controla los pulsos PWM para alimentar al motor. pero a este control PI (la version 5 del software por fin trae esta funci=F3n!) le tengo que decir de alguna manera cual es la velocidad real... seg=FAn la velocidad real que obtenga, el PI actuar=E1 sobre el PWM aumentando o disminuyendo el ancho de pulso m=E1s o menos r=E1pido.

en princpio si se pudiera hacer todo s=F3lamente con el PLC much=EDsimo mejor claro ;) pero bueno, tengo asumido que no ser=E1 as=ED

Pepitof schrieb:

os

=E1s.

=E9

Reply to
ALioLi
¿Y en qué forma te interesa capturar el valor de velocida? ¿digital o analógico? Si es digital, ¿cuantos bits? Si es analógico, ¿qué tensiones? (sé que hay PLCs con entradas analógicas de 0 a 10V).

De todas formas, yo no entiendo mucho de PLCs, pero me extraña que el soft no permita implementar counters con clock externo. Si eso es posible, la cosa es inmediata. Cuentas pulsos durante un tiempo, y calculas las RPM para dárselas al PI.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"ALioLi" escribió en el mensaje news: snipped-for-privacy@i3g2000cwc.googlegroups.com... a ver, el movimiento que deben hacer los motores durará como mucho 2 segundos. en ese tiempo debería haber acelerado hasta esa velocidad como máximo. luego lo frenaria. el problema que tendría es que dependiendo de la carga que tenga que mover, el motor tendrá que hacer más o menos fuerza. había pensado en controlarlo por velocidad mediante pwm, ya que si la carga es pequena, mediante el control de velocidad impediria que se me embale. si la carga es grande al reves, forzaría a que vaya mas rapido.

antes del control pwm, he implementado un PI, con un valor de 380rpm de referencia. es este regulador el que me controla los pulsos PWM para alimentar al motor. pero a este control PI (la version 5 del software por fin trae esta función!) le tengo que decir de alguna manera cual es la velocidad real... según la velocidad real que obtenga, el PI actuará sobre el PWM aumentando o disminuyendo el ancho de pulso más o menos rápido.

en princpio si se pudiera hacer todo sólamente con el PLC muchísimo mejor claro ;) pero bueno, tengo asumido que no será así

Pepitof schrieb:

más.

Reply to
Pepitof

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.