You are on page 1of 51

1

TABLA DE CONTENIDO

1. TEMA .......................................................................................................................................... 4
2. OBJETIVOS: ............................................................................................................................. 4
2.1. Objetivo General: .................................................................................................................. 4
2.2. Objetivos Especficos: .......................................................................................................... 4
3. DESCRIPCIN DEL PROBLEMA ......................................................................................... 4
4. JUSTIFICACIN DEL PROBLEMA....................................................................................... 5
5. INTRODUCCIN ...................................................................................................................... 5
6. MARCO TERICO ................................................................................................................... 5
6.1. Motor DC ................................................................................................................................ 5
Estator ................................................................................................................................ 6
Rotor ................................................................................................................................... 6
6.2. Tacmetro .............................................................................................................................. 6
6.3. PIC .......................................................................................................................................... 7
6.4. PWM ..................................................................................................................................... 10
6.5. Amplificacin ....................................................................................................................... 11
6.6. Minimizacin de Errores: ................................................................................................... 12
6.6.1. Muestreo ....................................................................................................................... 12
6.6.2. Cuantificacin ............................................................................................................... 13
6.6.3. Codificacin: ................................................................................................................. 13
7. PROCEDIMIENTO ................................................................................................................. 14
7.1. Modelamiento del sistema ................................................................................................. 14
7.1.1. Caractersticas de fbrica del motor del polipasto ................................................. 14
7.1.2. Simulacin del polipasto en SolidWorks .................................................................. 14
7.1.3. Determinacin de la inercia ....................................................................................... 15
7.1.4. Modelamiento de la planta ......................................................................................... 16
7.1.5. Modelamiento del Tacmetro: ................................................................................... 21
7.2. Clculo del controlador: ..................................................................................................... 23
7.3. Clculo del periodo de muestreo: .................................................................................... 28
7.4. Discretizacin del sistema ................................................................................................. 31
7.4.1. Mtodo Analtico .......................................................................................................... 31
2

7.4.1. Mtodo Computacional ............................................................................................... 33
7.5. Minimizacin de los errores .............................................................................................. 33
8. Simulaciones: .......................................................................................................................... 35
8.1. Programacin: ..................................................................................................................... 35
8.1. Simulacin en proteus ....................................................................................................... 50
9. FUENTES DE INFORMACIN ............................................................................................ 50
Webgrafa .................................................................................................................................... 50
Bibliografa: .................................................................................................................................. 51

TABLA DE GRFICOS

Grfico 1.Partes fundamentales de un motor DC ....................................................................... 6
Grfico 2. Tacmetros ..................................................................................................................... 7
Grfico 3. Distribucin de pines del PIC16F877 .......................................................................... 7
Grfico 4. Distribucin de Puertos del PIC16F877 ..................................................................... 8
Grfico 5. Circuito de amplificacin. ............................................................................................ 11
Grfico 6. Visualizacin de la amplificacin en osciloscopio. .................................................. 12
Grfico 7. Muestreo de una seal. ............................................................................................... 12
Grfico 8. Error de cuantificacin para un desnivel constante de los escalones de
cuantificacin. ................................................................................................................................. 13
Grfico 9.Polipasto hecho en SolidWorks vista isomtrica. ..................................................... 14
Grfico 10. Polipasto hecho en SolidWorks vista frontal. ........................................................ 14
Grfico 11. Polipasto hecho en SolidWorks vista isomtrica ................................................. 15
Grfico 12. Datos del polipasto obtenidos en SolidWorks ....................................................... 15
Grfico 13. Modelo bsico del motor DC .................................................................................... 16
Grfico 14. Determinacin de la planta con los datos del motor ............................................ 20
Grfico 15. Diagrama de bloques de la planta el lazo cerrado. .............................................. 20
Grfico 16. Respuesta de la planta en lazo abierto con un step de 5. .................................. 21
Grfico 17. Linealidad de un tacmetro. ..................................................................................... 23
Grfico 18. Diagrama de bloques sistema en lazo cerrado. .................................................... 23
Grfico 19. Diagrama de bloques de la planta en lazo cerrado. ............................................. 24
Grfico 20. Respuesta de la planta en lazo cerrado con un step de 5. ................................. 24
Grfico 21. Diagrama de bloques sistema en lazo cerrado. .................................................... 26
Grfico 22. Diagrama de bloques de la planta con controlador. ............................................. 27
Grfico 23. Respuesta de la planta con controlador en lazo cerrado con un step de 5. .... 27
Grfico 24.Unifiacin de las grficas anteriores. ....................................................................... 28
Grfico 25. Diagrama de bloques del sistema hecho en Simulink. ........................................ 28
Grfico 26. Obtencin de los lmites del periodo de muestreo en Matlab. ............................ 29
Grfico 27. Sistema discreto realimentado ................................................................................ 31
3

Grfico 28. Obtencin del sistetma discretizado con Matlab ................................................... 33
Grfico 29. Diagrama de bloques general de todo el sistema con controlador y
discretizado. .................................................................................................................................... 34
Grfico 30. Zona de control dentro de la simulacin ................................................................ 35
Grfico 31. Diagrama de bloques completo del sistema.......................................................... 35

TABLA DE TABLAS
Tabla 1. Descripcin de los pines del microcontrolador ............................................................. 9
Tabla 2. Respuestas del tacmetro a distintas velocidades angulares. ................................ 21


4

1. TEMA:

Diseo e implementacin de un sistema de control digital de velocidad en lazo
cerrado para el proceso de colado de poliuretano lquido.

2. OBJETIVOS:

2.1. Objetivo General:

Disear un sistema de control discreto de velocidad para el proceso de colado
de poliuretano, empleando para ello un controlador proporcional.

2.2. Objetivos Especficos:

Controlar la velocidad de un motor DC empleando la teora de control en
tiempo continuo y en tiempo discreto.

Hallar una relacin de velocidad rotacional dada por el motor DC y
velocidad lineal que utiliza el proceso de colado de poliuretano.

Emplear un conversor anlogo digital y digital anlogo mediante un PIC
16F877A.

Disear un controlador proporcional capaz de reducir el tiempo de
estabilizacin de la seal de salida de la planta establecida.
Identificar las diferentes etapas del sistema de control tales como planta,
controlador, transductores, actuadores y preactuadores y realizar su
modelamiento matemtico.

Encontrar un sensor acorde a la necesidad de establecer una
realimentacin unitaria y comprobar su linealizacin.

3. DESCRIPCIN DEL PROBLEMA:

Una empresa de produccin requiere que se automatice el sistema de colado del
poliuretano sobre una superficie previamente aceitada. Para esto se deber
controlar la velocidad del motor encargado de mover el sistema de inyeccin del
poliuretano, este sistema incluyendo la riel y el motor se llama polipasto.


5

4. JUSTIFICACIN DEL PROBLEMA:

El poliuretano es un material que consiste en la mezcla entre poliol y difenil
metano dis isacionato en forma lquida, al juntarse de manera homognea, liberan
dixido de carbono y comienza a expandirse y a endurecerse al mismo tiempo, por
lo que se necesita que la inyeccin del mismo sea rpida y se mantenga la misma
velocidad en todo el proceso, debido a que se requieren planchas uniformes. El
poliuretano despus de ser colado pasa a una zona de moldeado, si existe
demasiado poliuretano en una parte de la plancha se tendr desperdicio de
material, y si por el contrario se tiene poco las planchas no tendrn la forma
esperada.

Las planchas requieren tener caractersticas mecnicas uniformes en todo su
largo, esto implica de la misma manera tener la misma cantidad de material en
cada punto del colado.

5. INTRODUCCIN

Para el desarrollo de esta idea, se plantear el modelo matemtico del polipasto a
controlar, el cual consta bsicamente de un motor DC con un sistema de
transmisin mecnica para transformar el movimiento rotacional del rotor en
movimiento lineal, para ello se deber plasmar las ecuaciones que describen su
comportamiento.

Para la etapa de control se emplear un controlador proporcional, el cual definir
la velocidad a la que girar el rotor y directamente definir la velocidad lineal del
polipasto.

Adicionalmente se emplear software que contribuya al desarrollo de este
proyecto, como Proteus, Pic C, FlowCode, SolidWorks y Matlab.

6. MARCO TERICO:

6.1. Motor DC:

Motor de corriente continua, o de corriente directa es una mquina que
convierte la energa elctrica en mecnica, provocando un movimiento
rotatorio, gracias a la accin del campo magntico.

Estos motores se componen de dos partes principales:

6

Estator: El estator da soporte mecnico al aparato y contiene los
devanados principales de la mquina, conocidos tambin con el nombre de
polos, que pueden ser de imanes permanentes o devanados con hilo de
cobre sobre ncleo de hierro.

Rotor: El rotor es generalmente de forma cilndrica, tambin devanado y
con ncleo, alimentado con corriente directa mediante escobillas fijas
(conocidas tambin como carbones).

Grfico 1.Partes fundamentales de un motor DC
1


Algunas aplicaciones especiales de estos motores son los motores lineales,
cuando ejercen traccin sobre un riel, o bien los motores de imanes
permanentes. Los motores de corriente continua (CC) tambin se utilizan en la
construccin de servomotores y motores paso a paso. Adems existen
motores de CD sin escobillas.

Esta mquina de corriente continua es una de las ms verstiles de la
industria. Su fcil control de posicin, par y velocidad le han convertido en una
de las mejores opciones en aplicaciones de control y automatizacin de
procesos.

6.2. Tacmetro:

Los tacmetros son dispositivos electromecnicos que convierten energa
mecnica en energa elctrica. El dispositivo trabaja esencialmente como un
generador de voltaje, con la salida de voltaje proporcional a la magnitud de la
velocidad angular del eje de entrada. En sistemas de control, la mayora de los
tacmetros empleado son de la variedad de corriente directa.


1
Tomado de especialidadenelectronica-nieto.blogspot.com/2012/04/motor-ac-motor-dc-motor-
universal.html
7

Los tacmetros cd se utilizan en diversas formas en sistemas de control;
pueden usarse como indicadores de velocidad para proporcionar una lectura
de la velocidad del eje o proveer realimentacin de velocidad o control de
velocidad o estabilizacin.

Entonces los tacmetros son usados principalmente en: control de velocidad,
control de posicin y lectura de velocidad de un eje giratorio. Los tacmetros
empleados en esta forma se conectan por lo general directamente a un
voltmetro calibrado en revoluciones por minuto (rpm).


Grfico 2. Tacmetros
2


6.3. PIC:

El PIC16F877 es un microcontrolador con memoria de programa tipo FLASH,
lo que representa gran facilidad en el desarrollo de prototipos y en su
aprendizaje ya que no se requiere borrarlo con luz ultravioleta como las
versiones EPROM, sino que permite reprogramarlo nuevamente sin ser
borrado con anterioridad.


Grfico 3. Distribucin de pines del PIC16F877
3



2
Tomado de www.electro-sensors.com/products/speed-sensors/
3
Tomado de www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf
8

El PIC16F877 es un microcontrolador fabricado en tecnologa CMOS, el
encapsulado ms comn para este microcontrolador es el DIP (Dual In-line Pin) de
40 pines, propio para usarlo en experimentacin.

Los pines de entrada/salida de este microcontrolador estn organizados en cinco
puertos, el puerto A con 6 lneas, el puerto B con 8 lneas, el puerto C con 8
lneas, el puerto D con 8 lneas y el puerto E con 3 lneas.


Grfico 4. Distribucin de Puertos del PIC16F877
4


Los pines del puerto A y del puerto E pueden trabajar como entradas para el
convertidor Anlogo a Digital interno, es decir, all se podra conectar una seal
proveniente de un sensor o de un circuito analgico para que el microcontrolador
la convierta en su equivalente digital y pueda realizar algn proceso de control o
de instrumentacin digital.

El consumo de corriente del microcontrolador para su funcionamiento depende del
voltaje de operacin, la frecuencia y de las cargas que tengan sus pines. Para un
oscilador de 4 MHz el consumo es de aproximadamente 2 mA.

4
Tomado de www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf
9


Tabla 1. Descripcin de los pines del microcontrolador
5



5
Tomado de www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf
10

6.4. PWM:

Pulse width modulation o modulacin por ancho de pulsos. Es una tcnica de
modulacin en la que se modifica el ciclo de una seal peridica, ya sea para
transmitir informacin a travs de un canal de comunicaciones o para controlar
la cantidad de energa que se enva a una carga.

El ciclo de trabajo de una seal peridica es el ancho relativo de su parte
positiva en relacin con el perodo. Expresado matemticamente:



Donde: es el ciclo de trabajo.
es el tiempo en que la funcin es positiva (ancho de pulso).
es el periodo de la funcin.

La construccin tpica de un circuito PWM se lleva a cabo mediante un
comparador con dos entradas y una salida. Una de las entradas se conecta a
un oscilador de onda dientes de sierra, mientras que la otra queda disponible
para la seal moduladora. En la salida la frecuencia es generalmente igual a la
de la seal dientes de sierra y el ciclo de trabajo est en funcin de la
portadora

La principal desventaja que presentan los circuitos PWM es la posibilidad de
que haya interferencias generadas por radiofrecuencia. stas pueden
minimizarse ubicando el controlador cerca de la carga y realizando un filtrado
de la fuente de alimentacin.

La modulacin por ancho de pulsos es una tcnica utilizada para regular la
velocidad de giro de los motores elctricos de induccin o asncronos.
Mantiene el par motor constante y no supone un desaprovechamiento de la
energa elctrica. Se utiliza tanto en corriente continua como en alterna, como
su nombre lo indica, al controlar: un momento alto (encendido o alimentado) y
un momento bajo (apagado o desconectado), controlado normalmente por
rels (baja frecuencia) o MOSFET o tiristores (alta frecuencia).

La modulacin por ancho de pulsos tambin se usa para controlar
servomotores, los cuales modifican su posicin de acuerdo al ancho del pulso
enviado cada un cierto perodo que depende de cada servo motor. Esta
11

informacin puede ser enviada utilizando un microprocesador como el Z80, o
un microcontrolador (por ejemplo, un PIC 16F877A).

6.5. Amplificacin:

La amplificacin se la hace a la salida del PIC por donde se emite la seal del
PWM, mediante un circuito que consta de un optoacoplador y un transistor
PNP de potencia (TIP127).

Como se indica en la figura, la salida del PIC se conecta a la resistencia
que a su vez se conecta al optoacoplador para que el motor se active junto al
tren de pulsos del PWM.

El optoacoplador trabaja como un rel pero con velocidad de conmutacin
alta, esto nos ayuda a que se mantenga el tiempo del tren de pulsos
generados por el PIC, esto conectado a un transistor trabajando en saturacin
o como switch, lo que genera que se cierre el circuito y el motor gire.


Grfico 5. Circuito de amplificacin.

Para verificar que se est realizando amplificacin en esta etapa se conecta
un osciloscopio que nos permita observan la seal de entrada y la seal de
salida al mismo tiempo

12


Grfico 6. Visualizacin de la amplificacin en osciloscopio.
6.6. Minimizacin de Errores:

La seal anloga que ingresa al controlador debe ser discretizada, dado que
ste es un controlador digital. Entonces ste ser el proceso que sufrir la
seal:

6.6.1. Muestreo:

La seal continua en el tiempo , en su anlisis espectral, tiene una
banda de frecuencias donde es la mayor frecuencia dentro de esa
banda. Cuando se toma los valores de muestra a una frecuencia
sta podr ser reconstruida sin distorsin, para ello se debe cumplir que
.


Grfico 7. Muestreo de una seal.
13

6.6.2. Cuantificacin:

La cuantificacin de la seal consiste en convertir un intervalo de
valores continuos en un valor discreto, para que de esta forma la seal
cuantificada tome valores discretos, dicho en otras palabras la seal
variar a incrementos fijos, entonces en este intervalo los valores que
puede tomar la seal sin cuantificar y La seal cuantificada es uno solo;
por eso se comete un error de cuantificacin ya que la seal
cuantificada vara de la seal original.

Ahora para minimizar el error de cuantificacin en teora se debe hacer
que estos intervalos sean lo ms pequeos posibles pero deben ser
finitos porque en el siguiente paso que es de codificacin hay que
limitar los niveles de tensin de la seal por la cantidad limitada de
cdigos que son binarios, por ello dependen de la cantidad de bits.

6.6.2.1. Error de Cuantificacin:

Cuando la diferencia entre los niveles de incremento, que son
escalones de cuantificacin, es constante, el error tiene la
forma de diente de sierra, si hay un aumento en el desnivel de
estos escalones mayor ser el error de cuantificacin. Por ello
para minimizar el error se requeriran un nmero elevado de
niveles y eso conlleva a un aumento del nmero de bits en el
cdigo digital de la magnitud codificada.


Grfico 8. Error de cuantificacin para un desnivel constante de los escalones de
cuantificacin.
6.6.3. Codificacin:

La relacin entre el tamao del escaln , los niveles de cuantificacin
y la tensin de referencia de la seal , est dada por:



14

En funcin de los niveles de cuantificacin, depender la cantidad de bits de
los cdigos que representan los niveles de tensin de la seal cuantificada.
Se deber cumplir lo siguiente:



Siendo n el nmero de bits del cdigo binario.

7. PROCEDIMIENTO:

7.1. Modelamiento del sistema:

7.1.1. Caractersticas de fbrica del motor del polipasto:

Datasheet del motor polipasto, anexo 2 al final del documento

7.1.2. Simulacin del polipasto en SolidWorks:


Grfico 9.Polipasto hecho en SolidWorks vista isomtrica.

Grfico 10. Polipasto hecho en SolidWorks vista frontal.
15

7.1.3. Determinacin de la inercia:


Grfico 11. Polipasto hecho en SolidWorks vista isomtrica

Grfico 12. Datos del polipasto obtenidos en SolidWorks
16

Datos obtenidos:

[] []

Distancia del centro de gravedad al eje de giro

[]

]

La inercia del motor es sumamente pequea por lo que se considera
despreciable.

7.1.4. Modelamiento de la planta:

El motor DC provee directamente movimiento rotacional y,
adecuadamente acondicionado, movimiento traslacional.

Por este motivo lo hemos seleccionado para su uso en nuestra
aplicacin ya que requerimos obtener una velocidad de desplazamiento
lineal.

El modelo bsico del motor DC se indica en la figura

Grfico 13. Modelo bsico del motor DC
6

Este circuito se puede representar mediante las siguientes ecuaciones:



6
Tomado de www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf
17



Donde se indican los siguientes parmetros:

: Tensin elctrica aplicada al motor.
: Corriente elctrica.
: Fuerza contraelectromotriz o tensin en bornas del
motor
: Momento de inercia del sistema
: Coeficiente de roce
: Constante de fuerza electromotriz
: Resistencia de armadura
: Inductancia de armadura
: Entrada o Fuente de Tensin

: Posicin del eje


: Par de la carga visto desde el eje del motor


: Par de friccin

Para el modelamiento se supone rotor y eje rgidos adems de una
carga inercial en el eje, el motor satisface las ecuaciones de acoplo
electromecnico.



Ya que las constantes del par y la de la fuerza electromotriz son iguales



Adems sabemos que por el modelo clsico de friccin o modelo CVS,
el par de friccin viscosa se puede representar de la siguiente manera:



En donde representa la constante de friccin viscosa.

Con estas definiciones las ecuaciones del motor quedarn
representadas en la forma:
18




En base a la ley de Newton y la ley de Kirchoff, y considerando que el
par de carga es nulo, resultan las siguientes ecuaciones diferenciales
que describen la dinmica del sistema:



Aplicando la transformada de Laplace a las ecuaciones elctrica y
mecnica dadas, e imponiendo condiciones iniciales nulas, se tiene:



Esta expresin relaciona la transformada de Laplace de la salida ,
con la transformada de la Laplace de la entrada .





Despejamos de la segunda ecuacin:



Sustituimos el resultado en la primera ecuacin:





19

]

[

]


[



Por lo que la funcin de transferencia de posicin para el motor de
corriente continua es:

]


Donde la funcin de transferencia del motor quedara

]


Tenemos la posicin para obtener la funcin de transferencia de
velocidad multiplicamos por un integrador

]


Donde simplificando se obtiene



Obteniendo los siguientes datos del datasheet del motor DC

: [

]
: []
: [

]
: []
: []
20


( [

] [] ) [] ( [

])



Cdigo en MatLab para el clculo de la funcin de transferencia con los
parmetros obtenidos en el data sheet del motor marca Brushless DC
Motor serie BLY17 Series, modelo BLY171D-24V-1400 que tiene como
voltaje nominal 24 voltios y una velocidad mxima de 1400 RPM.

Grfico 14. Determinacin de la planta con los datos del motor

Funcin de transferencia obtenida tras simplificar:





Grfico 15. Diagrama de bloques de la planta el lazo cerrado.
21


Grfico 16. Respuesta de la planta en lazo abierto con un step de 5.
7.1.5. Modelamiento del Tacmetro:

Para este proyecto se decidi implementar un tacmetro acorde a
nuestras necesidades utilizando el microprocesador 16F788A. En
primera instancia el sensor debe cumplir la caracterstica de linealidad
para facilitar los clculos.

El tacmetro deber tener una salida mxima de 5 voltios ya que ese es
el rango mximo que soporta el controlador discreto del sistema de
control ya que se lo realizar en un PIC. Para facilitar los clculos el
tacmetro tendr la siguiente respuesta:

Seal de Entrada Velocidad Angular (W) Seal de Salida Voltaje (V)
0 0
280 1
560 2
840 3
1120 4
1400 5
Tabla 2. Respuestas del tacmetro a distintas velocidades angulares.
Su ecuacin caracterstica obedecer a la de una recta:



Donde : Pendiente de la recta
: Desplazamiento en el eje de las ordenadas

Calculando la pendiente:
22










Como no existe desplazamiento en el eje de las ordenadas:



As pues la ecuacin caracterstica del tacmetro es:



Ahora para sacar el modelo matemtico del tacmetro, se debe definir la
ecuacin caracterstica en el dominio de la frecuencia s que es el dominio
de Laplace, pero previamente se debe haber pasado al dominio temporal.

La ecuacin caracterstica en el dominio del tiempo es:



Aplicando Transformada de Laplace se obtiene:



Entonces la funcin de transferencia del tacmetro es:



Determinar la resolucin del sensor ser importante para minimizar el error
debido a la cuantificacin que se hace de la seal de entrada en el proceso
de digitalizacin para enviarla al controlador que es discreto.
23


Grfico 17. Linealidad de un tacmetro.
7.2. Clculo del controlador:

Como se vio previamente la funcin de transferencia de la planta en es:




Obtenemos la funcin cannica normalizada de segundo orden, esto se
obtiene dividiendo la funcin de transferencia para




Para obtener el valor del controlador

requerido se deber trabajar con la


planta pero en lazo cerrado, es decir con una retroalimentacin en este caso
unitaria.

Grfico 18. Diagrama de bloques sistema en lazo cerrado.

De donde como an no tenemos el controlador, se sabe que:

24





Grfico 19. Diagrama de bloques de la planta en lazo cerrado.


Grfico 20. Respuesta de la planta en lazo cerrado con un step de 5.

Esta ecuacin se debe igualar a la ecuacin general cannica normalizada de
segundo orden



Se tiene la frecuencia natural no amortiguada:



25



El coeficiente de amortiguamiento:




La ganancia esttica del sistema:



Se calculan las races del sistema en lazo cerrado:



Se tiene dos races complejas conjugadas



Por lo tanto se habla de un sistema subamortiguado, y para este tipo de
sistemas se sabe que la frecuencia natural amortiguada es:



Con todos estos datos se puede disear el controlador del sistema en lazo
cerrado, dada la funcin de transferencia en lazo abierto.



26



Grfico 21. Diagrama de bloques sistema en lazo cerrado.
Ahora el controlador por el tipo control a realizarse ser una variable

)


Realizando el mismo procedimiento previamente hecho:



Despejando

de la primera ecuacin y reemplazando en la segunda se


tiene:



Nos imponemos los parmetros a controlar:




(

)


Aplicando logaritmo natural se tiene:



Reemplazando en la ecuacin:
27




Por lo tanto la funcin de transferencia en lazo cerrado de la planta y el
controlador est dada por:




Grfico 22. Diagrama de bloques de la planta con controlador.


Grfico 23. Respuesta de la planta con controlador en lazo cerrado con un step de 5.
En la grfica podemos observar que el error es del 20%, lo que no nos importa
mucho, ya que la velocidad con la que se estabiliza es lo importante
28


Grfico 24. Unificacin de las grficas anteriores.

7.3. Clculo del periodo de muestreo:

Para el clculo del periodo de muestreo se aplica la Teora de Ancho de
Banda

Grfico 25. Diagrama de bloques del sistema hecho en Simulink.
Donde:








La funcin de Transferencia en Lazo cerrado
1
1
Transfer Fcn1
1
157.5s +225s+80.01
2
Transfer Fcn
Step Scope
-K-
Gai n
29




Cdigo realizado en Matlab:


Grfico 26. Obtencin de los lmites del periodo de muestreo en Matlab.



30

Por lo tanto:
[ ]





[]

[

[]

[]
[]


[]





[]

[]

[]


[]
[]


[]

Por lo que el rango del periodo de muestreo queda dado por:



31

Por lo tanto tomamos el periodo de muestreo de:

[]

7.4. Discretizacin del sistema:

7.4.1. Mtodo Analtico:


Grfico 27. Sistema discreto realimentado
La funcin de transferencia en tiempo discreto del sistema ser:


Donde






Retenedor de orden cero ZOH

32



Calculo de B(s)
(




Aplicando fracciones parciales para descomponer obtenemos:



Calculo de :

]







Calculo de :




Como [] (dato obtenido del clculo del periodo de muestreo)
tenemos:




33






Calculo de :









7.4.1. Mtodo Computacional:


Grfico 28. Obtencin del sistetma discretizado con Matlab

7.5. Minimizacin de los errores:

Como se explic en el marco terico, se debe tomar en cuenta el nmero de
bits adecuado para discretizar la seal de entrada al controlador.

34

Para implementar el controlador digital, se emplear el PIC 16F788A que
cuenta con una resolucin digital de 10 bits, entonces el cdigo digital de la
seal discretizada debe ser de 10 bits.

Entonces la relacin entre el tamao del escaln V se traduce como la
sensibilidad del sensor que se debe emplear, es decir el voltaje por cada RPM
sensada. Por ende:




Donde:
: Sensibilidad del Sensor [

: Voltaje de referencia del sensor = 5 V



Entonces



Lo que da una sensibilidad de 0.005 V/RPM.

Por ello para minimizar este error, el sensor debe tener esta sensibilidad que
para el transductor implementado significa que debe medir de 5 en 5 RPM.

8. Diagramas generales y expliaciones:

El sistema como diagrama de bloques de manera general es el siguiente, donde
claramente se puede ver, la entrada step con amplitud de [], el muestreador
con el valor de [] que es el tiempo de muestreo obtenido, el controlador
proporcional

el retenedor de orden cero y la planta en funcin de , la


retroalimentacin para fines de diseo siempre se tomar como uno, siempre y
cuando el sensor sea lineal.


Grfico 29. Diagrama de bloques general de todo el sistema con controlador y discretizado.
35

Para explicar de mejor manera la etapa de control, se muestra en la figura el PWM
que est actuando como preactuador, acondicionando la seal que ir al motor, y
el sensor que ser un tacmetro o encoder incremental, conectado de la manera
como se muestra en la figura

Grfico 30. Zona de control dentro de la simulacin

Al juntar los dos diagramas se tiene el siguiente grfico donde se indica los
elementos a usarse tanto en control como en potencia


Grfico 31. Diagrama de bloques completo del sistema.
9. Simulaciones:

8.1. Programacin:

La programacin est realizada en Flowcode a partir de un diagrama de flujo.

//******************************************************************************
******
//**
//** File name: C:\Users\diegues-pc\Desktop\simulacion\definitivo.c
//** Title:
//** Description:
//**
//** Generated by: Flowcode v5.1.0.0
//** Date: Thursday, May 15, 2014 02:51:02
//** Licence: Professional
//**
//** ***UNREGISTERED***
36

//**
//**
//** http://www.matrixmultimedia.com
//**
//******************************************************************************
******


#define MX_PIC

#define MX_USES_UINT8 1
#define MX_USES_SINT16 0
#define MX_USES_CHAR 0
#define MX_USES_FLOAT 1
#define MX_USES_SINT32 0
#define MX_USES_BOOL 0
#define MX_USES_UINT16 0
#define MX_USES_UINT32 0
//Definiciones para el microcontrolador
#define P16F877A
#define FC_CAL_PIC
#define MX_ADC
#define MX_ADC_TYPE_1
#define MX_ADC_BITS_10
#define MX_EE
#define MX_EE_TYPE2
#define MX_EE_SIZE 256
#define MX_SPI_1
#define MX_SPI_1_MISO_PORT portc
#define MX_SPI_1_MISO_TRIS trisc
#define MX_SPI_1_MISO_PIN 4
#define MX_SPI_1_MOSI_PORT portc
#define MX_SPI_1_MOSI_TRIS trisc
#define MX_SPI_1_MOSI_PIN 5
#define MX_SPI_1_CLK_PORT portc
#define MX_SPI_1_CLK_TRIS trisc
#define MX_SPI_1_CLK_PIN 3
#define MX_SPI_1_SS_PORT portc
#define MX_SPI_1_SS_TRIS trisc
#define MX_UART_1
#define MX_UART_1_TX_PORT portc
#define MX_UART_1_TX_TRIS trisc
#define MX_UART_1_TX_PIN 6
#define MX_UART_1_RX_PORT portc
#define MX_UART_1_RX_TRIS trisc
#define MX_UART_1_RX_PIN 7
#define MX_I2C
#define MX_MI2C
#define MX_I2C_1
#define MX_I2C_1_SDA_PORT portc
#define MX_I2C_1_SDA_TRIS trisc
#define MX_I2C_1_SDA_PIN 4
#define MX_I2C_1_SCL_PORT portc
#define MX_I2C_1_SCL_TRIS trisc
#define MX_I2C_1_SCL_PIN 3
#define MX_PWM
#define MX_PWM_CNT 2
#define MX_PWM_PSCA1
37

#define MX_PWM_PSCA4
#define MX_PWM_PSCA16
#define MX_PWM_1_PORT portc
#define MX_PWM_1_TRIS trisc
#define MX_PWM_1_PIN 2
#define MX_PWM_2_PORT portc
#define MX_PWM_2_TRIS trisc
#define MX_PWM_2_PIN 1

//Funciones
#define MX_CLK_SPEED 4000000
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Datos de configuracin
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3f3a
#endif
#ifdef HI_TECH_C
__CONFIG(0x3f3a);
#endif

//Funciones internas
#include "C:\Program Files (x86)\Flowcode\v5\FCD\internals.c"

//Macro function declarations


//Variable declarations
MX_FLOAT FCV_ENTRADA;
MX_UINT8 FCV_FINAL;
MX_FLOAT FCV_CONTROLADOR;
MX_FLOAT FCV_ERROR;
MX_FLOAT FCV_REALIMENTACION;
MX_UINT8 FCV_SALIDA;




//PWM(0): //Defines:

/**** Macro Substitutions ****
a = Unique Reference
b = PWM Channel - 0=SW / 1-8=HW
c = PWM Alt Pin FCD_PWM0_Enable - 0=Standard / 1=Alt
d = PWM Period
e = PWM Prescaler 1
******************************/

//Period and Prescaler Defines
#ifndef MX_PWM_PERIOD
#define MX_PWM_PERIOD 255
#else
#if (MX_PWM_PERIOD != 255)
38

#error "PWM period value must be the same in all PWM modules"
#endif
#endif

#ifndef MX_PWM_PRESCALE1
#define MX_PWM_PRESCALE1 1
#else
#if (MX_PWM_PRESCALE1 != 1)
#error "PWM prescale value must be the same in all PWM modules"
#endif
#endif

//Definitions for PWM slot allocation
#ifndef MX_PWM_REF1
#define MX_PWM_REF1
#define PWM_1_MX_PWM_UREF 1
#define MX_PWM_CHANNEL_1 1
#define MX_PWM_HWALT_1 0
#else
#ifndef MX_PWM_REF2
#define MX_PWM_REF2
#define PWM_1_MX_PWM_UREF 2
#define MX_PWM_CHANNEL_2 1
#define MX_PWM_HWALT_2 0
#else
#ifndef MX_PWM_REF3
#define MX_PWM_REF3
#define PWM_1_MX_PWM_UREF 3
#define MX_PWM_CHANNEL_3 1
#define MX_PWM_HWALT_3 0
#else
#ifndef MX_PWM_REF4
#define MX_PWM_REF4
#define PWM_1_MX_PWM_UREF 4
#define MX_PWM_CHANNEL_4 1
#define MX_PWM_HWALT_4 0
#else
#ifndef MX_PWM_REF5
#define MX_PWM_REF5
#define PWM_1_MX_PWM_UREF 5
#define MX_PWM_CHANNEL_5 1
#define MX_PWM_HWALT_5 0
#else
#ifndef MX_PWM_REF6
#define MX_PWM_REF6
#define PWM_1_MX_PWM_UREF 6
#define MX_PWM_CHANNEL_6 1
#define MX_PWM_HWALT_6 0
#else
#ifndef MX_PWM_REF7
#define MX_PWM_REF7
#define PWM_1_MX_PWM_UREF 7
#define MX_PWM_CHANNEL_7 1
#define MX_PWM_HWALT_7 0
#else
#ifndef MX_PWM_REF8
#define MX_PWM_REF8
#define PWM_1_MX_PWM_UREF 8
39

#define MX_PWM_CHANNEL_8 1
#define MX_PWM_HWALT_8 0
#else
#ifndef MX_PWM_REF9
#define MX_PWM_REF9
#define PWM_1_MX_PWM_UREF 9
#define MX_PWM_CHANNEL_9 1
#define MX_PWM_HWALT_9 0
#else
#ifndef MX_PWM_REF10
#define MX_PWM_REF10
#define PWM_1_MX_PWM_UREF 10
#define MX_PWM_CHANNEL_10 1
#define MX_PWM_HWALT_10 0
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif

#define PWM_1_PWM_Enable_Channel
CAL_APPEND(FC_CAL_PWM_Enable_Channel_, PWM_1_MX_PWM_UREF)
#define PWM_1_PWM_Disable_Channel
CAL_APPEND(FC_CAL_PWM_Disable_Channel_, PWM_1_MX_PWM_UREF)
#define PWM_1_PWM_Set_Duty_8Bit CAL_APPEND(FC_CAL_PWM_Set_Duty_8Bit_,
PWM_1_MX_PWM_UREF)
#define PWM_1_PWM_Change_Period CAL_APPEND(FC_CAL_PWM_Change_Period_,
PWM_1_MX_PWM_UREF)
#define PWM_1_PWM_Set_Duty_10Bit
CAL_APPEND(FC_CAL_PWM_Set_Duty_10Bit_, PWM_1_MX_PWM_UREF)

extern void PWM_1_PWM_Enable_Channel ();
extern void PWM_1_PWM_Disable_Channel ();
extern void PWM_1_PWM_Set_Duty_8Bit (MX_UINT8 duty);
extern void PWM_1_PWM_Change_Period (MX_UINT8 period, MX_UINT16 prescaler);
extern void PWM_1_PWM_Set_Duty_10Bit (MX_UINT16 duty);




//PWM(0): //Macro function declarations

void FCD_PWM0_Enable();
void FCD_PWM0_Disable();
void FCD_PWM0_SetDutyCycle(MX_UINT8 nDuty);
void FCD_PWM0_ChangePeriod(MX_UINT8 nPeriodVal, MX_UINT8 nPrescalerVal);
void FCD_PWM0_SetDutyCycle10bit(MX_SINT16 nDuty);


//ADC(0): //Defines:

/**** Macro Substitutions ****
a = Unique Reference
40

b = Which ADC Channel
c = Acquisition time
d = Conversion Speed
e = VRef+ Option
f = VRef Voltage x 0.01V
******************************/

//Common Defines

#define ADC_2_MX_ADC_CHANNEL 0
#define ADC_2_MX_ADC_ACTIME 40
#define ADC_2_MX_ADC_CONVSP 7
#define ADC_2_MX_ADC_VREFOP 0
#define ADC_2_MX_ADC_VREFVOL 500

#ifndef MX_ADC_CHANNEL_0
#define MX_ADC_CHANNEL_0 //Inform CAL ADC channel 0 is now in
use.
#endif

#ifndef MX_ADC_REF //Inform CAL ADC peripheral is
now in use
#define MX_ADC_REF
#endif

extern void FC_CAL_Enable_ADC (MX_UINT8 Channel, MX_UINT8 Conv_Speed, MX_UINT8
Vref, MX_UINT8 T_Charge);
extern MX_UINT16 FC_CAL_Sample_ADC (MX_UINT8 Sample_Mode);
extern void FC_CAL_Disable_ADC (void);




//ADC(0): //Macro function declarations

void FCD_ADC0_SampleADC();
MX_UINT8 FCD_ADC0_ReadAsByte();
MX_UINT16 FCD_ADC0_ReadAsInt();
MX_FLOAT FCD_ADC0_ReadAsVoltage();
void FCD_ADC0_ReadAsString(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE);
void FCD_ADC0_ADC_RAW_Configure_Channel();
MX_UINT8 FCD_ADC0_ADC_RAW_Sample_Channel_Byte();
MX_UINT16 FCD_ADC0_ADC_RAW_Sample_Channel_Int();
MX_UINT8 FCD_ADC0_ADC_RAW_Average_Channel_Byte(MX_UINT8 NumSamples, MX_UINT8
DelayUs);
MX_UINT16 FCD_ADC0_ADC_RAW_Average_Channel_Int(MX_UINT8 NumSamples, MX_UINT8
DelayUs);
void FCD_ADC0_ADC_RAW_Disable_Channel();


//ADC(1): //Defines:

/**** Macro Substitutions ****
a = Unique Reference
b = Which ADC Channel
c = Acquisition time
d = Conversion Speed
e = VRef+ Option
41

f = VRef Voltage x 0.01V
******************************/

//Common Defines

#define ADC_3_MX_ADC_CHANNEL 1
#define ADC_3_MX_ADC_ACTIME 40
#define ADC_3_MX_ADC_CONVSP 7
#define ADC_3_MX_ADC_VREFOP 0
#define ADC_3_MX_ADC_VREFVOL 500

#ifndef MX_ADC_CHANNEL_1
#define MX_ADC_CHANNEL_1 //Inform CAL ADC channel 1 is now in
use.
#endif

#ifndef MX_ADC_REF //Inform CAL ADC peripheral is
now in use
#define MX_ADC_REF
#endif

extern void FC_CAL_Enable_ADC (MX_UINT8 Channel, MX_UINT8 Conv_Speed, MX_UINT8
Vref, MX_UINT8 T_Charge);
extern MX_UINT16 FC_CAL_Sample_ADC (MX_UINT8 Sample_Mode);
extern void FC_CAL_Disable_ADC (void);




//ADC(1): //Macro function declarations

void FCD_ADC1_SampleADC();
MX_UINT8 FCD_ADC1_ReadAsByte();
MX_UINT16 FCD_ADC1_ReadAsInt();
MX_FLOAT FCD_ADC1_ReadAsVoltage();
void FCD_ADC1_ReadAsString(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE);
void FCD_ADC1_ADC_RAW_Configure_Channel();
MX_UINT8 FCD_ADC1_ADC_RAW_Sample_Channel_Byte();
MX_UINT16 FCD_ADC1_ADC_RAW_Sample_Channel_Int();
MX_UINT8 FCD_ADC1_ADC_RAW_Average_Channel_Byte(MX_UINT8 NumSamples, MX_UINT8
DelayUs);
MX_UINT16 FCD_ADC1_ADC_RAW_Average_Channel_Int(MX_UINT8 NumSamples, MX_UINT8
DelayUs);
void FCD_ADC1_ADC_RAW_Disable_Channel();



//PWM(0): //Macro implementations


void FCD_PWM0_Enable()
{

PWM_1_PWM_Change_Period (MX_PWM_PERIOD, MX_PWM_PRESCALE1);
PWM_1_PWM_Enable_Channel ();

}

42

void FCD_PWM0_Disable()
{

PWM_1_PWM_Disable_Channel();

}

void FCD_PWM0_SetDutyCycle(MX_UINT8 nDuty)
{

PWM_1_PWM_Set_Duty_8Bit(nDuty);

}

void FCD_PWM0_ChangePeriod(MX_UINT8 nPeriodVal, MX_UINT8 nPrescalerVal)
{

PWM_1_PWM_Change_Period (nPeriodVal, nPrescalerVal);

}

void FCD_PWM0_SetDutyCycle10bit(MX_SINT16 nDuty)
{

PWM_1_PWM_Set_Duty_10Bit(nDuty);

}



//ADC(0): //Macro implementations


void FCD_ADC0_SampleADC()
{

//unused

}

MX_UINT8 FCD_ADC0_ReadAsByte()
{

MX_UINT8 retVal;

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_2_MX_ADC_CHANNEL , ADC_2_MX_ADC_CONVSP ,
ADC_2_MX_ADC_VREFOP , ADC_2_MX_ADC_ACTIME );

retVal = FC_CAL_Sample_ADC( 0 ); //Perform Sample
- Return as byte

FC_CAL_Disable_ADC ();

return (retVal);

}

43

MX_UINT16 FCD_ADC0_ReadAsInt()
{

MX_UINT16 retVal;

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_2_MX_ADC_CHANNEL , ADC_2_MX_ADC_CONVSP ,
ADC_2_MX_ADC_VREFOP , ADC_2_MX_ADC_ACTIME );

retVal = FC_CAL_Sample_ADC( 1 ); //Perform Sample
- Return as MX_UINT16

FC_CAL_Disable_ADC ();

return (retVal);

}

MX_FLOAT FCD_ADC0_ReadAsVoltage()
{

MX_UINT16 iSample;
MX_FLOAT fSample, fVoltage, fVperDiv;

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_2_MX_ADC_CHANNEL , ADC_2_MX_ADC_CONVSP ,
ADC_2_MX_ADC_VREFOP , ADC_2_MX_ADC_ACTIME );

#ifdef MX_ADC_BITS_8
iSample = FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte
#else
iSample = FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16
#endif

FC_CAL_Disable_ADC ();
//Switch off ADC peripheral
fVoltage = float32_from_int32( ADC_2_MX_ADC_VREFVOL );
//Convert reference voltage count to floating point (0 - 500 x 10mV)
fVoltage = float32_mul(fVoltage, 0.01);
//Convert reference voltage count to actual voltage (0 - 5)

#ifdef MX_ADC_BITS_8
fVperDiv = float32_mul(fVoltage, 0.00390625);
//Convert actual voltage to voltage per division (VRef / 256)
#endif
#ifdef MX_ADC_BITS_10
fVperDiv = float32_mul(fVoltage, 0.000976);
//Convert actual voltage to voltage per division (VRef / 1024)
#endif
#ifdef MX_ADC_BITS_12
fVperDiv = float32_mul(fVoltage, 0.00024414);
//Convert actual voltage to voltage per division (VRef / 4096)
#endif

fSample = float32_from_int32(iSample);
//Convert to floating point variable
44

fVoltage = float32_mul(fSample, fVperDiv);
//Calculate floating point voltage

return (fVoltage);

}

void FCD_ADC0_ReadAsString(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE)
{

MX_FLOAT fVoltage;

fVoltage = FCD_ADC0_ReadAsVoltage();
FCI_FLOAT_TO_STRING(fVoltage, 2, FCR_RETVAL, FCR_RETVAL_SIZE);
//Convert to String

}

void FCD_ADC0_ADC_RAW_Configure_Channel()
{

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_2_MX_ADC_CHANNEL , ADC_2_MX_ADC_CONVSP ,
ADC_2_MX_ADC_VREFOP , ADC_2_MX_ADC_ACTIME );

}

MX_UINT8 FCD_ADC0_ADC_RAW_Sample_Channel_Byte()
{

return FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte

}

MX_UINT16 FCD_ADC0_ADC_RAW_Sample_Channel_Int()
{

return FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16

}

MX_UINT8 FCD_ADC0_ADC_RAW_Average_Channel_Byte(MX_UINT8 NumSamples, MX_UINT8
DelayUs)
{

MX_UINT32 average = 0;
MX_UINT8 count;

for (count=0; count<NumSamples; count++)
{
average = average + FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte - add to average

if (DelayUs)
delay_us(DelayUs);
//If delay is not 0 then pause between samples
45

}
average = average / count;

return (average & 0xFF);
//Return average as byte

}

MX_UINT16 FCD_ADC0_ADC_RAW_Average_Channel_Int(MX_UINT8 NumSamples, MX_UINT8
DelayUs)
{

MX_UINT32 average = 0;
MX_UINT8 count;

for (count=0; count<NumSamples; count++)
{
average = average + FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16 - add to average

if (DelayUs)
delay_us(DelayUs);
//If delay is not 0 then pause between samples
}
average = average / count;

return (average & 0x1FFF);
//Return average as MX_SINT16

}

void FCD_ADC0_ADC_RAW_Disable_Channel()
{

FC_CAL_Disable_ADC ();
//Disable ADC Channel

}



//ADC(1): //Macro implementations


void FCD_ADC1_SampleADC()
{

//unused

}

MX_UINT8 FCD_ADC1_ReadAsByte()
{

MX_UINT8 retVal;

//Configure & Enable ADC Channel
46

FC_CAL_Enable_ADC ( ADC_3_MX_ADC_CHANNEL , ADC_3_MX_ADC_CONVSP ,
ADC_3_MX_ADC_VREFOP , ADC_3_MX_ADC_ACTIME );

retVal = FC_CAL_Sample_ADC( 0 ); //Perform Sample
- Return as byte

FC_CAL_Disable_ADC ();

return (retVal);

}

MX_UINT16 FCD_ADC1_ReadAsInt()
{

MX_UINT16 retVal;

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_3_MX_ADC_CHANNEL , ADC_3_MX_ADC_CONVSP ,
ADC_3_MX_ADC_VREFOP , ADC_3_MX_ADC_ACTIME );

retVal = FC_CAL_Sample_ADC( 1 ); //Perform Sample
- Return as MX_UINT16

FC_CAL_Disable_ADC ();

return (retVal);

}

MX_FLOAT FCD_ADC1_ReadAsVoltage()
{

MX_UINT16 iSample;
MX_FLOAT fSample, fVoltage, fVperDiv;

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_3_MX_ADC_CHANNEL , ADC_3_MX_ADC_CONVSP ,
ADC_3_MX_ADC_VREFOP , ADC_3_MX_ADC_ACTIME );

#ifdef MX_ADC_BITS_8
iSample = FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte
#else
iSample = FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16
#endif

FC_CAL_Disable_ADC ();
//Switch off ADC peripheral
fVoltage = float32_from_int32( ADC_3_MX_ADC_VREFVOL );
//Convert reference voltage count to floating point (0 - 500 x 10mV)
fVoltage = float32_mul(fVoltage, 0.01);
//Convert reference voltage count to actual voltage (0 - 5)

#ifdef MX_ADC_BITS_8
fVperDiv = float32_mul(fVoltage, 0.00390625);
//Convert actual voltage to voltage per division (VRef / 256)
47

#endif
#ifdef MX_ADC_BITS_10
fVperDiv = float32_mul(fVoltage, 0.000976);
//Convert actual voltage to voltage per division (VRef / 1024)
#endif
#ifdef MX_ADC_BITS_12
fVperDiv = float32_mul(fVoltage, 0.00024414);
//Convert actual voltage to voltage per division (VRef / 4096)
#endif

fSample = float32_from_int32(iSample);
//Convert to floating point variable
fVoltage = float32_mul(fSample, fVperDiv);
//Calculate floating point voltage

return (fVoltage);

}

void FCD_ADC1_ReadAsString(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE)
{

MX_FLOAT fVoltage;

fVoltage = FCD_ADC1_ReadAsVoltage();
FCI_FLOAT_TO_STRING(fVoltage, 2, FCR_RETVAL, FCR_RETVAL_SIZE);
//Convert to String

}

void FCD_ADC1_ADC_RAW_Configure_Channel()
{

//Configure & Enable ADC Channel
FC_CAL_Enable_ADC ( ADC_3_MX_ADC_CHANNEL , ADC_3_MX_ADC_CONVSP ,
ADC_3_MX_ADC_VREFOP , ADC_3_MX_ADC_ACTIME );

}

MX_UINT8 FCD_ADC1_ADC_RAW_Sample_Channel_Byte()
{

return FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte

}

MX_UINT16 FCD_ADC1_ADC_RAW_Sample_Channel_Int()
{

return FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16

}

MX_UINT8 FCD_ADC1_ADC_RAW_Average_Channel_Byte(MX_UINT8 NumSamples, MX_UINT8
DelayUs)
{
48


MX_UINT32 average = 0;
MX_UINT8 count;

for (count=0; count<NumSamples; count++)
{
average = average + FC_CAL_Sample_ADC( 0 );
//Perform Sample - Return as byte - add to average

if (DelayUs)
delay_us(DelayUs);
//If delay is not 0 then pause between samples
}
average = average / count;

return (average & 0xFF);
//Return average as byte

}

MX_UINT16 FCD_ADC1_ADC_RAW_Average_Channel_Int(MX_UINT8 NumSamples, MX_UINT8
DelayUs)
{

MX_UINT32 average = 0;
MX_UINT8 count;

for (count=0; count<NumSamples; count++)
{
average = average + FC_CAL_Sample_ADC( 1 );
//Perform Sample - Return as MX_UINT16 - add to average

if (DelayUs)
delay_us(DelayUs);
//If delay is not 0 then pause between samples
}
average = average / count;

return (average & 0x1FFF);
//Return average as MX_SINT16

}

void FCD_ADC1_ADC_RAW_Disable_Channel()
{

FC_CAL_Disable_ADC ();
//Disable ADC Channel

}

#include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"

//Macro implementations



void main()
49

{
//Inicializacin
adcon1 = 0x07;


//Cdigo de inicializacin de la interrupciun
option_reg = 0xC0;


//Llamar a Macro de Componente
//Llamar a Macro de Componente: Enable()
FCD_PWM0_Enable();

//Clculo
//Clculo:
// Final = 0
FCV_FINAL = 0;

//Bucle
//Bucle: Mientras 1
while (1)
{

//Llamar a Macro de Componente
//Llamar a Macro de Componente: entrada=LeerComoTensin()
FCV_ENTRADA = FCD_ADC0_ReadAsVoltage();

//Llamar a Macro de Componente
//Llamar a Macro de Componente: realimentacion=LeerComoTensin()
FCV_REALIMENTACION = FCD_ADC1_ReadAsVoltage();

//Decisin
//Decisin: entrada <> 0?
if (!flt_eq(FCV_ENTRADA, 0))
{

//Clculo
//Clculo:
// Error = entrada - realimentacion
FCV_ERROR = flt_sub(FCV_ENTRADA, FCV_REALIMENTACION);

//Clculo
//Clculo:
// controlador = Error * 322
FCV_CONTROLADOR = flt_mul(FCV_ERROR, 322);

//Decisin
//Decisin: controlador <> 0?
if (!flt_eq(FCV_CONTROLADOR, 0))
{

//Clculo
//Clculo:
// Salida = float2int (controlador)
FCV_SALIDA = flt_toi(FCV_CONTROLADOR);

} else {

50

//Clculo
//Clculo:
// Salida = float2int (entrada)
FCV_SALIDA = flt_toi(FCV_ENTRADA);

}

//Clculo
//Clculo:
// Final = Salida * 50
FCV_FINAL = FCV_SALIDA * 50;

// } else {

}

//Llamar a Macro de Componente
//Llamar a Macro de Componente: SetDutyCycle(Final)
FCD_PWM0_SetDutyCycle(FCV_FINAL);

//Demora
//Demora: 100 ms
delay_ms(100);


}

mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}

8.1. Simulacin en proteus:

La simulacin est realizada por partes, como veremos en el anexo 1 a
continuacin cada una de las partes est claramente indicada

10. FUENTES DE INFORMACIN:

Webgrafa:

URL: Motor de corriente continua
es.wikipedia.org/wiki/Motor_de_corriente_continua
Fecha y hora de modificacin: 5 de Mayo de 2014, 14:32
Fecha y hora de consulta: 10 de Mayo de 2014, 13:53

URL: PWM
es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos
Fecha y hora de modificacin: 28 de Enero de 2014, 08:47
51

Fecha y hora de consulta: 10 de Mayo de 2014, 19:11

Bibliografa:

Sistemas de control automtico.
Benjamin C. Kuo.
Sptima Edicin.
Editorial Prentice Hall.
Captulo 4: Modelamiento de sistemas fsicos.
Pgina 166. Tacmetro.

You might also like