Yo comparto mis arhivos en Dropbox.

Comunicación aplicada PIC-PC por puerto serie (RS232)

Al vernos frente a la necesidad de desarrollar una aplicación para la comunicación entre un microcontrolador y la computadora, pensamos en un sistema de control digital de lazo cerrado, y que los datos relevantes de éste proceso sean enviados a la PC y procesados de alguna manera para el monitoreo y control a distancia del proceso.

Para tal fin se montó el control de velocidad de un motor de continua a partir del método de modulación de ancho de pulso (PWM) aprovechando el módulo específico de los PIC16F87X, la herramienta del conversor A/D de 10 bits, y el bloque TX/RX para comunicación serie con la PC. Utilizando además, una Macro editada con Visual Basic como interface para el sistema de adquisición de datos. Seleccionando a la velocidad de referencia, la velocidad real, y el Duty del PWM como los datos relevantes a monitorear, y la velocidad de referencia como la variable a controlar con posibilidad de modificarla a través de la PC.


Hardware:


Para poder controlar éste motor de continua a partir del método de modulación de ancho de pulso, se pensó en montar un sistema que básicamente esté compuesto por:

-El motor a controlar.


- Un motor mucho más pequeño que cumpla la función de transductor de la velocidad del motor a valores de tensión continua, el cual esté vinculado al motor principal a través de algún vínculo mecánico, en éste caso una correa. El valor de tensión que éste motor (que oficia de un pequeño generador) entregue, nos servirá como el “valor actual” medido a comparar con el “valor deseado” el cual se cargará inicialmente en el software, al programar el PIC.



Para poder ser utilizado como transductor, el motorcito debió ser ensayado y se obtuvo las siguientes mediciones (se ensayó alimentando al motor principal con una fuente variable, midiendo el número de revoluciones del motor principal con un tacómetro láser y la tensión en bornes del transductor con un multímetro digital):

TRANSDUCTOR [V]

RPM

RPM/V

3,7

3100

837,83

2,9

2450

844,82

2,26

1870

827,43

2,04

1700

833,33

1,57

1280

815,28

1,03

850

825,24

0,71

560

788,73

0,17

145

852,94



K=828,2[RPM

Siendo K la constante que utilizaremos para relacionar a lo largo del trabajo, las revoluciones del motor principal con la tensión en bornes del transductor.

-Y siendo 2450 r.p.m la velocidad establecida como “deseada” para el giro del motor principal (ya que para esa velocidad, estamos dentro de las tensiones nominales de funcionamiento del motor y en una zona en donde la constante seleccionada es bastante próxima a la real)


- Un motor de las mismas características que el principal, el cual se vinculará mecánicamente, también, al motor principal, para que trabaje como generador, significándole así una carga mecánica al mismo. Y luego, al cargar eléctricamente a éste generador con unas lamparitas incandescentes, producir una carga mecánica variable en el rotor del motor principal. Y así poder ensayar al mismo bajo diversas condiciones.



- El micro controlador que generará la señal de control a partir de comparar la tensión generada por el transductor con el valor de señal de referencia cargado, aumentando o disminuyendo el tiempo de encendido de la señal según sea necesario. En el caso que la velocidad del motor descienda del valor deseado, la tensión del transductor disminuirá, y el PIC comenzará a incrementar el ancho de pulso de la tensión que alimenta al motor hasta que vuelva a igualarse la señal generada por el transductor con el valor programado, y viceversa.

Además transmitirá la cadena de datos que luego será recibida y procesada por la PC a partir de la aplicación.

Aparte, tendrá habilitada la posibilidad de recibir un dato de 8 bits que modifique la velocidad de referencia, lo que se verá traducido en un cambio en la velocidad del giro del motor.

Y esto último será capaz gracias a la transformación de tensiones TTL del PIC a señal RS232 con el uso del integrado MAX232.


CIRCUITO:



Software:

Para el desarrollo del código fuente se pensó en unificar tres tipos de bloques de programa:

-El bloque que se refiere a la implementación de la modulación del ancho de pulso ó PWM.

-El que respecta a la conversión analógica digital a partir de la señal brindada por el

transductor.

-Y el bloque que se refiere a la comunicación con la PC por el puerto RX-TX del PIC.


Bloque PWM:


Para la implementación del bloque PWM se parte por configurar el módulo CCP1 para trabajar en modo PWM emparentándose así con el Timer 2.

A partir del registro PR2 se fijará el período de la señal :


Ts = ctte = (PR2+1) * 4 * Tosc * TMR2 prescaler


En nuestro caso estamos utilizando un cristal de 18.432 MHz y seteamos al PR2 en 255 con el prescaler del TMR2 en 1:1, de manera que resulta en un ciclo de 18 KHz constante (Lo definimos así para poder salir del intervalo audible)


Siendo el CCPR1L el registro que definirá el Duty de la señal (a partir de su registro de sólo lectura CCPR1H), el cual estará siendo continuamente “refrescado” para cumplir con la misión de controlar la velocidad del motor de continua.


Ton = var = CCPR1L * 4 * Tosc * TMR2 prescaler


Luego se configurará el módulo CCP2 en el modo comparación, el cual estará emparentado con el Timer 1 y definirá el período de tiempo (Tk) con el cual se llevará a cabo la interrupción que permita un llamado a conversión analógica digital.

Tk= ctte = CCPR2* Tosc*4*TMR1 Prescaler


En nuestro caso al CCPR2 lo hemos “seteado” en 25.000 (CCPR2H y CCPR2L), y el preescaler del TMR1 se encuentra en 1:1 de manera que resulta un período de detección de velocidad de Tk = 5.42ms (25000*4*(1/18.432Mhz) = 5.42msec).

Y esto es así sabiendo que el conversor A/D precisa de un mínimo de 2*TAD (2*1.6 ms = 3.2 ms) para llevar a cabo una conversión segura, luego: Tk > 2*TAD.

El valor numérico 4 que figura en las expresiones (Ts, Tk y Ton) resulta de haber configurado al TMR1 y al TMR2 en modo síncrono con el reloj interno del PIC (Fosc/4) funcionando ambos como temporizadores.


Habiéndose configurado así el bloque PWM el sistema estará generando continuamente una señal de período constante y Duty fijo hasta que el overflow del TMR1 llame a una conversión analógica digital y como resultado se “refresque” el valor del registro que fija el Duty.



Bloque A/D:


Para programar el bloque del conversor se partió de establecer el reloj del conversor como Fosc/32 ya que esto es lo que recomienda el manual del PIC para cristales de 20 MHz (nosotros trabajamos con uno de 18.342 MHz).

Configuramos a AN0 como la única entrada anlógica, el resultado de la conversión en ADRESH y tomar sólo los 8 bits de mayor peso los cuales serán cotejados con el valor de referencia deseado el cual se encuentra almacenado en la variable SPEED y de la comparación con ésta variable resultará el control sumándole o restándole al valor del registro CCPR1L el valor de la variable CHANGE que en nuestro caso está en 1.


Bloque RX/TX:


Se configuro la comunicación USART en el pic con la posibilidad de enviar y recibir datos de la pc a una velocidad de 9600 Baudios.

Para lograr esto se debió calcular que valor debía ser cargado en el registro SPBRG de la siguiente manera:


BAUD RATE = Fosc/ (16*(X+1))


Despejando X el valor a cargarse en SPBRG es de 119 (decimal).


Una vez configurado esto y mediante un programa escrito en Visual basic para Excel se logra la comunicación pic-pc.


Desde la pc se realiza la adquisición de datos (“duty cicle”, “velocidad del motor en rpm”, “velocidad deseada”) y se puede modificar la velocidad deseada del motor o dicho de otra forma modificar el valor de la variable SPEED en el microcontrolador.


Por favor déjanos tu comentario, nos interesa.
(Si Ud. modificó y/o mejoró alguno de los desarrollos publicados aquí, le rogamos tenga bien en hacérnoslo saber y lo publicaremos en éste mismo medio, muchas gracias)
-FdE-

2 comentarios:

Unknown dijo...

Luciano me parece muy intentesante el blog y me gustaria saber mas de estos temas... saludos Evangelina de Rafaela

Anónimo dijo...

que dato envias desde el pc al pic, vale decir si escribo 80 en el pc que dato recibo o lee el pic ?

Comentarios, al FORO...

Chicos, por las consultas o comentarios, vayamos al FORO asi no tengamos problemas y todos podamos participar...
Alli publiqué unas respuestas.

Entradas populares

guía de empresas