Geração de sinal Stm32f103 Pwm (modulação por largura de pulso) usando temporizadores internos, keil MDK-ARMv6 e Stmcubemx Ide

Geração de sinal Stm32f103 Pwm (modulação por largura de pulso) usando temporizadores internos, keil MDK-ARMv6 e Stmcubemx Ide

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.

A fórmula de cálculo de valores para geração de pwm não é muito complexa, requer apenas conhecimento profundo do relógio stm32f103, estrutura do temporizador e registros do temporizador. Dividi a fórmula e o método em etapas e é muito fácil saber calcular os valores. Abaixo, no lado direito, é fornecida a fórmula para calcular os valores para geração de sinal pwm específico e, no lado esquerdo, são fornecidos os termos genéricos usados ​​​​na fórmula com sua definição/significado.

Frequência de tique do temporizador

A frequência de tick do temporizador é a frequência na qual o temporizador completa seu ciclo de instrução.

Frequência do contador

Frequê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)

Fórmula de cálculo de frequência Stm32f103 Pwm (modulação por largura de pulso)

Resolução Pwm

A resolução Pwm é o número de etapas Pwm necessárias para gerar uma frequência de contador necessária. Normalmente usamos um número arbitrário aqui e depois ajustamos de acordo com nossa necessidade. A resolução Pwm deve estar entre 0-65535, pois esse valor é armazenado no registro de 16 bits e a contagem máxima de 16 bits é 65535.

Fórmula pwm Stm32f103 para valor Prescaller

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.
Observação: Resolução Pwm e Timer Precaller são registradores de 16 bits e seu valor não deve exceder 65535.
Agora, olhando para a fórmula final, precisamos de duas coisas nela. Valor do pré-escalador do temporizador e resolução Pwm (etapas). Você pode atribuir Valor do pré-escalador do temporizador ou Resolução Pwm (etapas) um valor fixo e calcule o outro perímetro.

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

Configuração do temporizador 4 Stm32f103 usando relógio HSI de entrada

Configuração do temporizador 4 Stm32f103 usando relógio HSI de entrada
Stm32f103c8t6 tem temporizadores de 4, 16 bits, temporizadores 1,2,3 e 4. Podemos usar todos os quatro temporizadores para gerar sinal pwm (modulação por largura de pulso). Cada temporizador possui pinos fixos nos quais o sinal pwm pode ser emitido, chamados canais. Os temporizadores 1 e 2 são multiplexados com outros periféricos para usar sua função pwm, temos que ter certeza de que o temporizador não está colidindo com nenhuma outra função periférica.
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.

Configuração do relógio de entrada do temporizador Stm32f103

Configuração do relógio de entrada do temporizador Stm32f103
Estou usando oscilador/relógio interno HSI (High Speed ​​Internal). Depois de dividir o clock com pré-escaladores em diferentes estágios, o clock final fornecido ao temporizador 4 é 0,0625 MHz. A tradução de 0,0625 MHz para hz é 62500 Hz. Portanto, a frequência final de entrada do temporizador é 62.500 Hz.

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.

Configurações do temporizador Stm32f103 4 pwm

Configurações do temporizador Stm32f103 4 pwm
Próximo tutorial avançado sobre saída variável Pwm (modulação por largura de pulso) com microcontrolador Stm32f103 usando stm32cubemx e keil uvision ide. Clique no botão abaixo para ir para o tutorial.

Stm32f103 Saída Pwm variável usando temporizadores internos

Baixe o código do projeto. A pasta contém o arquivo do projeto stmcubemx e os arquivos do projeto keil Mdk-Arm v5. Por favor, dê-nos o seu feedback sobre o projeto.

Assista ao vídeo do projeto aqui…

Pasta Arquivos/Código

Bloga geri dön

Yorum bırakın

Yorumların yayınlanmadan önce onaylanması gerekmektedir.