Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PREPARATORIO 2 1
Index Terms— Gate Drivers. A. Consultar el efecto que tiene la corriente de cola o
corriente pico inverso en el apagado de un semiconductor
I. INTRODUCCIÓN de potencia IGBTs y MOSFETs, y graficar las pérdidas
dinámicas que se producen por este efecto
A nivel industrial, el uso de motores es primordial en
distintas aplicaciones, estos sistemas robustos son
controlados por variadores de frecuencias industriales, IGBT
los mismos que requieren de un sistema aislador que La corriente de cola es el producto de la conmutación más
asegure mayor fiabilidad y un rendimiento optimizado del lenta debido a la composición del TBJ, debido a la carga
motor, además, que se mantiene una seguridad eléctrica almacenada en su base. Esta corriente provoca:
funcional y seguridad de los datos en todo el sistema. Pérdidas debido a la corriente relativamente alta y
A continuación, se detallan las características de tensión muy alta, además limita la frecuencia de
semiconductores de potencia (MOSFFET, IGBT), con el funcionamiento.
objetivo de analizar los pros y los contras al posible uso de El “latch up” dinámico, debido a que esta corriente
cualquiera de estos dos. Para efectos prácticos se utilizarán
está compuesta por huecos que circulan por la
IGBTs, debido a que permiten el manejo de un valor de
voltaje más alto, esto respondiendo a los requerimientos del resistencia de dispersión.
motor que se dispone en el laboratorio. Además, como Pérdidas en conducción, que se pueden mejorar al
anexos se dispone del código del circuito de disparo para disminuir la vida media de los huecos en dicha
los semi conductores (PWM, frecuencia variable) realizado capa[5]
en la tarjeta STM.
IGBT
Las variaciones de IGBT permiten controlar la cantidad de
corriente de cola limitando la cantidad de portadores
minoritarios que se incorporan a la región de arrastre, también
permiten limitar la cantidad de portadores minoritarios
controlando el tiempo de vida para acelerar en forma
significativa la recombinación.
Formas de reducir las pérdidas por conmutación:
Fig. 2. Formas de onda de las pérdidas dinámicas en IGBT El IGBT inicialmente está encendido y conduce la corriente de
la carga, en donde su conmutación capacitiva es accionada por
MOSFET el apagado activo del IGBT, la corriente de la carga a la rama
El Mosfet tiene la ventaja de que reduce notoriamente la paralela D-C, provocando que la corriente de colector
resistencia RDS (on) provocando que no exista el “efecto disminuya simultáneamente con el voltaje del colector-emisor,
secundario” de una corriente de cola de apagado, además logrando reducir las pérdidas en el apagado. Siendo asi que la
también se debe a que la velocidad de apagado es corriente de colector y del voltaje de colector-emisor
independiente de la temperatura y no hay portadores correspondan a una conmutación suave. Al conmutar el
minoritarios. voltaje, el diodo asumirá el control de la capacidad de
Se debe temer en cuenta que, durante el apagado, la energía de corriente del snubber y la energía se descargará por la
apagado se disipa solo durante la breve superposición entre la resistencia.
corriente de drenaje y la tensión VDS de subida debido a que
Conmutación suave
no hay corriente de cola. Por lo tanto es importante minimizar
esta energía rápidamente, extrayendo la carga de la compuerta La operación de estos es en modo conmutación con voltaje
del Mosfet .[6]
cero (ZVS), o en modo conmutación con corriente cero (ZCS),
mediante estos modos se logra que el consumo de potencia
durante la conmutación sea cero.
MOSFET
El Mosfet transporta una gran corriente, soportando una gran
tensión al mismo tiempo, cuando se enciende o se apaga, lo
Fig. 3. Formas de onda de las perdidas dinámicas en el MOSFET cual genera una gran potencia que se disipa durante la
conmutación, estas pérdidas son despreciables, pero solo en
baja frecuencia. Además, se debe tomar en cuenta que las
pérdidas en estado apagado son mayores que en estado
encendido. [8]
Los Snubber de apagado (CAC-A). - Son circuitos
que ayudan a la conmutación en el apagado,
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 3
a las ecuaciones que están presentes en el datasheet en función [1] V. Serrano, “Interruptores Electrónicos de Potencia”, Electrónica de
Potencia, B-2018. [En línea]. Disponible en:
de variables conocidas se puede cambiar el dividendo de la
http://www.academia.utp.ac.pa/sites/default/files/docente/317/interrupto
expresión y por consiguiente se varía la frecuencia de salida res_electronicos_de_potencia.pdf. [Consultado: 10-oct-2019].
de las señales complementadas. [2] “IR2110 DRIVER CONTROL DE POTENCIA”, SSDIELECT -
Electrónica digital. [En línea]. Disponible en:
https://ssdielect.com/cb/driver-de-motores-y-amplificadores-de-
El tiempo muerto entre las ondas complementadas se logra
corriente-1/506-ic-ir2110.html. [Consultado: 10-oct-2019].
variar gracias a un parámetro en STMcube llamado “Dead [3] O. Fernández y P. Gómez, “Convertidor Reductor con Rectificación
time”, se encuentra dentro de la configuración del timer, hay Síncrona”. ago-2002.
que tomar en cuenta que este parámetro no es exactamente el [4] “FSBS15CH60 - Fairchild Semiconductor”, FSBS15CH60 Hoja de
datos (PDF) - Fairchild Semiconductor. [En línea]. Disponible en:
tiempo muerto de las ondas, es la variable de una expresión
https://static.chipdip.ru/lib/319/DOC000319439.pdf. [Consultado: 10-
matemática que permite variar este tiempo, por ende, se debe oct-2019].
tener mucho cuidado al colocarlo e irlo variando para obtener [5] Neoteo. "Influencia de la corriente de cola en IGBT". [En línea].
el resultado deseado. Disponible en: https://www.neoteo.com/igbt-mosfet-electronica-de-potencia/
[6] Rs-Online. "Corriente de cola en Mosfet ". [En Línea]. Disponible en:
https://es.rs-
En la figura 9, se muestra el diagrama de flujo de la lógica online.com/web/generalDisplay.html?id=footer1/diseno_de_puerta-
de programación para generar las PWM complementadas de controlador_de_mosfet_de_sic_para_la_mejor_eficiencia_y_fiabilidad
frecuencia variable y ancho de pulso fijo de 0.5. [7] Labc.Usb. "Técnicas de reducción de pérdidas dinámicas en la
conmutación". [En línea]Disponible en:
www.labc.usb.ve › paginas › Dispositivos
[8] Labc.Usb. "Técnicas de reducción de pérdidas dinámicas en la
conmutación del Mosfet". [En Línea]Disponible en:
INICIO ""http://www.labc.usb.ve/paginas/EC6135/RedPerdidas
[9] International Rectifier."Datasheet IR2110". [En Línea]Disponible en:
http://www.electroscheme.ru/datasheet/InternationalRectifier/IR2110.pdf
Configuro pines de
entrada y salida
VII. BIOGRAFÍA DE LOS AUTORES
Recibo señal
análoga desde el
potenciómetro en
PA0 para
introducirla en la
ecuación de la
frecuencia y poder Evelin Catucuamba, nació en Cayambe-Ecuador
variarla el 28 de junio de 1995. Realizó sus estudios
secundarios en el Colegio Nacional María
Angélica Idrobo con especialización de Físico
Saco las señales Matemático. Se encuentra estudiando en la Escuela
PWM Politécnica Nacional la carrera de Ingeniería en
complementadas Electrónica y Control.
Áreas y materias de interés: Instrumentación
por los pines PA7 y
Biomédica, Instalaciones Hospitalarias Especiales
PE9
y Protección y conservación de la vida silvestre.
(evelin.catucuamba@epn.edu.ec)
ANEXO 1
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 7
ANEXO 2
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 8
ANEXO 2
/* USER CODE END 2 */
/* Includes ------------------------------------------------------------------*/
/* Infinite loop */
#include "main.h"
/* USER CODE BEGIN WHILE */
#include "stm32f4xx_hal.h"
while (1)
{
/* USER CODE BEGIN Includes */
/* USER CODE END WHILE */
/* USER CODE END Includes */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1); // activo la conversion del ADC1
/* Private variables ---------------------------------------------------------*/
if (HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK) // si el
ADC_HandleTypeDef hadc1;
dato es correcto, guardo el valor de ADC, 10 es el tiempo q espera para saber
si se realizo bien la conversion
TIM_HandleTypeDef htim1;
{
valor=HAL_ADC_GetValue(&hadc1); // guardo el valor del ADC
/* USER CODE BEGIN PV */
en valor
/* Private variables ---------------------------------------------------------*/
}
HAL_ADC_Stop(&hadc1); // se detiene la conversion ADC
uint32_t valor, div_nuevo; // definir variables a usar
HAL_Delay(100); // no es recomendable para despues
uint8_t pin;
// transformo el ADC en el preescalador
/* USER CODE END PV */
div_nuevo=-(valor*21/255)+29;
htim1.Instance -> PSC=div_nuevo;//actualizar el valor de la frecuencia
/* Private function prototypes -----------------------------------------------*/
//
void SystemClock_Config(void);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,valor);//cambio
static void MX_GPIO_Init(void);
el duty
static void MX_TIM1_Init(void);
static void MX_ADC1_Init(void);
/*
pin=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
if(pin==1)
{
/* USER CODE BEGIN PFP */
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
/* Private function prototypes -----------------------------------------------*/
}
else
/* USER CODE END PFP */
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);
/* USER CODE BEGIN 0 */
}
*/
/* USER CODE END 0 */
}
int main(void)
/* USER CODE END 3 */
{
}
/* USER CODE BEGIN 1 */
/** System Clock Configuration
*/
/* USER CODE END 1 */
void SystemClock_Config(void)
{
/* MCU Configuration----------------------------------------------------------*/
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
RCC_ClkInitTypeDef RCC_ClkInitStruct;
HAL_Init();
/**Configure the main internal regulator output voltage
/* USER CODE BEGIN Init */
*/
__HAL_RCC_PWR_CLK_ENABLE();
/* USER CODE END Init */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOL
/* Configure the system clock */
TAGE_SCALE1);
SystemClock_Config();
/**Initializes the CPU, AHB and APB busses clocks
/* USER CODE BEGIN SysInit */
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
/* USER CODE END SysInit */
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
/* Initialize all configured peripherals */
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
MX_GPIO_Init();
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
MX_TIM1_Init();
RCC_OscInitStruct.PLL.PLLM = 8;
MX_ADC1_Init();
RCC_OscInitStruct.PLL.PLLN = 72;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
/* USER CODE BEGIN 2 */
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); // activo el canal 1
{
del timmer1
_Error_Handler(__FILE__, __LINE__);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1); // activo el
}
cana1 1 negado del timmer 1, ambos se ejecutan una sola vez
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 9
/**Initializes the CPU, AHB and APB busses clocks TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
*/
RCC_ClkInitStruct.ClockType = htim1.Instance = TIM1;
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK htim1.Init.Prescaler = 29;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; htim1.Init.Period = 100;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; htim1.Init.RepetitionCounter = 0;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV8; {
_Error_Handler(__FILE__, __LINE__);
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) }
!= HAL_OK)
{ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
_Error_Handler(__FILE__, __LINE__); sMasterConfig.MasterSlaveMode =
} TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig)
/**Configure the Systick interrupt time != HAL_OK)
*/ {
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); _Error_Handler(__FILE__, __LINE__);
}
/**Configure the Systick
*/ sConfigOC.OCMode = TIM_OCMODE_PWM1;
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); sConfigOC.Pulse = 50;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
/* SysTick_IRQn interrupt configuration */ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
} sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
/* ADC1 init function */ if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC,
static void MX_ADC1_Init(void) TIM_CHANNEL_1) != HAL_OK)
{ {
_Error_Handler(__FILE__, __LINE__);
ADC_ChannelConfTypeDef sConfig; }
/**Configure the global features of the ADC (Clock, Resolution, Data sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
Alignment and number of conversion) sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
*/ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
hadc1.Instance = ADC1; sBreakDeadTimeConfig.DeadTime = 30;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
hadc1.Init.Resolution = ADC_RESOLUTION_8B; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
hadc1.Init.ScanConvMode = DISABLE; sBreakDeadTimeConfig.AutomaticOutput =
hadc1.Init.ContinuousConvMode = DISABLE; TIM_AUTOMATICOUTPUT_DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim1,
hadc1.Init.ExternalTrigConvEdge = &sBreakDeadTimeConfig) != HAL_OK)
ADC_EXTERNALTRIGCONVEDGE_NONE; {
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; _Error_Handler(__FILE__, __LINE__);
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; }
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE; HAL_TIM_MspPostInit(&htim1);
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK) }
{
_Error_Handler(__FILE__, __LINE__); /** Configure pins as
} * Analog
* Input
/**Configure for the selected ADC regular channel its corresponding rank * Output
in the sequencer and its sample time. * EVENT_OUT
*/ * EXTI
sConfig.Channel = ADC_CHANNEL_0; */
sConfig.Rank = 1; static void MX_GPIO_Init(void)
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; {
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{ GPIO_InitTypeDef GPIO_InitStruct;
_Error_Handler(__FILE__, __LINE__);
} /* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
} __HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/* TIM1 init function */
static void MX_TIM1_Init(void) /*Configure GPIO pin Output Level */
{ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/**
* @brief This function is executed in case of error occurrence.
* @param None
* @retval None
*/
void _Error_Handler(char * file, int line)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state
*/
while(1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line
number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif
/**
* @}
*/
/**
* @}
*/