Garantizar longitud de cable con motor DC

Buenos días

Mi inconveniente es que quiero controlar un motor DC de 12v sin encoder para mover cierta longitud de cable para luego cortarlo, lo que necesito es saber como puedo garantizar que la medida del cable siempre sea la misma.

Agradecería mucho la ayuda, cualquier idea sera bien recibida.


PD: en este momento lo tengo programado con un pic 16f876a, hago uso de Microcode Studio. ...
 
Final de carrera mecánico (microswitch)
Final de carrera óptico , capacitivo , inductivo , cualquiera.
Encoder
Motor por pasos
 
Las extrusoras de cables viejas utilizaban una rueda con un perímetro de 1Mt, la misma tenía un agujero y un sensor óptico, tipo fotocélula, cuando el sensor ve el agujero entrega una señal que normalmente la recibe un codificador a chorro de tinta industrial y hace la codificación cada metro, eso se sigue usando mas allá de otros sistemas con encoder.
 
Gracias por sus respuestas, no tengo acceso a una extrusora, el fin de carrera lo intente pero la idea es generar varias longitudes. Lo que venia haciendo es tratando de generara un encoder con un sensor de herradura pero no logro que in micro capte la señal del sensor, lo ideal seria poder determinar longitud por cada vuelta.
lo tenia programado por tiempo, esto me debería garantizar que la medida fuera siempre el mismo pero en alguna ocasiones el motor realiza mayor esfuerzo lo que lo hace trabajar mas lento, esto genera que la longitud se afecte. por esta razón trate de poner un contador que cuente los giros del motor y por ende me de una longitud constante pero no logro captar cada uno de los giros del motor. como puedo solucionar esto o que mas puedo hacer???.

He pensado en el cambio de motor pero seria costoso por eso quiero explorar otras posibilidades

Gracias nuevamente

Este codigo lo aplique para el 16f628a para ensayar si el micro me podía contar los pulsos enviados por el sensor infrarrojo pero no lograba captar todas las señales enviadas.

Código:
define osc 4

DEFINE LCD_DREG PORTB ; define pines del LCD B4 a B7
DEFINE LCD_DBIT 4 ; empezando desde el Puerto B4 hasta el B7
DEFINE LCD_RSREG PORTB ;define el puerto B para conectar el bit RS
DEFINE LCD_RSBIT 3 ;este es el puerto B3
DEFINE LCD_EREG PORTB ;define el puerto B para conectar el bit Enable
DEFINE LCD_EBIT 2 ;este es el puerto B2
CMCON = 7 ;convierte en digitales el puerto A
revo VAR WORD ;variable revo con capacidad de 0 a 65535
trisa = %00000010
pulsador var porta.1
motor var portb.1
sensor var portb.0

LCDOUT $fe

inicio:
LCDOUT $fe, 1,"oprima pulsador"
if pulsador=1 then 
goto prog
else 
goto inicio
endif

prog:
high motor
COUNT sensor,10000,revo ;contar pulsos en puerto B.0 // puerto,tiempo,variable
LCDOUT $fe, 1,"pulsos" ;limpiar LCD y escribir
LCDOUT $fe,$c3, DEC revo ;sacar el valor de la variable rev
if revo = 50 then
goto parada
else 
goto prog
endif

parada:
low motor
pause 1000

END
 
A mi me parece que ese codigo no es el ideal para esa aplicacion, yo usaria un contador por interrupcion, algo asi como se hacen los frecuenciometros con pic. (obviamente no me refiero a los que hacen con el count XD)

en ese codigo hay perdidas de señal, porque es por software.

ahora un encoder en el motor no me parece lo correcto, puesto que el cable o lo que sea supongo esta enrrollado en una bobina y se tiene que considerar el radio de la circunferencia, yo pondira una ruedita con encoder por el que pase el cable.

algo asi:

Dibujo.JPG

obviamente con bobina me refiero a donde esta enrrollado el cable o se va a desenrrolar, no tengo idea.
si estoy suponiendo demasiado no estaria demas que pongas un diagramita de que es lo que quieres.
 
Última edición:
Gracias por tu aporte
he estado observando lo de las interrupciones, pero no se como debo usarlas o aplicarlas en mi caso, creo que seria poner una entrada en el puerto B0 del micro que es donde se la interrupcion y generar una interrupción por hardware? es decir poner el encoder en B0 para que cuando la señal llegue al micro este realice la rutina para contar las vueltas del motor?

Código:
LED VAR PORTB.1
LED2 VAR PORTB.2
ON INTERRUPT GOTO verde ; en caso de existir una interrupción ir a verde
INTCON = %10010000 ;habilita la interrupción B.0
PROG: ;programa principal
HIGH LED ;encender el led rojo
PAUSE 200
LOW LED
PAUSE 200
GOTO PROG ;mantener en este lazo
DISABLE ;deshabilita las interrupciones en el handler
verde: ;handler de la interrupción
HIGH LED2
PAUSE 2000
LOW LED2
INTCON = %10010000 ;habilita la interrupción B.0
RESUME ;retorna a programa principal donde ocurrió la inte.
ENABLE ;Habilita las interrupciones después del handler
END

Se que debo usar algo como esto pero no estoy muy familiarizado con las interrupciones ni con sus comandos, si me pueden ayudar con información sobre esto les agradecería enormemente y a un mas si va encaminada a lo que necesito.

adjuntos imágenes de la parte mecánica.
 

Adjuntos

  • image1.jpg
    image1.jpg
    102.5 KB · Visitas: 13
  • image2.jpg
    image2.jpg
    106.5 KB · Visitas: 14
  • image3.jpg
    image3.jpg
    95.1 KB · Visitas: 14
:unsure: es que hay varias de maneras de hacerlo, puedes utilizar la interrupcion externa (RB0), interrupcion por modulo CCP e incluso con la interrupcion del modulo de timer, todo depende las frecuencias del conteo.

lo que si tienes que descartar es el uso de la instruccion PAUSE, que esa inhabilita las interrupciones (y todo lo demas XD) y no sirve de nada. dale una buscada es un tema muuy tratado.

con respecto al encoder, supongo que si podria ir donde lo pusiste puesto que, por lo que veo, el motor sirve de arrastre, lo que no veo muy claro es como piensas tensar el cable. :unsure: pero bueno supongo que ya lo tienes considerado.
 
Última edición:
Los motores de lavarropas-secadoras andan con AC o DC y ya vienen con el tacómetro . . . :unsure: . Es un motore universal en serie de 1/2 Hp

Son fáciles de conseguir y baratos (o gratis) , la cola de dónde salen los cables amarillos es el tacómetro :

MOTOR%20LG.jpg


Saludos !

.
 
Atrás
Arriba