Webcampista.com

mucho más que un foro

una ayudita porfavor con un esquema.....

navegante 420

la nave nodriza
Sus cuento la historia.

Tengo una linea que varia su tension entre 0 y 14v mediante una resistencia variable que alimenta un motor. este motor es intercambiable, y e aqui el problema, he probado tres motores y cada uno de ellos tiene una tension lindar dfiferente para iniciar el movimiento y estos son los datos.

Motor 1

T= 2,5v y 0,35 Ah

Motor 2

T=3,70v y 0,37 Ah

motor 3

t= 5,2v y 0,35Ah

me gustaría poder diseñar o que me enseñarais un circuito sencillito que me tubiera en cuenta esa tension lindar para mandarme un 0 o un 1 al pic 16f84a

estos son los esquemas que he provado.
pregunta esquema1.jpg

El esquema fue el que me facilito dedalo, pero en este caso no funciona ya que no cambia de estado, esta siempre a 1

y el esquema 2 no lo he probado, pero este no tiene en cuenta la tension lindar.


porfavor alguna idea??????


gracias
 
Ahora no tengo mucho tiempo, y además creo que no te he entendido muy bien, parece que el diodo está para que el motor en parado ponga a masa el pin, así el diodo conduce y da un cero, cuando gira, el motor deja de tener 0 voltios y da un uno.

Pues en el esquema veo un fallo, y es que la masa del motor y la masa del pic no son las mismas, así no puede medir ni 0 ni nada :D

También veo que si uno de los motores tiene 5'2V de zona muerta (¿es eso a lo que te refieres con tensión lindar?), para ese no te va a servir.

Y ya no puedo mirar más, mañana lo intento otra vez.
 
Tienes que explicarme lo de la tensión lindar, si no, no me entero de lo que quieres hacer.

¿es tensión de funcionamiento o es zona muerta? La zona muerta, es que le llega tensión, pero el motor no se mueve.

Ah, este esquema tiene un gran problema, los 350ma han de pasar por el potenciómetro, y no sé si habrá alguno que lo aguante, tendrá que ser bobinado, perderás un montón de energía en calentar el ambiente...
 
Tienes que explicarme lo de la tensión lindar, si no, no me entero de lo que quieres hacer.

Perdona aunolose por no decirte nada antes, pero ayer llege muy tarde a casa y hecho polvo, y lo único que hice fue meterme en la cama.

y esta mañana en el hospi donde estoy haciendo las practicas hemos tenido una mañana muy entretenida.

es tensión de funcionamiento o es zona muerta? La zona muerta, es que le llega tensión, pero el motor no se mueve.

lo segundo, que aun llegandole esa tension el motor no se mueve, y inicia el movimiento a las tensiones y amperajes que os he indicado.

, este esquema tiene un gran problema, los 350ma han de pasar por el potenciómetro, y no sé si habrá alguno que lo aguante, tendrá que ser bobinado, perderás un montón de energía en calentar el ambiente...

esto último tienes razón, no habia caido en ello.....
 
Vale, zona muerta.

¿sigues empeñado en usar el 16F84? :D lo digo porque con un convertidor AD la cosa sería más fácil.

¿Conoces todas las características de los motores? parecen muy diferentes, si lo fueran, podrías medir la resistencia y ya lo tendrías, en realidad sería un convertidor AD de "tres niveles" es decir con dos (o tres) comparadores mides la tensión en el motor (sin alimentar), cada comparador ajustado a un nivel, como cada motor daría una tensión, según que comparador se active, sabes que motor es.

Ahora no puedo ponerte un esquema, me tengo que ir, pero sobre todo esto funciona mejor cuando el motor está sin alimentar, si es que se puede hacer, si no se puede, habría que hacer casi lo mismo, pero midiendo otras cosas.
 
Vale, zona muerta.

¿sigues empeñado en usar el 16F84? :D lo digo porque con un convertidor AD la cosa sería más fácil.

Jejejeje, pues si, para este proyecto estoy obligado a usar ese.... Espero que por última vez, porque tengo unas ganas de meterme en la serie 18.... o por lo menos de tener que hacer subrutinas para todo.

Conoces todas las características de los motores? parecen muy diferentes, si lo fueran, podrías medir la resistencia y ya lo tendrías, en realidad sería un convertidor AD de "tres niveles" es decir con dos (o tres) comparadores mides la tensión en el motor (sin alimentar), cada comparador ajustado a un nivel, como cada motor daría una tensión, según que comparador se active, sabes que motor es.

Ahora no puedo ponerte un esquema, me tengo que ir, pero sobre todo esto funciona mejor cuando el motor está sin alimentar, si es que se puede hacer, si no se puede, habría que hacer casi lo mismo, pero midiendo otras cosas.

no es mala idea, pero el tema reside que no hay solo tres motores, sino mas de 40 que pueden usarse en este circuito, con lo que es un problema y grabe.....

Supongo que por la complicación que esto genera, acabaré calculando un zener para el motor más libiano y a cascarla......

que ganas tengo de quitarme esta parte del medio....
 
Vale, se puede hacer de otra manera, justo cuando empiezan a girar la corriente y con ella la tensión en extremos del motor caerá, pues la resistencia del motor pasa a ser un poco mayor, solo es un momento, por que luego cuando gira más rapido vuelve a subir, si lo puedes pillar, ya lo tienes.

Entonces la pregunta es ¿cuando tienes que saber esa tensión? ¿cuando esté en marcha, cuando esté parado, lo tiene que hacer automáticamente? ¿que tiene que hacer cuando lo sepas?
 
Vale, se puede hacer de otra manera, justo cuando empiezan a girar la corriente y con ella la tensión en extremos del motor caerá, pues la resistencia del motor pasa a ser un poco mayor, solo es un momento, por que luego cuando gira más rapido vuelve a subir, si lo puedes pillar, ya lo tienes.

Lo de medir no creo que sea un problema, en clase tenemos osciloscopios, de una manera o otra podremos tomar la medida.


Entonces la pregunta es ¿cuando tienes que saber esa tensión? ¿cuando esté en marcha, cuando esté parado, lo tiene que hacer automáticamente? ¿que tiene que hacer cuando lo sepas?[/QUOTE]

Lo que realmente me interesa es saber cuando el motor inicia su movimiento, Teniendo en cuenta que cada motor tiene un voltaje distinto, y esa detección la ha realizar automáticamente, para poner un 0 o un 1 al pic, y sin sensores de movimiento.
 
Si tiene que ser el pic el que detecte el movimiento, debe ser el pic el que mida esa diferencia de tensión/corriente.

Por lo que cuentas, el potenciómetro (o lo que pongas) irá aumentando la tensión hasta que el motor gire ¿es así?

A ver si esta tarde tengo un rato y te pongo una aproximación de como se podría hacer.
 
Bueno ante tus últimas indicaciones, nos cogimos los oscilos analógicos que tenemos y a medir....

la verdad es que diferencia haberla ayla, pero con los oscilos analócos, no queda claro. Así que provaremos el lunes con un digital...

Como puedes ver en la foto, algo de diferencia hay, pero en una es diferencia de voltage y en la otra es mas bien de desfase, pero en ambas es minuscula la diferencia. y no vemos si se juntan o no, ya que se nos escapa del rango, parece que si, pero no lo vemos.

por eso el lunes provaremos con un digital...

oscilo2.jpg

oscilo1.jpg
 
¿Donde están tomadas las señales?

Como me temía, la señal está sin estabilizar, así que será más difícil hacer algo ¿seguro que no quieres meterte con los sensores? :D

El "desfase" se puede deber a la diferencia de corriente, al estar sin estabilizar, el rizado aumenta y hace que el osciloscopio dispare más tarde/pronto, pero medir eso va a ser difícil con uno analógico, a ver con el digital, recuerda poner mucho tiempo en la base de tiempos, para que el cambio se vea y se mantenga en la pantalla lo suficiente.
 
Pues menos mal que probamos con el digital......

Perdona que no haya dicho nada antes, pero despues de los resultados obtenidos con el oscilo digital no pusimos a probar el resto de harware y como era predecible, no funcionaba nada.....

Por partes:

el oscilo digital a maxima división de tiempo, nos revelo que ambas señales eran diferentes, pero se cruzaban contimuamente al no estar estabilizadas, con lo que no es fiable para nuetro prosito.

Descartado esta posiblidad, pasamos al plan B, resistencia en serie que coma los 2 primeros voltios y un zener para protejer el pic.

Segundo.... porque seran tan dificil de manejar un simple 74hc595?????? La madre que lo matriculo.... llevo dos semanas peleandome con él......

De momento, gracias a un foro de arduino, me he enterado que MR tine que conectarse a 5V y OE a Masa. Co esto, por lo menos he conseguido que se enciendan los leds.... A su p u t a bola, pero se encienden.... Ahora si consigo que hayan lo que yo quiero.... sera la leche..... :D:D:D

Supongo que ahora el error estara en mi falta de interpretación del funcinamiento interno del integrado. Así que te dejo el código fuente por si ves el error o me das alguna idea....

Y como no.... en esambler jejejeje.

principal
movlw b'00001001'
movwf regsalida
clrf PORTA
clrf PORTB
call carga595
bsf PORTA,0
bcf PORTA,0
call DEMORA
movlw b'10010000'
movwf regsalida
call carga595
bsf PORTA,0 (conectado a ST_CP)
bcf PORTA,0
call DEMORA
goto principal

carga595
movlw b'00001001'
movwf contadorsal
salida
btfsc regsalida,0 ;miramos que tenemos en datosalida
goto uno
bcf PORTA,2 ;o un 0 (Conectado a DS)
goto cont
uno
bsf PORTA,2 ;dependiendo de como este, cargamos un 1
cont
bsf PORTA,3 ;subimos el clk (conectado a SH_CP)
bcf PORTA,3 ;bajamos el clk
rrf regsalida,f ;rotamos datosalida.
decfsz contadorsal,f ;descendemos el contador en una unidad
goto salida
return
 
Hola, efectivamente, si haces uso del MCLR (creo que se puede programar que no hagas caso), debe ir a... positivo... mejor a través de una resistencia de 1k, por ejemplo, fíjate que tiene una linea encima /MCLR, eso quiero decir "negado", es decir, que se hace un Master CLeaR si lo pones a 0, para no hacerlo, debes ponerlo a 1, o mejor, con un condensador a masa (100nF p.e.) y una resistencia, a positivo, así le mete un cero (reset) al arrancar (la carga del condensador) y ya lo deja en positivo (a 1, sin reset).

Luego al código le falta el acceso al TRISA antes de poner a 0 o a 1, el TRIS es donde configuras la pata adecuada como salida (por defecto están como entrada) estando como entrada, el 74595 tiene las patas "al aire" y los leds van a su bola... lo bueno, si tienes digital, es que puedes ponerlo en la salida PortA.0, programar el disparo "una vez" y cuando se active el envío de datos, te los mantiene en pantalla y sabes si lo estas haciendo bien.

Aunque pongas una resistencia de medida el que la tensión no esté rectificada va a ser un problema para verlo. y no se me ocurre nada sencillo para remediarlo :(
 
Hola, efectivamente, si haces uso del MCLR (creo que se puede programar que no hagas caso), debe ir a... positivo... mejor a través de una resistencia de 1k, por ejemplo, fíjate que tiene una linea encima /MCLR, eso quiero decir "negado", es decir, que se hace un Master CLeaR si lo pones a 0, para no hacerlo, debes ponerlo a 1, o mejor, con un condensador a masa (100nF p.e.) y una resistencia, a positivo, así le mete un cero (reset) al arrancar (la carga del condensador) y ya lo deja en positivo (a 1, sin reset).

Ok creo que lo he entendido, Ahora me pongo con el proteus y hago el esquema.... Unque tendria que empezar a acostumbrarme al capture....

y con OE negado que hago???? lo dejo en masa?????

he leido que con esta convinación suele generar parpadeos, o con el esquema que me has propuesto lo soluciono?????

Tambien he visto que en la patiila de carga. (ST_CP) le ponen un condensador electrolitico de 1microF. Me lo recomiendas????

Luego al código le falta el acceso al TRISA antes de poner a 0 o a 1, el TRIS es donde configuras la pata adecuada como salida (por defecto están como entrada) estando como entrada, el 74595 tiene las patas "al aire" y los leds van a su bola... lo bueno, si tienes digital, es que puedes ponerlo en la salida PortA.0, programar el disparo "una vez" y cuando se active el envío de datos, te los mantiene en pantalla y sabes si lo estas haciendo bien.

:banghead::banghead::banghead: Pedazo subnormal que estoy hecho.... Programado estan..... no te lo he puesto porque era obvio..... pero gracias a tu comentario me he acordado que en el programa original DS esta en RB1 y ayer arto de quitar cables para reprogramar el pic, me puse a reparar unas tonterias de la entrenadora para usarla y para evitarme tener que conectar dos cables lo pase todo al puerto RA sin modificar las configuraciones..... :banghead::banghead::banghead: que gilopollas llego a ser.......


Aunque pongas una resistencia de medida el que la tensión no esté rectificada va a ser un problema para verlo. y no se me ocurre nada sencillo para remediarlo :(

Creo que no me exprese bien..... Si les gusta la idea a quien tu ya sabes, que lo solucionen ellos...... Que si no, no voy a llegar a meterle mano al 18f4550.

como sabemos que el motor más longebo tiene zona muerta de hasta 2.65v y el mas pesado 4.75v pondré una resistencia para que entre 0 y 2v en alimentación al motor, el pic siga teniendo un cero y apartir de 2 voltios empieze a recibir tension el pic hasta el cambio de estado (de 0 a 1), para protegerlo y que no le entre mas de 5v pondré un zener.
 
Espera, que con las prisas no me he dado cuenta de que MR era del 595 y no MCLR del PIC :oops:

Voy a echar un vistazo al 595 a ver si te puedo decir algo más.
 
Vale, ya lo tengo.

MR debes ponerlo efectivamente a positivo, por lo que te digo, es un Master Reset negado, así que si lo pones a 0, haces un reset en las salidas. OE en cambio debes ponerlo a 0, porque es Output Enable, también negado es decir permite las salidas a 0.

Luego me parece que te falta un flanco de subida en ST_CP al final de la rutina de rotar, es el que latchea (fija) las salidas.

otra cosa ¿porque cuentas 9 y no 8?

Y desde luego colocar cada cosa en su sitio... :D
 
jejejejejeje

Al final si esto llega a puerto.... tevoy a tener que dar el portatil del compañero.... que te lo estas ganando más que él.....

Mientras tu y yo estamos aqui dandole, el muy c_ _ _ _ _ _ se lo esta pasando teta jugando al WoW.
 
Los parpadeos solo se evitan si "apagas" todos los leds durante la carga, esto es, si pones OE a 1, como la rutina es muy rápida, puedes apagarlos al principio y encenderlos al final, ningún ojo humano se va a enterar :D


Edito, creo que con el latch (ST_CP) también se evitan los parpadeos, le das un pulso a 1 al final de la rutina, pero solo un pulso, no lo dejes a 1, de esta manera no se apaga ningún led, que no toque apagarse.
 
Vale, ya lo tengo.

MR debes ponerlo efectivamente a positivo, por lo que te digo, es un Master Reset negado, así que si lo pones a 0, haces un reset en las salidas. OE en cambio debes ponerlo a 0, porque es Output Enable, también negado es decir permite las salidas a 0.

Ok, ahora mismo lo tengo a palo seco, sin resitencias

Luego me parece que te falta un flanco de subida en ST_CP al final de la rutina de rotar, es el que latchea (fija) las salidas.

La subida y bajada del flanco ST-CP lo hago fuera de la subrutina, vale asi???? o es que tienen que ser dos????? o es que no puede estar fuera de la subrutina????

otra cosa ¿porque cuentas 9 y no 8?

Porque al usar el decfsz me faltaria un dato por cargar....

contador a 8
cargo bit 0
contador a 7
cargo bit 1
contador a 6
cargo bit 2
contador a 5
cargo bit 3
contador a 4
cargo bit 4
contador 3
cargo bit 5
contador a 2
cargo bit 6
contador a 1
cargo bit 7
contador a 0

joder.... pues te juro que el dia que lo calcule, te juro que me faltaba un bit....

Y desde luego colocar cada cosa en su sitio... :D

ya esta corregido.
 
Los parpadeos solo se evitan si "apagas" todos los leds durante la carga, esto es, si pones OE a 1, como la rutina es muy rápida, puedes apagarlos al principio y encenderlos al final, ningún ojo humano se va a enterar :D


Edito, creo que con el latch (ST_CP) también se evitan los parpadeos, le das un pulso a 1 al final de la rutina, pero solo un pulso, no lo dejes a 1, de esta manera no se apaga ningún led, que no toque apagarse.

Ok. si la enana me deja lo pruebo ahora mismo.
 
Ayer me puse a hablar por teléfono y ya no volví a entrar.

Eh visto el pulso de ST_CP, yo lo metería dentro de la rutina, al final antes de volver, pues forma parte del protocolo.

Al inicio del programa debes poner todo como toca, los relojes a cero, el reset a uno (o con un breve pulso a 0, o con la resistencia y el condensador) el OE a 0, o directamente a masa, y cambiarlos solo cuando sea necesario, en la rutina, y que todo salga de allí "como toca", de esta manera, si algún día cambias ese integrado por otro, con cambiar la rutina ya lo tienes, no tendrás que cambiar nada del resto del programa, y al revés, si te llevas ese integrado a otro sitio, la rutina te la llevas detrás sabiendo que funciona (cuando funcione) sin depender del programa, por eso lo de meter el pulso de ST_CP dentro.
 
Tranqui oscar, yo tampoco pude dedicarle mucho mas.....

te explico, el tener el cambio de nivel ST_CP fuera, es porque en el programa grande, controlo tres 595, y de esta manera comparto la subrutina de carga y luego por difentes puertos activo.
Pero na..... que no consigo que se encienda ni un puñetero led.... odio el harware....

he provado continuidades, repasado sofware, y na..... que asco me esta dando esto de la electronica....

Si no me he confundido el esquema electrico es este:

asset.php


Y el codigo completo.

; **** Encabezado ****
list p=16F84A ; Microcontrolador utilizado.-
#include P16F84A.inc ; Definicion de registros SFR.-
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF
;**** Definicion de Variables ****
CBLOCK 0x0C ; En esta posicion se declaran los registros de usuario (GPR)
contadorsal
regsalida
PDel0
PDel1
ENDC

;**** Inicio del Microcontrolador ****
Reset
org 0x00
goto Inicio ; Salto a inicio del programa.-
;**** Vector de Interrupcion ****
org 0x04
goto Inicio_ISR ; Atiendo Interrupcion.-
;**** Programa principal ****
org 0x05
Inicio
;---- Configuraciones ----
bsf STATUS,RP0 ; Banco 1.-
movlw 0xF2
movwf TRISA ;esees
movlw 0xFF
movwf TRISB ;eeeeeese
movlw 0xDF
movwf OPTION_REG ; Pull-Up deshabiltado, , Timer0|interno, 1:1
bcf STATUS,RP0 ; Banco 0.-


principal
movlw b'00011000'
movwf regsalida
clrf PORTA
clrf PORTB
call carga595
bsf PORTA,0
bcf PORTA,0
call DEMORA
movlw b'10010000'
movwf regsalida
call carga595
bsf PORTA,0
bcf PORTA,0
call DEMORA
goto principal

carga595
movlw b'00001000'
movwf contadorsal
salida
btfsc regsalida,0 ;miramos que tenemos en datosalida
goto uno
bcf PORTA,2 ;o un 0
goto cont
uno
bsf PORTA,2 ;dependiendo de como este, cargamos un 1
cont
bsf PORTA,3 ;subimos el clk
bcf PORTA,3 ;bajamos el clk
rrf regsalida,f ;rotamos datosalida.
decfsz contadorsal,f ;descendemos el contador en una unidad
goto salida
return

DEMORA movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;**** Rutina de servicio de Interrupcion ****
Inicio_ISR
retfie
;.......................
end

Por hoy plego, que llevo 5 horas con esto....... y tengo que cambiar de clase que tengo rat y fol.... y despues partido pa desaogarme un poco.... mañana mas.
 

Archivos adjuntos

  • esquema leds.jpg
    esquema leds.jpg
    34,6 KB · Visitas: 0
Vaya, he entrado tarde, lo he mirado deprisa, pero el código me parece que está bien, si acaso sobra lo de la demora, la quitaría por si acaso tuvieran algún problema, que con tanto goto te confieso que me he perdido..., el integrado es más rápido que el chip, no creo que halla problemas, ¿que tal un pulsador para incrementar la cuenta que sacas por los leds? el programa saca un dato y se espera a que se pulse el botón, entonces incrementa un registro, que sacas por el integrado y vuelve a esperar.

También me parece que sobra el condensador en la pata RA0, de hecho, es posible que ese sea el problema, si no le da tiempo a subir a la señal ST_CP por culpa del condensador, la información no pasa fuera.

Lo de las Pull up ¿era solo para el puerto B?, porque si son para el A, hacen falta.
 
Ok oscar mañana pruebo esas modificaciones... ahora voy a probar con el ccs...
 
Arriba
© 2004-2024 Webcampista.com