Nesse exemplo, os arquivos PWM.c e configs.c, possuem as configurações necessárias para habilitar o PWM, abaixo é explicado o funcionamento e as opções disponíveis nos registradores utilizados no arquivo.
A configuração do GPIO para essa aplicação, necessita dos seguintes passos:
- 1º - Habilitação do clock no GPIO com a função que será utilizada, nesse caso GPIOA;
- 2º - Definir o pino com a função alternativa, utilizando o registrador MODER;
- 3º - Definir qual das funções alternativas o GPIO possuirá, utilizando o registrador AFR;
Figura 1 - Registrador MODER
No STM32, cada pino pode ter múltiplas funções alternativas, que são configuradas através dos registros de função alternativa (AFR). Cada porta GPIO tem dois registros de função alternativa: AFR[0] para os pinos de 0 a 7 (Figura 2) e AFR[1] para os pinos de 8 a 15 (Figura 3). Conforme a Figura 4 e a Figura 5, a função alternativa AF2 é atribuída da seguinte maneira:
- PA7 - TIM1_CH1N;
- PA8 - TIM1_CH1;
- PA9 - TIM1_CH2;
- PA10 - TIM1_CH3;
- PB0 - TIM1_CH2N;
- PB1 - TIM1_CH3N;
Figura 2 - Registrador AFRL (AFR[0])
Figura 3 - Registrador AFRH (AFR[1])
Figura 4 - 1ª Tabela de funções alternativas
Figura 5 - 2ª Tabela de funções alternativas
O PWM (Pulse Width Modulation) no STM32F030 é gerado por temporizadores (TIMs) como o TIM1, que suporta PWM com canais complementares e dead time, ideal para controle de motores, LEDs e conversores de potência. No STM32F030, o PWM é gerado pelos temporizadores ao alternar o nível lógico do pino de saída com base nos registradores ARR (Auto-Reload Register) e CCR (Capture/Compare Register).
O registrador PSC (Prescaler), Figura 7, é usado para dividir a frequência de entrada do timer, permitindo controlar a velocidade com que o timer conta os pulsos de clock, o valor máximo do PSC é de 16 bits, variando de 0 a 65535. Isso significa que o prescaler pode dividir o clock de entrada do timer em até 65536 (65535 + 1) vezes.
Figura 7 - Registrador PSC
O registrador ARR (Auto-Reload Register), Figura 8, define o valor máximo até o qual o contador do timer incrementa antes de ser reiniciado, ou seja, é o registrador que controla o período do timer, o valor máximo do ARR é de 16 bits, variando de 0 a 65535.
Figura 8 - Registrador PSC
Define o valor no qual a saída muda de estado, controlando o duty cycle.
A frequência do PWM é determinada por 3 fatores, frequência do clock do microcontrolador, valor do registrador ARR (Auto Reload Register) e o PSC (prescaler), conforme a Figura 9:
Figura 9 - Fórmula para definição da frequência do PWM
No exemplo desse diretório, consideramos os valores abaixo:- Frequência do clock = 8MHz;
- ARR = 999;
- PSC = 7;
Esses valores geram uma frequência de 1KHz, a Figura 10 mostra o sinal adiquirido pelo osciloscópio.
Figura 10 - Canais CH1 e CH1N
Para inverter os sinais nos canais complementares CH1N, CH2N e CH3N do TIM1, basta configurar os bits CC1NP, CC2NP e CC3NP no registrador CCER, esses bits controlam a polaridade dos canais complementares e permitem inverter o sinal.
// Habilitar saída complementar e polaridade invertida
TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC1NP; // CH1 e CH1N invertido
TIM1->CCER |= TIM_CCER_CC2E | TIM_CCER_CC2NE | TIM_CCER_CC2NP; // CH2 e CH2N invertido
TIM1->CCER |= TIM_CCER_CC3E | TIM_CCER_CC3NE | TIM_CCER_CC3NP; // CH3 e CH3N invertidoFigura 11 - Canais CH1 e CH1N invertido









