Este tutorial é sobre como gerar sinal pwm (modulação por largura de pulso) com o microcontrolador stm32f103 usando seus temporizadores de hardware internos. O código de inicialização dos componentes/periféricos do microcontrolador Stm32f103 é gerado usando o ide stmcubemx e o código é escrito e compilado no ide keil MDK-ARMv6. Um led simples é derivado de uma saída de sinal pwm fixa. O LED escurece e pisca de acordo com o ciclo de trabalho e a frequência que um determinado pino PWM está emitindo. Um único sinal Pwm é gerado/emitido no tutorial, mas você pode gerar vários sinais PWM com o mesmo método e configurações.
Vou emitir um sinal pwm (modulação por largura de pulso) de frequência de 1 Hz e ciclo de trabalho de 50% usando o timer-4 do microcontrolador stm32f103. O timer-4 canal-1 é usado para emitir o sinal. O canal 1 corresponde ao pino PB6 do microcontrolador stm32f103. No PB6 é conectado um led no qual a saída pwm pode ser vista. A frequência de 1 Hz no domínio do tempo é T=1/f > T=1/1 Hz > T=1 s. Portanto, a frequência de 1 Hz se traduz em 1 s e meu ciclo de trabalho é de 50%, então o led no pino PB6 piscará a uma taxa de meio segundo.
Como gerar frequência PWM desejada/específica? Derivação de fórmulas e cálculos.
Frequência de tique do temporizadorA frequência de tick do temporizador é a frequência na qual o temporizador completa seu ciclo de instrução.
Frequência do contadorFrequência do contador é a frequência na qual queremos que nosso contador de tiques do temporizador aumente.
|
Fórmula de cálculo de frequência Stm32f103 Pwm (modulação por largura de pulso)
|
Resolução Pwm
|
Fórmula pwm Stm32f103 para valor Prescaller
|
Substituir a frequência do contador por sua fórmula nas equações do valor do pré-escalador do temporizador produz a equação fornecida no lado esquerdo. Agora é fácil determinar o valor do pré-escalador.
|
Etapas de inicialização do código Stmcube-Mx e geração de código keil MDK-ARM
Presumo que vocês estejam familiarizados com o processo de criação do projeto stmcube mx e conheçam as etapas necessárias. Se não, faça um tutorial simples
- Introdução ao stmcube-mx keil MDK-ARM v5
Os temporizadores 3 e 4 são independentes e não colidem com nenhuma outra função periférica. Então é bom usá-los. Estou usando o Timer 4 no projeto/tutorial.
Estou usando a fonte de relógio interno, portanto marque esta caixa de seleção nas configurações do temporizador. Estou usando o temporizador 4, canal 1 para saída pwm, então selecionei o canal 1. O canal 1 corresponde ao PB6 do microcontrolador stm32f103. O diagrama de configurações é fornecido no lado direito.
Cálculo de valores para frequência de 1 Hz e saída de sinal pwm de ciclo de trabalho de 50%
Nas configurações finais do temporizador, é hora de inserir o Período do Contador/Resolução Pwm (Etapas), o valor do Prescaler e o Pulso necessário. Pulso é o ciclo de trabalho necessário e no nosso caso é de 50%. Vamos resolver a fórmula superior de acordo com a fórmula de cálculo pwm fornecida acima.
Valores dados:
Relógio de entrada do temporizador = 0,0625 MHz ou 62500 Hz
Frequência necessária = 1 Hz (no domínio do tempo 1 segundo)
Período do contador/resolução Pwm (etapas) = 3906 (escolhi um valor aleatório)
Frequência do contador = frequência necessária * Período do contador
Frequência do contador = 1 Hz * 3906 = 3906 Hz
Valor do pré-escalador do temporizador = (relógio de entrada do temporizador/frequência do contador)-1
Valor do pré-escalador do temporizador = (62.500 Hz / 3.906 Hz) – 1 = 15
Agora temos o valor do Timer Presaller, Período do Contador/Resolução Pwm (Etapas) e também estão na faixa de 16 bits. Agora insira os valores na configuração do temporizador 4. Selecionei o contador para estar no modo UP (contagem de 0 a 3906). Pulso é o ciclo de trabalho, em nosso caso é 50%, então 3906*50% > 3906*0,5 = 1953.