Está en la página 1de 3

Implementacin de un controlador difuso

en un PIC16F877A (CCS PIC-C)


Para cambiar un poco de tema respecto al ltimo post, a continuacin se presenta la
implementacin de un controlador difuso en un PIC16F877A para un par motorDCgenerador . El controlador mantiene un valor predeterminado de velocidad y corriente de
armadura para el motor DC, por lo que el controlador realiza una accin de regulacin.
El controlador muestrea las seales de velocidad y corriente de armadura del motor,
determina las acciones de control y provee un voltaje de salida de control a un puente
rectificador controlado que cambiar el nivel de tensin DC que alimenta el motor (para
variar la velocidad) de acuerdo al voltaje de control. El sistema se puede observar en la
figura 1.

Figura 1
Una vez obtenidas las caractersticas de la planta y configuradas las etapas de medicin y
actuacin, se procedi a disear el controlador difuso (con la herramienta fuzzy de Matlab),
definendo para ello las variables lingsticas (velocidad, corriente, voltaje) y sus particiones
correspondientes. ste proceso se observa en la figura 2

Figura 2
Una vez definidas las particiones, se comenz con la implementacin del controlador en el
MCU siguiendo lo siguientes pasos:

Paso 1: Se estableci el mecanismo por el cual las medidas adoptadas por el


controlador seran comunicadas al actuador. El mecanismo elegido fue
comunicacin en paralelo a travs del puerto_B del controlador (salida) y puerto_D
del PIC del actuador (entrada).
Paso 2: Se defini la forma en que seran capturados los datos de entrada al
controlador: La s cariables se capturaran de forma directa a travs del ADC del
MCU. La velocidad por el canal 0 del ADC y la corriente por el canal 1.
Paso 3: Dado el elevado tiempo de respuesta del motor ante los cambios de la
tensin de entrada para sus salidas de corriente y velocidad se estableci el periodo
de muestreo (Ts) del controlador en 10ms, los cuales resultan un tiempo adecuado
para procesar las acciones de control y comunicarlas al actuador.
Paso 4: Se programaron las funciones en C que permitieran hallar el nivel de
pertenencia de una variable u a una particin sobre una variable lingstica. As
mismo, se crearon funciones para hallar el mximo y mnimo entre dos nmeros
pasados como parmetro
Paso 5: Se programaron funciones en C para las particiones difusas de cada variable
lingstica del controlador. La programacin de dichas funciones consisti
esencialmente en proporcionar los parmetros de su funcin de pertenencia.

Paso 6: Se cre una funcin de inicializacin para una matriz FAM que contendra
el conjunto de reglas borrosas a implementar. ste procedimiento se llev a cabo
con el objetivo de implementar la FIS con algoritmos de indexacin y bsqueda en
matrices que proporcionaran mayor velocidad en los clculos de la accin de
control.
Paso 7: Se program el algoritmo de control en la interrupcin por TIMER1 cada
10ms siguiendo el procedimiento descrito a continuacin:
o
o
o

Se capturan las variables de entrada


Se inicializan los vectores de ndice
Se evala la pertenencia de las dos variables de entrada a cada particin
borrosa.
o Se determina qu reglas borrosas estn activas y se guarda el ndice para
localizarlas en la FAM.
o Se guardan las reglas activas en un vector que indica las particiones de
entrada y salida involucradas en la regla.
o Se aplica el criterio MX-MIN en la FIS para determinar el conjunto
borroso de salida.
Se desborrosifica el conjunto de salida a travs del algoritmo de media de centros y
se carga el valor de salida al actuador.