测量占空比的多种方法实现

硬件:STM32G431

软件:Keil5 CUBEMX

实现方式:HAL库

1.定时器实现原理

1.1 定时器基本组成与原理

        控制器会根据定时器频率,对计数器进行计数。有的时候我们不需要计数那么快,因此我们会有一个PSC进行分频。当CNT计数器达到ARR的时候,ARR就会产生一个更新事件,而更新事件包括了DMA输出和中断。

1.1.1相同时钟源,PSC不同下的计数快慢

1.2 从模式寄存器与触发源

你会发现时钟寄存器不只有计数功能,还有让计数器复位的功能,那既然是复位,就要有触发源,触发源我们可以在时钟树上面看到。

从图知道,从模式寄存器的触发源一共有这几种

1.2.1 ITR触发源

指的是控制器的触发源由其他定时器产生,每个寄存器的ITR触发都不相同,以STM32F103数据手册列举的定时器为例

TIM2定时器的ITR0触发源由TIM1产生,ITR1触发源由TIM8产生,以此类推。

1.2.2 ETR触发源

1.使用定时器的特殊引脚ETR引脚的信号作为时钟源
2.每个通用定时器都有一个ETR引脚,比如TIM3的时ETR引脚是PD2

3.ETR引脚信号经过极性选择,边缘检测,预分频器,输入滤波,得到信号ETRF

1.2.3 TI1FP1和TI1FP2触发源

这些指的是当边沿检测器捕获到上/下降沿时会像从模式器发送一个信号,这个也是本章要使用的触发源

1.3 PWMI模式

1.3.1 PWMI结构

2.CUBEMX配置

2.1 方法一——设置直接间接捕获

2.1.1 RCC时钟配置

2.1.2 定时器配置

注:不设置从模式寄存器也是可以的,但要自己在代码中自己清除CCR寄存器的数据。

有读者是直接看应用部分不知道为什么设置触发源为TI1FP1的,并想了解的话,请看本章的1.2 小节

开启中断

2.1.3 时钟树配置

2.1.4 工程配置

2.2 方法二——设置PWMI模式(推荐)

2.2.1 定时器配置

方法二其他设置都与方法一相同,只是定时器设置有点不同,因此其他部分都要参照方法一

不需要开中断和其他的复杂的操作,硬件自动执行,可在主函数直接使用

3 代码实现

3.1 方式一

main.c

  while (1)
  {
		char text[20];

		sprintf(text,"     PA15Duty :%.2f ",duty);
		LCD_DisplayStringLine(Line3, (u8 *)text);
   }

//回调函数
int crr1_R,crr1_F,crr2;
float duty;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
			crr1_R=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
			crr1_F=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);
			duty=((crr1_F*1.0)/(crr1_R*1.0));
	
}

3.2 方式二

main.c

double TIM3_GETPWMDutyCycle(void)
{
	return TIM3->CCR2*1.0/TIM3->CCR1*1.0;
}


  while (1)
  {
		char text[20];
		sprintf(text,"     PB4Duty : %.2f ",TIM3_GETPWMDutyCycle());
		LCD_DisplayStringLine(Line5, (u8 *)text);
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值