Вы находитесь на странице: 1из 47

Universidad Nacional de Ingeniera

Facultad de Ingeniera Mecnica


Departamento Acadmico de Ingeniera Aplicada
Procesador
Control Digitaldigital de Seales
- MT228-B
Ciclo Acadmico 2016-II
2017-II

CONTROL DE POSICIN DE
UN MOTOR DC MEDIANTE
DSP Y DE UNA INTERFAZ
GRFICA EN C#
Informe de proyecto final

Rey Tapia Diego Cris Ashly 20112584I

Chancafe Valladares Fernando 20144097F

Rmac, 9 de diciembre de 2017


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

NDICE DE TITULOS

ndice de Titulos I

I. Planteamiento del Problema y Objetivos 1

Ii. FUNDAMENTO TERICO 3

1. Motor dc 5

1.1 Definicin 5

1.2 Control 5

1.3 Modelamiento Matemtico 8

2. Mdulo L298N 10

2.1 Modo de Alimentacin 10

2.2 Control del mdulo 11

3. Arduino: 11

4. Convertidos de precuencia a voltaje 12

4.1 LM331 14

4.2 LM2907 15

5. Control PID 16

5.1 Estructura del PID 16

Iii. Desarrollo del Experimento 20

1. Equipo 20

2. Primera Parte: 21

2.1 Objetivos: 21

2.2 Alimentacin del DC y medida de Frec. 21

2.3 Programacin del PWM en el arduino Error! Bookmark not defined.

2.4 Medida del Circuito de driver de potencia Error! Bookmark not defined.

2.5 Medida del Circuito convertidor de frecuencia Error! Bookmark not defined.

3. Parte 2: 23

3.1 Objetivos: 23

3.2 Adquisicin Error! Bookmark not defined.

3.3 Regresin Lineal Error! Bookmark not defined.

Informe de proyecto final I


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

3.4 Escalamiento lineal de la frecuencia de los voltajes:Error! Bookmark not


defined.

3.5 Identificacin paramtrica: Error! Bookmark not defined.

4. Diseo del Controlador Digital PID 25

Iv. Conclusiones 25

Informe de proyecto final II


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

I. INTRODUCCION

El presente proyecto busca realizar el control de posicin de un motor DC mediante el uso


de una interfaz grfica realizada en visual C# y en donde dicha posicin se alcanza con
una velocidad angular constante. En la realizacin de dicho proyecto se utilizaron
materiales tales como DSP, el cual se encarga de realizar el control as como tambin de
gestionar la comunicacin serial. Adems se utiliz un puente H para la generacin del
PWM y finalmente una interfaz grfica para el establecimiento de la referencia as como
tambin para iniciar la captura de datos.

Para este proyecto conocimientos previos de manejos de equipos electrnicos como


motores DC con encoder, funcionamiento a travs de PWM, hallar los voltajes que se
necesitan segn la frecuencia de entrada del encoder,

En este sentido, el presente informe presentara los siguientes captulos:

En el Captulo 1 se abarcara en los conceptos introductores como el planteamiento del


problema a resolver, los objetivos a cumplir, la justificacin de la realizacin del proyecto y
el fundamento terico que permita comprender los componentes a utilizar.

En el Captulo 2 se explicar detalladamente la solucin propuesta, la cual contiene el


diseo mecnico, electrnico, elctrico, del sistema de control y diseo de Software.

En el Captulo 3 se finaliza el informe presentando los resultados, conclusiones,


recomendaciones finales y referencias bibliogrficas para la elaboracin del proyecto

Informe de proyecto final 1


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

CAPITULO 1:

Conceptos Generales

Informe de proyecto final 2


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

II. PLANTEAMIENTO DEL PROBLEMA

Los motores de corriente continua como por ejemplo motores DC WEG ( se puede
observar en la figura 1 ) son concebidos con las ms modernas tecnologas de proyecto,
resultando en mquinas compactas y con excelentes propiedades dinmicas, atendiendo
las ms diversas aplicaciones en las reas de automatizacin y control de procesos.

Las ventajas de los motores DC incluyen un excelente control de la velocidad y la capacidad


de proporcionar alto par a bajas velocidades.

La naturaleza de la carga que se acopla al eje del motor define el comportamiento de esta
mquina. Para el caso de una carga liviana, el motor desarrollara una velocidad
relativamente alta y un par de giro bajo. Por el contrario, si se dispone de una carga pesada
o difcil de mover, el motor se mover a una velocidad menor y entregara ms par, pues
una mayor carga lo exige. Sin embargo, si la carga se mantiene constante, la operacin
del motor tambin se mantendr constante, sin posibilidades de controlar la velocidad
debido a que la tensin de suministro no se ve modificada.

La performance del control planteado en este trabajo depende enormemente del


modelamiento matemtico de la planta, es decir, lo bien que el modelo representa al
sistema del mundo real, si bien se conoce la representacin matemtica de un motor de
CC, la complicacin surge en hacer la identicacion correcta de sus parmetros, y ms
importante an el modelamiento de la persona dentro del vehicul sujeto a las fuerzas
inerciales como consecuencia de los cambios de velocidad y direccin.

Por lo tanto nos hemos planteado controlar la velocidad y posicin del motor DC cuando
este est bajo una carga simtrica y asimtrica.

Informe de proyecto final 3


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

III. OBJETIVOS

General:

Este proyecto busca el desarrollo y la implementacin de un controlador de


velocidad y una posicin del motor de CC. Representar el procesamiento de seal
realizado, la obtencin y desratizacin de la planta, el diseo del controlador y el
ensamblaje final del sistema con la interfaz grfica.

Especficos:

Controlar la velocidad y posicin del motor y observar la diferencia que existen


cuando se trabaja con carga y sin carga cuando el motor DC es puesto en
movimiento.
Desarrollar un programa en Code Composer Studio para el control del motor DC a
travs de un DSP.
Desarrollar un programa en Visual Studio para el entorno visual del control del motor
DC.

Informe de proyecto final 4


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

IV. FUNDAMENTO TERICO

1. MOTOR DC

1.1 Definicin
El motor de corriente continua (denominado tambin motor de corriente directa,
motor CC o motor DC por las iniciales en ingls direct current) es una mquina que
convierte energa elctrica en mecnica, provocando un movimiento rotatorio,
gracias a la accin de un campo magntico. Un motor de corriente continua se
compone principalmente de dos partes. El esttor da soporte mecnico al aparato
y contiene los polos de la mquina, que pueden ser o bien devanado de hilo de
cobre sobre un ncleo de hierro, o imanes permanentes. El rotor es generalmente
de forma cilndrica, tambin devanado y con ncleo, alimentado con corriente
directa a travs de delgas, que estn en contacto alternante con escobillas fijas
(tambin llamadas carbones). El principal inconveniente de estas mquinas es el
mantenimiento, muy costoso y laborioso, debido principalmente al desgaste que
sufren las escobillas o carbones al entrar en contacto con las delgas. Algunas
aplicaciones especiales de estos motores son los motores lineales, cuando ejercen
traccin sobre un riel, servomotores y motores paso a paso. Adems existen
motores de DC sin escobillas (brushless en ingls) utilizados en el aeromodelismo
por su bajo par motor y su gran velocidad. Es posible controlar la velocidad y el par
de estos motores utilizando tcnicas de control de motores de corriente continua.

Fig. 1: Partes de un motor DC

1.2 Control
Las tcnicas de control de motores de corriente continua son herramientas que se
utilizan para controlar la velocidad, el par y el suministro de potencia de los motores
de corriente continua. El control de motores puede llevarse a cabo mediante tiristores
y un conocimiento bsico de electrnica de potencia. La mayora de motores

Informe de proyecto final 5


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

utilizados en la industria se conectan directamente a las lneas de distribucin


elctrica, y se alimentan con corriente alterna o corriente directa. Las terminales de
los devanados del motor se conectan directamente a las lneas de suministro
elctrico, y sus caractersticas de operacin se mantienen inalterables, al tener una
tensin de entrada constante. El motor trabaja en condiciones nominales cuando se
alimenta con la tensin indicada en la placa de operacin, entregando potencia
constante a la carga conectada en el eje.

La naturaleza de la carga que se acopla al eje del motor define el comportamiento de


esta mquina. Para el caso de una carga liviana, el motor desarrollara una velocidad
relativamente alta y un par de giro bajo. Por el contrario, si se dispone de una carga
pesada o difcil de mover, el motor se mover a una velocidad menor y entregara
ms par, pues una mayor carga lo exige. Sin embargo, si la carga se mantiene
constante, la operacin del motor tambin se mantendr constante, sin posibilidades
de controlar la velocidad debido a que la tensin de suministro no se ve modificada.

Existen casos en la industria que requieren el manejo de las caractersticas de


operacin de los motores. Este control se suele hacer mediante tiristores. La
combinacin del motor, los tiristores de control y dems componentes electrnicos
asociados son conocidos como el sistema de control de velocidad, sistema de
accionamiento o sistema de excitacin de motor.

Control de Velocidad en motores DC con PWM

La Modulacin por Ancho de Pulso (PWM o Pulse Width Modulation) es una forma
muy eficaz de establecer cantidades intermedias de potencia elctrica entre la
mxima potencia y apagado. Una fuente de alimentacin con un interruptor de
alimentacin simple proporciona potencia solo cuando est activado. El PWM es una
tcnica relativamente reciente que se ha podido realizar gracias a los modernos
interruptores electrnicos de potencia. Una de las aplicaciones tpicas del PWM:
control de velocidad en motores elctricos.

La aplicacin de la potencia mxima durante cortos periodos de tiempo -el intervalo


del pulso en el que es aplicada- no causa ningn problema en la prctica. De hecho
el PWM permite que se puedan aplicar potencias mximas superiores a las que se
emplean cuando no se hace uso de un PWM, porque la carga a la que se le aplica
esa potencia sufre dicho stress durante pequeos perodos, siempre que el valor
medio que vea la carga sea inferior al permitido por el fabricante. El PWM puede ser
muy prctico.

Informe de proyecto final 6


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig. 2: Modulacin de pulsos PWM

El PWM funciona bien con controles digitales, ya que pueden configurar fcilmente
el ciclo de trabajo dada su naturaleza de encendido/apagado.

El PWM de una seal o fuente de alimentacin consiste en la modulacin de su ciclo


de trabajo, ya sea para transmitir informacin a travs de un canal de comunicaciones
o de controlar la cantidad de energa enviada a una carga. Usa una onda de pulso
rectangular, cuyo ancho de pulso es modulado, dando como resultado la variacin
del valor medio de la forma de onda. Si consideramos una forma de onda de pulso
f(t) con un valor bajo ymin, un valor alto ymax y un ciclo de trabajo D , el valor medio
de la forma de onda es dado por la siguiente funcin.

Fig 3: Comparacin de las seales analgicas y seales PWM

Informe de proyecto final 7


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

1.3 Modelamiento Matemtico


El modelado matemtico del motor de corriente continua requiere de dos
ecuaciones, una ecuacin mecnica y otra ecuacin elctrica. Estas ecuaciones
estn acopladas y se basan en las Leyes de la dinmica y de Kirchhoff,
respectivamente. Por una parte, la ecuacin mecnica modela principalmente el
movimiento del rotor, y por otra parte la ecuacin elctrica modela lo que ocurre en
el circuito elctrico del inducido. Al aplicar una tensin Vi al inducido, circula por l
una corriente Ib y debido a esta corriente, por el rotor, se inducir una fuerza contra
electromotriz (ley de Lenz toda corriente se opone a la causa que la produce) cuyo
valor vendr determinado por la expresin

Siendo la constante de fuerza contra-electromotriz. Aplicando la ley de Ohm, la


tensin til ser:

Remplazando la Ec. (1) en la Ec. (2):

El rotor realizara su movimiento debido al torque electromagntico generado por el


campo magntico que se produce en el estator y a su vez este depender de la
corriente que circula en la armadura, de esta manera la ecuacin es:

Siendo Kp la constante de torque electromagntico. El motor en su movimiento


giratorio arrastra una carga, crendose por lo tanto, un par-motor resultante , y a su
vez se tiene friccin en el sistema que depende de la velocidad a la cual gira el rotor
y este causa un torque que es en sentido opuesto al movimiento, obsrvese esto
en la siguiente figura.

Informe de proyecto final 8


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig 4: Modelo elctrico del motor DC

Estos parmetros segn se pueden observar en la figura son:

Lm : Inductancia de armadura (H)


R m : Resistencia de armadura ()
Vg: Tensin contra electromotriz (V)
Vm : Tensin de entrada (V)
im : Corriente de armadura (A)
K b: Constante contra electromotriz (V.s/rad)
K m : Constante del motor (N.m/A)
Jm : Inercia del motor (Kg-m2)
Bm : Coeficiente de friccin (N.m.s/rad)
f : Torque de friccin (N.m)
L : Torque de carga (N.m)
m : Torque de motor (N.m)
m : Velocidad angular (rad/s)
m : Posicin angular del motor (rad)
n: Coeficiente de reduccin
Adems:
: Torque a la salida de la caja reductora (N.m)
: Posicin angular de a la salida de la caja reductora (rad)

La solucin a las ecuaciones elctricas y electromecnicas del motor DC nos da el


modelo dinmico del sistema.

m (s) Kb
=
Vm (s) (Lm s + R m )(Jm s + Bm ) + K b 2

Sin embargo la inductancia en los motores se puede aproximar a 0 (L_m0),


obteniendo as un modelo dinmico de primer orden:

Informe de proyecto final 9


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

()
=
() + + 2

2. MDULO L298N
El mdulo L298N posee dos canales de Puente H, pudindolos utilizar para controlar
dos motores DC o un motor Pas a Paso, controlando el sentido de giro y velocidad.
Bsicamente est conformado por un driver L298N sus diodos de proteccin y un regulador
de voltaje de 5V(78M05) Su esquema electrnico es el siguiente:

Fig. 5: Esquema electrnico

Posee un conector de 6 pines para ingresar las seales TTL para controlar los
motores, una bornera de tres pines para la alimentacin, y dos borneras de 2 pines para
la salida a los motores.

2.1 Modo de Alimentacin


Utilizando una sola fuente, conectada a la entrada de 12V y con el Jumper para
habilitar el regulador, aclarando que el voltaje de la fuente es el que soporta el
motor. De esta forma la entrada de 5V no debe estar conectada a ninguna fuente,
ya que en este pin estn presentes 5V a travs del regulador interno; pero
puedes utilizar este pin como una salida de 5V, pero sin exceder los 500mA de
consumo. Se recomienda hacer esta conexin para voltajes menores de 12V
para no sobrecalentar el regulador
Utilizando dos fuentes, una de 5V conectada a la entrada de 5V (puede ser los
5V de un Arduino) y otra fuente con el valor del voltaje que trabaja el motor,
conectada al pin de 12V. Para esto se tiene que desconectar el Jumper lo que
deshabilitar al regulador.

Informe de proyecto final 10


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

2.2 Control del mdulo


Para el control del mdulo, los pines ENA, IN1, IN2 correspondes a las entradas
para controlar el MOTOR A (OUT1 y OUT2) De igual manera ENB, IN3, IN4
permiten controlar el MOTOR B (OUT3 y OUT4) ENA y ENB, sirven para habilitar o
deshabilitar sus respectivos motores, generalmente se utilizan para controlar la
velocidad, ingresando una seal de PWM por estos pines. Si no se usan se deben
de conectar los Jumper para que siempre estn habilitados.

Fig. 6: Modulo L298N

3. DSP:
Un procesador digital de seales o DSP es un sistema basado en un procesador o
microprocesador que posee un conjunto de instrucciones, un hardware y un software
optimizados para aplicaciones que requieran operaciones numricas a muy alta
velocidad. Debido a esto es especialmente til para el procesado y representacin de
seales analgicas en tiempo real: en un sistema que trabaje de esta forma (tiempo
real) se reciben muestras, normalmente provenientes de un conversor analgico/digital
(ADC).

Informe de proyecto final 11


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig. 7: Modulo DSP

3.1 Funcionamiento:
Se ha dicho que puede trabajar con seales analgicas, pero el DSP es un sistema
digital, por lo tanto necesitar un conversor analgico/digital a su entrada y
digital/analgico en la salida. Como todo sistema basado en procesador programable
necesita una memoria donde almacenar los datos con los que trabajar y el programa
que ejecuta.

Si se tiene en cuenta que un DSP puede trabajar con varios datos en paralelo y un
diseo e instrucciones especficas para el procesado digital, se puede dar una idea
de su enorme potencia para este tipo de aplicaciones. Estas caractersticas
constituyen la principal diferencia de un DSP y otros tipos de procesadores.

Para adentrar en su funcionamiento se pondr el ejemplo de un filtro: el DSP recibir


valores digitales o samples procedentes de la seal de entrada, calcula qu salida se
obtendr para esos valores con el filtro que se le ha programado y saca esa salida.

La seal entrante entra directamente en un filtro antialiasing para evitar frecuencias


superiores a la muestreada del conversor analgico-digital. Despus se lleva a cabo
el procesado digital en el mdulo DSP, para despus volverse a convertir en
analgico y dar paso a la salida.

3.2 Arquitectura:
Un DSP est diseado teniendo en cuenta las tareas ms habituales del procesado
digital: sumas, multiplicaciones y retrasos (almacenar en memoria).

Los DSP abandonan la arquitectura clsica de Von Neumann, en la que datos y


programas estn en la misma zona de memoria, y apuestan por la denominada
Arquitectura Harvard. En una arquitectura Harvard existen bloques de memoria
fsicamente separados para datos y programas. Cada uno de estos bloques de

Informe de proyecto final 12


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

memoria se direcciona mediante buses separados (tanto de direcciones como de


datos), e incluso es posible que la memoria de datos tenga distinta anchura de
palabra que la memoria de programa (como ocurre en ciertos microcontroladores).

Los elementos bsicos que componen un DSP son:

Conversores en las entradas y salidas


Memoria de datos, memoria de programa y DMA.
MACs: multiplicadores y acumuladores.
ALU: Unidad aritmtico-lgica.
Registros.
PLL: Bucles enganchados en fase.
PWM: Mdulos de control de ancho de pulso.

3.3 Programacin:
Un DSP se puede programar tanto en ensamblador como en C. Cada familia de DSP
tiene su propio lenguaje ensamblador y sus propias herramientas suministradas por
el fabricante. Gracias a la colaboracin entre fabricantes, existen lenguajes de ms
alto nivel (y por lo tanto, ms sencillos y rpidos de usar) que incorporan la capacidad
de programar los DSP, en general pasando por un precompilado automtico en C.
Son los casos de LabVIEW y Matlab.

3.4 Aplicaciones:
Las aplicaciones ms habituales en las que se emplean DSP son el procesado de
audio y vdeo; y cualquier otra aplicacin que requiera el procesado en tiempo real.
Con estas aplicaciones se puede eliminar el eco en las lneas de comunicaciones,
lograr hacer ms claras imgenes de rganos internos en los equipos de diagnstico
mdico, cifrar conversaciones en telfonos celulares para mantener privacidad,
analizar datos ssmicos para encontrar nuevas reservas de petrleo, hace posible las
comunicaciones wireless LAN, el reconocimiento de voz, los reproductores digitales
de audio, los mdems inalmbricos, las cmaras digitales, y una larga lista de
elementos que pueden ser relacionados con el proceso de seales

4. CONVERTIDOS DE FRECUENCIA A VOLTAJE


Los convertidores de frecuencia a voltaje son circuitos integrados que convierten un
voltaje de entrada anlogo en un tren de pulsos cuya frecuencia de salida es
proporcional al nivel de entrada. Se utilizan en aplicaciones de conversin anlogo a
digital donde la velocidad no es un factor crtico, tambin opera como convertidores de

Informe de proyecto final 13


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

frecuencia a voltaje y pueden ser utilizados como convertidores de seales digitales a


anlogas de baja frecuencia.

Dentro de los convertidores de seales de voltaje a frecuencia o de frecuencia a


voltaje se encuentran el LM331 de National semiconductor

Control de velocidad de motores.


Medicin de flujo
Demodulacin de FM
Transmisin de datos.
Aislamiento de sistemas
Enlaces pticos
Interface de transductores con sistemas digitales.
Telemetra de FM de bajo costo.
Aislamiento de seales anlogas
Multiplexacin anloga.

4.1 LM331
Este convertidor de voltaje a frecuencia proporciona la salida un tren de pulsos a una
frecuencia precisamente proporcional al voltaje de entrada aplicado. El LM331 puede
operar con energa suministra tan solo 4.0V y cambia la frecuencia de salida de 1 Hz
a 100 kHz. Es ideal para uso en simple circuito de bajo costo para conversin de
analgico a digital, a largo plazo integracin, modulacin de frecuencia lineal o
demodulacin, conversin de frecuencia a voltaje y muchas otras funciones.

Caractersticas:

Linealidad garantizada: 0.01% mx.


Baja disipacin de potencia: 15 mW a 5 V
Amplio rango de frecuencia de escala completa: 1Hz a 100KHz
Salida de pulso compatible con todas las formas lgicas
Amplio rango dinmico: 100dB min a 10KHz escala completa frecuencia

Informe de proyecto final 14


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig. 8: Diagrama de bloque interno de un LM331

4.2 LM2907
Los dispositivos LM2907 y LM2917 son convertidores monolticos de frecuencia a
voltaje con un amplificador operacional de alta ganancia diseado para operar un
rel, una lmpara u otra carga cuando la frecuencia de entrada alcanza o excede una
velocidad seleccionada. El tacmetro utiliza una tcnica de bomba de carga y ofrece
duplicacin de frecuencia para baja entrada, proteccin de entrada total en dos
versiones (8-pin LM2907 y LM2917), y su salida oscila a tierra para una entrada de
frecuencia cero.

El amplificador operacional es totalmente compatible con el tacmetro y tiene un


transistor flotante como salida. Esta caracterstica permite una carga referida a tierra
o suministro de hasta 50 mA. El colector puede tomarse por encima de VCC hasta
un VCE mximo de 28 V.

Las dos configuraciones bsicas que se ofrecen incluyen un dispositivo de 8 pines


con una entrada de tacmetro con referencia a tierra y una conexin interna entre el
tacmetro de salida y la entrada no inversora del amplificador operacional. Esta
versin es muy adecuada para la conmutacin de frecuencia nica o de frecuencia o
aplicaciones de conversin de frecuencia a voltaje totalmente amortiguadas

Caractersticas:

Interfaces de entrada de tacmetro referenciadas en tierra directamente con


pastillas magnticas de reluctancia variable
Op Amp tiene salida de transistor flotante

Informe de proyecto final 15


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fuente o sumidero de 50 mA para operar rels, solenoides, medidores o LED


Duplicacin de frecuencia para ondulacin baja
El tacmetro tiene histresis incorporada con entrada diferencial o con
referencia a tierra
0.3% Linealidad (Tpica)
El tacmetro con referencia a tierra est completamente protegido contra
daos debidos a oscilaciones sobre la VCC y debajo del suelo

Fig.9: Diagrama del conexin al tacmetro

5. CONTROL PID
La estructura de un controlador PID es simple, aunque su simpleza es tambien su
debilidad, dado que limita el rango de plantas donde pueden controlar en forma satisfactoria
(existe un grupo de planta) inestables que no pueden estabilizadas con ningn miembro de
la familia PID).

5.1 Estructura del PID


Consideremos un lazo de control de una entrada y una salida (SISO) de un grado de
libertad:

Fig. 10: Diagrama en bloques

Informe de proyecto final 16


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Los miembros de la familia de controladores PID, incluyen tres acciones: proporcional


(P), integral (I) y derivativa (D). Estos controladores son los denominados P, I, PI, PD y
PID.

P: accin de control proporcional: da una salida del controlador que es


proporcional al error, es decir: u(t) = KP.e(t),que descripta desde su funcin
transferencia queda:

donde Kp es una ganancia proporcional ajustable. Un controlador proporcional


puede controlar cualquier planta estable, pero posee desempeo limitado y error en
rgimen permanente (off-set).

I: accin de control integral: da una salida del controlador que es proporcional al


error acumulado, lo que implica que es un modo de controlar lento

La seal de control u(t) tiene un valor diferente de cero cuando la seal de error e(t)
es cero. Por lo que se concluye que dada una referencia constante, o
perturbaciones, el error en rgimen permanente es cero.

PI: accin de control proporcional-integral, se define mediante

Donde Ti se denomina tiempo integral y es quien ajusta la accion integral. La funcin


de transferencia resulta:

Con un control proporcional, es necesario que exista error para tener una accion de
control distinta de cero. Con accion integral, un error peque no positivo siempre
nos dara una acci on de control creciente, y si fuera negativo la se nal de control
sera decreciente. Este razonamiento sencillo nos muestra que el error en regimen
permanente sera siempre cero.

Informe de proyecto final 17


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

PID: accin de control proporcional-integral-derivativa, a, esta accin


combinada rene las ventajas de cada una de las tres acciones de control
individuales. La ecuacin de un controlador con esta accin combinada se
obtiene mediante:

y su funcin transferencia resulta:

Informe de proyecto final 18


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

CAPITULO 2:

Explicacin detallada del


Proyecto

Informe de proyecto final 19


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

V. PROPUESTA DE SOLUCION

1. EQUIPO
DSP.
Circuito conversor de frecuencia a voltaje con LM331.
Motor DC de 24V
Mdulo puente-H L298N.
Fuente de laboratorio de 2 salidas reguladas y 1 de 5V.
Multmetro.
Osciloscopio
PC con Studio Composer y Visual C+++.

Fig. 11, Motor DC. Fig. 12, F-V converter LM331.

Figura 13, Tarjeta DSP. Fig. 14: Mdulo puente H L298N.

Informe de proyecto final 20


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig. 15: Fuente de laboratorio. Fig. 16 Multmetro.

Fig. 17: Osciloscopio. Fig.18: PC con Code Composer

2. DISEO MECANICO:
2.1 Requisitos:
El mdulo tiene que ser ligero para transporte puesto que ser utilzado en
ambientes de laboratorio.
Debe tener un ranura especial para acoger el ventilador que permitir
mantener el motor en una temperatura estable.
Debe tener ranuras para la salida de los cables para la conexin a la funete
y al dsp

2.2 Diseo de la carcasa.


Primero se dise en la carcasa la cual acogera al motor con una abertura para la
salida del eje, adems se consider ranura para los cables hacia el DSP, ventilador
y fuente

Informe de proyecto final 21


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig 19 Carcasa de nuestro mdulo

2.3 Diseo del encaje del motor DC


Para que el motor se manteja fijo en la carcasa se diseo un sujetador metalico
que permita que se emperne a la carcasa, evitando que durante el movimiento
pueda moverse de manera lateral.

Fig 20. Encaje del motor

2.4 Diseo de las cargas para el eje de motor


Se realiz el diseo de 2 tipos de cargas, la primera es una carga de forma
octagonal con pernos incrustado para ganar peso y la segunda tiene la forma de
una aleta de aprox. 10 cm de dimetros con forma alargada al final de la cola.

Informe de proyecto final 22


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig 20. Cargas para el eje del motor

2.5 Maquetado e impresin en acrilico


Despues de realizar el diseo final del modulo, se mando a impirmir para despus
ser cortado en material acrlico para su posterior armado y acoplado del motor DC.

Fig. 21: Plano de corte

3. DISEO ELECTRNICO:
3.1 Requisitos:
El hardware a utilizar sea compatibles con el motor DC, la placa DSP y el
modulo LN298

Informe de proyecto final 23


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Realizar pruebas antes de incluirlo al modulo

3.2 Ramas a tratar


El Diseo y Desarrollo Electrnico involucra tres ramas fundamentales de la
tecnologa: el hardware (todo lo que tiene que ver con tarjetas electrnicas, circuitos
impresos o PCB, componentes electrnicos y accesorios), el firmware (son las
instrucciones o programas de muy bajo nivel que por lo general estn en los
microprocesadores, microcontroladores o sistemas embebidos a los que el usuario
comn no puede acceder ni alterar), y el software (programas residentes en
dispositivos tales como computadoras, telfonos inteligentes, tablets, etc.). Por lo
general el software se encuentra instalado en computadoras o servidores o
sistemas compatibles que incluso tienen acceso a la red de internet para enviar
informacin o actualizar a los usuarios. Lo que se espera lograr con el proyecto es
la regulacin precisa de la velocidad, aceleracin constante y amplia bajo cualquier
condicin, aceleracin y/o desaceleracin controlada.

Fig 22. DSP 2833x

3.3 Conexin a realizar


La eletronica a realiza se basa en utilizar una fuente externa fija de 12 v para el
movimiento del motor y una funete variable de 5v para el endocer, el modulo DSP
2833x el cual nos servir para procesar el algoritmo de control, el puente H que
permitra controlar los pulsos del PWM y jumpers para la conexin

Informe de proyecto final 24


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig 23 Conexin electrnica final

4. DISEO ELCTRICO
4.1Requisitos:
En el diseo elctrico lo que se ver es la alimentacin del motor, ya que el resto
es parte electrnico. Al motor lo vamos a alimentar con 12V y lo pondremos un
ventilador para que no se sobrecaliente demasiado.

Los accionamientos de corriente continua, compuestos por convertidores CA/CC y


motor, poseen excelentes propiedades tcnicas de comando y regulacin,
garantizando:

Regulacin precisa de velocidad


Aceleracin constante y amplia bajo cualquier condicin de carga
Aceleracin y/o desaceleracin controlada
Conjugado constante con amplio rango de velocidad y control por la armadura

Informe de proyecto final 25


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

4.2 Conexin Final:


Para realizar la prueba del funcionamiento del circuito se conecto a un arduino para
realziar el control del motor y se trabajo con un script en labview, en lo cual se observo que
la planta trabaja correctamente y no hay error.

Fig 24. Conexin del motor DC

5. DISEO DE SOTFWARE
5.1 Cdigo en Visual C
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace Serial28335
{
public partial class Main : Form
{
byte[] dataTX = new byte[1024];
byte[] dataRX = new byte[1024];
int RxBytes=0;
string RxString;
int TxBytes = 0;
string TxString;
public Main()
{
InitializeComponent();
try
{
serialPuerto.PortName = "COM16";
//serialPuerto.Open();

Informe de proyecto final 26


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

}
catch (Exception ex) { System.Console.WriteLine(ex.ToString()); };
}

private void buttonOpen_Click(object sender, EventArgs e)


{
if (this.buttonOpen.Text == "CONECTAR")
{
if (this.serialPuerto.IsOpen == false)
{
try
{
this.serialPuerto.Open();
}
catch (Exception error)
{
System.Console.WriteLine("Error" + error.ToString());
System.Console.WriteLine(error.Message);
MessageBox.Show("Error de Puerto", "Puerto Ocupado",
MessageBoxButtons.OK);
};
if (this.serialPuerto.IsOpen == true) this.buttonOpen.Text
= "DESCONECTAR";
};
}
else if (this.serialPuerto.IsOpen == true)
try
{
this.serialPuerto.Close();
}
catch (Exception error)
{
System.Console.WriteLine("Error" + error.ToString());
System.Console.WriteLine(error.Message);
MessageBox.Show("Error de Puerto", "Error al cerrar Puerto",
MessageBoxButtons.OK);
};
if (this.serialPuerto.IsOpen == false) this.buttonOpen.Text =
"CONECTAR";
}

private void buttonActualiza_Click(object sender, EventArgs e)


{
uint direccion32 = Convert.ToUInt32(this.textBoxDir.Text, 10);
double vel = Convert.ToDouble(this.textBoxVel.Text);
vel = vel * 1000.00;
uint velw = Convert.ToUInt32(vel);
//uint velocidad = Convert.ToUInt32(this.textBoxVel.Text*1000,
10);
dataTX[0] = 1; //Leer
dataTX[1] = (byte)(direccion32 >> 24 & 0xff);
dataTX[2] = (byte)(direccion32 >> 16 & 0xff);
dataTX[3] = (byte)(direccion32 >> 8 & 0xff);
dataTX[4] = (byte)(direccion32 & 0xff);
dataTX[5] = (byte)(velw >> 24 & 0xff);
dataTX[6] = (byte)(velw >> 16 & 0xff);
dataTX[7] = (byte)(velw >> 8 & 0xff);
dataTX[8] = (byte)(velw & 0xff);
dataTX[9] = 64;
Transmitir(dataTX);
}
private void Transmitir(byte[] datos)

Informe de proyecto final 27


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

{
int i,enviado,recibe;
byte[] actualizaRX = new byte[1];
byte[] actualizaTX = new byte[1];
for (i = 0; i < 9; i++)
{
this.serialPuerto.Write(datos, i, 1);
enviado = datos[i];
actualizaTX[0] = (byte)enviado;
TxDataUpdateBin(actualizaTX);
Thread.Sleep(1);
recibe=this.serialPuerto.ReadByte();
actualizaRX[0] = (byte)recibe;
RxDataUpdateBin(actualizaRX);
if (enviado != recibe) {
System.Console.WriteLine("error de envio");
MessageBox.Show("Error de Comando", "Fall al enviar",
MessageBoxButtons.OK);
return;
};
}
Thread.Sleep(20);
for (i = 0; i < 100; i++)
{
//this.serialPuerto.Write(datos, 9, 1); //Envia el 64

Velocidad.Series["Velocidad"].Points.AddXY(i,i+2);
enviado = datos[9];
actualizaTX[0] = (byte)enviado;
TxDataUpdateBin(actualizaTX);
Thread.Sleep(20);
//recibe = this.serialPuerto.ReadByte();
//dataRX[i] = (byte)recibe;
//actualizaRX[0]=(byte)recibe;
//RxDataUpdateBin(actualizaRX);
}
}
private void RxDataUpdateBin(byte[] bb)
{
string s = "";
foreach (byte i in bb)
{
s += String.Format("{0:X2}", i);
}
RxBytes += s.Length;
RxString = RxString + s;
this.RXContador.Text = RxBytes.ToString();
//this.textBoxRX.Text += this.AtoX(s);
this.textBoxRX.Text = RxString;
return;
}
private void RxDataUpdate(string s)
{

RxBytes += s.Length;
RxString = RxString + s;
this.RXContador.Text = RxBytes.ToString();
this.textBoxRX.Text = AtoX(RxString);
return;
}
/// <summary>
/// Updates the TX byte data info.

Informe de proyecto final 28


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

/// </summary>
private void TxDataUpdate(string s)
{
TxBytes += s.Length;
TxString = TxString + s;
this.TXContador.Text = TxBytes.ToString();
this.textBoxTX.Text += this.AtoX(s);
return;
}
/// <summary>
/// Updates the TX byte byte data info.
/// </summary>
private void TxDataUpdateBin(byte[] bb)
{
string s = "";

foreach (byte i in bb)


{
s += String.Format("{0:X2}", i);
}
TxBytes += s.Length;
TxString = TxString + s;
this.TXContador.Text = TxBytes.ToString();
this.textBoxTX.Text = TxString;//this.AtoX(TxString);
//this.textBoxTX.Text += this.AtoX(s);
return;
}
/// <summary>
/// Converts an ASCII string to hex formatted lines.
/// </summary>
private string AtoX(string asc)
{
int nLines;
int nChars;
int offset;
string hex = "";

// Compute number of hex lines.


if ((asc.Length % 16) > 0)
nLines = asc.Length / 16 + 1;
else
nLines = asc.Length / 16;

// Convert into hex lines.


for (int i = 0; i < nLines; i++)
{
offset = i * 16;
if ((asc.Length - offset) > 16)
nChars = 16;
else
nChars = asc.Length - offset;
hex += this.HexLine(i, asc.Substring(offset, nChars)) + "\r\n";
}
return hex;
}
/// <summary>
/// Converts a 16 byte ASCII string into one hex formatted line.
/// </summary>
private string HexLine(int lNum, string asc)
{
string hex = "";

Informe de proyecto final 29


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

// Copy line to char buffer.


char[] c = new char[16];
asc.CopyTo(0, c, 0, asc.Length);

// Create offset prefix.


hex += String.Format("{0:X4} - {1:X4}", lNum * 16, (lNum + 1) * 16
- 1);
hex += " ";

// Convert chars to hex representation.


for (int i = 0; i < asc.Length; i++)
{
if ((i != 0) && ((i % 4) == 0))
hex += " ";
hex += String.Format("{0:X2}", (int)c[i]);
}

// Add padding.
int nSpaces = 62 - hex.Length;
for (int i = 0; i < nSpaces; i++)
hex += " ";

// Add ASCII to end of line.


for (int i = 0; i < asc.Length; i++)
{
if (((int)c[i] < 32) || ((int)c[i] > 126))
hex += ".";
else
hex += c[i].ToString();
}

// Return hex dump line.


return hex;
}

private void textBoxDir_TextChanged(object sender, EventArgs e)


{

private void Velocidad_Click(object sender, EventArgs e)


{

}
}

Informe de proyecto final 30


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

Fig 24. Interfaz en C

5.2 Cdigo en Code Composer


#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab7.h"
#include "monitorF28335.h"

const float mipi=3.1415926535897932384626433832795;


Uint16 LoopCount;
Uint16 SendChar;
Uint16 ReceivedChar;
void AddrCant(void);
Uint32 Direccion=0;
int16 *memoria=0;
Uint32 Cantidad=0;
int caso=0;
Uint32 j=0;

#define EPWM1_TIMER_TBPRD 2000 // Period register


#define EPWM1_MAX_CMPA 1950
#define EPWM1_MIN_CMPA 50
#define EPWM1_MAX_CMPB 5000
#define EPWM1_MIN_CMPB 50

#define EPWM_CMP_UP 1
#define EPWM_CMP_DOWN 0
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) =
25.0 MHz
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1)
= 25.0 MHz
#define ADC_MODO 0x0 // 1 es simultneo 0 es secuencial
#define ADC_SHCLK 0x1 // S/H ancho en periodos ADC = 2 ciclos ADC
unsigned int i, ij;
float
u,v,ep,epa,kpp,kip,kdp,kip,dt,pr,ip,ipa,p,pa,w,wa,ew,pp,dp,plw,plwa,eplwa,pw,pw
a,wr,epwa,iw,iwa,dw,kpw,kiw,kdw,wmax;
unsigned int ResultadoADC[16];
void main(void)
{
DINT; //deshabilita interrupciones

Informe de proyecto final 31


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

DRTM; //deshabilita interrupciones real time mode


InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitEPwm1Gpio();
InitSciaGpio(); // inicializa los pines scia para ser usados con su
funcin sci
InitPieCtrl(); //inicializa el apoyo de interrupcin de perifricos
IER = 0x0000; //limpia mscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
// ISR para los timers de CPU
EALLOW; // Habilita cambio de registros

PieVectTable.TINT0 = &cpu_timer0_isr; //apuntar a subrutina interrupt de


timer0
PieVectTable.XINT13 = &cpu_timer1_isr;//apuntar a subrutina interrupt
de timer1
PieVectTable.TINT2 = &cpu_timer2_isr;//apuntar a subrutina interrupt
de timer2
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;// Deshabilita cambio de registros
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;
GpioDataRegs.GPASET.bit.GPIO2 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;

GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // EQEP1A = GPIO20 (I)


- Canal A Encoder
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // EQEP1B = GPIO21 (I)
- Canal B Encoder
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; // EQEP1S = GPIO22 (I/O)
- Fin de Carrera
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // EQEP1I = GPIO23 (I/O)
- Index Encoder
EDIS;

EQep1Regs.QDECCTL.bit.QSRC = 0;
EQep1Regs.QDECCTL.bit.SOEN = 0;
EQep1Regs.QDECCTL.bit.SPSEL = 0;
EQep1Regs.QDECCTL.bit.XCR = 0;
EQep1Regs.QDECCTL.bit.IGATE = 0;
EQep1Regs.QDECCTL.bit.QAP = 0;
EQep1Regs.QDECCTL.bit.QBP = 0;
EQep1Regs.QDECCTL.bit.QIP = 0;
EQep1Regs.QDECCTL.bit.QSP = 0;

EQep1Regs.QEPCTL.bit.PCRM=0;
EQep1Regs.QEPCTL.bit.SEI=2; // Inicializa el
contador de posicin cuando hay un
EQep1Regs.QEPCTL.bit.IEI=0; // flanco de subida
en el STROBE (para el efecto rebote)
EQep1Regs.QEPCTL.bit.SWI=0;
EQep1Regs.QEPCTL.bit.SEL=0;
EQep1Regs.QEPCTL.bit.IEL=0;
EQep1Regs.QEPCTL.bit.QPEN=1;
EQep1Regs.QEPCTL.bit.QCLM=0;
EQep1Regs.QEPCTL.bit.UTE=1;
EQep1Regs.QEPCTL.bit.WDE=0;

Informe de proyecto final 32


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

EQep1Regs.QPOSMAX=0xffffffff; //0xffffffff
EQep1Regs.QUPRD=0xffffffff; //0xffffffff
EQep1Regs.QPOSINIT=0;
IniciaEPwm1();
InitAdc(); // inicializa ADC
iniciarRegADC(); // iniciar parmetros propios para el ADC
InitCpuTimers(); // inicializa los Cpu Timers
ConfigCpuTimer(&CpuTimer0, 150, 1000000); // a 150MHz 1000000uSeg =
1segundo
ConfigCpuTimer(&CpuTimer1, 150, 5000); // a 150MHz 4500000uSeg =
4.5segundos
ConfigCpuTimer(&CpuTimer2, 150, 500000); // a 150MHz 100000uSeg =
0.1segundos
CpuTimer0Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
CpuTimer1Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
CpuTimer2Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
//IER |= M_INT3; // Interrupcin 3
//PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

IER = M_INT1| M_INT13; // Interrupciones 1 y 13


IER |= M_INT14; // Aumentar interrupcin 14
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // la interrupcin TINT0 pasa por el
PIE
XIntruptRegs.XNMICR.bit.SELECT= 0; // asegura que TINT1 est conectado
a INT13 y no XNMI
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicializacin de los parmetros del puerto serial A
i=0;
u=6;
ep=0;
epa=0;
kpp=0.5;
kip=0;
kdp=0;
kpw=3;
kiw=0.5;
kdw=0;
pr=0;
wmax=0;
ip=0;
ipa=0;
dt=0.0001;
GpioDataRegs.GPADAT.bit.GPIO2 = 0;
p=0;
pa=0;
w=0;
ew=0;
pp=0;
dp=0;
ij=0;
pw=0;
pwa=0;
wr=0.5;
pw=0;

Informe de proyecto final 33


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

iw=0;
iwa=0;
dw=0;
plw=0;
plwa=0;
eplwa=0;
do{ //hacer loop por lo menos una vez
IteraSerial();
}while(1); //Itera infinitamente
}

void IniciaEPwm1()
{

// Configurar TBCLK
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Determina el periodo
801 TBCLKs
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // La fase es 0
EPwm1Regs.TBCTR = 0x0000; // Contador a cero

// Configurar valores de los Comparadores


EPwm1Regs.CMPA.half.CMPA = 0; // Dar valor al comparador A
EPwm1Regs.CMPB = 0; // Dar valor al comparador B

// Configurar modo de conteo


EPwm1Regs.TBCTL.bit.CTRMODE = 00; // Contar hacia arriba y al llegar al
periodo igual a cero
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Deshabilitar carga de
fase
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; // Tasa del prescalador del
SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 1;

// Configurar shadowing modo de sombra


EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // cargar en cero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Configurar acciones
EPwm1Regs.AQCTLA.bit.CBU = 1; // Set PWM1A en evento A, contar
arriba
EPwm1Regs.AQCTLA.bit.PRD = 1; // Clear PWM1A en evento A, contar
abajo
EPwm1Regs.AQCTLB.bit.CBU = 1; // Set PWM1B en evento B, contar
arriba
EPwm1Regs.AQCTLB.bit.PRD = 1; // Clear PWM1B en evento B,
contar abajo
EPwm1Regs.DBCTL.bit.IN_MODE = 3;
EPwm1Regs.DBRED = 1000;
EPwm1Regs.DBFED = 1000;
EPwm1Regs.DBCTL.bit.POLSEL = 2;
EPwm1Regs.DBCTL.bit.OUT_MODE = 0;

// Interrupcin cuando se cambiaran los valores de comparacin


//EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Seleccionar INT en
evento Zero

Informe de proyecto final 34


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

//EPwm1Regs.ETSEL.bit.INTEN = 1; // Habilitar INT


//EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generar INT en el 3er
evento

interrupt void cpu_timer0_isr(void)


{
CpuTimer0.InterruptCount++;
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1; //alterna estado del led
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //Reconocer interrupt grupo1
}

interrupt void cpu_timer1_isr(void)


{
CpuTimer1.InterruptCount++;
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; //alterna estado del led
ResultadoADC[0]= AdcRegs.ADCRESULT0 >>4;
ResultadoADC[1]= AdcRegs.ADCRESULT1 >>4;

// El Cpu reconoce solo la interrupcin

i++;

pr = (float)Direccion;
wmax = (float)(Cantidad/1000.00);

p = EQep1Regs.QPOSCNT;

ep = pr - p;
pp = ep*kpp;
ip = ipa + ep*kip*dt;

wr = pp+ip+dp;

if (wr>wmax){
wr=wmax;
}
else{
if (wr<-wmax){
wr=-wmax;
}
}

ew = wr-w;

pw = ew*kpw;
iw = iwa + ew*kiw*dt;

u = pw+iw+dw;

//u=wr;

ipa=ip;

Informe de proyecto final 35


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

pa = p;

iwa=iw;
wa=w;

if (u>12){
u=12;
v=u;
}
if (u<-12){(
u=-12);
v=u;
}
if (u<0){
v=-u;
}
else{
v=u;
}
if (u>=0){
EPwm1Regs.AQCTLA.bit.CBU = 1; // Set PWM1A en evento A,
contar arriba
EPwm1Regs.AQCTLA.bit.ZRO = 2; // Clear PWM1A en evento A,
contar abajo
EPwm1Regs.AQCTLB.bit.CBU = 1; // Set PWM1B en evento B,
contar arriba
EPwm1Regs.AQCTLB.bit.ZRO = 1;
GpioDataRegs.GPADAT.bit.GPIO2 = 1;
}
else{
EPwm1Regs.AQCTLA.bit.CBU = 1; // Set PWM1A en evento A,
contar arriba
EPwm1Regs.AQCTLA.bit.ZRO = 1; // Clear PWM1A en evento A,
contar abajo
EPwm1Regs.AQCTLB.bit.CBU = 1; // Set PWM1B en evento B,
contar arriba
EPwm1Regs.AQCTLB.bit.ZRO = 2;
GpioDataRegs.GPADAT.bit.GPIO2 = 1;
}
/*if ((ep<2) & (ep>-2)){
GpioDataRegs.GPADAT.bit.GPIO2 = 0;
}*/
EPwm1Regs.CMPB=(unsigned int)(v*EPWM1_TIMER_TBPRD /12.0);

EDIS;
}

interrupt void cpu_timer2_isr(void)


{ EALLOW;
CpuTimer2.InterruptCount++;

plw = EQep1Regs.QPOSCNT;
eplwa=plw-plwa;
w=((plw-plwa)/(0.5*3280.00))*6.2814;
plwa=plw;
//ResultadoADC[0]= AdcRegs.ADCRESULT0 >>4;
//ResultadoADC[1]= AdcRegs.ADCRESULT1 >>4;
//AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque de conversin del ADC
// El Cpu reconoce solo la interrupcin

Informe de proyecto final 36


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

EDIS;
}

void iniciarRegADC(void)
{

AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock = 25MHz


AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Modo Secuencial: Ancho del
S/H = (2+ACQ_PS)*ADC clock en ns
// En modo simultneo sera: = (3+ACQ_PS)*ADC clock
en ns
AdcRegs.ADCTRL3.bit.SMODE_SEL = ADC_MODO; // Secuencial
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // No al modo contnuo
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Deshabilitar Override, sin
wrap around ADCRESULT
AdcRegs.ADCCHSELSEQ1.all = 0x3210; // Selecionar canales 0-1-2-
3
AdcRegs.ADCCHSELSEQ2.all = 0x7654;
AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF; // Convertir y guardar 16
canales
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; // No habilitar interrupcin SEQ1
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque inicial del ADC
}

void IniciarSerial(void)
{
scia_fifo_init(); // Inicializa el FIFO del SCI
scia_init(); // Inicializa el lazo de iteracin
SendChar = 0;
}
void IteraSerial(void)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) {
return;
}; // espera por XRDY =1
ReceivedChar = SciaRegs.SCIRXBUF.all; //se lee el byte
SendChar=ReceivedChar; //se guarda en una variable
scia_xmit(SendChar); //se retransmite como ECO para que la PC sepa
caso=ReceivedChar; // se decodifica
switch (caso) { // con el CASE
case 0:
LeerDSP(); // Si el comando es un CERO Leer DSP
break;
case 1:
LeerDSP();
break;
case 2:
LeerDSP();
break;
case 3:
EscribirDSP(); // Si el comando es un TRES Escribir DSP
break;
case 4:
EscribirDSP();
break;
case 5:

Informe de proyecto final 37


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

EscribirDSP();
break;
};
}
void LeerDSP(void)
{
AddrCant(); //Averiguar la Direccin de memoria y cuantos
datos
/*for (j=0;j<Cantidad+1;j++)
{
memoria=0;
SendChar=memoria[Direccion]; // Buscar el dato en memoria
Direccion++;
do{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY
=1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
} while (ReceivedChar!=0x40); // Esperar a que sea el byte
64
scia_xmit(SendChar>>8); //Enviar parte alta del dato
do{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY
=1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all;
} while (ReceivedChar!=0x40); // Esperar a que sea el byte
64
scia_xmit(SendChar); //Enviar parte baja del dato
};*/
}
void EscribirDSP(void)
{
AddrCant();
for (j=0;j<Cantidad+1;j++) // Preparar la cantidad de veces
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY
=1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar); // Enviar ECO
SendChar = ReceivedChar<<8; // Sube el valor recibido a la
parte alta
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY
=1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar); // Enviar ECO
SendChar = SendChar+ ReceivedChar; // Agrega parte baja del
dato
memoria[Direccion]=SendChar; // Graba el valor del dato en
memoria
Direccion++; // Incrementa para la prxima direccin
};
}
void scia_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// modo asncrono, protocolo idle-line
lnea en espera
SciaRegs.SCICCR.bit.SCICHAR = 7;
SciaRegs.SCICTL1.all =0x0003; // Habilitar TX, RX, SCICLK interno,

Informe de proyecto final 38


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

// Deshabilitar RX ERR, SLEEP, TXWAKE


SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA = 0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =0x0028; //a 150mhz
SciaRegs.SCICCR.bit.LOOPBKENA =0; // No habilitar loop back
SciaRegs.SCICTL1.all =0x0023; // SCI fuera de Reset
}
void scia_xmit(int a)
{
SciaRegs.SCITXBUF=a; // Cargar buffer para transmitir
}

void scia_fifo_init()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
}
void AddrCant(void)
{
int i=0;
Direccion=0;
ReceivedChar=0;
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar);// Enviar ECO
Direccion=(Direccion<<8)+ReceivedChar; // Ir agregando Direccin
};
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar);// Enviar ECO
Cantidad=(Cantidad<<8)+ReceivedChar; // Ir agregando Cantidad
};
}

Informe de proyecto final 39


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

CAPITULO 3:

Resultados Finales

Informe de proyecto final 40


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

VI. RESULTADOS

Como resultados del proyecto tenemos:

Se construy una maqueta para el estudio del control de motor DC con 2 cargas, una
circular y una en forma de alabe.
Se logr controlar la velocidad del motor (RPM) gracias al cdigo de DSP.
Se logr mantener al DSP y al motor en un ambiente propicio gracias al ventilador, y
as evitar su sobrecalentamiento.
.

Fig 25. Modelo final con la carga hexagonal

Fig 26. Modelo final con la carga tipo aleta

Informe de proyecto final 41


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

VII. CONCLUSIONES

Los motores DC o de corriente continua se pueden controlar por medio de pulsos


enviados desde el DSP.
Las cargas puestas en el motor ocasionan una ligero torque pero no afecta mucho
en cuento a las revoluciones por minuto.
Un motor elctrico de corriente continua es esencialmente una mquina que
convierte energa elctrica en movimiento o trabajo mecnico, a travs de medios
electromagnticos, que para funcionar se vale de las fuerzas de atraccin y
repulsin que existen entre los polos.
El motor de corriente continua est compuesto de 2 piezas fundamentales: Rotor,
Estator.
El DSP es un dispositivo muy sensible y hay tener mucho cuidado al momento de
hacer conexiones con l, ya que se podra malograr.
Con el puente H podemos controlar el sentido de giro del motor.

Informe de proyecto final 42


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

VIII. RECOMENDACIONES

Es necesario que los materiales a emplearse sean los indicados para que el voltaje
no dae los elementos.
Colocar resistencias en las entradas y salidas del DSP ya que podramos
quemarlos.
Usar los voltajes indicados para no quemas los materiales, no usar voltaje de ms.
Tener cuidado al momento de conectar los cables del motor, ya que una mala
conexin podra ocasionar que el motor se malogre y ya no funcionar.

Informe de proyecto final 43


Control de posicin de un motor dc mediante DSP y de una interfaz grfica en C#

IX. REFERENCIA BIBLIOGRFICA

Diseo de motor DC:


http://www.academia.edu/8657179/Dise%C3%B1o_de_un_control_de_motores_D
C_por_PWM
Motor DC:
https://www.robotshop.com/en/devantech-12v-30-1-gear-motor-encoder.html
DSP 2833x:
http://in.element14.com/texas-instruments/tmdsdock28335/335-experimenter-
kit/dp/1748914
Gua de laboratorio del DSP, Lab-MT

Informe de proyecto final 44

Вам также может понравиться