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.

5 pings

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

Deja una respuesta

Tu email nunca se publicará.

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.

ACEPTAR
Aviso de cookies