¿Puedo leer un encoder de 2800 rpm con un microcontrolador?

#1
hola, tengo la idea de realizar una tarjeta de adquisición de datos para poder leer las señales de un encoder de 2800rpm, mediante un pic 18f4550 y usando el puerto usb, así mismo sacar las señales pwm, para el control del motor, mi pregunta es, si el pic no se perdera ningun pulso del encoder, si puede ser lo suficientemente rápido, ustedes que opinan
 
#2
Hola amigo, mira, si el encoder manda una señal por cada revolución, vas a tener unas 50 señales por seg, o sea 50Hz. Si manda 4 señales por revolucion, 200Hz. Teniendo en cuenta que un pic trabaja entre 4 y 20 MHz, creo que vas a andar sobrado.
 
#3
hola, gracias por responder, pero me equivoque al plantear mi pregunta, mi motor es el que me da 2800 rpm, y tengo un encoder de cuadratura de 8192 pulsos/rev, la verdad me estoy confundiendo conla frecuencia y si es posible que el pic lea los pulsos sin perderse ninguno

Adjunto informacion de mi motor y de mi encoder
 

Adjuntos

Última edición:
#4
No hay que estar mirando todo el tiempo la pata del encoder. El truco es usar una interrupción externa por flanco y una ISR corta, así podés evitar perder pulsos...

En tu motor, son 47 rps, a 8192 pulsos/rev son 385 Khz... Va a estar medio difícil de medirlo directamente, porque tendrías que tener un contador de 32 bits... Seguramente convenga usar un par de flip flops T externos para dividir la frecuencia en 8 o por ahí...

Un saludo,
Gonzalo
 
#5
bien, creo ya me esta quedando claro, me gusta tu idea de dividir la frecuencia antes, tambien me recomendaban poner un contador entre el encoder y el pic, aunque no estoy muy segura
 
#6
delilara ?qué tipo de encoder estás utilizando debilara?

es para hacerme una idea de que tipo de encoder he de utilizar
en un proyecto. Tengos que utilizar 3 encoderes para medir los ángulos de
una mesa inercial (tres ejes) y a partir de ellos determinar la posición ...
me podrías echar una mano....
 
#8
a lo que me quería referir con tipo era si incremental
o absoluto, pero viendo tu enlace sé que es el primero. Yo aún
no he dedicido que encoders utilizar, a priorí creo que los incrementales
serán una buena opción...además no necesesito una gran resolución,
tendrá que ser inferior a 1º así que con uno que me 360 pulsos es más
que suficiente....lo que te quería preguntar delilara es que la programación
del pic no será complicada no? ni el circuito que tienes que montar?
perdona que te haga estas preguntas pero estoy empezando recién con el
proyecto....
 
#9
¿Acaso los PIC no tienen contadores que pueden leer pulsos externos independientemente de la frecuencia a la que trabaja el pic (dentro de unos límites)? Yo lo que haría sería poner la salida del encoder a la entrada de un contador de 16 bits del micro, y usar otro temporizador para realizar la captura (y reseteo) del mismo cada cierto tiempo (fijo, más 'manejable', sin jitter a ser posible, perfectamente 'cronometrado', etc.), y pasar este dato al programa principal.

Con un Xmega se puede leer perfectamente un encoder a más de 1MHz, y realizar esta tarea cada milisegundo, sin intervención ninguna de la CPU. Con un ATmega seguramente haría falta algún truquillo HW (puentear la salida de un timer a la entrada de capture del otro, por ejemplo).

Como sólo hablo de los AVR porque son los que sí conozco, no puedo decir si esto se puede hacer con un PIC, pero me extrañaría que no se pudiese, aunque hiciese falta algún truqillo de HW como el semidescrito.
 
#10
Es verdad, en la mayoría de los microcontroladores modernos es posible hacer que la entrada de un timer esté conectada a una pata externa... Así no haría falta un contador externo, y se podría hacer un buen frecuencímetro.

Un saludo,
gOnzalo
 

Dr. Zoidberg

Well-known-Papá Pitufo
#12
¿Acaso los PIC no tienen contadores que pueden leer pulsos externos independientemente de la frecuencia a la que trabaja el pic (dentro de unos límites)? Yo lo que haría sería poner la salida del encoder a la entrada de un contador de 16 bits del micro, y usar otro temporizador para realizar la captura (y reseteo) del mismo cada cierto tiempo (fijo, más 'manejable', sin jitter a ser posible, perfectamente 'cronometrado', etc.), y pasar este dato al programa principal.
:aplauso: :aplauso: :aplauso:
Esa es la idea correcta!!!! Al fin alguien que piensa, usa la cabeza y sabe lo que hace!!!

Sinceramente me enferma cuando alguien pretende leer los pulsos de un encoder usando una ISR, o peor aún...por polling al pin de entrada :eek:. Eso solo significa que NO TIENE IDEA de como se aprovechan los recursos de un microcontrolador...tipico de programadores novatos...y no es la primera vez que veo ese tipo de ideas ridículas aconsejadas en el foro... :enfadado: :enfadado:
 
#13
En los Atmega es la frecuencia maxima de clock externo para timer es un poco memos de la mitad de la frecuencia de operacion del micro.
Algo parecido es con los PIC.
Con 8192 pulsos por rev y el motor da un max de 2800rpm entoces los pulsos por segundo
382.294Khz esta dentro del rango pic.
 
Última edición:
#14
En algunos ATmega y en los nuevos Xmega, la frecuencia máxima de entrada de los temporizadores ya no está limitada por la frecuencia de operación del micro. En los últimos, puede ser tan alta como 180MHz...

Aún así, para el caso sería raro que ninguna de las dos famílias puediesen trabajar con las frecuencias que se precisan. Más difícil lo puede tener el PC para digerir los datos que se le manden por USB según el datarate. Ojo, que la limitación la impone el arbitraje del bus, no la potencia de cálculo ni el ancho de banda del mismo.
 
#16
SI, claro que puedes.

:
Sinceramente me enferma cuando alguien pretende leer los pulsos de un encoder usando una ISR, o peor aún...por polling al pin de entrada :eek:. Eso solo significa que NO TIENE IDEA de como se aprovechan los recursos de un microcontrolador...tipico de programadores novatos...y no es la primera vez que veo ese tipo de ideas ridículas aconsejadas en el foro... :enfadado: :enfadado:
Pues si te enferma ya no leas a los novatos, no quiero que mueras.

Un poco de tacto y de calidad en tu trato nos vendría muy bien. A tirar buen rollo y a explicar de un modo mas didáctico así aprendemos todos. Todo tranquilo, recuerda que todos fuimos novatos alguna vez.
 
Última edición:

Dr. Zoidberg

Well-known-Papá Pitufo
#17
Pues si te enferma ya no leas a los novatos, no quiero que mueras.
Un poco de tacto y de calidad en tu trato nos vendría muy bien. A tirar buen rollo y a explicar de un modo mas didáctico así aprendemos todos. Todo tranquilo, recuerda que todos fuimos novatos alguna vez.
pachonx:
El problema es que todas esas recetas de usar interrupciones para leer un encoder están expuestas libremente en la web y quienes las han encontrado y usado SIN EMPLEAR LA CABEZA luego vienen y las recomiendan como la salvación a los problemas. Y el problema es serio, por que no conocen NI INTENTAN CONOCER las capacidades de un microcontrolador y pretenden hacer todo por software "por que es mas sencillo" y solo tienen que poner letras en un procesador de textos y compilar, en lugar de tomar el datasheet del microntrolador y analizar que capacidades tiene y como se utilzan...pero claro...hay mucho que leer y no les importa aprender....total...si lo pueden copiar de la web :enfadado: :enfadado: :enfadado:

Por otra parte, recuerdo haber recomendado y explicado ya un par de veces - en este foro - la utilización de los contadores/timers por hardware del uControlador para la interfaz con el encoder, incluso agregando lógica para evitar conteos en falso y para duplicar o cuadruplicar (esto ya depende del micro) la resolución aparente del encoder....pero tampoco se preocupan en usar el buscador....por que van a tener que leer...y leer los cansa :enfadado: :enfadado: :enfadado:...

PD: A los alumnos que hacen este tipo de cosas los trato peor...así que ahora he sido bastante suave en mis comentarios ;)
 
#18
Te entiendo perfectamente, y eso que tu mencionas si es bastante molesto e irritante.
Te felicito por querer expandir el conocimiento de esta noble ciencia, y por tu numero de mensaje veo que no eres ningún improvisado.
Te invito a repartir conocimiento en el marco de la tolerancia y a seguir colaborando con ese entusiasmo.
Para concluir mi participación delilara te sugiero utilizar el buscador que de ese tema ya hay sobradas ideas y formas de hacerlo.
Cualquier comentario lo atenderé por MP.
 
#19
hola, gracias a todos por sus respuestas, hasta ahora solo habia programado micros de la famila 16f, y la verdad es que tenia algunas dudas sobre como abordar mi problema y no sabia como o mas bien por donde empezar, leer todos sus comentarios me ha ayudado a ordenar mis ideas y como dicen me dedicare ahora leer un poco mas, ahora ya se que buscar :), en cuanto tenga avances y posiblemente mas inquietudes las pondre
 
#20
Existe un problema muy simple y es de muy vieja data y seguia seguramente asi.
Los grandes programadores de micros en general tiene conocimientos muy superficiales de electrónica, y los grandes conocedores de electrónica tienen limitados conocimientos de programación....
En sitios organizados contratan uno de cada uno y una persona que sea el enlace, es decir alguen con medianos conocimientos de programacion y medianos conociminetos de electrónica, con eso se consigue la mayor eficiencia y es la mejor forma de laborar...

Me ha tocado ver un dispositivo echo para unas máquina de ensayos, donde se necesitaba controlar con una tensión de 0-10V y quien hizo el proyecto le parecio que en el variador de velocidad no habia una fuente adecuada y tomo la fuente interna que utilizaba para el pic por considerarla estabilizada y porue se baso en un angiudo equipo que trabajaba de 0-5V al ponerlos y ensayarlos obvio no alcanzaban los regimenes previstos, en ese tiempo tenia un problema en una pierna y me tuve que hacer cien metros con muletas para entrar a la sala de ensayo y ver el problema que era más que obvio, informando que faltaban 5V, que se podian tomar perfectameante de los variadores ya que esta tensión era estbilizada ya que los mismos llevan un micro también....
Por otro lado le inidque, que los seteos estaba mal planteado ya que habia que descolgar la unida del gabinete para mover unos preset en la parte posterior, que eso se podia hacer perfectamente por sofware...
Nos terminaron dando el trabajo....

Es muy común este tipo de errores, como por ejemplo querer exitar un mosfet con optoacoplador y no funciona, claro no saben que hay que agregar un circuito externo al opto de dos transistores o adquirir el que viene expresamente para esa función.... también requiere estar al tanto de lo que hay en el mercado.

Asi que las criticas acidas en ese sentido estan demás porque es una realidad y no es de ahora ya lleva muchas decadas...
 
Arriba