Professional Documents
Culture Documents
ESCUELA DE INGENIERIA
SISTEMA MOTOR-INVERSOR
“SENSORLESS” PARA EL ARRANQUE
DE VEHÍCULO HÍBRIDO “PLUG-IN”
Profesor Supervisor:
JUAN W. DIXON ROJAS
II
AGRADECIMIENTOS
III
INDICE GENERAL
DEDICATORIA ............................................................................................................... II
RESUMEN........................................................................................................................ X
1. INTRODUCCIÓN ...................................................................................................... 1
IV
3.6.1. Diagrama de Flujo del Proceso de Control .......................................................... 41
3.6.2. Diagrama de Flujo del Software .......................................................................... 43
4. RESULTADOS EXPERIMENTALES .................................................................... 48
REFERENCIAS ............................................................................................................... 67
ANEXOS ......................................................................................................................... 70
V
ÍNDICE DE TABLAS
Tabla N° 3.1: Selección de sector a partir del análisis de signo de las diferencias en los
máximos de corriente obtenidos....................................................................................... 39
Tabla N° 4.1: Determinación experimental de la relación corriente-velocidad. .............. 54
VI
ÍNDICE DE ILUSTRACIONES
VII
Figura N° 3.7: Inductancia para una fase respecto a la posición del rotor para hierro de
estator no-saturado (inductancia normal) y hierro de estator con saturación (inductancia
menor). ............................................................................................................................. 35
Figura N° 3.8: Casos de alineación del campo magnético del rotor y estator: I) hierro
estator normal y II) hierro estator saturado. ..................................................................... 36
Figura N° 3.9: Procedimiento por fase de aplicación de pulsos de voltaje DC y captura
de corrientes. .................................................................................................................... 37
Figura N° 3.10: Diferencias de corrientes máximas por fase para un ciclo completo. .... 38
Figura N° 3.11: Diagrama de flujo del proceso de arranque del ICE. ............................. 42
Figura N° 3.12: Diagrama de flujo del proceso de arranque del ICE. ............................. 43
Figura N° 3.13: Diagrama de flujo de la calibración de los sensores. ............................. 44
Figura N° 3.14: Diagrama de flujo la interrupción UART byte recibido. ....................... 44
Figura N° 3.15: Diagrama de flujo sección Partida. ........................................................ 45
Figura N° 3.16: Diagrama de flujo de la detección de la posición inicial. ...................... 46
Figura N° 3.17: Diagrama de flujo de la interrupción Término Periodo PWM............... 47
Figura N° 4.1: Capturas del funcionamiento del algoritmo SVPWM sobre una carga RL
a distintas frecuencias: 1, 2, 4 y 64 Hz. ............................................................................ 49
Figura N° 4.2: Capturas de corrientes por fase y voltaje fase-fase aplicados por el
inversor usando el algortimo SVPWM. ........................................................................... 50
Figura N° 4.3: Deformación de la corriente ante pérdida temporal de sincronismo del
PMSM operando como motor alimentado con fuente de voltaje AC. ............................. 51
Figura N° 4.4: Pérdida de sincronismo con inversor operando como fuente de voltaje
con una corriente 100 ARMS. ............................................................................................ 52
Figura N° 4.5: Corrientes de PMSM con inversor operando como fuente de voltaje
controlada por corriente con una magnitud del vector de 100 ARMS. .............................. 53
Figura N° 4.6: Determinación experimental del torque necesario para girar el ICE. ...... 54
Figura N° 4.7: Variación de la inductancia entre fases con la posición del rotor para el
generador PGS150 usado. ................................................................................................ 55
VIII
Figura N° 4.8: Aplicación de un pulso positivo de voltaje entre fases y corriente
alcanzada en la fase "A". .................................................................................................. 56
Figura N° 4.9: Aplicación de un pulso negativo de voltaje entre fases y corriente
alcanzada en la fase "A". .................................................................................................. 56
Figura N° 4.10: Diferencias promedio de corrientes máximas para dos periodos
eléctricos del rotor. ........................................................................................................... 58
Figura N° 4.11: Determinación del sector de posición angular del eje del rotor. ............ 58
Figura N° 4.12: Inductancia entre fases para hierro de estator no-saturado (inductancia
normal) e inductancia reconstruida para hierro de estator con saturación (con 150% de la
corriente nominal). ........................................................................................................... 59
Figura 4.13: Evolución de la temperatura del generador bajo distintos escenarios de
partidas sucesivas. ............................................................................................................ 61
Figura 4.14: Corrientes por fase en generador durante la rampa corriente-velocidad
durante el proceso de partida............................................................................................ 62
Figura 4.15: Corrientes por fase en generador en la etapa de corriente-velocidad
constantes durante el proceso de partida. ......................................................................... 62
IX
RESUMEN
X
Palabras Claves: vehículo híbrido serie, motor síncrono de imanes permanentes,
estimación posición inicial, partida motor de combustión interna, control sensorless.
XI
ABSTRACT
This thesis presents the development and implementation of a sensorless starting system
for an Internal Combustion Engine (ICE) in a plug-in Series Hybrid Electric Vehicle (S-
HEV). Not having starting torque, the ICE needs to be accelerated externally to the start
speed, generally using a direct current electric motor. The developed S-HEV has an
Active Front End (AFE) rectifier. It charges the batteries using the synchronous machine
like a generator. This work elaborates a control that allows the AFE rectifier to use the
permanent magnet synchronous generator as a starting motor momentarily, without extra
hardware. Because this operation requires the instantaneous rotor position, a sensorless
alternative was developed.
The thesis objective is to develop a sensorless control system able to start the ICE using
the generator, overcoming the problems arising from the lack of information of the
angular rotor position and the changing nature of ICE load torque. The work includes the
design and construction of the power electronic and digital control devices required.
The developed solution approach these problems creating a method that combines an
algorithm for detecting the initial angular rotor position of the generator based on the
angular variation of the inductance between phases of the electrical machine with an
inverter control scheme of current-frequency adapted to the load characteristics.
The implemented method achieves the ICE ignition speed avoiding: the reverse rotation
probability, loss of synchronism and thermal damage of generator. It offers simplicity
and robustness features that make it less sensitive to parameters variations in the
generator-ICE set.
XII
1
1. INTRODUCCIÓN
Como se observa en la figura 1.1. el sector transporte utiliza más de la mitad del petróleo
producido en el mundo (U.S. Energy Information Administration, 2011) y en países
como Estados Unidos aproximadamente un 65% de este consumo se destina a gasolina
para motores de combustión interna. Por estas razones, una alta atención se ha
focalizado sobre los vehículos eléctricos e híbridos-eléctricos, gracias a sus bajas o nulas
emisiones y mayores eficiencias.
Carbón
28%
Transporte
54%
Petroleo
34%
Gas Natural Industria
23% 32%
Edificios 3%
Electricidad 2%
Energías Energía
Renovables Nuclear
10% 5%
Sin embargo, el estado actual de desarrollo de los vehículos eléctricos aún no permite
igualar las prestaciones de un automóvil convencional con motor de combustión interna.
El diesel y la gasolina presentan una energía específica cercana a los 12.000 Wh/kg,
mientras que las baterías convencionales de plomo-acido ofrecen sólo 30 Wh/kg, las de
níquel hidruro metálico 85 Wh/kg y las distintas variedades químicas de litio entre 90 y
250 Wh/kg (Read, 2011).
1
El escenario 450 consiste en limitar el contenido de CO2 en la atmósfera a 450 ppm para no incrementar
en más de 2°C la temperatura del planeta sobre los niveles preindustriales.
4
Híbrido Serie
Híbrido Paralelo
Híbrido Serie-paralelo
Es una mezcla de las dos configuraciones anteriores que puede adicionar otros
elementos para mejorar las prestaciones, pero con el consiguiente aumento de la
complejidad y costo. En este sistema el ICE tiene la capacidad de aportar torque
al eje motriz o al generador para cargar las baterías directamente.
6
ICE
Baterías
a) Configuración Serie
ICE
Transmisión
b) Configuración Paralela
ICE
Transmisión
Baterías
c) Configuración Serie-Paralela
Energía Eléctrica
Energía Mecánica
Esta tesis aborda el problema de la puesta en marcha del ICE de un vehículo híbrido
“plug-in”. Los motores de combustión interna no entregan torque a velocidad cero por lo
que necesitan ser llevados a una velocidad de giro mínima para ser puestos en
funcionamiento. En general, para esto utilizan un motor DC con escobillas
exclusivamente para el arranque que: incorpora peso y volumen, incrementa el costo y
requiere mantenimiento.
desde las baterías la corriente alterna necesaria para la operación como motor de la
PMSM.
Figura N° 1.5: Topología del vehículo eléctrico híbrido “plug-in” y flujos de energía.
1.2.1. Hipótesis
1.2.2. Objetivos
1.2.3. Metodología
Para alcanzar estos objetivos, se comenzó con el desarrollo del control del
inversor como fuente controlada de corriente y la programación, principalmente
en lenguaje C, del microcontrolador dsPIC escogido. Una vez realizado el
dimensionamiento térmico y construido el inversor, fueron desarrollados ensayos
con cargas RL en un banco de pruebas para evaluar su desempeño. Un modelo
elaborado en Matlab Simulink permitió probar algoritmos y simular el
11
Con la carga real acoplada (el ICE) se analizó el funcionamiento del inversor
como fuente de voltaje y como fuente de corriente. Se obtuvieron datos
experimentales de la corriente necesaria para mantener el sincronismo durante la
partida analizando la relación torque-velocidad del ICE apagado. Dichas
características se incorporaron al algoritmo de control, revisando la evolución
térmica del generador y del inversor luego de una secuencia de ciclos de partida.
Inicio
Interrupción: Interrupción:
Deshabilita Detención AES Sobretemperatura
Inversor
Control AES
SI NO
indica partida
Detección de la
Posición inicial
Compara
Pulsos de Rampa Corriente-
Valores de
Voltaje Frecuencia
Tabla
Suma
Muestra Selección
Medición Aumenta Mantiene
Ángulo
Corriente Corriente- Corriente-
Inicial
Máxima Frecuencia Frecuencia
Vector
Figura N° 1.6: Diagrama de flujo resumido del proceso de arranque del ICE.
Los capítulos que son expuestos a continuación están separados en dos áreas principales,
la primera describe la electrónica de potencia y control empleada. La segunda se enfoca
en la descripción y justificación de la lógica de control implementada. En un tercer
capítulo se exponen ensayos y resultados. Al final se agrega un capítulo que resume las
conclusiones de la investigación.
13
2. ELECTRÓNICA
En un vehículo serie, la energía producida por el ICE fluye desde el generador hacia los
motores eléctricos de tracción a través de las baterías. En la camioneta del laboratorio, el
enlace entre el generador síncrono de imanes permanentes y las baterías es el
rectificador de frente activo (Active-Front-End: AFE). Este elemento de electrónica de
potencia cuenta con una topología de semiconductores tal que es posible la operación en
los cuatro cuadrantes de potencia compleja. Así, con el control adecuado, este
convertidor permite manejar la magnitud y dirección del flujo de energía eléctrica, tanto
desde las baterías hacia el PMSM en la partida, como desde el PMSM hacia las baterías
durante la operación normal.
Rectificador AFE
UP VP WP
Motores
de
Tracción CV dc PMSM ICE
150 Vdc
UN VN WN
iA iB
Controlador Control
AES Inversor
Inversor
Figura N° 2.1: Electrónica de control y potencia del generador del vehículo híbrido.
14
Como se muestra en la figura 2.1, el rectificador AFE o inversor está constituido por un
módulo de electrónica de potencia, que es básicamente el arreglo de semiconductores de
estado sólido, y la electrónica de control, que implementa la inteligencia del algoritmo
de control midiendo variables y actuando sobre la electrónica de potencia del inversor.
Ambas secciones son comunicadas usando fibra óptica para eliminar una posible
alteración en el funcionamiento del inversor a causa de la interferencia electromagnética
generada, principalmente, por este mismo.
El módulo tiene incorporada la circuitería de control de las compuertas del IGBT y los
circuitos de protección en su interior, sin embargo requiere de un circuito externo de
interface utilizado para las señales de disparo y para la alimentación, que está
implementado en la placa de disparo.
Sensores de
Barra Condensador Corriente
Snubber Generador
DC barra DC
Módulo Intellimod
Circuito de
Disparo
Interfaz
Circuito de
Óptica
Alimentación Fibra Óptica Circuito de
Control
Placa de Disparo
Conector
Generador
Sensores de
Corriente
Fibra Óptica
Snubber
Conector
Condensador Barra DC
Módulo
Placa de Intellimod
Disparo
Este módulo reúne todos los dispositivos de electrónica digital y analógica requerida
para realizar el control del inversor, además de elementos de programación y depuración
de software necesarios para probar los algoritmos implementados. Su núcleo es el
microcontrolador Microchip dsPIC30F4011 que controla los actuadores en base a la
información recibida por los sensores de temperatura y corriente. Fue diseñado para
aplicaciones de conversión de energía y control de motores. Es capaz de operar a 30
MIPS (mega instrucciones por segundo). Su arquitectura de 16 bits contiene un motor
DSP (Digital Signal Processor) capaz de realizar cada una de las operaciones aritméticas
20
Electrónica Digital
Puertos de
Comunicación
UART/
ISCP
U
Emisores V Fibra
Microntrolador PWM
Ópticos W
E Óptica
ADC
iA Sensores de
Fuente de Filtros Pasa Circuito de iB
Corriente y
T
Alimentación Bajos Sensores Temperatura
Electrónica Analógica
3. CONTROL
Una de las diferencias entre un motor y un generador síncrono es que generalmente este
último no incorpora un sensor de posición angular en el eje. Este sensor es
imprescindible para que el generador pueda operar como motor de arranque. Como el
generador utilizado no tiene sensor de posición, se desarrolla una estrategia de control
“sensorless” para usarlo como motor arranque.
Resulta importante conocer la magnitud máxima del torque de carga que opone el ICE
para definir la corriente y tipo de control “sensorless” del generador. El ciclo Otto del
ICE desarrolla los cuatro tiempos del proceso en dos vueltas del cigüeñal o 720°
mecánicos: admisión, compresión, expansión y escape (Pulkrabek, 2004). El motor de
combustión interna usado posee tres cilindros, por lo que la carga en el eje está
compuesta por las suma de la contribuciones iguales de cada pistón desplazadas en 240°.
De la curva de torque de cada pistón, la sección más relevante para el control es la etapa
de compresión, donde el torque de carga alcanza su máximo rápidamente. En este
periodo, el volumen de la mezcla al interior del cilindro se comprime en una relación
8.8:1 (Anexo H). En la figura 3.1 puede verse la curva de torque de cada cilindro y total
modelado en Matlab (Anexo G) en base a los datos del fabricante. Esta curva se ha
24
12 Compresión
9
6
Torque [Nm]
3
0
-3
-6
-9
-12
0 120 240 360 480 600 720
Grados Mecánicos [°]
Figura N° 3.1: Torque de cada cilindro y aporte total al torque de carga para un ciclo
completo sin ignición de 720° mecánicos.
140 70
Corriente Generador [Arms]
A rms Torque
Como el generador es de corriente alterna trifásica, para ser utilizado como motor se
partida necesita, además del algoritmo de control “sensorless”, un dispositivo
electrónico que transforme la tensión continua de las baterías en tensión alterna. Para
ello se diseñó y construyó un inversor trifásico en base a IGBTs (Insulated Gate Bipolar
Transistors), cuya operación permite esa transformación. La conversión dc-ac se realiza
en sincronismo con la información entregada por el sistema “sensorless”. Este mismo
inversor, una vez que el motor de combustión interna comience a operar, trabajará como
rectificador para permitir la carga de las baterías. El inversor trifásico utilizado es del
tipo “fuente de voltaje” controlado por corriente y su topología se muestra en la Fig. 3.3.
(Rodríguez, 2005).
27
UP VP WP
ZA
CV dc ZB
ZC
150 Vdc
UN VN WN
iA iB
Control
Îref PWM
ia,b,c
Figura N° 3.3: Topología de inversor tipo fuente de voltaje controlado por corriente.
vT vM
v*A v*B v*C
VM VT
Control:
t
VM
VT
v(1)A : Fundamental de vA
V(1)A VDC /2
Potencia:
t
V(1)A VDC /2
Figura N° 3.4: Operación control SPWM: portadora triangular (vT), referencia sinusoidal
(vM) y componente fundamental del voltaje vA obtenido (v(1)A).
Por lo tanto, para aplicar un vector de voltaje se seleccionan los vectores de estado
adyacentes y se calcula la magnitud de las componentes S1’ y S2’ de modo de formar
S’. La magnitud de las componentes corresponde al tiempo de aplicación de los vectores
de estado, valores que se traspasan a los registros que guardan los ciclos de trabajo de
los módulos PWM. Por lo tanto, para producir un fasor de voltaje se actualiza en cada
periodo de conmutación la magnitud y ángulo del vector aplicado de acuerdo a voltaje y
frecuencia deseados.
El control de corriente consiste en ajustar la magnitud del vector de voltaje aplicado por
el inversor de acuerdo a las corrientes medidas en las fases del generador. Desde el
punto de vista de la teoría de control: el módulo del vector de corriente es la variable
controlada, la magnitud del vector de voltaje es la variable manipulada, el inversor es el
actuador y el conjunto generador-ICE es la planta. Para obtener el módulo del vector de
corriente es necesario sensar las corrientes de cada fase. Como al conocer las corrientes
de dos fases la tercera queda determinada, sólo se requieren dos sensores de corriente
para calcular este módulo.
Tomando una referencia para la magnitud del vector de corriente y comparándola con el
módulo obtenido con las corrientes medidas, se establece el error que es procesado por
el control proporcional-integral (PI), entregando el nuevo valor de magnitud del vector
de voltaje para la siguiente iteración.
El diagrama de bloques del control implementado puede verse en la figura 3.6. Según se
puede observar, el control de velocidad ocurre en lazo abierto. Dado que hemos
establecido la relación torque mínimo – velocidad requerida para mover el eje, entonces
si los valores de referencia de velocidad y referencia de corriente respetan esta relación
no habrá pérdida de sincronismo, evitando la necesidad de instalación de un sensor de
posición para controlar la máquina síncrona. Luego, la estrategia adoptada en la partida
para mover el ICE es aplicar una rampa de corriente-velocidad para llegar a los 160
RPM requeridos.
31
150 Vdc
CV dc
ω
UN
UP
Referencia de θ
Velocidad SVPWM
VN
VP
|V|
I/O
+ _ PI
WP
WN
Referencia de |Î|
Corriente |Î|
iB
PMSM
T°<110° T°
EG (t ) I r Ler sent
(3.1)
Donde:
Ir es la corriente rotórica.
ω es la velocidad angular.
32
Dado que la magnitud del vector de voltaje modulado de estator es fija sin control de
corriente, la componente oscilatoria del torque de carga afecta los valores ω y Eg de la
ecuación 3.1 produciendo variaciones en la magnitud y ángulo del vector de corriente de
estator, de la cual depende el torque entregado por el PMSM. Estas oscilaciones le
agregan inestabilidad al sistema electromecánico, lo que aumenta la posibilidad de
pérdida de sincronismo y falla en el proceso de partida. Como el control de corriente
compensa las variaciones de corriente entregando un vector de magnitud fija,
contrarresta el efecto de las oscilaciones del ICE, convirtiéndolo en un método de
control mejor adaptado a las características de esta carga.
Si bien se han determinado las condiciones de torque necesarias para mover el ICE
usando el generador a la partida sin pérdida de sincronismo, existe un problema con la
posición inicial con la que el generador comienza a mover el ICE. En un motor a
combustión el sentido de giro del eje es importante en la partida, pues la ignición de la
mezcla ocurre cerca del punto muerto superior (PMS) del pistón. Como en este punto la
biela del pistón se encuentra paralela al brazo del cigüeñal, prácticamente no genera
torque sobre el eje. Por lo tanto, la presión generada en la ignición de la mezcla
inyectada a la cámara de combustión es aprovechada en el sentido de giro que el eje
tenga en ese instante.
motor, el cual no está preparado para evacuar los gases a alta temperatura quemados
durante la explosión de la mezcla.
Por ello, resulta importante conocer la posición inicial del rotor en el proceso de partida.
La mayoría de los métodos de detección de la posición del eje “sensorless” para PMSMs
están basados en la medición de la FEM. En este caso, estos no pueden ser aplicados,
pues cuando el eje está detenido el voltaje inducido en el estator, que es proporcional a
la velocidad, es cero.
Sin embargo, existe otro grupo de métodos de detección de la posición del rotor que
toman ventaja de los cambios que sufre la inductancia de estator al variar la posición
angular del rotor. Estos métodos utilizan información derivada de la ocurrencia de
fenómenos de saturación del hierro y/o variación de la reluctancia del estator (Schroedl,
1988; Matsui, 1996). Usando un estímulo externo, como la aplicación de un patrón de
pulsos de voltaje DC (Tursini et al, 2003), la inyección de una señal de alta frecuencia
(Dae-Woong Chung, 1999), etc., estos métodos buscan generar una respuesta que
permita obtener información útil para la detección del rotor.
34
Los efectos de la posición del rotor sobre la inductancia de fase del estator pueden ser
descritos por la siguiente relación (Boussak, 2005):
2 2
l S L0 L cos 2
L0 L
L cos 2 0 L cos 2
2 3 2 3
2 2
L L0
L cos 2 l S L0 L cos 2
L0
L cos 2
2 3 3 2
2 2
0 L cos 2
L0 L
L cos 2 l S L0 L cos 2
2 3 2 3 (3.2)
Donde:
ls es la inductancia de fuga.
La ecuación 3.2 demuestra que la inductancia de cada fase se comporta como una
componente contínua con una componente sinusoidal que varía con la posición de
manera que ocurren dos periodos por uno del rotor. Esta curva posee una forma que
queda resumida en la ecuación 3.3 (donde LC, L1 y K son constantes):
140
Inducatancia [%]
120
LC L1
100
80
60
40
20
0 60 120 180 240 300 360
Grados Eléctricos[°]
Hierro Estator No-saturado Hierro Estator Saturado
Figura N° 3.7: Inductancia para una fase respecto a la posición del rotor para hierro de
estator no-saturado (inductancia normal) y hierro de estator con saturación (inductancia
menor).
Entonces, la posición inicial del rotor puede ser estimada considerando esta propiedad de
la inductancia, a partir de lo cual varios algoritmos han sido desarrollados. En esta
implementación se utiliza un método simplificado que aprovecha información
proveniente de la saturación intencional del circuito magnético del estator.
Como muestra la figura 3.8, cuando el campo magnético del rotor está alineado con el
campo del estator pueden ocurrir sobre la inductancia dos situaciones:
N B
N
FLUJO
ESTATOR
S = S
S FLUJO N
CORRIENTE II
N + S
N FLUJO
N
I
IMANES
H
S S LI > LII
I) II)
Figura N° 3.8: Casos de alineación del campo magnético del rotor y estator: I) hierro
estator normal y II) hierro estator saturado.
3.4.1. Algoritmo
+imáx Mediciones
A
+VDC de Corriente +
VDC
B C
t
Pulsos de + C B
VDC
Voltaje
-imáx A
-VDC
Esta secuencia es repetida para cada fase y las diferencias obtenidas son
evaluadas usando la tabla 3.1 para establecer el sector donde el rotor se
38
15 I II III IV V VI
Diferencia de corrientes Pico [A]
10
0
0 30 60 90 120 150 180 210 240 270 300 330 360
-5
-10
-15
Grados Eléctricos [°]
Fase A Fase B Fase C
Tabla N° 3.1: Selección de sector a partir del análisis de signo de las diferencias
en los máximos de corriente obtenidos.
Signo de la diferencia
Sector
Fase A Fase B Fase C
I (0°-60°) + + -
II (60°-120°) + - -
III (120°-180°) + - +
IV (180°-240°) - - +
V (240°-300°) - + +
VI (300°-360°) - + -
El torque nominal del generador es 29,16 Nm a 60,5 ARMS. El torque mínimo necesario
para mover el ICE en la partida es 61 Nm. Esto requiere de una corriente de 126.6 A RMS,
excediendo en un 109% la corriente nominal. Según datos entregados por el fabricante
(Anexo H), la corriente máxima que puede ser suministrada al generador es 180 ARMS
por un periodo no mayor a 15 segundos. Por lo tanto, es posible alcanzar el torque
requerido pero es necesario monitorear la temperatura del generador y los tiempos de
aplicación de la corriente de partida de modo de evitar dañar permanentemente el
generador.
Inicio
Deshabilita
Control AES
SI NO Inversor
indica partida
Detección de la
Posición inicial Rampa Corriente-
Frecuencia
Aplica Pulso
de Voltaje Aumenta
Corriente-
Frecuencia
Medición
Corriente
Máxima Suma
Sobre-
Muestra NO SI
temperatura
Sobre
SI temperatura NO
NO 1 Segundo SI
SI 10 muestras NO Mantiene
Corriente-
Frecuencia
Compara
Valores de
Tabla Sobre-
NO temperatura SI
Selección
Ángulo
Inicial
NO 9 Segundos SI
Vector
Inicio
Inicialización
Variables y
Funciones
Habilitación de
Interrupciones:
PWM
UART
Main
Inicialización Inicializa
Partida
UART Inversor
Calibra Sensores
de Corriente
Mide Corriente
Determina
Suma Muestra
Offset
Interrupción UART
Byte Recibido
Partida
Detección Posición
Inicial
Rampa Corriente-
Velocidad
Rampa Corriente-
Velocidad
NO Completa 10 SI
Segundos
Corriente-
frecuencia Inicial
Apaga
NO 160 RPM SI
Inversor
Aumenta
Corriente-
Fin de Partida
Velocidad
Detección de la
Posición Inicial
Configura variables y
N° de Muestras
Fin Detección de la
Posición Inicial
Interrupción
Término Periodo
PWM
Actualiza Ángulo de
Vector de Voltaje
Mide Corriente y
Control PI SVPWM
Temperatura
Calcula
Calcula Error
Componentes
Corrige Offset Respecto
de Vectores de
Referencia
Estado
Aplica
Escalamiento
Mide Ganancias
Magnitud
Temperatura Proporcional
Vector Voltaje
e Integral
Devuelve Actualiza
Sobre
SI NO Módulo Vector Ciclos de
Temperatura
de Voltaje Trabajo PWM
Apaga Inversor
Fin Interrupción
Término Periodo
PWM
4. RESULTADOS EXPERIMENTALES
El algoritmo SVPWM (Space Vector Pulse Width Modulation) fue aplicado al inversor
que controla el motor para que éste opere como fuente de voltaje. El método fue testeado
en un banco de pruebas con una carga resistiva-inductiva a distintas frecuencias. La
carga RL empleada tiene una impedancia de 2,6 Ohm y 10,7 mH, a la cual se aplicó un
voltaje modulado de 30 Vf-f RMS con una fuente de voltaje de 52 VDC. La figura 4.1
muestra los resultados obtenidos en esta prueba.
49
Figura N° 4.1: Capturas del funcionamiento del algoritmo SVPWM sobre una carga RL
a distintas frecuencias: 1, 2, 4 y 64 Hz.
Tal como lo muestra la figura 4.1, la implementación del algoritmo satisface el objetivo
principal de obtener una fuente de corrientes sinusoidales con frecuencia y magnitud
modificables a elección a partir de la fuente de voltaje continua disponible en el paquete
de baterías del vehículo híbrido.
50
En la figura 4.2 se aprecian las corrientes por fase y una medida del voltaje entre fases
que aplica el inversor a la carga para una frecuencia de 80 Hz. Ésta revela cómo la
modulación por ancho de pulso del voltaje DC, a una frecuencia de conmutación de los
IGBTs de 10 KHz, genera las corrientes sinusoidales requeridas.
Figura N° 4.2: Capturas de corrientes por fase y voltaje fase-fase aplicados por el
inversor usando el algortimo SVPWM.
Las Figuras 4.3 y 4.4 muestran la operación del sistema cuando el inversor
trabaja como fuente de voltaje. La figura 4.3 corresponde a una captura de las
corrientes suministradas al PMSM (Permanent Magnet Synchronous Motor) para
mover el ICE a una velocidad de 15 RPM. La imagen muestra cómo las ondas de
corrientes son deformadas por la naturaleza variable del torque de carga del
motor a combustión. En el centro de la imagen se puede ver cómo la corriente es
afectada por la pérdida temporal de sincronismo. En este punto hay un instante
donde el torque que entrega el PMSM ha sido superado por torque que opone la
carga, lo cual incrementa la probabilidad de giro inverso del ICE mientras
alcanza nuevamente el sincronismo. La corriente aplicada alcanza los 80 ARMS.
140 70
Corriente Generador [Arms]
A rms Torque
Figura N° 4.6: Determinación experimental del torque necesario para girar el ICE.
55
430
Inductancia [µH]
420
410
400
390
380
370
360
350
0 60 120 180 240 300 360
Grados Eléctricos[°]
Figura N° 4.7: Variación de la inductancia entre fases con la posición del rotor para el
generador PGS150 usado.
En la figura 4.10 se muestra el resultado de aplicar este mismo proceso para distintos
ángulos del rotor para dos periodos eléctricos. En ella se grafican las diferencias
promedios obtenidas entre las corrientes máximas luego de realizar 150 muestras cada 5
grados mecánicos.
Observando los signos de las curvas para las diferencias de corriente de la figura 4.10, es
posible visualizar que un periodo de 360 grados eléctricos puede ser dividido en seis
secciones tal como se muestra en la figura 4.11. A partir de ello se construyó la tabla 3.1,
incluida en el capítulo anterior, la cual es almacenada finalmente en el software que
implementa el algoritmo de detección de la posición inicial.
La figura 4.12 muestra una curva de inductancia entre fases reconstruida usando los
valores de corrientes máximas solo de la aplicación de pulsos positivos de voltaje, dando
cuenta como la inductancia es afectada cuando se satura el hierro de estator al llegar a
valores que superan en 50% la corriente nominal. A diferencia de esta curva, la
aplicación de pulsos negativos satura la segunda porción de la curva.
58
10,0
Diferencia de Corrientes Máximas [A]
8,0
6,0
4,0
2,0
0,0
0 20 40 60 80 100 120 140 160 180
-2,0
-4,0
-6,0
-8,0
-10,0
Grados Mecánicos [°]
Fase A Fase B Fase C
I II III IV V VI
Diferencia de Corrientes Máxima [A]
10
8
6
4
2
0
-2 0 30 60 90 120 150 180 210 240 270 300 330 360
-4
-6
-8
-10
Grados Eléctricos [°]
Promedio Fase A Promedio Fase B Promedio Fase C
Figura N° 4.11: Determinación del sector de posición angular del eje del rotor.
59
430
410
Inducatancia [µH]
390
370
350
330
310
290
270
250
0 60 120 180 240 300 360
Grados Eléctricos[°]
Hierro Estator No-saturado Hierro Estator Saturado
Figura N° 4.12: Inductancia entre fases para hierro de estator no-saturado (inductancia
normal) e inductancia reconstruida para hierro de estator con saturación (con 150% de la
corriente nominal).
Tras haber realizado ensayos cada 5 grados mécanicos del rotor del algoritmo de
detección de la posición inicial, este presentó una cantidad de 20 errores en la estimación
del sector dentro de un total de 360 experimentos, lo que representa una tasa de falla del
6%. La magnitud máxima de estos errores fue de un sector. Además, estos se produjeron
sólo en algunos ángulos que estaban en los límites entre un sector y otro.
Se realizó una prueba para mostrar el comportamiento térmico del generador al ser
sometido a las sobrecorrientes necesarias para la partida del ICE. Se efectuaron dos
escenarios. En uno se aplicó solo un proceso de arranque y se monitoreó la evolución de
60
Las temperaturas alcanzadas por el generador pueden ser vistas en la figura 4.13. Allí se
observa que el incremento de temperatura posterior al primer arranque sólo alcanza 4 °C
y que el alza se produce en un tiempo inferior a tres minutos, luego de lo cual comienza
a descender lentamente. Al cabo de 10 minutos la temperatura del generador logró bajar
hasta llegar a sólo un grado sobre la temperatura inicial.
Otro aspecto importante que aparece en este ensayo es que el comportamiento de cada
proceso en términos de magnitud y duración del incremento de temperatura es
independiente del orden en que fue efectuado, mostrando que no hay un aumento
progresivo en la tasa de cambio de la temperatura que sea preocupante para este nivel de
repetición.
61
31
29
27
Temperatura [°C]
25
23
21
19
17
15
0 10 20 30 40 50 60
Tiempo [m]
5. CONCLUSIONES
Dado que las alternativas “sensorless” que utilizan la medición de la FEM no funcionan
a velocidad cero, el método escogido para la detección de la posición inicial del rotor
pertenece al grupo que utiliza la relación existente entre el valor de la inductancia en las
fases del generador y la posición angular del rotor. Como esta propiedad permite
detectar la orientación del rotor pero no la individualización de sus polos magnéticos, el
método implementado utiliza el cambio producido en la inductancia al saturar el flujo
magnético de estator. Los cambios en la inductancia de fase fueron medidos a través de
los valores máximos alcanzados por la corriente luego de la aplicación de una serie de
pulsos de voltaje.
La aplicación de los pulsos de voltaje no afectó la posición del rotor por tres razones: la
duración de los pulsos es breve, un pulso positivo es sucedido por un pulso negativo,
anulando los torques producidos, y la magnitud de la inercia mecánica del conjunto
generador-ICE es alta.
Para la deducción del sector angular donde se ubica el rotor, el método utiliza una tabla
previamente construida con los signos de las diferencias de corrientes máximas
alcanzadas. Los signos establecen una relación cualitativa con cada sector. De este
modo, al no depender de un análisis cuantitativo, el método es menos sensible a cambios
en los parámetros físicos del sistema, como en el caso de las variaciones de la
impedancia de la máquina con la temperatura. También la estimación de la posición del
65
rotor es robusta respecto los cambios presentados en las condiciones de carga del motor,
principalmente porque no utiliza variables mecánicas tales como: torque, momentos de
inercia, etc.
El método fue implementado para detectar el rotor dentro de uno de los 6 sectores en
que fue dividido el espacio angular del rotor. Como fue analizado en el capítulo 3, esta
resolución de 60° eléctricos, permite que el ángulo de torque con el cual es iniciado el
proceso de partida no supere los 60° eléctricos. Esto evita la posibilidad de rotación
inversa del ICE y permite la aplicación del torque máximo desde el inicio, a diferencia
del método de alineación forzada.
Por otro lado, la estimación de la posición con este método a bajas velocidades es
posible pero presenta el inconveniente de que el proceso de partida debe ser
periódicamente interrumpido para su aplicación. En estas interrupciones la corriente
resulta afectada por la aplicación de los pulsos, alterando también el torque entregado
con riesgo de aumentar la probabilidad de pérdida de sincronismo.
Si bien el grado de resolución alcanzado es suficiente para las necesidades del proceso
de arranque del ICE, es posible lograr sectores de hasta 30° eléctricos usando también
relaciones cualitativas entre las corrientes alcanzadas. En la versión implementada del
método de estimación se alcanzó una tasa de error de 6%. El grado de resolución y la
tasa de error obtenibles dependen de factores como: la precisión de los sensores de
corriente, la resolución de los convertidores análogos-digitales y el límite máximo de
66
Finalmente, este método de detección de la posición inicial también puede tener una
importante función en aplicaciones donde se requiere de una partida suave o evitar
rotación temporal inversa, como en tracción eléctrica.
REFERENCIAS
Batzel, T. D., & Lee, K. Y. (2005). Electric propulsion with sensorless permanent
magnet synchronous motor: Implementation and performance. Energy Conversion,
IEEE Transactions on, 20(3), 575-583.
Da Silva, E. R. C., Cipriano dos Santos, E., & Jacobina, C. B. (2011). Pulsewidth
modulation strategies. Industrial Electronics Magazine, IEEE, 5(2), 37-45.
Dae-Woong Chung, Jun-Koo Kang, & Seung-Ki Sul. (1999). Initial rotor position
detection of PMSM at standstill without rotational transducer. Electric Machines and
Drives, 1999. International Conference IEMD '99, 785-787.
Maruti Ltd. (1999). Cranking system. In Service manual –M800 (Suzuki Motor
Corporation ed., pp. 497). India: MARUTI SUZUKI INDIA LIMITED.
Matsui, N., Takeshita, T., & Yasuda, K. (1992). A new sensorless drive of brushless DC
motor. Industrial Electronics, Control, Instrumentation, and Automation, 1992. Power
68
Electronics and Motion Control., Proceedings of the 1992 International Conference on,
430-435 vol.1.
Mitchell, R. R., Gallant, B. M., Thompson, C. V., & Shao-Horn, Y. (2011). All-carbon-
nanofiber electrodes for high-energy rechargeable li-O2 batteries. Energy &
Environmental Science, 4(8), 2952-2958.
Parasiliti, F., Petrella, R., & Tursini, M. (1997). Sensorless speed control of a PM
synchronous motor by sliding mode observer. Industrial Electronics, 1997. ISIE '97.,
Proceedings of the IEEE International Symposium on, 1106-1111 vol.3.
Powerex Inc. (2007). L-series power devices application note. Pennsylvania: Retrieved
from http://www.pwrx.com/pwrx/app/L_Series_Power_Device_Application_Note.pdf
Read, K. (2011, July). Free range. Electric & Hybrid Vehicle Technology International,
46-52.
69
Rodriguez, J. R., Dixon, J. W., Espinoza, J. R., Pontt, J., & Lezana, P. (2005). PWM
regenerative rectifiers: State of the art. Industrial Electronics, IEEE Transactions on,
52(1), 5-22.
Tursini, M., Petrella, R., & Parasiliti, F. (2003). Initial rotor position estimation method
for PM motors. Industry Applications, IEEE Transactions on, 39(6), 1630-1640.
ANEXOS
71
Figura B1: Esquemático del área de interfaz óptica y tiempos muertos placa de disparo.
78
Debido a las inductancias parásitas que existen en el circuito de potencia del inversor, tal
como muestra la figura C2, pueden inducirse sobretensiones producto de los cambios
bruscos en la corriente por las conmutaciones. Estas sobretensiones pueden superar los
voltajes tolerables por los semiconductores del módulo si no se toman las medidas
adecuadas.
Para evitar que esas sobretensiones dañen los IGBTs se utiliza un dispositivo conocido
como Snubber que implementa en su interior un circuito amortiguador. Hay diferentes
tipos de Snubbers. Las topologías más comunes se muestran en la figura C1. La
estructura más sencilla consta de un condensador que conecta los colectores de IGBTs
superiores con los emisores de IGBTs inferiores, como se muestra en la figura C1 A).
Este tipo de snubber suele ser lo suficientemente efectivo en el control, sin pérdidas, de
transitorios de voltaje para aplicaciones de baja potencia (Powerex, 2007).
Para que el Snubber sea capaz de filtrar estos sobrevoltajes, la recomendación es usar un
condensador con una baja inductancia parásita entre sus terminales y con una capacidad
que satisfaga una tasa mínima de 1 uF por cada 100 A de corriente de colector. La
corriente máxima que alcanza el colector es:
I Cmáx 160 [ A]
1[ F ]
C Snubbermín I Cmáx
100[ A]
C Snubbermín 1,6[ F ]
Por otro lado existen limitaciones sobre la inductancia parásita del Snubber. Esta se
ilustra en la figura C2 como L2. El máximo incremento de voltaje que soporta el módulo
entre sus terminales, según la hoja de datos del semiconductor, es:
VDC 158[V ]
Entonces, el máximo incremento de voltaje que podría soportar el módulo por una
sobretensión producida en la inductancia parásita del snubber es:
Vmáx 342[V ]
El fabricante indica que para los módulos, el incremento de corriente en el tiempo puede
aproximarse como:
di 0,01
IC
dt 1[nS ]
di 0,01
160[ A]
dt 1[nS ]
di
1,6[ A / nS ]
dt
V 342[V ]
LSnubbermáx
di 1,6[ A / nS ]
dt
LSnubbermáx 213,8[nH ]
84
CSnubber 2[F ]
Máquina síncrona:
o Velocidad Nominal = 2500 RPM.
o Frecuencia eléctrica nominal = 166,67 Hz.
o Voltaje Nominal (f-f) = 67,63 V.
o Potencia nominal = 7 kW.
o Corriente nominal por fase = 60,5 ARMS.
o Corriente máxima a la partida = 160 APEAK.
o Resistencia por fase = 0,03348 Ohms.
o Inductancia por fase = 0,20116 mH.
Módulo Intellimod:
o Temperatura máxima de juntura del módulo (Tjmax) = 150°C.
En los semiconductores de un inversor, las pérdidas térmicas que necesitan ser disipadas
pueden clasificarse según dos fuentes: pérdidas por conmutación y pérdidas por
conducción.
88
Para un inversor PWM de dos niveles la potencia disipada por cada IGBT es:
Donde:
PQ
es la pérdida en el IGBT.
PSS
es la pérdida por conducción en el IGBT.
1 D
PSS I CP VCE ( SAT ) cos
8 3
Donde:
D es el ciclo de trabajo
La corriente máxima producida por el inversor en este escenario, aunque por un breve
periodo, es de 160 APEAK. Para el Intellimod, el voltaje de saturación colector-emisor es
1,6 V a 160 A.
90
3
VMOD f f peak D VDC con 0 D 1
2
Entonces, si:
2
VMOD f n RMS max Dmax VDC
4
VMOD f n RMS max 4 10,71[V ] 4
Dmax
VDC 2 150[V ] 2
Dmax 0,202
P 7000[W ]
cos( )
3 VF N I F 3 39,05[V ] 60.5 A]
cos( ) 0,9874
91
Luego, remplazando:
1 0,202
PSS 160 [ A] 1,6[V ] 0,9874
8 3
PSS 37,4[W ]
Los valores de pérdidas para varios niveles de corriente pico están en la hoja de datos
del Intellimod (Anexo A).
f SW 10 [ KHz]
1 D
PDC I EP VEC cos
8 3
Donde:
Para este caso la corriente pico que circula por el diodo es la misma que circula por el
IGBT. El voltaje de caída VEC para una corriente de 160 A es 1,2 V. Remplazando los
valores:
1 0,202
PDC 160[ A] 1,2[V ] 0,9874
8 3
PDC 19,9[W ]
Donde:
VCEpeak
es el voltaje pico del diodo durante la recuperación.
Remplazando, tenemos:
Pmódulo 6 PA
Pmódulo 538,2[W ]
Tomando como referencia la FEM, cuando la máquina opera con factor de potencia
unitario, existe un desfase δ de valor negativo entre el voltaje FEM y el voltaje
modulado cuando opera como rectificador. Visto desde el punto de vista del voltaje
modulado por el inversor, el desfase con la corriente es un δ que también es el ángulo φ
del factor de potencia.
Por lo tanto, que el inversor opere como AFE con factor de potencia unitario implica:
I S 60,5 0 [ A]
67,7
VS 0 [V ] 39,09 0 [V ]
3
17,89
cos( ) 0.952
1 D 1 0,775
PSS I CP VCE ( SAT ) cos 60,5 2[ A] 1,3[V ] 0,952
8 3 8 3
PSS 22,61[W ]
96
1 D
PDC I EP VEC cos
8 3
1 0,775
PDC 60,5 2[ A] 1,2[V ] 0,952
8 3
PDC 4,80[W ]
Pmódulo 6 PA
Pmódulo 266,0[W ]
Un tercer escenario es el uso del rectificador como un puente de Graetz, de manera que
en la etapa DC exista un chopper tipo boost funcionando como fuente de corriente para
cargar el paquete de baterías.
Como cada diodo conduce durante la mitad del periodo, las pérdidas del diodo por
conducción serán:
1
PDC I E VEC
2
La corriente que circula por el diodo es 60 A, con una caída de voltaje en el diodo
VEC
1
PDC 60,5[ A] 1,2[V ]
2
PDC 36,3[W ]
Remplazando, tenemos:
Pmódulo 6 PA
Pmódulo 218,0[W ]
99
TJ TC TF TA
PIGBT θJC
PDIODO θJC
PIGBT θJC
PDIODO θJC
PIGBT θJC
PDIODO θJC
θCF θFA
PIGBT θJC
PDIODO θJC
PIGBT θJC
PDIODO θJC
PIGBT θJC
PDIODO θJC
La temperatura máxima que soporta el módulo es 150°C pero los sistemas de protección
del módulo operan con normalidad bajo 125°C, por lo tanto:
TJmáx 125C
TA 60C
TCQ TJ PQ JQ
TCQ 125 69,3 0,2
TCQ 113,92[C ]
TCD TJ PD D
TCD 125 20.4 0,3
TCD 119,9[C ]
TC min(TCQ , TCD )
TC 113,9[C ]
101
(TC TA )
FA CF
Pmódulo
(113,9 60)
FA 0,023
262,07
FA 0,0772 [C / W ]
TCQ TJ PQ JQ
TCQ 125 37,27 0,2
TCQ 117,6[C ]
TCD TJ PD D
TCD 125 7,1 0,3
TCD 120,5[C ]
TC min(TCQ , TCD )
TC 117,6[C ]
102
(TC T A )
FA CF
Pmódulo
(117,6 60)
FA 0,023
266,0
FA 0,1934 [C / W ]
TCD TJ PD D
TCD 125 36,3 0,3
TCD 114,1[C ]
TC 114,1[C ]
(TC TA )
FA CF
Pmódulo
(114,1 60)
FA 0,023
218,0
FA 0,2251 [C / W ]
103
Resistencia térmica
Potencia disipada
Modo de funcionamiento máxima disipador
[W]
[°C/W]
Inversor 538,18 0,0772
Calculada la resistencia térmica máxima que debe tener el disipador, se puede elegir el
disipador adecuado. De los disponibles con convección natural, estos presentan un gran
tamaño que dificulta su instalación en el vehículo. Finalmente se optó por utilizar un
disipador ventilado por convección forzada perteneciente a la etapa de inversión un
convertidor ABB modelo ACS1000, que fue donado por esta empresa. Las ventajas que
ofrece este disipador son:
CSA
ΘJS RSA
TA=17°
TS=29°
P=210W
35
Temperatura Juntura [°C]
30
25
20
15
10
5
0
0 20 40 60 80 100 120 140 160 180
Tiempo [minutos]
La ventilación forzada se realiza mediante dos ventiladores de 40 CFM cada uno, que
consumen en conjunto una potencia de 3,4 W.
106
Scope
thetha
Piston Torque
w
Cylinder 1
In1 Out1
thetha
240 ° Shift Piston Torque
Crankshaft Angle w
Add Total
Cylinder 2
In1 Out1
thetha
480 ° Shift Piston Torque
2*pi w
cos(u)
Fcn
1
thetha
1
Piston
Product 1 Torque
sin(u)
sin(u)
asin(u) Add 2 Fcn3
Fcn1
2 Product 2 Fcn2
w
0.036
theta
R Compression Force
L
beta
Cylinder Compression
1 logic J Q
Scope 1
1 cos(u)
theta
Fcn1
Product 3
2
Add 1 1
R
Compression
3 Divide Force
L
Add 2
4 cos(u) Product 1
beta
Fcn2
Características Generador:
o Fabricante: Perm Motor GMBH.
o Modelo: PGS150.
o Tipo de Máquina: Síncrono de tipo disco (flujo axial) con imanes
permanentes.
o Peso: 23,4 kg.
o Pares de Polos: 4 (50 Hz a 750 RPM).
o Material Magnético: Neodimio-Fierro-Boro.
o Ventilación: Aire. 5 m/s mín.
o Clase de Aislación: F (hasta 155 °C).
o Velocidad Nominal: 2500 RPM.
o Voltaje Nominal: 67,63 Vf-f.
o Potencia nominal: 7 kW.
o Potencia Máxima: 14 kW a 6000 RPM.
o Corriente nominal: 60,5 ARMS.
o Corriente Máxima: 180 ARMS < 15 segundos.
o Torque nominal: 29,16 Nm.
o Constante de Torque: 0,482 Nm/A.
o Inercia J: 58,6 Kg/cm2.
o Resistencia U-V: 0,066963 Ohms.
o Inductancia U-V: 0,402333 mH.
Microcontrolador:
o Fabricante: Microchip.
o Modelo: dsPIC30F4011 30I/P.
o Velocidad: 30 MIPS.
o Características: instrucciones DSP, módulos PWM, ADC 10 bits 1KHz.
112
En las páginas siguientes de este anexo se agrega el contenido de cada uno de estos
archivos.
114
Archivo “inversor.c”:
///////////////////////////////////////////////////////////////////////////
//
//
//
// Control Sensorless de Inversor para Generador en Vehículo Híbrido
//
// Lorenzo Urrutia
// Diciembre de 2011
//
///////////////////////////////////////////////////////////////////////////
#include <p30f4011.h>
#include <confgene.h>
#include <modpwm.h>
#include <modadc.h>
#include <math.h>
#include <svpwm.h>
#include <modUART.h>
#include <uart.h>
#include "dsp.h"
#include <controlPID.h>
//Declaración de Constantes
#define ctePI (double)(3.1416)
#define FPWM (unsigned int) (10000)
#define VOLTAJE_DC (int)(51)
//Declaración de Variables
extern fractional CORRIENTE_FASEA;
extern fractional CORRIENTE_FASEB;
extern fractional CORRIENTE_FASEC;
extern fractional TEMPERATURA;
extern fractional MODULO_CORRIENTE;
//Prototipo de funciones
int posicionInicial(void);
void retardo(unsigned int microseg);
void RetardoG(unsigned int horas);
void PromCorriente(void);
void promIfaseA(void);
void histograma(void);
int detectaCuadranteI(void);
int detectaAnguloI(int);
void initInversor(void);
void fuenteVoltaje( double voltaje_aux);
115
//Interrupciones
//Interrupcion de Módulo PWM: Se ejecuta por cada término del Duty Cycle.
void __attribute__((interrupt, no_auto_psv)) _PWMInterrupt()
{
//Borra el flag de interrupción del término del periodo PWM
IFS2bits.PWMIF = 0;
//Actualiza el ángulo
theta = theta + delta_theta; //Actualiza el angulo en base a la
//frecuencia de referencia
*/
//=====Control lazo cerrado: fuente de corriente =========================
//Cálculo PID
voltaje_norm= LazoControlPI(corriente_ref, CORRIENTE_FASEA,
CORRIENTE_FASEB);
//Variable Manipulada
Vector_Voltaje(theta, voltaje_norm); //Aplica el vector de voltaje
unsigned int i = 0;
int main(void)
117
{
ConfiguracionGeneral(); //Configura parámetros generales de
//funcionamiento del IC.
InitADC(); //Inicializa el módulo del conversor análogo-
//digital.
InitUART(); //Inicializa la comunicación a través del
//módulo UART
InitControlPID(); //Inicializa la librería DSP para control PID
InitPWM(); //Inicializa el módulo PWM
EnciendeADC();
retardo(65000); //Retardo para eliminar el ruido de la partida
while(1)
{
if(partida == 1)
{
partida();
start = 0;
char Txdata[] = {2,'O','k','\0'};
putsUART1 ((unsigned int *)Txdata);
}
}
return 0;
}
void partida(void)
{
//Detección del cuadrante
theta = posicionInicial();
//Arranque
initInversor(); //Inicializa los parámetros PWM del funcionamiento
//como Inversor
enciendeInversor();
//Rampa corriente-frecuencia
fuenteFrecuencia(1);
fuenteCorriente( Q15(0.275));
RetardoG(3000);
fuenteFrecuencia(2);
fuenteCorriente( Q15(0.3));
RetardoG(3000);
fuenteFrecuencia(3);
fuenteCorriente( Q15(0.3125));
RetardoG(3000);
fuenteFrecuencia(4);
fuenteCorriente( Q15(0.325));
RetardoG(3000);
fuenteFrecuencia(5);
fuenteCorriente( Q15(0.35));
RetardoG(3000);
fuenteFrecuencia(6);
fuenteCorriente( Q15(0.3625));
RetardoG(3000);
fuenteFrecuencia(7);
fuenteCorriente( Q15(0.375));
RetardoG(3000);
fuenteFrecuencia(8);
118
fuenteCorriente( Q15(0.4));
RetardoG(62000);
//Termino de proceso de arranque
apagaInversor();
}
int posicionInicial(void)
{
int cuadranteI = 0;
int teta_cero = 0;
return teta_cero;
}
int detectaCuadranteI(void)
{
int t_pulso = 330; //Largo de los pulsos en microsegundos.
unsigned int pausa = 200; //Largo de las pausas en microsegundos.
unsigned int muestras = 5; //Número de muestras de peaks de
//corriente.
unsigned int contador = 0;
double dif_PeakCte_fA = 0;
double dif_PeakCte_fB = 0;
double dif_PeakCte_fC = 0;
int cuadrante = 0;
EnciendeADC();
while(contador<muestras)
{
Pulso(t_pulso,'A','P');
while(PORTEbits.RE1) //Espera el fin del Pulso.
MidCorriente();
dif_PeakCte_fA = dif_PeakCte_fA + CORRIENTE_FASEA; //Variable
//que registra la corriente medida en la fase A.
while(!IFS2bits.PWMIF); //Espera que se complete el periodo de
//switching.
IFS2bits.PWMIF=0; //Limpia flag de interrupción fin periodo PWM.
RetardoG(pausa);
Pulso(t_pulso,'A','N');
while(PORTEbits.RE5); //Espera el fin del Pulso.
MidCorriente();
119
RetardoG(pausa);
contador++;
contador = 0;
while(contador<muestras)
{
Pulso(t_pulso,'B','P');
while(PORTEbits.RE3); //Espera el fin del Pulso.
MidCorriente();
dif_PeakCte_fB = dif_PeakCte_fB + CORRIENTE_FASEB; //Variable
//que registra la corriente medida en la fase A.
while(!IFS2bits.PWMIF); //Espera que se complete el periodo de
//switching
IFS2bits.PWMIF=0; //Limpia flag de interrupción fin periodo PWM.
RetardoG(pausa);
Pulso(t_pulso,'B','N');
while(PORTEbits.RE1); //Espera el fin del Pulso.
MidCorriente();
dif_PeakCte_fB = dif_PeakCte_fB + CORRIENTE_FASEB; //Variable
//que registra la corriente medida en la fase A.
while(!IFS2bits.PWMIF); //Espera que se complete el periodo de
//switching
IFS2bits.PWMIF=0; //Limpia flag de interrupción fin
//periodo PWM.
RetardoG(pausa);
contador++;
contador = 0;
while(contador<muestras)
{
Pulso(t_pulso,'C','P');
while(PORTEbits.RE5); //Espera el fin del Pulso.
MidCorriente();
dif_PeakCte_fC = dif_PeakCte_fC + CORRIENTE_FASEC; //Variable
//que registra la corriente medida en la fase A.
while(!IFS2bits.PWMIF); //Espera que se complete el periodo de
//switching
IFS2bits.PWMIF=0; //Limpia flag de interrupción fin periodo PWM.
RetardoG(pausa);
Pulso(t_pulso,'C','N');
while(PORTEbits.RE1); //Espera el fin del Pulso.
MidCorriente();
120
RetardoG(pausa);
contador++;
//Promedios
dif_PeakCte_fA = dif_PeakCte_fA/50;
dif_PeakCte_fB = dif_PeakCte_fB/50;
dif_PeakCte_fC = dif_PeakCte_fC/50;
}
}
void promIfaseA(void)
//Función creada para tomar 100 muestras de corriente y mostrar la
//diferencia
{
extern int CORRIENTE_FASEA;
extern int CORRIENTE_FASEB;
while(contador<50)
{
EnciendeADC();
Pulso(t_pulso,'B','P');
while(PORTEbits.RE3); //Espera el fin del Pulso.
MidCorriente();
peakPosiFA = peakPosiFA + CORRIENTE_FASEA; //Variable que
//registra la corriente medida en la fase A.
peakPosiFB = peakPosiFB + CORRIENTE_FASEB;
while(!IFS2bits.PWMIF); //Espera que se complete el periodo de
//switching.
IFS2bits.PWMIF=0; //Limpia flag de interrupción fin
//periodo PWM.
RetardoG(pausa);
Pulso(t_pulso,'B','N');
while(PORTEbits.RE1); //Espera el fin del Pulso.
MidCorriente();
peakNegaFA = peakNegaFA + CORRIENTE_FASEA; //Variable
//que registra la corriente medida en la fase A.
122
RetardoG(pausa);
contador++;
}
peakPosiFA = peakPosiFA/50;
peakNegaFA = peakNegaFA/50;
deltaPeakA = peakPosiFA + peakNegaFA;
peakPosiFB = peakPosiFB/50;
peakNegaFB = peakNegaFB/50;
deltaPeakB = peakPosiFB + peakNegaFB;
ApagaADC();
}
//Habilitando Interrupciones
IFS2bits.PWMIF = 0; // Borra PWM Interrupt flag
IEC2bits.PWMIE = 1; // Habilita interrupción PWM (PTER
//match cero)
//Generación de la frecuencia
k = k * frecuencia_aux;
//El valor del cambio de angulo es igual a la frecuencia/FPWM
delta_theta = k ;
}
void enciendeInversor(void)
{
PTCONbits.PTEN = 1; //Habilita el módulo PWM
PORTFbits.RF0 = 1;
}
void apagaInversor(void)
{
PTCONbits.PTEN = 0; //Deshabilita el módulo PWM
PORTFbits.RF0 = 0;
}
124
Archivo “confgene.s”:
.include "p30F4011.inc"
.GLOBAL _ConfiguracionGeneral
_ConfiguracionGeneral:
CLR IFS0
125
CLR IFS1
CLR IFS2
CLR IEC0
CLR IEC1
CLR IEC2
MOV #0x0003, W0
MOV W0, RCON
; B13:12=COSC1:0 B9:8=NOSC1:0
MOV.B #0x03, W0
MOV.B #0x78, W1
MOV.B #0x9A, W2
MOV.W #OSCCON, W3
CLR.B W0
MOV.B #0x46, W1
MOV.B #0x57, W2
126
; interrupt priorities IP
MOV #0x4444, W0
MOV W0, IPC0
MOV #0x4444, W0
MOV W0, IPC1
MOV #0x4444, W0
MOV W0, IPC2
MOV #0x4444, W0
MOV W0, IPC3
MOV #0x4444, W0
MOV W0, IPC4
MOV #0x4444, W0
MOV W0, IPC5
MOV #0x4444, W0
MOV W0, IPC6
MOV #0x4444, W0
MOV W0, IPC9
MOV #0x4044, W0
MOV W0, IPC10
CLR INTCON1
; B15=ALTIVT B4:0=INTnEP4:0
CLR INTCON2
CLR SR
CLR SR
CLR W0
CLR W1
CLR W2
CLR IEC0
CLR IEC1
CLR IEC2
return
128
Archivo “modADC.c”:
/////////////////////////////////////////////////
//
// modADC.c
// Inicializa, configura y utiliza el conversor análogo digital de 10 bits
// Lorenzo Urrutia
// Abril 2010
//
// Archivos:
// opermat.s
//
/////////////////////////////////////////////////
#include <p30f4011.h>
#include "dsp.h" //Necesario por definición de fractional
#include "libq.h"
void InitADC(void);
void MidCorriente(void);
void MidTemperatura(void);
void EnciendeADC(void);
void ApagaADC(void);
void InitADC(void)
{
//Configura PortB
void MidCorriente()
{
ADCON1bits.SAMP=1; //Inicia la adquisición
ADCON1bits.DONE=0;
// CORRIENTE_FASEC=-CORRIENTE_FASEA-CORRIENTE_FASEB;
void EnciendeADC(void)
{
ADCON1bits.ADON=1; //Enciende el módulo ADC.
}
void ApagaADC(void)
{
ADCON1bits.ADON=0; //Apaga el módulo ADC.
}
131
Archivo “modPWM.c”:
/////////////////////////////////////////////////
// modPWM.c
// Inicializa, configura y utiliza el módulo PWM
// Lorenzo Urrutia
// Enero 2010
//
// Archivos:
// opermat.s
//
// Funciones:
// InitPWM
// Pulso
// Sinusoide
// OndaCuadrada
//
//
/////////////////////////////////////////////////
#include <p30f4011.h>
void InitPWM(void)
{
//////////////////////////////
//Configuración del Módulo PWM
//////////////////////////////
// Preparación
//Configura PortF
//Configuración del bit0 del PortF para la señal de Enable del Inversor
PORTF=0;
TRISF=0xFFFE;
//Deshabilita el inversor
//Inicialización
PWMCON2=0;
PWMCON2bits.OSYNC=0;
PWMCON2bits.UDIS=0;
//Duty Cycles
PDC1=0;
PDC2=0;
PDC3=0;
//Periodo de conmutación
PTCONbits.PTEN=0;
//Habilitando Interrupciones
134
PTCONbits.PTEN=1;
int m=0;
while(m<2)
{
m++;
}
void Pulso (unsigned int largo, unsigned char fase, unsigned char signo)
{
//Deshabilitando Interrupciones
//Periodo de conmutación
switch (fase)
{
case 'A':
switch (signo)
{
case 'P':
PDC1=largo*60;
PDC2=0;
PDC3=0;
break;
case 'N':
PDC1=0;
PDC2=largo*60;
PDC3=largo*60;
break;
}
;
break;
135
case 'B':
switch (signo)
{
case 'P':
PDC1=0;
PDC2=largo*60;
PDC3=0;
break;
case 'N':
PDC1=largo*60;
PDC2=0;
PDC3=largo*60;
break;
}
;
break;
case 'C':
switch (signo)
{
case 'P':
PDC1=0;
PDC2=0;
PDC3=largo*60;
break;
case 'N':
PDC1=largo*60;
PDC2=largo*60;
PDC3=0;
break;
}
;
break;
default :
PDC1=0;
PDC2=0;
PDC3=0;
break;
}
PTCONbits.PTEN=1;
//Habilita el inversor
}
136
Archivo “modUART.c”:
/////////////////////////////////////////////////
// modUART.c
// Configura la comunicación serie asíncrona universal.
// Aprovecha las funciones disponibles en uart.h
//
// Lorenzo Urrutia
// Enero 2011
//
/////////////////////////////////////////////////
#include <p30f4011.h>
#include <uart.h>
void InitUART(void)
{
//Configura PortC
PORTC=0;
TRISC=0xDFFF; // bit0 del PortF para Enable del Inversor
//Deshabilita el inversor
PORTFbits.RF0=0;
Archivo “controlPID.c”:
///////////////////////////////////////////////////////////////////////////
//
// controlPID.c
// Calcula el lazo de control PID de corriente.
//
// Lorenzo Urrutia
// Agosto 2011
//
//
//
///////////////////////////////////////////////////////////////////////////
#include <p30f4011.h>
#include "dsp.h" //Librería DSP
#include "libq.h" //Librería punto fijo
fractional MODULO_CORRIENTE;
//estructuraPID.controlOuput = &controlOuput;
//Prototipos de funciones
void InitControlPID(void);
double LazoControlPI(fractional referencia_aux, fractional
corrienteMedidaA, fractional corrienteMedidaB);
void InitControlPID(void)
{
estructuraPID.abcCoefficients = &abcCoefficient[0]; //asigna las
//direcciones de memoria a los punteros de la estructura tPID
estructuraPID.controlHistory = &controlHistory[0];
PIDInit(&estructuraPID);
coeficientesPID[0] = Q15(0.99);
coeficientesPID[1] = Q15(0.3);
138
coeficientesPID[2] = Q15(0.0);
PIDCoeffCalc(&coeficientesPID[0], &estructuraPID);
}
// (4/3*(x^2+y^2+x*y))^0,5
resultadoMult = __builtin_mac(resultadoMult, x, x, NULL, NULL, 0, NULL,
NULL, 0, 0, resultadoMult);
resultadoMult = __builtin_mac(resultadoMult, y, y, NULL, NULL, 0, NULL,
NULL, 0, 0, resultadoMult);
resultadoMult = __builtin_mac(resultadoMult, x, y, NULL, NULL, 0, NULL,
NULL, 0, 0, resultadoMult);
x = __builtin_sac(resultadoMult,0); //Devuelve el resultado del
//acumulador
resultadoMult = __builtin_mpy(x, d, NULL, NULL, 0, NULL, NULL, 0);
modulo_corriente = __builtin_sac(resultadoMult,0); //Devuelve el
//resultado del acumulador
modulo_corriente = _Q15sqrt(modulo_corriente);
modulo_corriente = modulo_corriente << 1; // *(4^0.5)
//Variables de salida
PID(&estructuraPID);
fractional corrienteOut = estructuraPID.controlOutput;
double voltajeOut = (double)_itofQ15(corrienteOut);
if(voltajeOut > 1)
{
voltajeOut = 1;
}
return voltajeOut;
}
139
Archivo “svpwm.c”:
/////////////////////////////////////////////////
// svpwm.c
// Aplica el vector de voltaje de estator en base al ángulo y
// magnitud dados.
//
// Lorenzo Urrutia
// Junio 2010
//
// Observaciones:
// voltaje_S debe estar entre 0 y 1
// theta debe estar entre 0 y 65536 para una vuelta
//
/////////////////////////////////////////////////
#include <p30f4011.h>
#include <math.h>
#include <svpwm.h>
unsigned int t1 = 0;
unsigned int t2 = 0;
unsigned int mitad_t0 = 0;
2016,2014,2011,2009,2007,2005,2003,2000,1998,1996,1994,1992,1989,1987,1985,
1983,1981,1978,1976,1974,1972,1969,1967,1965,1963,1960,1958,1956,1954,1952,
1949,1947,1945,1942,1940,1938,1936,1933,1931,1929,1927,1924,1922,1920,1918,
1915,1913,1911,1908,1906,1904,1902,1899,1897,1895,1892,1890,1888,1885,1883,
1881,1879,1876,1874,1872,1869,1867,1865,1862,1860,1858,1855,1853,1851,1848,
1846,1844,1841,1839,1837,1834,1832,1830,1827,1825,1822,1820,1818,1815,1813,
1811,1808,1806,1804,1801,1799,1796,1794,1792,1789,1787,1784,1782,1780,1777,
1775,1773,1770,1768,1765,1763,1761,1758,1756,1753,1751,1748,1746,1744,1741,
1739,1736,1734,1731,1729,1727,1724,1722,1719,1717,1714,1712,1710,1707,1705,
1702,1700,1697,1695,1692,1690,1687,1685,1683,1680,1678,1675,1673,1670,1668,
1665,1663,1660,1658,1655,1653,1650,1648,1645,1643,1640,1638,1635,1633,1630,
1628,1625,1623,1620,1618,1615,1613,1610,1608,1605,1603,1600,1598,1595,1593,
1590,1588,1585,1583,1580,1577,1575,1572,1570,1567,1565,1562,1560,1557,1555,
1552,1549,1547,1544,1542,1539,1537,1534,1532,1529,1526,1524,1521,1519,1516,
1514,1511,1508,1506,1503,1501,1498,1495,1493,1490,1488,1485,1482,1480,1477,
1475,1472,1470,1467,1464,1462,1459,1456,1454,1451,1449,1446,1443,1441,1438,
1436,1433,1430,1428,1425,1422,1420,1417,1414,1412,1409,1407,1404,1401,1399,
1396,1393,1391,1388,1385,1383,1380,1377,1375,1372,1369,1367,1364,1361,1359,
1356,1353,1351,1348,1345,1343,1340,1337,1335,1332,1329,1327,1324,1321,1319,
1316,1313,1311,1308,1305,1303,1300,1297,1294,1292,1289,1286,1284,1281,1278,
1276,1273,1270,1267,1265,1262,1259,1257,1254,1251,1248,1246,1243,1240,1237,
1235,1232,1229,1227,1224,1221,1218,1216,1213,1210,1207,1205,1202,1199,1196,
1194,1191,1188,1185,1183,1180,1177,1174,1172,1169,1166,1163,1161,1158,1155,
1152,1150,1147,1144,1141,1138,1136,1133,1130,1127,1125,1122,1119,1116,1113,
1111,1108,1105,1102,1100,1097,1094,1091,1088,1086,1083,1080,1077,1074,1072,
1069,1066,1063,1060,1058,1055,1052,1049,1046,1044,1041,1038,1035,1032,1029,
1027,1024,1021,1018,1015,1013,1010,1007,1004,1001,998,996,993,990,987,984,9
81,979,976,973,970,967,964,962,959,956,953,950,947,945,942,939,936,933,930,
927,925,922,919,916,913,910,907,905,902,899,896,893,890,887,885,882,879,876
,873,870,867,864,862,859,856,853,850,847,844,841,839,836,833,830,827,824,82
1,818,815,813,810,807,804,801,798,795,792,789,787,784,781,778,775,772,769,7
66,763,760,758,755,752,749,746,743,740,737,734,731,728,726,723,720,717,714,
711,708,705,702,699,696,693,691,688,685,682,679,676,673,670,667,664,661,658
,655,652,650,647,644,641,638,635,632,629,626,623,620,617,614,611,608,605,60
3,600,597,594,591,588,585,582,579,576,573,570,567,564,561,558,555,552,549,5
47,544,541,538,535,532,529,526,523,520,517,514,511,508,505,502,499,496,493,
490,487,484,481,478,475,472,470,467,464,461,458,455,452,449,446,443,440,437
,434,431,428,425,422,419,416,413,410,407,404,401,398,395,392,389,386,383,38
0,377,374,371,368,365,362,359,356,353,350,347,344,341,338,336,333,330,327,3
24,321,318,315,312,309,306,303,300,297,294,291,288,285,282,279,276,273,270,
267,264,261,258,255,252,249,246,243,240,237,234,231,228,225,222,219,216,213
,210,207,204,201,198,195,192,189,186,183,180,177,174,171,168,165,162,159,15
6,153,150,147,144,141,138,135,132,129,126,123,120,117,114,111,108,105,102,
99,96,93,90,87,84,81,78,75,72,69,66,63,60,57,54,51,48,45,42,39,36,33,30,27,
24,21,18,15,12,9,6,3,0};
//Separación de sectores
//Sector I
if(theta < sesentaG)
{
t1 = coseno[theta];
theta = sesentaG - theta;
t2 = coseno[theta];
141
PWMCON2bits.UDIS=1;
PDC1 = t1+t2+mitad_t0;
PDC2 = t2+mitad_t0;
PDC3 = mitad_t0;
PWMCON2bits.UDIS=0;
}
//Sector II
else if(theta < cientoveinteG)
{
theta = theta - sesentaG;
t1 = coseno[theta];
theta = sesentaG - theta;
t2 = coseno[theta];
PWMCON2bits.UDIS=1;
PDC1 = t1 + mitad_t0;
PDC2 = t1 + t2 + mitad_t0;
PDC3 = mitad_t0;
PWMCON2bits.UDIS=0;
}
//Sector III
else if(theta < cientoochentaG)
{
theta = theta - cientoveinteG;
t1 = coseno[theta];
theta = sesentaG - theta;
t2 = coseno[theta];
mitad_t0 = t_ciclo-t1-t2;
mitad_t0 = mitad_t0>>1;
PWMCON2bits.UDIS=1;
PDC1 = mitad_t0;
PDC2 = t1 + t2 + mitad_t0;
PDC3 = t2 + mitad_t0;
PWMCON2bits.UDIS=0;
}
//Sector IV
else if(theta < doscuarentaG)
{
theta = theta - cientoochentaG;
t1 = coseno[theta];
142
mitad_t0 = t_ciclo-t1-t2;
mitad_t0 = mitad_t0>>1;
PWMCON2bits.UDIS=1;
PDC1 = mitad_t0;
PDC2 = t1 + mitad_t0;
PDC3 = t1 + t2 + mitad_t0;
PWMCON2bits.UDIS=0;
}
//Sector V
else if(theta < trescientosG)
{
theta = theta - doscuarentaG;
t1 = coseno[theta];
theta = sesentaG - theta;
t2 = coseno[theta];
mitad_t0 = t_ciclo-t1-t2;
mitad_t0 = mitad_t0>>1;
PWMCON2bits.UDIS=1;
PDC1 = t2 + mitad_t0;
PDC2 = mitad_t0;
PDC3 = t1 + t2 + mitad_t0;
PWMCON2bits.UDIS=0;
}
//Sector VI
else
{
theta = theta - trescientosG;
t1 = coseno[theta];
theta = sesentaG - theta;
t2 = coseno[theta];
mitad_t0 = t_ciclo-t1-t2;
mitad_t0 = mitad_t0>>1;
PWMCON2bits.UDIS=1;
PDC1 = t1 + t2 + mitad_t0;
PDC2 = mitad_t0;
PDC3 = t1 + mitad_t0;
PWMCON2bits.UDIS=0;
}
}
143