Biblioteca HAL – uso de temporizador e PWM

Comparação de tempo com 51 microcontroladores

Atraso do microcontrolador 51 (temporização do software):

//由stc软件生成的51延时代码
void Delay500ms() //@11.0592MHz
{
    
    
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
    
    
do
{
    
    
while (--k);
} while (--j);
} while (--i);
}

Desvantagens: impreciso, ocupando recursos da CPU

Princípio de funcionamento do temporizador stm32:

Use uma base de tempo precisa para implementar funções de temporização por meio de hardware. O núcleo do temporizador é o contador.
Insira a descrição da imagem aqui

Classificação do temporizador:

  • Temporizador básico (TIM6 ~ TIM7)
  • Temporizador geral (TIM2~TIM5)
  • Temporizadores avançados (TIM1 e TIM8)

Insira a descrição da imagem aqui

Recursos do temporizador STM32F103C8T6:

Insira a descrição da imagem aqui
Introdução geral do temporizador:

  1. Contador de carregamento automático para cima, para baixo, para cima/para baixo de 16 bits (TIMx_CNT).

  2. Pré-escalador programável de 16 bits (pode ser modificado em tempo real) (TIMx_PSC), o coeficiente de divisão da frequência do relógio do contador é qualquer valor entre 1 e 65535 .
  3. 4 canais independentes (TIMx_CH1~4), estes canais podem ser usados ​​como:
    A. Captura de entradaB
    . Comparação de saída
    C. Geração PWM (modo alinhado à borda ou ao centro)
    D. Saída de modo de pulso único
  4. O circuito de sincronização de temporizadores e interconexões de temporizadores (um temporizador pode ser usado para controlar outro temporizador) pode ser controlado usando sinais externos (TIMx_ETR)
    .
  5. A interrupção/DMA é gerada quando ocorrem os seguintes eventos:
    A. Atualização: overflow/underflow do contador, inicialização do contador (via software ou trigger interno/externo)
    B. Eventos de disparo (início, parada, inicialização ou contagem do contador acionados por interno/externo)
    C. Entrada capturadaD
    . Comparação de saída
    E. Suporta codificador incremental (quadratura) e circuitos de sensor Hall para posicionamento
    F. Acione a entrada como relógio externo ou gerenciamento de corrente ciclo a ciclo

Modo de contagem do temporizador:

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Fonte do relógio temporizador:

Insira a descrição da imagem aqui

A fórmula de cálculo do tempo de estouro do temporizador é:

Insira a descrição da imagem aqui
(PSC é o coeficiente de divisão de frequência) (ARR é o valor de recarga) (Tout é o tempo de saída (obrigatório)) (Tclk é a frequência do clock)
Conhecido: Tclk = 72MHZ.
Por exemplo, se você deseja cronometrar 1000ms, então: PSC=7199, ARR=9999,Tclk=72M

################################################# ##########################

Recursos PWM

  • Temporizador avançado (TIM1): 7 canais
  • Temporizador geral (TIM2 ~ TIM4): 4 canais cada

Modo de saída PWM:

  • Modo PWM 1: Na contagem crescente, uma vez CNT < CCRx, a saída é um nível válido, caso contrário, é um nível inválido; na contagem regressiva, uma vez
    CNT > CCRx, a saída é um nível inválido, caso contrário, é um nível válido.

  • Modo PWM 2: Durante a contagem crescente, a saída é um nível inválido uma vez CNT < CCRx, caso contrário, é um nível válido; durante a contagem regressiva, a saída é um nível válido
    uma vez CNT > CCRx, caso contrário, é um nível inválido.

Insira a descrição da imagem aqui
Ciclo de trabalho PWM: determinado pelo registro TIMx_CCRx.

Configuração PWM (Cube Max)

Insira a descrição da imagem aqui

//启动tim2
HAL_TIM_Base_Start_IT(&htim2);
//配置占空比
//参数:句柄,通道,值
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);

Experimento de luz respiratória PWM

int main()
{
    
    
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t flag=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小

// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
	while (1)
	{
    
    
		HAL_Delay(1);
		if (flag)
		pwmVal++;
		else
		pwmVal--;
		if (pwmVal > 500)
		flag = 0;
		if (pwmVal == 0)
		flag = 1;
		//修改比较值,修改占空比
		__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
	}
}

Terminar

Se você tiver alguma dúvida, sinta-se à vontade para levantá-la e progredir juntos.

Acho que você gosta

Origin blog.csdn.net/qq_52749711/article/details/131350886
Recomendado
Clasificación