单片机
返回首页

stm32 pwm频率与周期计算

2019-08-21 来源:eefocus

在这里插入图片描述

频率

Fpwm = 100M / ((arr+1)*(psc+1))(单位:Hz)


arr 是计数值

psc 是预分频值

如:

3. 主频=100M

4. arr=100

5. psc=1000

100,000,000/100/1000=1000Hz


占空比

duty circle = TIM3->CCR1 / arr(单位:%)


TIM3->CCR1 是捕获比较寄存器值

从下面代码可以看出TIM3->CCR1 就是对应的sConfigOC.Pulse

arr对应htim5.Init.Period = 999;

psc对应htim5.Init.Prescaler = 99;


如果 arr=1000,TIM3->CCR1=500则pwm的占空比为50%,通过修改CCR1可以修改占空比,修改arr可以修改频率


/* TIM5 init function */

void MX_TIM5_Init(void)

{

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  TIM_OC_InitTypeDef sConfigOC = {0};


  htim5.Instance = TIM5;

  htim5.Init.Prescaler = 99;

  htim5.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim5.Init.Period = 999;

  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)

  {

    Error_Handler();

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)

  {

    Error_Handler();

  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 0;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)

  {

    Error_Handler();

  }

  HAL_TIM_MspPostInit(&htim5);


}


static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config){

...

/* Set the Capture Compare Register value */

  TIMx->CCR1 = OC_Config->Pulse;

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章