«

»

Nov 16

Modificación de un receptor de 35Mhz y decodificación de la señal PPM-SUM.

En esta entrada vamos a ver como extraer la señal PPM-SUM de un receptor de aeromodelismo de 35Mhz y cuatro canales mediante una sencilla modificación. Luego conectaremos la señal a un PIC 18F1320 y decodificaremos los seis canales que realmente envía la emisora, con lo que ganaremos dos canales reduciendo a la vez el cableado y la complejidad del programa que necesitaríamos para leer los canales directamente de las salidas existentes en el receptor.

La señal PPM que llega de la emisora está formada por trenes de pulsos separados por una señal de sincronismo. Cada tren de pulsos tiene codificado el valor de los canales como el tiempo que hay entre un pulso y el siguiente. Es decir, que para saber el valor del canal n, tenemos que contar n pulsos desde la señal de sincronismo y medir el tiempo que pasa hasta que llega el pulso n+1. Este tiempo de cada canal está entre 1 y 2 ms y el sincronismo es de  unos 10 ms.

http://www.pabr.org/pxarc/1.1/doc/pxarc.en.html

Si tenemos 6 canales, habrá 7 pulsos. Esperamos que la señal sea 0 por más de 10 ms, luego guardamos los tiempos entre flancos de subida de la señal para saber el valor de cada canal. Repetimos 50 veces por segundo.

Lo primero que haremos será buscar la señal ppm en el receptor. Para ello lo abrimos y buscamos el chip que decodifica las señales que van a los servos. Normalmente hay una pata unida a cada pin de salida, las de la alimentación, y una que va claramente a otro chip más pequeño. Está será probablemente la señal PPM. Para asegurarse, si tenemos un osciloscopio sólo hay que alimentar el receptor y encender la emisora, y buscamos una señal pulsada como la de la figura anterior. Si no tenemos un osciloscopio, podríamos hacer una analizador lógico con un pic, o utilizar el programa que veremos más adelante en las diferentes pistas del receptor hasta dar con la que devuelve resultados coherentes.

Una vez encontrada la pista, soldamos un cable para sacar la señal al exterior de la caja del receptor y volvemos a cerrarlo. Podemos sacar también la masa y los 5 V para alimentar el receptor directamente desde la placa del PIC.

Utilizaremos un 18F1320 con un cristal de 20Mhz para decodificar las señales. La pata INT0 (PIN_B0) servirá para generar una interrupción en el chip cada vez que llegue un flanco ascendente desde el receptor. Ademas programaremos el timer1 para que se incremente cada 0.4 us, y lo usaremos para medir la distancia entre pulsos.

Cuando se produce una interrupción leeremos el valor del timer1, si es menor de 10ms, lo ponemos a 0 y volvemos a esperar otro flanco. Cuando detectamos el sicronismo, esperamos el siguiente flanco y vamos almacenando en una matriz los valores que leemos del temporizador hasta que tenemos el número total de canales. Podemos detectar un problema de conexión con la emisora cuando pasan más de 20ms sin recibir pulsos, o cuando el ancho de los pulsos no cuadra con el margen de 1 a 2 ms.

Para completar el programa con una aplicación de ejemplo, utilizaremos cuatro salidas del pic y el timer0 para general las señales de control de cuatro servos a partir de los valores que nos llegan de la emisora escalados por dos para aumentar el recorrido. Ademas si se detecta un fallo de comunicación (“failsafe”) llevamos a los servos a la posición de origen.

Si queremos depurar podemos conectar a los pines B1 y B4 un convertidos serie/ttl o un módulo bluetooth como los vistos en otras entradas y descomentar los printf.

Aquí os dejo el programa fuente en C.

 Fichero sólo visible para usuarios registrados

Hasta la próxima.

4 comentarios

1 ping

Ir al formulario de comentarios

  1. soko

    Muy interesante tu blog, si señor!!!!!!!

    Justo estaba pensando hacer lo mismo, pues se me ha fastidiado una emisora que uso en el simulador y necesito generar una señal ppm sum para reemplazar la placa quemada.

    Lo unico que nunca use PIC de la serie 18 siempre de la 16, pero todo es mirar.

    Saludos y enhorabuena!!!!!

  2. David

    En realidad usando un compilador de C la programación de un 18F y de un 16F es muy similar, yo suelo pasar los programas de uno a otro sin mucho problema (claro que cambian las configuraciones de e/s y demás).

    En tu caso yo creo que puedes reparar la emisora usando cualquier 16F que tenga entradas analógicas para leer los potenciometros de cada canal y luego generas en una salida la mezcla de los canales (PPMSUM) usando unos simples delay_us

    Algo así:

    set_adc_channel(sAN0);
    C1=read_adc();
    set_adc_channel(sAN1);
    C2=read_adc();

    Leemos las entradas canal por canal. Para una entrada de 10 bits el valor va de 0-1024 para 0-5V
    y luego generamos la PPMSUM

    output_high(PIN_B0);
    delay_us(500);
    output_low(PIN_B0);
    delay_us(C1+500);
    output_high(PIN_B0);
    delay_us(500);
    output_low(PIN_B0);
    delay_us(C2+500);

    Hasta último canal

    output_high(PIN_B0);
    delay_ms(12);

    Un saludo y gracias por participar.

  3. Juan

    Hola, en mi caso dispongo de un receptor en 2.4GHz marca orange RX, y por mas que lo he intentado no consigo encontrar la señal PPM. Lo que hago es leer las salidas de los diferentes canales, con el añadido de que este recpetor no tiene dichos canales desfasados por lo que para medir cuatro canales, obtengo tiempos de 42ms que no esta mal. Pero me gustaria saber si sabes algo sobre dicho receptor para obtener la señal PPM original.

    Tambien tengo receptores de 35MHz pero la antena es mas larga, con los problemas añadidos de interferencias etc… por eso me interesa mas el 2.4GHz

    Saludos y gracias

    1. David

      No conozco el receptor, pero he visto alguna página donde sacaban la señal ppm de un receptor de 2.4Ghz, aunque puede que en tu caso simplemente no esté accesible.

  1. Construyendo un cuadricoptero I » Blog de inventos

    […] Modificación de un receptor de 35Mhz y decodificación de la señal PPM-SUM […]

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies