E-Radiocontrol
Circuitos Electronicos de Radio Control





[ Copy this | Start New | Full Size ]




Bienvenido > Circuitos de Radiocontrol > Circuitos Codificadores > Con PIC16F628

Con PIC16F628


PPM con PIC16F628 (Por Sebastian Smuraglia)

El siguiente articulo llego a mi correo de una de las personas que se informo a traves de esta pagina y decidio mejorar el metodo de codificador usando un microcontrolador de Microchip, en este caso se trata del PIC16F628. El desarrollo esta hecho en assembler para PIC y el mismo fue planteado buscando la simplicidad, velocidad y aprovechamiento de los recursos de este micro.

Desarrollo
Les cuento lo que hice... El PIC solo tiene 4 entradas analogicas, pero son para dos comparadores internos, ya que no posee A/D (conversor analógico/digital).


Circuito del generador PPM

Cada canal corresponde al mismo bit del puerto B (1:1, 2:2...7:7); incluso se podría hacer de 8 canales.
La señal base (salida) se obtiene de RA0 (Pin 17).

RA3 (Pin 2) genera la carga de un capacitor (con un terminal a masa) a través de un diodo 1N4148. Dicho capacitor se conecta también a RA2 (Pin 1) -entrada positiva del comparador 2-, desde le mismo punto del diodo, por medio de una resistencia de 33K (fue la que tenía a mano). A RA1 (Pin 18) -entrada negativa del comparador 2- va una tensión de referencia. También al capacitor se conectan los distintos controles (potenciometros) a cada uno de los bits del puerto B.


Descripcion de los pines del PIC16F628

El programa genera, cada 20 ms aproximadamente (mediante el uso del Timer2) un pulso positivo de 500 us sobre RA0 (salida) y RA3 (carga del capacitor), inmediatamente después estas salidas se llevan a masa. También llevo a masa el bit 1 del puerto B (Pin 7) -el resto del puerto B queda configurado como entrada, logrando alta impedancia; esto provoca que el capacitor se descargue a través de la resistencia que lo conecta con el bit 1. Cuando la descarga llega a cierto valor -dado por la referencia del comparador- el comparador genera una interrupcion. Al darse esta situación, el programa vuelve a generar un pulso positivo de 500 us sobre RA0 y RA3, después de esto llevo a masa dichas salidas. Ahora llevo a masa el bit 2 del puerto B (Pin 8) -el resto queda en alta impedancia- y la descarga del capacitor se produce, ahora, por la resistencia conectada entre el capacidor y el bit 2 del puerto B.... Este ciclo se repite con todos los bits del puerto B...

Bajar el programa

Lo probé con osciloscopio y funciona. En vez de utilizar potenciometros, dejé resistencias fijas para los distintos canales, logrando así pulsos de distintos anchos.

El frame está cada 20 ms aproximadamente porque utilice el siguiente cálculo: 7 canales x 2 ms = 14 ms; + 3 canales x 2 ms (sincronismo) = 6 ms; Total de 20 ms;

En un principio lo había hecho con un comparador externo, por eso es que no estoy utilizando el bit 0 del puerto B. Ya que utilizaba ese pin como entrada -porque genera interrupción- y lo conectaba a la salida del comparador.
Pero ahora se podría utilizar ese pin como otro canal más. Para lo cual habría que cambiar el tiempo del frame...

Como verán, tengo todos los pines de entrada/salida ocupados. Con lo cual no se podría, al menos con este PIC, hacerlo programable desde algun control externo.

Hacerlo con este PIC se me ocurrió, mitad porque tengo un par y mitad porque me era más sencillo que armar un circuito más grande en el protoboard ;-)

Habría que calcular el valor de C3 y de los potes y los trimm para que den tiempos de .5 ms y 1.5 ms, ya que el programa genera los otros .5 ms. Yo utilicé un capacitor de 100 nF en C3, deje un valor de resistencia fijo en 5K y un pote cuyo rango dinámico me de 10k.
R1 y R2 hay que calcularlas también, me imagino que con que den un valor de 1V sobre el comparador debería funcionar bien.