467|2

166

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【NUCLEO-U083RC】7.LPTIME产生PWM [复制链接]

本帖最后由 电子烂人 于 2024-6-5 22:04 编辑

u0 系列有多个time定时器,但是还没用过LPtime,本次产生个PWM试试

1 . LPTIM、PWM介绍

LPTIM(Low-Power Timer)是ST公司为其STM32微控制器系列提供的一种低功耗定时器。LPTIM是为了在低功耗模式下提供时间测量和生成精准的时序而设计的,特别适用于那些对功耗要求非常严格的场合,比如在停止模式(Stop mode)或待机模式(Standby mode)下。

LPTIM通常不直接用于生成PWM(Pulse Width Modulation)信号,因为PWM信号通常需要高精度的定时和快速的输出变化,通常由高级定时器(Advanced Timers)或通用定时器(General Purpose Timers)来处理。然而,在某些情况下,LPTIM可以用来生成简单的PWM信号,尤其是在对精度要求不是特别高,且功耗要求非常低的场合。本次设计的应用场景是在使用电池的小型搅拌器中,仅对速度挡位调节。

LPTIM生成PWM的基本原理是利用其比较功能,通过比较寄存器(Compare Register)和自动重装载寄存器(Auto-Reload Register)来控制输出信号的占空比。当LPTIM的计数器值与比较寄存器匹配时,输出电平会发生变化。

例程给出了PWM的计算方式,还是PSR\ARR\CCR老三样:


FrequencyOutput = Counter Clock Frequency / (Autoreload + 1)
DutyCycle = 1 - ((PulseValue + 1)/ (Autoreload + 1))
 

2.初始化

 

 

如图使能lptim 3, 使能通道3,生成代码如下:

static void MX_LPTIM3_Init(void)
{

  /* USER CODE BEGIN LPTIM3_Init 0 */

  /* USER CODE END LPTIM3_Init 0 */

  LPTIM_OC_ConfigTypeDef sConfig1 = {0};

  /* USER CODE BEGIN LPTIM3_Init 1 */

  /* USER CODE END LPTIM3_Init 1 */
  hlptim3.Instance = LPTIM3;
  hlptim3.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  hlptim3.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  hlptim3.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  hlptim3.Init.Period = 999;
  hlptim3.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  hlptim3.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
  hlptim3.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
  hlptim3.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
  hlptim3.Init.RepetitionCounter = 0;
  if (HAL_LPTIM_Init(&hlptim3) != HAL_OK)
  {
    Error_Handler();
  }
  sConfig1.Pulse = 499;
  sConfig1.OCPolarity = LPTIM_OCPOLARITY_HIGH;
  if (HAL_LPTIM_OC_ConfigChannel(&hlptim3, &sConfig1, LPTIM_CHANNEL_3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN LPTIM3_Init 2 */

  /* USER CODE END LPTIM3_Init 2 */
  HAL_LPTIM_MspPostInit(&hlptim3);

}

3.测试低功耗下输出PWM

编辑代码,在主函数中添加:

while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	  HAL_LPTIM_PWM_Start(&hlptim3, LPTIM_CHANNEL_3);

  }
  /* USER CODE END 3 */
如图所示,可以在示波器中看到稳定的PWM信号

 

在代码中添加STOP2模式:

while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	HAL_Delay(1000);
	BSP_LED_Toggle(LED_GREEN);
	HAL_LPTIM_PWM_Start(&hlptim3, LPTIM_CHANNEL_3);
	HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
	HAL_Delay(10000);//停止10秒
	SystemClock_Config();//重新配置时钟

  }
  /* USER CODE END 3 */
}

生成波形如下:

 
U083RC_LPTIME.zip (8.07 MB, 下载次数: 0)
此帖出自stm32/stm8论坛

最新回复

波形看着可以啊,实际应用中对PWM精度要求那么高的情况不太多   详情 回复 发表于 2024-6-6 09:08
点赞 关注
个人签名

没用比没有强

 

回复
举报

6523

帖子

9

TA的资源

版主

沙发
 

波形看着可以啊,实际应用中对PWM精度要求那么高的情况不太多

此帖出自stm32/stm8论坛

点评

对的,精度要求高的话用高级定时器更好一些    详情 回复 发表于 2024-6-6 14:49
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复

166

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
秦天qintian0303 发表于 2024-6-6 09:08 波形看着可以啊,实际应用中对PWM精度要求那么高的情况不太多

对的,精度要求高的话用高级定时器更好一些

 

此帖出自stm32/stm8论坛
 
个人签名

没用比没有强

 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表