TODOPIC
Mecatrónica => Robótica => Mensaje iniciado por: alogic.on en 03 de Junio de 2007, 16:32:32
-
Hola a todos
tengo un problemilla con el encoder incremental para terminarlo , y es que queria que tuviese tres salidas de esta forma
_XXX_XXX_ esta la conectaria a RB0
__XX__XX_ a RA1
_XX__XX__ a RA2
los estoy haciendo con un par de comparadores, pero como hago para sacar el de RB0 ,ha de ser la suma de los dos , a base de probar entre las salidas de los comparadores a un tercero sale la deRB0 , pero esta aumenta de voltaje cuando coincien los dos pulsos en alto y si se queda uno de los photodiodos entre medias de una de las lineas del disco me da medios pulsos , me explico , que no llega a 5v en la salida del comparador es proporcional al haz de infrarojo que incida sobre fotodiodo en vez de salirme pulsos cuadrados son casi circulares :shock:
tiene alguien el esquema de un circuito que se use para esto, o si tengo que usar algun componente que no deje salir 5v hasta que los alcance en la entrada ,creo que un zener,o que se usa??
gracias y un saludo
-
Hola, prueba este circuito, anda bien :mrgreen:(http://www.pablin.com.ar/electron/circuito/varios/cruceir/circuito.gif)
suerte!
Norberto
-
Yo pienso que es mucho más sencillo hacer un encoder si pones como acondicionador de señal un disparador Schmitt tipo 74LS14 ó simplemente un 7414 (evita que sea CMOS, por ejemplo 74HC14, porque suelen dar fallos al ponerlos como encoder). Te pongo un esquema y el programa:
(http://5528662646933850874-a-1802744773732722657-s-sites.googlegroups.com/site/proyectosroboticos/encoder/encoder-por-software/Encoder%2016F876%20FotoBarrera.PNG?attachauth=ANoY7crJ1npGWxl_Z4amVdYbIlVEMlWoap30EjyYge0xh-yAig6M8JRPl_tkKX9ImUsDxAPUOiJvDUrq36t3PqEdvULVYQga2Fn7jFP1ZVGVjetF2I2LzEWVu9NS43NTSg1W7ek_3KRbHqWWjMWZuSqUNLvB3dxUyPgOqmdUAxF0xylaMSp7fKucJi501zTPlaDiCSgp1lZJ7RkhRJhLpy5uo0nACGZxwxOT86GUlmP0t2AZ1MSNCZxmtmvlQkDrmmS1aMjjAkLQiGM1smb9crbtNGvrunOhzA%3D%3D&attredirects=0)
El programa en Proton del encoder incremental queda así:
Device=16F876A
REMINDERS = FALSE
Config XT_OSC, PWRTE_ON, CPD_OFF, WDT_OFF, BODEN_OFF, LVP_OFF
REMINDERS = TRUE
Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol INTEDG = OPTION_REG.6 ' Flag = 0 Flanco bajada. Flag = 1 Flanco subida.
On_INTERRUPT GoTo Interrupcion ' Interrupción por Hardware (es la más rápida).
GIE = 1 ' Activa interrupciones generales.
INTE = 1 ' Activa la interrupción externa RB0/INT.
INTEDG = 1 ' Hace que inicialmente la interrupción se habilite
' para flanco de subida.
ALL_DIGITAL = TRUE ' Todas las entradas y salidas son digitales.
TRISA = %111111
TRISB = %11111111 ' Puerto A y B todo entradas.
TRISC = %00000000 ' Puerto C como salida para visualizar a través de los LED.
Dim x As Byte ' Variable X ---> contador de posición actual.
x=0
While 1=1 ' |------ Programa Principal ------|
PORTC = x ' El contenido de X se visualiza en el Puerto C a través de los LED.
Wend ' |--------------------------------|
End
Interrupcion: '-------- Decodificador de Encoder --------------
Context SAVE ' Salva en contexto de los registros antes de operar con la interrupción.
If PORTB.0 = 1 Then ' Si RB0 se ha puesto a 1 (flanco de subida),
INTEDG = 0 ' entonces activar la siguiente interrupción para flanco de bajada.
If PORTB.1 = 1 Then ' Si RB1 está a 1
Inc x ' entonces incrementar el contador X.
EndIf
EndIf
If PORTB.0 = 0 Then ' Si RB0 se ha puesto a 0 (flanco de bajada),
INTEDG = 1 ' entonces activar la siguiente interrupción para flanco de subida.
If PORTB.1 = 1 Then ' Si RB1 está 1
Dec x ' entonces decrementar el contador X.
EndIf
EndIf
INTF = 0 ' Borra el "flag" de la interrupción RB0/INT para poder permitir la
' siguiente interrupción, cuando ocurra.
Context Restore ' Restablece el contexto de los registros tal como estaban antes de la
' interrupción.
Más info aquí:
http://sites.google.com/site/proyectosroboticos/encoder/encoder-por-software
-
no entiendo bien porque usas tres entradas al pic, yo uso los encoders solo con dos entradas, una es la interrupcion y la otra para saber en que dirección esta incrementando.
Como comparador uso LM339 que son 4 y andan muy bien.
-
:D :D :D este post es de hace pufffff en aquel entonces no sabia como funcionaba, mas bien no lo comprendia. hoy dia lo hago como decís
-
:shock: Joder que chulo te ha quedado macho :mrgreen:
-
gracias señor :mrgreen: por si teneis curiosidad el hilo del proyecto esta aqui (http://www.todopic.com.ar/foros/index.php?topic=18800.0)