tdse-tp4_02-pwm

FIUBA - Electrónica - Taller de Sistemas Embebidos - Trabajo Práctico N°: 4 - PWM
Index Commits Files Refs README
app/pwm.txt (2295B)
   1 Para este ejemplo se configura el Timer 3 del microcontrolador para generar una
   2 señal PWM. Parte del código generado por CubeMX para inicializar el timer se
   3 encuentra en el archivo `main.c`, en la función `MX_TIM3_Init`. Eliminando
   4 comentarios utilizados por CubeMX, resulta en el código a continuación:
   5 
   6 ```c
   7 static void MX_TIM3_Init(void)
   8 {
   9     TIM_MasterConfigTypeDef sMasterConfig = {0};
  10     TIM_OC_InitTypeDef sConfigOC = {0};
  11 
  12     htim3.Instance = TIM3;
  13     htim3.Init.Prescaler = 0;
  14     htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  15     htim3.Init.Period = 65535;
  16     htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  17     htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  18 
  19     if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  20     {
  21         Error_Handler();
  22     }
  23     sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  24     sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  25 
  26     if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  27     {
  28         Error_Handler();
  29     }
  30 
  31     sConfigOC.OCMode = TIM_OCMODE_PWM1;
  32     sConfigOC.Pulse = 0;
  33     sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  34     sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  35     if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  36     {
  37         Error_Handler();
  38     }
  39 
  40     HAL_TIM_MspPostInit(&htim3);
  41 }
  42 ```
  43 
  44 Del codigo generado (y tambien de la interfaz en CubeMX) se observa que se
  45 configura el timer 3 para contar de manera ascendente de 0 a 65536, esto en
  46 conjunto con el reloj del timer define el período de la señal. El prescaler se
  47 configura en 0 por lo que el reloj del timer es el reloj del bus al que esta
  48 conectado, en el caso del timer 3, el bus es APB3, este bus es el bus de alta
  49 velocidad y en este caso utiliza la misma frecuencia del microcontrolador, ya
  50 que no hay prescaler.
  51 
  52 El periodo en segundos total de la señal PWM generada viene dado por la
  53 siguiente relacion:
  54 
  55 $$T = Frecuencia / ((Periodo + 1)*(Prescaler + 1))$$
  56 
  57 Con la frecuencia del microcontrolador 64 MHz, prescaler nulo y periodo 65535 el
  58 periodo resulta aproximadamente 1 ms, 1.024 ms para ser exactos. Para verificar
  59 esto se puede ver en la captura `pwm.png` en la cual se observar que la
  60 frecuencia (1/delta T arriba a la izquierda) es 976.5 Hz y el periodo (delta T)
  61 1.02ms.