Autor Tema: mi servo no se queda quieto (NUEVO RETO)  (Leído 34462 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: mi servo no se queda quieto
« Respuesta #15 en: 16 de Mayo de 2007, 02:37:04 »
Muy bueno el truco, Manolo.

Carli, tambien como ex-aeromodelista he llegado a golpearme la frente contra el marco de la puerta con los Servos Locos Que Atacan de Nuevo.

Yo era aficionado a las maquetas volantes y me tiré a montar un HE-111 (Heinkel 111, Cazabombardero aleman de la II GM, bimotor, con planos de vuelo elipticos alabeados, una preciosidad de verdad) y quería montar un control de potencia para intentar igualar la tracción de los dos motores glow de .40 que calzaba. El tema era poder fijar un régimen de vueltas distinto para cada motor pero comandados ambos por una única señal de gas, de forma que ambos tuviesen el mismo empuje efectivo.

Mi bisoñez y desconocimiento hizo que tuviese que abandonar el proyecto porque no era capaz de mover los servos con la suficiente estabilidad, y lo picos erráticos que daban hacían que un motor o el otro pegasen unos saltos o caidas bruscas de potencia con lo que peligraba enormemente la integridad física del aparato.

En fin, algún día retomaré el asunto.  :mrgreen:



Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: mi servo no se queda quieto
« Respuesta #16 en: 16 de Mayo de 2007, 23:48:38 »
Valla, somos varios los ex-aeromodelistas!!

Por ahí tengo guardado 9 servos, incluyendo uno de los grandotes que venían antes de 15 kilos de empuje, ahora los de mas kilos son del mismo tamaño que los comunes. También tengo un receptor y un trasmisor de 6 canales (el 6XA de futaba programable), además de unos 5 aviones y dos motores un .15 y un .61. En fin, ideales para juntar tierra en estos momentos. Tengo ganas de desempolvar los servos, conseguir algunos mas y armarme algún robotito, espero poder ponerme con eso pronto.

Saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: mi servo no se queda quieto
« Respuesta #17 en: 12 de Junio de 2007, 21:00:33 »
 :cry: :evil: :z) :8} :cry: :evil: :z) :8} :cry: :evil: :z) :8} :cry: :evil: :z) :8} :cry: :evil: :z) :8}

probe todo lo conocido (por mi, claro) pero no soy capaz de hacer que el servo no vibre!!!

os cuento todas las pruebas que hice:
  • escuche que el oscilador interno de los pic no es muy preciso, asi que probe con uno externo, y nada
  • puse condensadores de todos los valores antes, durante y despues del 7805 (bueno... durante no) para que el voltaje sea estable
  • puse condensadores en la entrada del adc de todos los valores, y lo unico que consigo es mayor "retraso"  de respuesta del servo con respecto al POT cuanto mayor sea el condensador
  • resistencias en la entrada del adc o en la salida del PWM, y combinaciones con condensadores para filtrar, pero igual que antes
  • probe posicionar el servo segun el promedio de 10 muestras del adc
  • antirebote por soft para el pot --> compara el valor anterior y el actual del adc y si la diferencia es mayor a X cambia la posicion del servo, sino no... cuanto mas grande sea X, el servo se mueve mas a saltos, pero sigue vibrando
  • probe con diferentes pics (12F683, 12F675, 16F84A, 16F88... dios bendiga los samples de microchip  :mrgreen: :mrgreen:)... lo mismo con todos
  • tomando muestras del adc con mas y menos frecuencia... mientras menos frecuencia pierde respuesta el movimiento del servo con respecto al pot
  • adc 8 y 10 bits
  • diferentes calidades y valores de potenciometros
  • seguro que probe muchas otras cosas, pero ahora no recuerdo....

conclusiones a las que llegue:
  • mientras mas estable sea el voltaje, menos vibra el servo... que listo soy :D
  • pasarse poniendo condensadores para filtrar TODO a veces no es tan bueno, primero por el precio, y segundo porque el circuito pierde sensibilidad/respuesta al pot... solo poner los justos y necesarios

otras pruebas y sus resultados:
  • probe desconectar el pot del adc y ver que ocurria, sobre todo para saber si la señal que le llega al adc es muy cambiante, pero la pata del pic me hacia de antena y se movia aun mas...
  • lo anterior llevo a probar conectar el pin adc a 0v y a 5v asi tenia el valor mas estable que hay en el circuito, el servo se posicionaba a un extremo o a otro segun conectara a 0v o a 5v, pero aunque vibraba un poco, era casi nada.
  • esto me hizo probar programar el pic para que enviase constantemente la misma posicion, sin leer el adc y para mi asombro, el servo vibraba casi nada, como en el caso anterior.... PERO VIBRABA!!!! era mas bien un tic pequeñito como cada 3 veces por segundo...
  • esto me da a pensar SOLO una cosa... la rutina para posicionar el servo no funciona bien del todo y es imprecisa, ahora, como hago para que funcione bien? NO TENGO NI IDEA  :shock:

a partir de ahora centrare mis esfuerzos en aprender a usar el PWM que traen algunos pics, y no por soft.
ya vere si da el resultado que espero... y sino estuve mirando por internet probadores de servos y encontre este pero el tio no se como usara el pot, ya que lo tiene configurado como resistencia variable y no como divisor de tension... entonces no se como entendera el pic las variaciones...
tambien encontre un probador de servos basado en un 555 (en la pagina de pablin), y funciona PERFECTO, el servo no vibra ni nada... pero a este circuito no hay manera simple de controlarla desde un pic... a menos que el pot del 555 lo sustituya por un potenciometro digital (los tiene microchip, pronto me hare con algunos samples  :mrgreen:) y el adc del pic leyera un pot externo que regulara yo... el adc lo convierte y lo comunica al pot digital y este a su vez controla el 555... un follon, pero si funcionara me valdria...

llegados a este punto, hice un monografico sobre todo lo que NO SIRVE para el servo vibre menos... pero tal vez le aporte algo a alguien...
ya sabeis, si podeis aportar algo a mis innumerables (o mejor dicho: CANTIDAD de innumerables) horas de trabajo, prueba y error, pues serian de muchisima ayuda
salu2 para to2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: mi servo no se queda quieto
« Respuesta #18 en: 14 de Junio de 2007, 17:49:22 »
Pues..... en el BOT controlado por RF uso cinco servos y dos motores AC, y te puedo asegurar que no vibran.
Al principio si vibraban, y era por un pequeño conflicto de interrupciones al leer el puerto serie y controlar los servos
al mismo tiempo, pero al final quedaron perfectos, asi que tendras que depurar tu Soft... :mrgreen:
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: mi servo no se queda quieto
« Respuesta #19 en: 14 de Junio de 2007, 18:14:14 »
He estado probando el servo en la EBasic deshabilitando el ADC, y refrescándolo a una posición fija de forma permanente, y esporádicamente se escucha un tic... esta placa esta programada para que funcione a 8 megas... y la del Bot por RF va  a 20Mhz... puede que eso afecte.... o puede también que no apreciara yo ese efecto.... de todas formas cuando coja algo de tiempo probare la rutina de los cinco servos...
Saludos desde Granada, España.

Desconectado Giovanny

  • PIC12
  • **
  • Mensajes: 97
    • Supercomponentes
Re: mi servo no se queda quieto
« Respuesta #20 en: 15 de Junio de 2007, 01:46:28 »
hola a todos, hace mucho no visitaba el foro, y me encuentro con temas muy interesantes a mi vuelta..  :-/
bueno, me gustaria ayudar a solucionar este problem, y para ello hize una simulacion en proteus del control de posicion de  3 servomotores (futaba), de acuerdo a la variacion de 3 potenciometros, con lo cal he obtenido buenos resultados en la practica,(no vibran). Aunque los potenciometros juegan un papel importante, yo personalmente uso pot lineales, los logaritmicos siempre me molestan y terminan volviendome loco..  :D :D
El soft, lo hice en CCS, y tambien es un pwm emulado. 

este ejemplo, lo hize en un pic16f877a, porque lo tenia a la mano, los invito a que prueben el .hex, y si obtienen el resultado esperado, con gusto subo el .C . marttyn, por ahora espero que te funcione, ya que con el mismo soft levemente modificado (sin pots y con algunos algoritmos de fuzzy logic) controle exitosamente un bot hexapodo con 12 servomotores de marca futaba y hobbyco.
 
        Saludos desde Colombia! Que hermoso país....

Desconectado Giovanny

  • PIC12
  • **
  • Mensajes: 97
    • Supercomponentes
Re: mi servo no se queda quieto
« Respuesta #21 en: 15 de Junio de 2007, 01:49:40 »
olvide decir que se usa un cristal de 4M, Saludos. :lol: :lol:
        Saludos desde Colombia! Que hermoso país....

Desconectado Giovanny

  • PIC12
  • **
  • Mensajes: 97
    • Supercomponentes
Re: mi servo no se queda quieto
« Respuesta #22 en: 15 de Junio de 2007, 01:56:25 »
he aqui el archivo de proteus, como lo olvide!!.. ;) hasta pronto
        Saludos desde Colombia! Que hermoso país....

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: mi servo no se queda quieto
« Respuesta #23 en: 15 de Junio de 2007, 14:25:09 »
 :( y yo que estaba a punto de hacer la prueba con un cristal de 20mhz, xq pense que se acabarian los problemas, y ahora tu me dices que lo has hecho a 4mhz y funciona bien...
aunque ahora que lo pienso... MEJOR! prefiero que funcione a 4mhz  :)
quise ver la simulacion del proteus, pero tienes una version mas reciente de este y no me deja abrir el archivo. aunque de poco me habria servido, ya que no tengo ningun pic 16F877 para ponerlo en practica... (me huele a proximo pedido de samples  :D)
te importaria subir el .C? asi lo adapto al 12F683 o a algun pic que tenga en mi poder? me gustaria hacer la prueba
gracias a ambos por las respuestas, espero que pueda solucionar esto pronto... aunque eso no quita que me ponga a averiguar como funciona el PWM x hard... aunque por lo que vi hasta ahora no se si se podra hacer funcionar a 50hz
un saludo!
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: mi servo no se queda quieto
« Respuesta #24 en: 15 de Junio de 2007, 15:53:05 »
Marttyn, creo que el problema lo resolverías con el promediado que te ha comentado Duende_Azul, y el truncamiento que te dice Nocturno, pero en vez de tomar diez muestras y promediar, haz una pila FIFO de promediado, tendría el efecto de un control derivativo, es decir, como ponerle un condensador. Con esto harías que el sistema sea mas estable al ruido que viene de la resistencia del servo. Sería algo así:

- tomas un valor, lo pones en la posición uno de la pila, sumas el contenido de la pila (de momento solo tiene ese valor) y divides entre el número de valores que contiene para obtener el valor de la salida.
- tomas otro valor, desplazas el contenido de la pila una posición a la derecha (como tenía un solo valor, ese pasaría a la posición dos) y pones el valor tomado en primer lugar, sumas el contenido de la pila y divides entre el número de valores que contiene para obtener el valor de la salida.
- tomas otro valor (van tres), desplazas el contenido de la pila una posición a la derecha y pones el valor tomado en primer lugar, sumas el contenido de la pila y divides entre el número de valores que contiene para obtener el valor de la salida.

y así sucesivamente... te lo pongo gráficamente

- 1er paso: (se captura el valor 10)

pila: [10][0][0][0][0]

salida: trunca(pila(:)/tamaño_pila) = 10


- 2o paso: (se captura el valor 11)

[11][10][0][0][0]

salida: trunca(pila(:)/tamaño_pila) = 10

- 5o paso: (se captura el valor 10, antes se capturó el 11 y el 10)

[10][10][11][11][10]

salida: trunca(pila(:)/tamaño_pila) = 10

- 6o paso: (se captura el valor 10, se pierde el 10 inicial...)

[10][10][10][11][11]

salida: trunca(pila(:)/tamaño_pila) = 10

A partir de aquí como el 6o paso, es decir, se pierde el primero que se tomó, por eso la idea de la pila FIFO. El algoritmo este se suele utilizar precisamente para el problemilla que tienes, suaviza la señal de salida, como es lógico, cuanto mayor sea la pila, mayor suavizado lo que significa que el servo se meneará menos, pero será menos sensible a cambios. Tendrás que hacer pruebas para determinar el tamaño de esa pila, ya que dependerá un poco también de tu tiempo de muestreo.


saludos!

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: mi servo no se queda quieto
« Respuesta #25 en: 15 de Junio de 2007, 18:02:45 »
dogflu, me acabo de leer todo el post del bot controlado por RF y no hay ni una sola mencion sobre servos  :5]
aunque mirando el lado positivo, aprendi algunas cosas sobre RF  :mrgreen:
j1m, con respecto a lo de promediar el adc, yo lo hice asi: leia el adc 10 veces en un lapso de 50ms (1 vez cada 5ms), sacaba el promedio y comenzaba de nuevo. es decir, tenia un valor cada 50ms, que es el que usaba para la pocicion del servo. el resultado: lo mismo que no promediar... aun asi probare lo que me comentas de la pila fifo a ver que tal...
por cierto, no creais que el servo se mueve BRUTALMENTE! es una vibracion pequeñita, pero genera mucho ruido y me calienta el 7805
salu2
« Última modificación: 16 de Junio de 2007, 00:33:25 por Marttyn »
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: mi servo no se queda quieto
« Respuesta #26 en: 15 de Junio de 2007, 18:21:13 »
Yo estoy haceindo pruebas con el ADC y si la precisión es muy grande, al valor de la componente continua se superpone el ruido que toma el potenciometro como si fuera una antena. Para evitarlo, tal y como me comento PicMouse es conveniente poner un condensador de 0.1 uF de tántalo en la patilla central y masa (si no tienes pon uno cerámico), procurar que las patillas del potenciometro sean lo mas cortas posibles y si estan apantallados los cables mejor. Y por último y mas importante disminuye la precisión del ADC dejalo en 8 bits y cuando utilices la tensión de control para manejar el servo utiliza un solo decimal, el resto de decimales que utilices de más estarán fluctuando debido al ruido.

Un saludo.
« Última modificación: 15 de Junio de 2007, 20:01:56 por jfh900 »
* 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 Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: mi servo no se queda quieto
« Respuesta #27 en: 15 de Junio de 2007, 20:01:54 »
 :| :| :|
ya lo estoy asumiendo.... no se si dejarme vencer por esta vibracion y seguir con otra cosa...  :8}
el adc lo tengo en 8bits, condensadores los puse en todas las posiciones posibles, e intente lo de la pila fifo, pero me va FATAL  :(
supongo que es un problema del soft... debo tener algo mal en el programa. estoy 80% seguro de que no es el pot
si alguien tiene alguna rutina para comandar servos que le funcione bien, y este escrita en C se lo agradeceria un monton...
salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: mi servo no se queda quieto
« Respuesta #28 en: 15 de Junio de 2007, 20:08:35 »
Utiliza un solo decimal en la conversión. Con eso evitaras las fluctuaciones.

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 Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: mi servo no se queda quieto
« Respuesta #29 en: 15 de Junio de 2007, 23:43:25 »
no entiendo a que te refieres a que use un solo decimal en la conversion...
tengo el pic a 4mhz, el adc a 8bits
timer 0 a 1:256. cada desbordamiento (65ms) lee el adc
timer 1 a 1:1. empieza a contar en 45535, asi tengo 20.000 uS para la frecuencia del servo
cada vez que leo el adc lo convierto en una posicion, es decir en un duty de entre 500uS y 2500uS
lo hago de la siguiente manera: Posicion_Servo = 500 + floor(ValorADC * 7.8)
de donde sale el 7.8?
regla de 3:
256        --> 2000
ValorADC --> X
es decir el valor que tengo que variar esta entre 500uS y 2500uS, es decir son 2000uS
esos 2000uS los voy a reducir a las 256 posibilidades del adc 2000/256=7.8125, redondeado a 7.8
entonces, al multiplicar el ValorADC por 7.8 obtengo siempre un numero entre 0 y 2000, a este valor le sumo 500 entonces asi tendre siempre un valor entre 500 y 2500. fijate que uso la opcion floor, con lo que la posicion del servo nunca va con decimales.
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.