硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2862|回复: 5
收起左侧

[TIMER] PWM中心对齐模式

[复制链接]

56

主题

131

回帖

299

积分

高级会员

积分
299
发表于 2021-7-7 09:53:14 | 显示全部楼层 |阅读模式
定时器配置输出PWM波形,中心对齐模式怎么计算占空比和周期?时钟56M
  TIM_InitStruct.Prescaler = 5599;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_CENTER_DOWN;//LL_TIM_COUNTERMODE_UP;//
  TIM_InitStruct.Autoreload = 99;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  LL_TIM_Init(TIM3, &TIM_InitStruct);
  LL_TIM_EnableARRPreload(TIM3);
  LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH1);
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = ((99+ 1 ) / 3);
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
  LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2021-7-7 10:27:03 | 显示全部楼层
周期计算和其它模式一样。

占空比是下面这种:
QQ截图20210707102639.png


回复

使用道具 举报

56

主题

131

回帖

299

积分

高级会员

积分
299
 楼主| 发表于 2021-7-7 17:37:11 | 显示全部楼层
eric2013 发表于 2021-7-7 10:27
周期计算和其它模式一样。

占空比是下面这种:

能具体给个公式吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2021-7-7 18:04:01 | 显示全部楼层
lindahnu 发表于 2021-7-7 17:37
能具体给个公式吗?

PWM 频率 = TIMxCLK /( Prescaler + 1) /(Period+ 1)/ 2
PMW 占空比 = Pulse/(Period + 1)
回复

使用道具 举报

56

主题

131

回帖

299

积分

高级会员

积分
299
 楼主| 发表于 2021-7-8 10:26:07 | 显示全部楼层
eric2013 发表于 2021-7-7 18:04
PWM 频率 = TIMxCLK /( Prescaler + 1) /(Period+ 1)/ 2
PMW 占空比 = Pulse/(Period + 1)

非对称模式怎么计算高低电平时间呢?

htim3.Instance = TIM3;
  htim3.Init.Prescaler = 0;
  htim3.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1;
  htim3.Init.Period = 2800-1;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.RepetitionCounter = 0;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
  }
       
        sConfigOC.OCMode = TIM_OCMODE_PWM2;
  sConfigOC.Pulse = 700;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
       
        sConfigOC.OCMode = TIM_OCMODE_ASSYMETRIC_PWM2;
  sConfigOC.Pulse = 1400;
  if(HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  {
    /* Configuration Error */
    Error_Handler();
  }


图片显示抓到的波形,第一个是通道1,第二个是通道2,通道2的高低电平时间是怎么计算的?

无标题.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2021-7-8 11:11:05 | 显示全部楼层
lindahnu 发表于 2021-7-8 10:26
非对称模式怎么计算高低电平时间呢?

htim3.Instance = TIM3;

STM32H7的非对称PWM模式(Asymmetric PWM mode),波形的相位差可编程
http://www.armbbs.cn/forum.php?m ... 9110&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 05:40 , Processed in 0.169093 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表