E-Radiocontrol
Circuitos Electronicos de Radio Control








Bienvenido > Circuitos de Radiocontrol > Circuitos Codificadores > Con PIC16F876


Con PIC16F876

El siguiente circuito lo hice basandome en los equipos de radiocontrol comerciales, los cuales tienen varios canales y funcionalidades. Estas funcionalidades hacen que los equipos sean mas versatiles y adaptables a cualquier tipo de modelo al que lo vayamos a usar. Sin duda estos equipos usan un microprocesador tambien. El que se presenta a continuacion usa codificacion en PPM para 7 canales, donde hay 5 de esos canales que son analogicos proporcionales; y dos de ellos el canal 6 y 7 son digitales tipo on/off pero que se incorporan en el tren de bits como 2 canales proporcionales mas.


Foto del circuito codificador ya terminado

Ademas de los 7 canales, este circuito nos provee dual rate para cada canal de las palancas de mando, es decir, para los 4 primeros canales analogicos. El 5to canal analogico es un potenciometro que regula al servo en todo su recorrido y en mi caso lo tengo instalado en la carcasa del transmisor. La funcion de DualRate se activa solo para algunos canales, segun una llave de mando hubicada en la parte superior del control. Esta llave es solo de dos posiciones, on/off. Cuando esta activo el DualRate el recorrido del servo conectado a ese canal se ve limitado a un rango menor a pesar de que el rango de la palanca se mantiene. El porcentage con el que se limita es configurado desde el programa del PIC.

Para la regulacion de las palancas de mando, consta con un modo de setup (que guarda los valores en la memoria EEPROM) donde se almacena la posicion maxima de las palancas a modo de calibracion de un joystick de juegos en la PC. Es necesario hacer siempre la calibracion al momento de encender pro primera vez el circuito para que recuerde la posicion maxima y minima para cada canal y asi haga los calculos de DualRate y posicion central de las mismas.

Circuito

Los potenciometros que yo utilice, fueron los originales de las palancas, los cuales eran de 5K, asociados con un trimmer de 1K para la regulacion fina. Para el potenciometro del 5to canal analogico no es necesario usar este valor de 5K, se puede usar cualquier potenciometro entre 5K y 100K, ya que en uno de sus extremos tiene 0v y en el otro 5V, asi tenemos los 300º de recorrido.



Circuito generador de señal PPM con PIC
(Click para ampliar)

El circuito basicamente puede dividirse en 2 partes, la parte donde se acondiciona la señal de los potenciometros con el LM324 y la parte donde se procesa la informacion para generar la señal de radiocontrol para los 7 canales del mismo

En la parte donde se acondiciona la señal, lo que hace en realidad es amplificar la tension X cantidad de veces, porque los potenciometros varian de 0 a 5V en todo su recorrido, es decir en 300º de recorrido, como la palanca de mando solo se mueve 60º la tension solo varia de 0 a 1v.
Los potenciometros estan puestos para que varien de 0 a 1V en sus extremos, ya que de esa manera nos aseguramos de poder amplificar siempre dentro del rango deseado. En realidad recordemos que si usamos trims mecanicos, el valor de 0v lo tenemos que tener siempre que el trim este al maximo para ese lado. Es decir, no habria ajuste posible si ajustamos 0v con la palanca al maximo y el trim al centro.

El circuito con el operacional lo que hace entonces es tener en su entrada una variacion de 0 a 1V y entrega en la salida una variacion de 0 a 3v (ajustada con el preset). Como el AD del PIC es de 10bits las variaciones son de 0 a 1024 cuando la tension varia de 0 a 5V en la entrada del AD.

En nuestro caso como la señal entra al PIC variando de 0 a 3V la variable internamente nos varia de 0 a 615. Es decir, en 60º de recorrido tenemos una resolucion de 615 puntos, por cada grado tenemos un poco mas de 10 puntos, o dicho de otra manera, la resolucion es de un poco mas de una decima de grado. Creeria que es suficiente resolucion para nuestro proposito.

El problema de esta configuracion es que si modificamos el trim para corregir, cuando corramos la palanca para el minimo, este se va a encontrar antes de llegar al extremo, es decir, perdimos rango. La solucion a este tema es hacer la medicion del punto 0v teniendo en cuenta el trim o configurando el potenciometro para que varie desde 0.5v a 3.5v teniendo en cuenta que podremos variar 0.5v desde el trim como decia anteriormente.

Luego hay que tener en cuenta desde el firmware del PIC que nuestras variaciones seran de 0.5V para 1ms y 3,5V para 2ms de canal.
El circuito cuenta con algunas llaves que se conectan en las salidas marcadas como D1, D2, D3 y D4 destinadas originalmente para activar y desactivar el DualRate, otras llaves son CH6 y CH7 las cuales hacen variar de 1ms a 2ms de forma digital los canales en referencia. En particular el pulsador que se agrego para el control del display Pulsa2, necesita una resistencia a masa (R39) la cual sale en el circuito, pero no sale en la placa... Esta resistencia debe ponerse cercana al pulsador ya que no habia mas espacio en la placa.

El circuito tambien contiene una interfaz para la programacion en circuito usando RB6 y RB7 haciendo que sea muy facil reprogramarlo cuantas veces haga falta. Asimismo cuenta con dos salidas que son una visible mediante un led y un buzzer piezoelectrico, el cual mediante señales de audio nos avisa del estado de ejecucion en alguna parte del programa.

Placa

La placa fue pensada para ser lo mas pequeña posible. Pero si algun lector la puede mejorar, bienvenido sea!. La placa es simple faz para simplificar la construccion. Por suerte ya  esta 100% testeada y funcional, esta instalada en el equipo y funciona de maravillas.

 
Circuito impreso y distrubucion de componentes (click para ampliar)

Programa

El programa fue desarrollado en C para PIC, ya tiene incorporado la transmision de 7 canales, de los cuales 4 pueden ser usados con DualRate configurado al 50% desde el firmware, para disminuir la sensibilidad de las palancas de mando a la hora de ser necesario y 2 son digitales para satisfacer funciones que no requieren un movimiento continuo. Como no es necesario usar DualRate en el canal de motor la llave D4 lo que hace es habilitar un fin de carrera para el servo del motor y asi poder usar una llave para cortar el motor. Cuando la llave se activa, el servo tiene el recorrido ilimitado y debe instalarse para que en estas condiciones cierre completamente la entrada de aire al carburador y asi apagar el motor cuando la palanca de mando esta al minimo.

El programa desarrollado tiene al principio una estapa de setup donde si lo prendemos con el pulsador de comando (pulsa1) apretado entramos al modo setup, sino el PIC carga la configuracion que se guardo en memoria EEPROM. La primera vez que se usa, debe setearse por lo menos una vez para que tome los valores de ADC y los guarde en la memoria EEPROM para cuando se prenda la proxima vez.
En esta etapa de setup lo que hacemos es calibrar los maximos y minimos de recorrido para las palancas, ponemos las palancas al maximo y luego al minimo. Escucharemos unos bips que nos indican cuantas veces encuentran un minimo y/o un maximo; dandonos una idea de cuando ya se tomaron los valores extremos.

Calculo del Timer1 para un clock dado usando un prescaler 1:
1 tick = 4 * 1/FClock[Hz]

Para 20MHz tenemos
1tick = 0.2us
500us = 2500 ticks
1000us = 5000 ticks

Para 12MHz tenemos
1tick = 0.33333333us
500us = 1500 ticks
1000us = 3000 ticks

Nota: la posicion de la palanca para el minimo y el maximo depende de como se conecten los potenciometros de mando, se recomienda poner el maximo para cuando se mueven al centro y arriba y el minimo para la posicion mas externa y hacia abajo de cada palanca.

Una vez realizada la calibracion, el programa entra en un bucle infinito donde al principio del mismo se toma lectura de cada uno de los 5 canales analogicos. Durante este proceso de lectura es cuando la salida PPM esta en off durante el tiempo de sincronismo. Tambien en este periodo es cuando se pregunta si alguno de las llaves de DualRate o de los canales digitales fue activada, con la consecuente modificacion de variables que esto requiere.

El programa no funciona con interrupciones como el de Sebastian con el 16F628, este funciona leyendo las entradas analogicas del PIC para tomar lectura de las mismas. De esta manera no es critico el valor del potenciometro a colocar, ya que solo nos interesa la tension que obtenemos a la salida. Con el conversos A/D de 10 bits la entrada de cada canal analogino puede tomar valores de 0 a 1024, para 0 a 5 vots respectivamente.

Ultima version 0.8
Version 0.7 (No guarda en EEPROM)
PrototipoEl prototipo esta armado en una placa multiproposito para soldar, como el circuito es de baja frecuencia exepto en la parte del oscilador del PIC, no hay ningun tipo de problemas en usar estas placas.


Montando los primeros componentes


Regulador de 5V, buzzer, oscilador y algunas cosas mas


Circuito casi terminado, con presets multivueltas (no es un componente critico)


Placa en las primeras pruebas (click para agrandar)

Mediciones

Las mediciones las hice con el osciloscopio por software tomando una base de tiempo de 44KHz para tener mejor resolucion del pulso cuadrado. Los resultados son mas que satisfactorios, la señal es perfectamente cuadrada y sin ningun tipo de distorsion como si me paso con el 4017 y el LM1871.

El hardware que use para tomar la medida es el que sale en esta seccion del sitio. Consiste simplemente en un buffer y unos potenciometros, pero puede perfectamente ser un simple potenciometro conectado a la entrada de mic para atenuar la salida de 5V del PIC.


Salida medida desde el osciloscopio con la placa de sonido


Los primeros canales estaban en 1.5ms ya que
las palancas estaban en su posicion central

Circuito Final:

Como el prototipo anduvo muy bien, hice la version con el circuito impreso, luego de hacerle unas mejoras, pude comprobar que andaba tan bien como la version de desarrollo.

  • Los presets y las resistencias de realimentacion en cada operacional los cambie por 10K
  • las resistencias a masa de los DualRates y ch6/ch7 como de Pulsa_1 las cambie de 10K a 100K


Los presets pueden ser comunes




Instalando los cables dentro de la caja


En este punto ya estaban todos los cables listos para empezar
nuevamente las pruebas.

Cosas para mejorarle a este circuito

  • No todos los canales deben tener Dual Rate, y el mismo debe ser seteado al reves de como es ahora, la maxima defleccion es con el Dual Rate Activado (Corregido en la version 0.7 del firmware)
  • Hace falta una funcion para grabar las memorias de los valores maximos de desplazamiento de las palancas en el modo de testing. Mejorar la parte de seteo para que escriba en la EEPROM (Corregido en la version 0.8)

En una nueva version de la placa

  • Interaccion del menu mediante un display de 16x2 y dos botones
  • Poder acceder a las funciones que setean los canales desde el display
    • Porcentaje de DualRate
    • Invertir Servo
    • End Point
    • SubTrim
    • Mezclas
    • Memorias
  • Switch de entrenador/Alumno
  • Medidor de estado de la bateria
  • Temporizador programable
  • Permitir memorias y mezclas
  • Permitir invertir la señal PPM en el setup

Modificacion para que funcione con display

(Actualizado el 10/03/2009)
 
Esta modificacion es la mas importante desde que se desarrollo el circuito, nos permite seleccionar todos los parametros de configuracion desde el menu con solo dos botones. Dichos botones se llaman OK y CANCEL o SI y NO y en la programacion del firmware lo encontraremos como "pulsa1" y "pulsa2" respectivamente y en lo posible deberian ir colocados debajo del display para que sea mas intuitiva la navegacion por el menu.


El programa para el uso con display es:
rcencoder_v1.5.HEX (compilado)
rcencoder_v1.5.c (fuente)

En mi caso, los puse en un costado alejados del display; no es lo mas recomendable por los motivos que decia mas arriba. Uno de los pulsadores o botones ya lo teniamos desde las primeras versiones y el otro lo sacaremos de uno de los pines libres del puerto C, especificamente de C0 el cual sera configurado como entrada en el seteo general de puertos. Los otros pines que necesitamos son los que controlan el display, los cuales son las lineas de CLOCK; DATA y STROBE. Estas tres lineas controlan en forma serial al display que es de 16 caracteres por 2 lineas. Los pines que usaremos son los del puerto C que estaban cableados a GND


Detalle del "raspado de pistas"


Son 4 pines los que hay que liberar



Los pines los cablearemos de la siguiente manera:
RC0 - Pin 11 - Pulsador 2 - Cable Rojo en la foto
RC1 - Pin 12 - CLK Display - Cable Marron
RC2 - PIn 13 - STR Display - Cable Azul
RC3 - Pin 14 - DAT Display - Cable Violeta

Esta modificacion esta corregida como podran ver en la actual version del circuito y del diagrama de cobre (PCB), asi que no es necesario hacerla de esta forma desprolija si es que lo estan haciendo desde el principio, esta modificacion en la placa es solo para aquellos que tienen la que se publico a principios del 2008.

Una vez que la placa principal del codificador esta en condiciones, procederemos a hacer el siguiente circuito, el cual es el modulo del display propiamente dicho. El cual ademas del mismo display utiliza un CI 74HC595 el cual lo que hace es convertir los datos que son pasados en serie, al display que los recibe en paralelo, permitiendo ahorrar muchos pines del PIC.


Circuito del display

Con el trimpot de 2K lo que se controla es el contraste del display, el cual debe estar en el centro al inicio de nuestras pruebas.

Basicamente este es el menu de opciones que se pueden controlar desde el display.


Mensaje de inicio


Carga la configuracion desde la memoria


Muestra el estado de cada palanca



El maximo es 7500 y el minimo 2500, son los ticks del clock del micro


Esta es la primer pantalla al entrar al menu de configuracion


Durante la configuracion, estos numeros cambian para luego ser grabados en la memoria EEPROM


Menu para invertir canales


Pregunta canal por canal si queremos invertirlo o no


Pantalla donde se muestran los canales invertidos (S) y los que no (N)


Configura la salida PPM, normal o invertida para hacerlo compatible con los diferentes marcas de receptores


Si le ponemos que SI vuelve a preguntar todo desde el principio


Si tienes dudas sobre este circuito por favor pregunta en el foro