Nucleo Boards for Control Systems

From RobolaboWiki
Revision as of 11:14, 6 February 2023 by Blancal (Talk | contribs)

Jump to: navigation, search


Lectura y escritura de pines

Lectura

HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_9);

Escritura

- A nivel alto:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);

- A nivel bajo:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);


Encoder

Teoría

hohslhalsodhas

Configuración de encoder en STM32CubeIDE


PWM

Teoría



Principales registros

Prescaler (PSC)

El preescalado es un registro que especifica entre cuánto se debe dividir la frecuencia de referencia del reloj usado por el timer. En concreto, la reducción de frecuencia se aplica de la siguiente manera:

f_PWM = f_CLK / (PSC + 1)

Por lo tanto, hay que tener en cuenta que si queremos mantener la misma frecuencia que la del reloj de referencia debemos fijar PSC=0. Los timers del STM32 admiten valores de preescalado de hasta 65535, mediante registros de 16 bits.

Auto Reload Register (ARR) y Capture Compare Register (CCR)

El registro ARR almacena el valor máximo que debe alcanzar el contador antes de volver a cero. Por otra parte, CCR registra valor del contador del timer asociado a partir del cual la señal PWM de salida pasa de nivel alto a nivel bajo. Cada canal del timer usado para la generación de señal PWM tendrá un registro CCR diferente (por ejemplo CCR1 y CCR para canales 1 y 2). De esta manera, el valor de CCR junto con el valor de ARR definen la anchura de los pulsos y con ello el ciclo de trabajo de la señal PWM:

Duty_Cycle (%) = 100 * (CCR / ARR)

CNT

Es el registro que almacena el valor actual del contador usado para la generación PWM.

Configuración de PWM en STM32CubeIDE

Para configurar el timer como PWM primero debemos seleccionar uno de los posibles timers configurables como generador PWM. También debemos decidir los canles que queremos usar como salidas PWM.

Consejo: Al usar varias salidas PWM es recomendable usar diferentes canales del mismo timer en la medida de lo posible.

Los principales timers configurables como PWM son el TIM2, TIM3, TIM4 y TIM5, con 4 canales independientes cada uno.

Consejo: Es recomendable usar el timer y los canales que se correspondan directamente con los pines que alimentan las entradas del Puente H para modular la velocidad del motor. En caso contrario deberemos puentear las salidas del timer PWM con las entradas del puente H.

Por lo tanto, deberemos buscar los pines asociados a los canales del timer a usar en la vista “Pinout” del entorno de desarrollo.

Una vez hemos activado los canales del timer necesarios, debemos modificar la configuración y parámetros del timer. Los principales parámetros

  • Clock Source: reloj a tomar como referencia por el timer. Debemos seleccionar la opción Internal clock. Además, debemos asegurarnos que la frecuencia del reloj usada es la deseada, en la pestaña de clock configuration.
  • Channel x: configuración deseada para el canal x del timer. Debemos seleccionar la opción “PWM Generation CHx”, donde x será el número del canal en cuestión.
  • Prescaler (PSC): Parámetro para configurar el registro de PSC.
  • Counter Period: Parámetro para configurar el valor del registro ARR.
  • Pulse (16 bits): parámetro para modificar el registro de CCR.
  • Mode: Debemos seleccionar PWM mode 1.

Además, en nuestro código debemos activar el timer ya configurado e inicializado de la siguiente manera:

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);


Podemos modificar el valor de CCR (aceder al registro) mediante código de la siguiente manera:

htimx.Instance->CCR1 = new_ccr;

donde CCR1 indica que estamos accediendo al registro del canal 1, new_ccr es el nuevo valor entero que queremos establecer y htimx es la instancia correspondiente al timer x (por ejemplo, htim2 o htim3).

De igual manera, para modificar el registro del canal 2:

htimx.Instance->CCR2 = new_ccr;