Go Down

Topic: Proyecto Cuadricoptero UAV: Problema con receptor de emisora RC (Read 11438 times) previous topic - next topic

SrDonGato

Vaya...
Quote
Ahora el que está confundido soy yo ¿no es lo que vengo diciendo desde el principio?
Luego aparece Cheyenne, que es de los que no tiene clara la diferencia entre los tipos de señales ni de donde se sacan, pregunta para que se lo aclaren y la respuesta de SrDongato es muy reveladora... pero en otro sentido:

Quote
Sin saber mucho de programacion ( yo tampoco soy un gurú)  es fácil el montaje y la configuracion del mismo a traves el programa que hn hecho a tal efecto, y puedes ver los valores de las configuraciones, los valores de los sticks y los valores comandados a los motores.
se han currado mucho el codigo .


Revelador si ... muchos preferimos buscar código hecho, no veo el por qué esta mal. leyendo código se cogen ideas y se aprende como atacar con programación a un problema, que en definitiva es lo que piden muchos. es por lo que le puse el código , para que hiciera lo mismo, es como muchos hemos aprendido.

Quote
Respuesta de SrDongato:
Quote
no te has mirado lo que te he dicho ....

Como otros muchos a los que se responde ni siquiera mira lo que se le propone, y si no lo entiende tampoco lo dice.

Quote
Y hay un enlace a un .pde que para adrib debe resultar totalmente incomprensible por sus 2001 líneas de código

Ademas VIENE COMENTADO Y TOTALMENTE ESTRUCTURADO, y gracias a esto tanto yo como otros muchos sabemos como obtener estos datos, que por cierto hemos podido importar la idea a otros proyectos ...

Quote
Ah, has hecho un copy/paste... perdona, pero eso no implica que sepas lo que estás haciendo ni de que estás hablando.


En algún momento he dicho que el código fuera mio ??
Quote
buscate el proyecto de multiwii copter,


en algún momento he dicho que no sepa lo que hace ? 
y si ... en tus continuos errores si parece que sepas de lo que estas hablando también....

Quote
Ambas se leen en digital. en PPM se utiliza solo un pin , en PWM un pin por cada canal.
SrDongato, para ayudar así mejor no ayudes, por que de esa frase no se saca nada en claro,


Qué no entiendes en la frase ? El comentario aclara un comentario anterior que dice
Quote
Para leer PPM creo que hay que utilizar una entrada analógica y para PWM una entrada digital para cada canal que quiere ser leído.

Y si creo que ayuda al lector a saber como debe hacerlo.

Quote
repásatelo bien y veras que se puede configurar a frecuencias más altas pero para 50Hz

Parece que debas repasarlo tú pues decías que las señales PWM eran a 16 MHZ cuando por defecto son a la frecuencia mas baja, anda échales un vistacico

Quote
La forma que tienes de ver el estado del pin es si está a 0 o 1 en un determinado momento.

Te has fijado como son las señales PWM y PPM ?, debes fijarte primero que es lo que queires leer por esa patilla.

aqui tienes un codigo que saque de no me acuerdo donde para leer una señal PPM, normalmente tienes que abrir el receptor para obtener la señal del pin de un chip que tiene interno, que es el que decodifica de PPM a PWM a cada canal. la ventaja del PPM es que con 1 entrada digital obtienes los valores de todos los canales. con PWM obtienes el valor de 1 solo canal por lo que necesitas tantas entradas digitales como canales tenga tu radio .


Creo que es una explicación clara y concisa de como tiene que leer ambas señales, no me atribuyo el código, el cual ademas viene comentado....

Después de explicar a ambos lo que preguntan en el hilo apareces con tu magistral arrojo de luz
Quote
con términos simples y fáciles de entender,
...
sin responder a lo que se pregunta, cosa que criticas mas adelante.

Quote
En un sistema de RC (Radio Control) las PWM se utilizan SOLO entre el variador y el motor, para NADA más.


se utiliza entre receptores y variadores y servos, si a 50hz pero no deja de ser PWM

Quote
Tampoco se utiliza PPM. Esto es algo parecido, pero no es igual.

Las emisoras emiten muchas de ellas en PPM, incluso en PCM y luego se encarga el receptor de convertirlas a PWM
Quote
se hace por un particular tren de pulsos: un pulso de entre 1 y 2 milisegundos, una pausa de 20 milisegundos

puff
Quote
(PWM) sirve para "simular" una señal analógica mediante una digital...

es uno de los usos y siempre y cuando se aplique un filtro a la salida que derive la señal digital y la convierta a analógica.
Y como puedes ver no he sido el único en darme cuenta.

No tendré mucha destreza programando pero mis 10 años de estudios en electrónica y automática y otros 8 años trabajando creo saber de lo que estoy hablando.

Quote
Perdón si me he puesto un poco agresivo en alguna frase, en ningún momento mi intención ha sido ofender a nadie

Lo mismo digo

Un saludo



josemanu

No iba a contestar tras la primera lectura de tu respuesta, pero a la segunda el PUFF me ha llegado al alma

Code: [Select]
int lectura;  // variable que almacenara el valor leido del potenciometro.
int salida = 9;  // pin por el que mandaremos un tren de pulsos
int pulso;  // contendra la anchura del pulso

void setup()
  {
    pinMode(salida, OUTPUT);
  }
 
void loop()
   {
    lectura = analogRead (A0); // leemos el pontenciometro
    pulso = map(lectura, 0, 1023, 1000, 2000); // calculamos el ancho del pulso
    digitalWrite(salida, HIGH); // activamos el pin de salida
    delayMicroseconds(pulso);   // esperamos el tiemp que dura el puslo
    digitalWrite(salida, LOW);  // desactivamos el pin de salida
    delay(20); // PAUSA de 20 milisegundos
   }


Como sabes leer programas veras que este sencillo sketch lee un potenciometro, mapea su valor para dejarlo en un rango de entre 1000 y 2000, activa un pin digital, espera ese valor mapeado en microsegundos y desactiva el pin,  luego hace una pausa de 20 milisegundos.

Copialo y pegalo, y luego lo pruebas con un servo y veras que .... funciona, anda.... pulso, pausa, pulso, pausa... funciona ¿puff?.

Tus 18 años entre aprender y ejercitar parece que te han nublado algo el juicio, hablas de PWM, PPM y PCM como si todo el mundo estuviera a la altura de tus conocimientos... y no es así. La gente que acude a este foro en busca de consejo no sabe lo que es un PWM ni un PPM ni un PCM... ni falta que les hace, vienen a aprender por que nadie nace sabiendo.

Un ejemplo simple como pulso, pausa, pulso, pausa es facil de entender Y FUNCIONA, no puff no. Es la forma más sencilla de explicar la forma en que recibe las señales de control un servo o un variador... decirles que es una señal PWM solo sirve para llevarles a intentar pilotar el servo con un digitalWrite().

Por cierto, el código de ejemplo es mio.

No tratas de rebatir mis argumentos sobre que utilizar el termino PWM lleva a confusión, por lo que entiendo que estás de acuerdo... y te doy la razón, es un PWM de 50Hz, pero si no vamos a poner la coletilla de los 50Hz mejor no decir solo "es una señal PWM" por que confunde a los que no tienen muy claro lo que es.

Mira, yo no lo se todo, hoy he aprendido que la frecuencia por defecto en la señal PWM que generan los pines digitales es de 490Hz, si comento incorrecciones es por que aun me queda mucho por aprender. Al menos tengo la humildad de reconocerlo y disculparme por mis errores, si entro en este foro para ayudar a los que saben menos intento hacerlo en un lenguaje que comprendan.

Soltar una frase como "Las emisoras emiten muchas de ellas en PPM, incluso en PCM" no disipa ninguna duda, no ayuda, no aclara nada. Puede que tu tengas muy claro lo que es cada una de ellas, enhorabuena tio sabes mucho de electrónica, pero no tienes ni idea de como transmitir ese conocimiento.

Todo el mundo parece tener muy claro que las emisora utilizan PPM, PCM y PWM. Os ha faltado entrar en que unas modulan la frecuencia y otras modulan la amplitud, por eso las hay FM y AM. No habéis dicho nada de las de 2.4GHz (que no hay que confundir con wifi)   y ahí tenéis un montón de siglas más para presumir de lo mucho que sabéis de electrónica FSSS, FHSS, FASST y muchos más.

Recomendarle a alguien que abra un receptor, que busque un chip que da salida PPM y que la lea por un pin analógico ¿de verdad te parece que es aclararle algo?, para los que llevan 18 años dedicados a la electrónica debe ser lo más sencillo del mundo, pero para los demás no.

¿Agresivo? si, por que estoy tratando de que las cosas se expongan de una forma sencilla y que funcione (pulso, pausa, pulso, pausa ---> funciona, no puff, funciona, no puff) sin complicarle la vida a nadie por omitir puntualizaciones acerca de una frecuencia, ¿agresivo? tal vez por que empecinarse en llamar las cosas de una forma que, aunque sea correcto, confunde me parece estúpido.

Releo la respuesta de Cheyenne, perdón por mis incorrecciones, aprendo sobre la marcha.

http://www.ardumania.es/

Iniciación

coleoptero

Chicos la temperatura y subida de tono de los post hay que frenarla ya.

Como bien ha indicado 'Igor R' estamos en un foro y en él se discuten las cosas aportando cada uno nuestro conocimiento para esclarecer dudas. Pero teniendo en cuenta unas normas mínimas de conducta y un mutuo respeto. Saliéndonos de la temática y entrando en rivalidades no es la mejor forma de ayudar si es como decís lo que pretendéis.

De seguir en esta línea me veré obligado a hacer algo que no deseo.

Saludos.

coLe.
Consejos para hacer un correcto uso de los foros.

http://arduino.cc/playground/Es/Consejos

josemanu

Correcto y diplomático como es su costumbre el señor moderador tiene toda la razón, pero en mi opinión llega un poquito tarde, mi último post ya estaba muy calmado.

Y como también se me ha echado en cara que no he aportado nada positivo, solo incorrecciones, voy a subsanar este hecho... y sin acalorarme.

Code: [Select]
int entrada = 7;  // pin en el que metermos la señal que viene del receptor
unsigned long pulso;  // variable en la que almacenaremos la lectura

void setup()
{
  pinMode(entrada, INPUT);  // configuramo el pin como entrada
  Serial.begin(9600);   // habilitamos puerto serie
}

void loop()
{
  pulso = pulseIn(entrada, HIGH); // leemos el pulso
  Serial.println(pulso);  // mandamos el dato al monitor serie
  delay(500);   // pausa para no volver loco al monitor serie
}


Este sencillo Sketch recien programado por mi lee los pulsos procedentes de un receptor y los muestra por el puerto serie.

Como lo que Adrib quería hacer era leer la información que viene del receptor para jugar con ella en ese Sketch tiene todo lo necesario para entenderlo y comentado en castellano, aun así, si algo no le queda claro que pregunte y trataré de explicarlo de la forma más sencilla que pueda.

Acerca del Sketch comentar solo que, como básicament lo que queremos leer es un pulso de una duración de entre 1000 y 2000 microsegundos, tras el cual va una pausa cuya duración no nos importa, con el comando pulseIn() lo podemos hacer de forma sencilla. Lo he probado con uno de mis receptores y tal cual está ha funcionado perfectamente. También he comprobado una cosa muy curiosa, que no sabía y que paso a compartir para que sea de dominio público, por que a alguien le puede ser de interes: cuando he apagado el conjunto receptor-variador y he retirado la batería  me seguían llegando pulsos, así que con sorpresa me he enterado de que Arduino puede alimentar al receptor.

Otra cosa, para leer los pulsos haría falta un comando pulseIn() para cada canal. Yo he utilizado un receptor Team Losi 2.4GHz DSM de 3 canales para la prueba, abrirlo para buscar una señal interna que lleve la información de todos los canales codificada en ella me parece, a título puramente personal, innecesario. Pero si algún valiente se atreve yo le paso fotografías de 8MP del circuito, me señala donde buscar y me ofrezco para hacer mas pruebas.

Esta mañana, mientras iba en bici al trabajo no he podido dejar de pensar en el tipo de señal tan particular que sirve para comunicar los distintos elementos de un sistema de radio control. Hemos quedado que es una señal PWM de 50Hz y que su pulso tiene una duración comprendida entre 1 y 2ms ¿y si el pulso fuese de 10ms? seguiría siendo PWM, pero no funcionaría ¿y si el pulso fuese de 0.25ms? también sería PWM y tampoco funcionaría.

Si tenemos que especificar que se trata de una señal PWM de 50Hz con el pulso comprendido entre 1 y 2ms resulta que tenemos que puntualizar tanto para referirnos a este tipo de señal que decir sólo que es PWM resulta incompleto, tanto como decir que se trata de una señal digital. Realmente ofrece la misma información en este caso decir que es digital y decir que es PWM. En este caso simplificar hasta el punto de que trata de una señal pulso-pausa-pulso-pausa, diciento que los pulsos son de entre 1 y 2 ms y que las pausas son de 20ms ofrece mucha más información y es más comprensible que decir solo que se trata de una señal PWM. Y aunque la simplificación no sea técnicamente correcta resulta que es cierta y que si le enviamos esa señal a un servo funciona.

La temperatura no habría subido si el lugar de saltarme al cuello por un par de incorrecciones en ningún momento intencionadas (vuelvo a pedir disculpas por haberme equivocado con la frecuencia de salida de la señal PWM de los pines de Arduino) nos hubiesemos centrado en lo que importa: despejar dudas con información útil.

Espero con esto haber aportado mi conocimiento para esclarecer dudas y no para generarlas, aunque si ha sido este el caso, siempre estoy dispuesto a disiparlas en base a mis conocimientos y a mi experiencia.
http://www.ardumania.es/

Iniciación

javier_david

Chicos gracías por la discusión, porque me habeis aclarado un montón de cosas con ella, aunque se haya puesto un poco tensa la cosa. Voy a empezar con arduino para controlar dispositivos en un avión rc y tenía algunas dudas al respecto.

En cuanto me llegue mi arduino nano, seguró que me saldrán mil mas :-)


Lo mejor que estos puntos de vista diferentes es que siempre se saca algo bueno de los dos lados :-)

ionhs

Jaja ando tan liado que me he perdido todo el follón. No me he leido todo porque tras leer un rato me he dado cuenta que estabais discutiendo sobre semántica. Pero has sido interesante. Salu2

Cheyenne

La discusión semántica ya se produjo hace dos años aquí: http://arduino.cc/forum/index.php/topic,14146.0.html

Resumiendo viene a decir que lo que puede dar lugar a equívoco si no se conoce Arduino es el hecho de que para dar una salida PWM el comando sea analogWrite. El personal poco entendido puede interpretar que se está dando una salida analógica cuando no lo es. El comando correcto tal vez debiera haber sido PWMWrite. Pero a estas alturas no sería nada práctico intentar cambiarlo. Siguiendo el hilo con el tema de radio control (RC) se explica lo de la transmisión de las emisoras RC mayoritariamente en PPM (también pueden hacerlo en PCM) para a continuación demultiplexar y sacar la señal PWM de cada canal. Esta señal PWM es la que directamente controla por ejemplo un servo. Sin embargo, la salida PWM de un Arduino escrita con el comando analogWrite no puede controlar un servo porque ese comando saca una PWM a frecuencia 490 Hz cuando un servo la requiere a 50 Hz (flancos ascendentes cada 20 milisegundos). Por esta razón hay quien propone no decir que la señal de un servo es PWM cuando realmente lo es.

Claro que entonces a mi modo de ver tendríamos que rebautizar el nombre de la señal de un servo como "señal servo", "tren de pulsos especial para servo" o cualquier otra cosa. Yo soy de la opinión de llamarla PWM puesto que lo es. Después si es necesario habrá que especificar sus características particulares. De lo contrario habría que cambiarle el nombre a muchas otras cosas. No digamos que una batería de coche puede suministrar electricidad puesto que alguien no entendido podría enchufar la plancha a la batería de coche y no le funcionaría aunque también funcione con electricidad.
http://cuadricopterodiyarduino.blogspot.com/

AlexRodriguez

buenas, estoy construyendo un wii-cuadricoptero, pero me preguntaba s existe algun sof, que me permita controlarlo con la pc,
lo que pasa que no tengo una radio rc.
O alguen a modificado el sof de la pagina multiwii, para poder controlarlo con la pc.

SrDonGato

No sé si existe ... pero lo desaconsejo totalmente, y más si las hélices tienen un tamaño considerable.

Parece un juguete pero es bastante peligroso en casos de fallos

aun así tienes que establecer un lazo inalambrico entre ambos, tienes que usar radio igualmente

Cheyenne

Pues yo, aunque lento, aquí sigo con mi proyecto de cuadricóptero. Ya leo los 8 canales de la emisora, leo los ángulos que me proporciona el 9 DOF Razor, ejecuto el PID y envío los pulsos a los motores. Ahora estoy con un balancín con dos motores haciendo pruebas de estabilización y por el momento no estoy teniendo buenos resultados  :( la buena noticia es que sólo llevo dos días con esta prueba  :)

¿Hay alguien en el foro que esté desarrollando su propio código sobre Arduino para estabilizar un cuadricóptero?
http://cuadricopterodiyarduino.blogspot.com/

SrDonGato

yo acabando el quadcopter tras varias remodelaciones, aun así tengo que reforzar el esqueleto, de las vibraciones se afloja todo :D

hice el del multiwii, y tras varios vuelos fallidos por disintas causas lo tengo aparcado, ya me ha dado un par de sustos las jodidas hélices, cuando se me pase el susto  sigo con ello :D


AlexRodriguez

:smiley-roll-blue: s, como dice el colega tambien lo tengo haciendole pruebas en un balacin,
pero no puedo avanzar por los motivos mencionados.
estaba pensado en ponerle un rooter linsys para interactuar con la pc, y abaratar costos.

Cheyenne

Yo no estoy usando ningún código ya hecho así que no puedo decirte. Si quieres controlar el balancín desde el PC entiendo que lo quieres hacer por cable sólo para hacer pruebas. En ese caso puedes pillar algún joystick, hacer el código (o buscarlo en San Google) para leerlo en Arduino y pasar los datos a las correspondientes variables del código del multiwii.
http://cuadricopterodiyarduino.blogspot.com/

Go Up