Está en la página 1de 10

LABORATORIO DE CONTROL DE MAQUINAS.

PREPARATORIO 2 1

DISEÑO DE GATE DRIVERS PARA EL DISPARO DE


SEMICONDUCTORES DE POTENCIA
Bryan Castelo, Ana Bastidas, Evelin Catucuamba.
Escuela Politécnica Nacional

compuerta es preferiblemente mayor comparada a la del


Abstract— An IGBT power semiconductor has greater benefits MOSFET (dos veces o más), esto limita el dv/dt de
than a Mosfet, however when switching off the IGBT it differs encendido
from that of a MOSFET in the tail current; in the IGBT, the
trapped minority carriers, which can only be removed by Tabla 1. Diferencias para la conducción entre MOSFETs e IGBTs [1]
scanning and internal recombination, cause this tail current,
which persists until the recombination of the minor carriers is III. CORRIENTE DE COLA
complete, causing more switching losses.

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.

II. DISPARO DE SEMICONDUCTORES DE POTENCIA

A. Mediante una tabla comparativa indique los


requerimientos de disparo para semiconductores de
potencia IGBT y MOSFETs en un inversor Trifásico

Diferencias en requerimientos de conducción de la


compuerta (gate) entre MOSFET e IGBT
IGBTs normalmente tienen una tensión de umbral
compuerta-emisor mayores que los MOSFETs.
A elevadas temperaturas el IGBT requiere un voltaje gate-
source mayor para asegurarse que el dispositivo permanece
en saturación a una dada corriente en el colector.
En el IGBT el voltaje gate-source debe ser al menos 14V.
En MOSFETs similares, el voltaje gate-source de 10V es Fig. 1. Forma de onda corriente de cola en IGBT
suficiente para asegurar saturación
Como la capacitancia entre gate-source del IGBT es mas
pequeña comparada con los MOSFETs, el resistor de
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 2

B. Consultar las técnicas que se pueden implementar para


reducir la corriente de coa y disminuir las pérdidas
dinámicas en la conmutación de los semiconductores de
potencia (IGBTs y MOSFETs).

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:

 Reducción de las pérdidas en el apagado con red


RCD (snubber RCD)

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.

Conmutación con voltaje cero. - Se inicia con un apagado


activo y las pérdidas se reducirán conectando un condensador
de conmutación (Ck) en paralelo con el semiconductor, y se
realiza como un encendido pasivo de bajas pérdidas, con un
voltaje sobre el semiconductor cercano a cero, además la
inductancia de conmutación (Lk) se minimiza.

Conmutación con corriente cero. -Se inicia con un encendido


activo y las pérdidas se reducirán conectando en serie al
semiconductor de potencia una bobina de conmutación (Lk),
teniendo una conmutación de apagado pasivo con bajas
pérdidas, dado que la corriente en el interruptor será casi nula,
y la capacidad de conmutación (Ck) se minimiza.[7]

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

controlando la velocidad, mediante la variación del IV. GATES COMERCIALES


voltaje entre los terminales del dispositivo que se
apaga, este circuito debe comportarse como una A. Consultar el funcionamiento de gate drivers
impedancia capacitiva en paralelo con dichos comerciales. Presentar el resumen de un driver comercial
terminales. que maneje una rama del inversor trifásico y un driver
comercial que maneje las 3 ramas del inversor trifásico
(principio de funcionamiento, prestaciones, aplicación en un
inversor trifásico).

1. Driver para un ramal

Para manejar un ramal (2 semiconductores) se puede hacer


uso del driver comercial IR2110, este controlador permite
manejar MOSFETs e IGBTs a altas frecuencias y tensiones,
tiene canales de salida independientes en alto y bajo. Sus
entradas lógicas son compatibles con CMOS o LSTTL a 3.3V.
Para su funcionamiento se necesita de una pequeña circuitería
Bootstrap exterior para abastecer de suficiente corriente a la
gate del MOSFET y así lograr que conmute. [2], [3].

Fig. 4. Circuito de ayuda a la conmutación de apagado

 Los Snubber de encendido (CAC-E).- Son circuitos


que ayudan a la conmutación en el encendido,
controlando la velocidad, mediante la variación de la
corriente del dispositivo que se enciende, el circuito
debe comportarse como una impedancia inductiva en
serie con los terminales.[8]

Fig. 6. Conexión del driver IR2110 para conmutación de 2 MOSFETs

2. Driver para tres ramales (Trifásico)

El controlador FSBB15CH60 fue diseñado para permitir el


accionamiento de motores AC de alto rendimiento. Combina
una protección optimizada y un driver de bajas perdidas para
el disparo de IGBTs. Este módulo integra un bloqueo de bajo
voltaje para evitar cortocircuitos y permite tener una sola
fuente de alimentación para los 6 IGBTs que integran el ramal
trifásico, sin embargo, este no incluye optoacopladores, por lo
que eso se lo debe hacer en un circuito aparte.
Cada corriente de fase puede ser monitoreada y controlada
por separado gracias a los terminales DC negativo divididos.
La aplicación principal de este driver es manejar cargas de
bajas potencias como son ventiladores, aires acondicionados,
lavadoras, entre otros. [4]
Fig. 5. Circuito de ayuda a la conmutación de encendido
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 4

El diseño del circuito de disparo se realizó para un ramal


(monofásico). A continuación, se detalla las etapas del
circuito:

1. Opto acoplamiento: para aislar las etapas de potencia y


control se utilizará un optonand 6n137, debido a que se
trabajará con altas frecuencias (6 – 20) KHz.

2. Smith triger: se usó un SN74LS14N, a la salida del


opto acoplamiento, debido a que, la optonand entrega
Fig.7. Vista superior e inferior del driver FSBB15CH60
una señal negada y al usarlo este complementa la señal.

3. Gatedriver: se usa el gatedriver IR-2110, en la figura 9,


se muestra la configuración típica del gatedriver, el
cual permite crear la tierra flotante entre los dos
mosfets del circuito, además, asegura que la señal de
disparo llegue completa a los mosfets. Esta
configuración

Fig.9. Configuración típica del GateDriver IR-2110. [9]

4. Mosfet: se utilizó los mosfets IRF-640, debido a que


trabajan con un voltaje máximo de 200 V y corriente de
18 A, estos requerimientos se seleccionaron a partir de
las características del motor del laboratorio (mínimo
Fig.8. Circuito interno equivalente y pines de entrada y salida
150 V).
Como se pudo ver, existen drivers tanto para uno como para
los tres ramales en un solo encapsulado, entonces recomendar
uno en específico no sería factible, incluso porque el valor B. Diseñar en el sistema microprocesado indicado al inicio
económico de ambos no es el mismo, obviamente el del semestre, 2 señales de salida tipo PWM
controlador de tres ramales FSBB15CH60 cuesta mucho más complementadas, de frecuencia variable entre 6 KHz y 20
que el IR2110 que maneja solo uno, por ende, no vamos a KHz y relación de trabajo 0.5. La frecuencia debe ser
colocar un driver trifásico para manejar una carga de un solo variada mediante un potenciómetro conectado al canal ADC
ramal, ojo, si funcionaría, pero sería un desperdicio de del sistema microprocesado. Considerar tiempos de retardo
recursos. A lo que se quiere llegar es que la elección del driver (tiempos muertos) acorde a las especificaciones en las hojas
adecuado queda a criterio del estudiante porque depende técnicas de los semiconductores de potencia (IGBTs o
mucho de la aplicación en la que se esté trabajando. MOSFETs) para el encendido y apagado en un mismo ramal
del inversor trifásico.

V. DISEÑO DE CIRCUITOS Para el diseño de las 2 salidas tipo PWM complementadas se


hizo uso de una tarjeta embebida STM32F407VG, la cual fue
escogida por su gran cantidad de recursos y su excelente reloj
A. Diseñar el circuito de disparo para 6 semiconductores
que nos permite trabajar a altas frecuencias y al ser un
de potencia (IGBTs o MOSFETs) dentro de un inversor
microcontrolador de 32bits permite un manejo de datos
trifásico. Considerar los niveles de voltaje de disparo para
importante.
cada semiconductor de potencia del inversor y su respectiva
referencia, modos y maneras de aislamiento entre control y
Para las salidas PWM se hizo uso del timer 1 del
potencia, posibles rebotes y su compensación en la señal de
microcontrolador que permite obtener directamente 2 señales
disparo de control.
PWM complementadas y con tiempo muerto variable.

Para variar la frecuencia se usó un potenciómetro que va


conectado a una entrada análoga del micro, con esta y gracias
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 5

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

Bryan Castelo, Nació en Quito-Ecuador el 6 de


Habilito y configuro mayo de 1993, realizó sus estudios secundarios en el
el CH1 y el NCH del Colegio “Sebastián de Benalcázar”, empezó a
Tim1 para obtener estudiar en la Escuela Politécnica Nacional en el año
las ondas 2012, actualmente cursa el último semestre de
complementadas Ingeniería Electrónica y Control y sus áreas de
interés son la Instrumentación y Control Industrial.

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)

FIN Ana Bastidas, nació en Ibarra-Ecuador el 19 de


Julio de 1995. Realizó sus estudios secundarios en
Fig.9. Diagrama de flujo de la lógica de programación, señales PWM el Colegio Nacional Experimental “María
complementadas. Angélica Idrobo” con especialización Físico
Matemático. Actualmente. estudia en la Escuela
EL código de la programación de la tarjeta STM, se Politécnica Nacional Ingeniería en Electrónica y
Control.
presenta como ANEXO 1.
Sus áreas de interés son Instrumentación
Industrial. (ana.bastidas@epn.edu.ec)
VI. BIBLIOGRAFÍA
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 6

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);

TIM_MasterConfigTypeDef sMasterConfig; /*Configure GPIO pin : PD12 */


TIM_OC_InitTypeDef sConfigOC; GPIO_InitStruct.Pin = GPIO_PIN_12;
LABORATORIO DE CONTROL DE MAQUINAS. PREPARATORIO 2 10

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);

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
* @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

/**
* @}
*/

/**
* @}
*/

También podría gustarte