Autor Tema: problema con posicionado de una persiana a encoder  (Leído 2554 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
problema con posicionado de una persiana a encoder
« en: 26 de Octubre de 2007, 11:07:55 »
Amigos : tengo un problema que necesita solucion ya que me estan esperando por un trabajo... :lol:

tengo una persiana horizontal que va desde A hasta B , y de B a A , a peticion del usuario y utilizo un encoder para el conteo de distancia.

como el sistema tiene inercia mecanica , el encoder le va a decir al programa : el conteo llegó al seteo y lo para , pero el sistema mecanico sigue una distancia R.

es por eso que dejo que , mas alla de la orden de parar , que el encoder detecte la cantidad de pulsos reales hasta el paro total.

R es la diferencia entre el seteo y el valor real de conteo , y la idea es cargar a R para que lo sume a la vuelta cuando vaya de B a A .
Al volver , se produce a su vez una R' , que es la consecuencia de que el sistema mecanico paró más allá de A.
lo que no puedo hacer es que calcule la vuelta y asu vez ya cargue el R' para la proxima

pego el pedazo de programa:


                           // LLEGADA A DESTINO 2 nueva!!! //
       if ( llego == 0 && cal == 0 )                 // para que no entre siempre una vez que llegó
       { 

          if ( cont  ==  pare + dif )       // si llegó a destino...( pare es el valor de seteo )
           { 
              x = ~x ;
              unico_pare = 1 ;                    // evita mas de una  apretada de stop             
              write_eeprom ( 0x04 , 1 ) ;       // guarda un 1 para avisar que no hubo corte de energia
              h1 = h2 = 0 ; delay_ms ( 1 ) ;      // apaga el alto del puente , delay de zona muerta
              l1 = 1 ; l2 = 1 ; delay_ms ( 500 ) ;// freno                   
              l1 = l2 = 0 ;                       // apago el freno
              delay_ms ( 2000 ) ;                 // inercia mecanica , el encoder sigue la cuenta
              disable_interrupts ( global ) ;     // para de contar el encoder                         
              real_cont = cont ; // este es el verdadero valor con inercia mecanica
             
              if ( x == 0 )
              {
                 dif = 0 ;
                 led = real_cont = 0 ;
              }
              else
              {
                 dif = real_cont - pare ;
                 led = real_cont = 0 ;
             
                 write_eeprom ( 0x02 , 0x00 ) ;      // borro cont parte baja
                 write_eeprom ( 0x03 , 0x00 ) ;      // borro cont parte alta
                 cont = 0 ;
                 llego = 1 ;                         // flag para distinguir que llegó
                 write_eeprom ( 0x06 , llego ) ;     // graba que llego             
                 write_eeprom ( 0x05 , sentido ) ;   //graba el sentido con que venia                         
              }
           }
              sentido = read_eeprom ( 0x05  ) ; 
       }

el conteo lo hace la int rb0

desde ya gracias!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: problema con posicionado de una persiana a encoder
« Respuesta #1 en: 26 de Octubre de 2007, 17:24:51 »
Pregunta 1:
Cuantas veces al dia subes o bajas esa persiana??
Pregunto porque estas grabando en eeprom cada subida o bajada, sabes que la duracion de las celdas de la EEPROM no son infinitas??

Pregunta 2:
Que intentas hacer con la variable x??
Segun el programa vale cero siempre...
Código: C
  1. x = ~x ;
Aqui lo inviertes, pero invertir un cero que valor te da??

Código: C
  1. if ( cont  ==  pare + dif )       // si llegó a destino...( pare es el valor de seteo )
creo deberias escribirlo asi:

Código: C
  1. if ( cont  ==  (pare + dif ))       // si llegó a destino...( pare es el valor de seteo )
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #2 en: 26 de Octubre de 2007, 21:05:48 »
Antes que nada gracias por responder!

Con respecto a las eeprom no lo sabia , la idea era que si se cortaba la luz el valor se guardara.

con respecto a la utilizacion son 4 o 5 ciclos por dia.

en relacion a la x el signo negado tengo entendido que da el valor contrario , es decir si tenes un uno da cero y si tenes un cero da uno.

y con respecto a la sintaxis lo voy a corregir

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: problema con posicionado de una persiana a encoder
« Respuesta #3 en: 27 de Octubre de 2007, 07:16:33 »
Para lo de la EEPROM te servirá esto: Anticorte alimentación

Un saludo

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con posicionado de una persiana a encoder
« Respuesta #4 en: 27 de Octubre de 2007, 08:00:54 »
La solución más facil es ponerle algún tipo de freno (electromagnético o mecánico) para parar la persiana cualdo llege a su posición. Otra posible solución es determinar el número de pasos que da de más y restarlo al número de pulsos de cuenta.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #5 en: 27 de Octubre de 2007, 20:00:23 »
JFH 900 lo que decis es cierto , lo que ocurre es que la inercia mecanica varia y no puedo estandarizar el envion , lo ideal sería hacer un pid de aproximacion
pero esta gente me pidió un puente H a base de relays por un tema de costos , de manera que el pid debo descartarlo.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con posicionado de una persiana a encoder
« Respuesta #6 en: 27 de Octubre de 2007, 21:05:08 »
¿Qué tipo de motor empleas?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #7 en: 28 de Octubre de 2007, 07:32:48 »
utilizo un motor de continua de 12 volts del tipo de los electroventiladores de auto , al que le adosé una reductora , de manera que el movimiento se reduce a 4 metros por minuto.

la consigna era que no podía usar 220 volts por seguridad.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con posicionado de una persiana a encoder
« Respuesta #8 en: 28 de Octubre de 2007, 10:23:06 »
¿No le podrias acoplar algún tipo de freno? que cuando se active el motor se quite y cuando pares el motor se active el freno. Otro posibilidad es, poner en cortocircuito el motor en el momento de pararle para que actue como freno electromagnético.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #9 en: 28 de Octubre de 2007, 10:27:36 »
disculpame si no puse el codigo para no embarrar el tema , pero cuando el encoder llega al valor de seteo , apago el puente , le doy una zona muerta de 1 milisegundo y luego prendo los bajos del puente durante medio segundo. con eso logro que frene el motor.

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #10 en: 28 de Octubre de 2007, 10:38:58 »
el problema es que las paradas mecanicas son aleatorias. cuando la persiana se enrolla , la parada se favorece porque el motor viene exigido , entonces tengo
para el lado del enrolle menos pulsos demas que cuando viene desenrrollando , de manera que esa porcion demas del desenrolle va haciendo que el encoder , que siempre cuenta la misma cantidad de pulsos  , los cuenta desfasados del lugar donde tiene que parar.

llega un momento que la persina para cuando se enrolla , medio metro  antes de llegar , y al desenrollar la tengo que parar porque pararia medio metro despues del limite...

todo esto por no usar fines de carrera...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con posicionado de una persiana a encoder
« Respuesta #11 en: 28 de Octubre de 2007, 10:44:56 »
Y si utilizas el puente para el frenado (Yo no esperaria el milisegundo, si no que pararia inmediatamente, ademas dejaria el puente en corto hasta que volviera a mover la persiana) ¿no consigues frenarlo?.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: problema con posicionado de una persiana a encoder
« Respuesta #12 en: 28 de Octubre de 2007, 10:49:20 »
La razon por la que uso el delay de zona muerta es que si viene de estar conectado en un sentido y pongo en corto los bajos , corro el riesgo de que los reles no tengan la suficiente velocidad a la desconexion y pongan la tension de bateria a masa.

inclusive en los puentes con semiconductores siempre se aconseja el delay de zona muerta ,claro que son unos pocos microsegundos...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con posicionado de una persiana a encoder
« Respuesta #13 en: 28 de Octubre de 2007, 11:05:41 »
Una posible solución para evitar el tener que poner un delay es utilizar dos transistores (o relés) para conectar una resistencia que disipe la potencia entregada por el motor (por ejemplo de 1 a 10 ohmios).

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús


 

anything