使用定时器获取转速信息(PWM频率)

一、原理

通过计算两个上升沿之间的时间间隔,计算输入转速信号的频率,计算得到转速。

二、开发环境

开发平台:S32 Design Studio for ARM Version 2018.R1(S32DS)
单片机型号:S32K116
转速信号频率:最小值2KHz+

三、配置

1.引脚界面的配置

这里我使用的是PTD15引脚
引脚界面

2.初始化界面的配置

前提当然要添加FTM_IC模块
初始化界面

3.配置界面的配置

有的通道不支持测量的选项,具体哪些引脚我也没细看,不过配置的时候会提示不支持,如果是自己硬撸代码,需要格外注意一下,不过我想,都能硬撸代码了,应该也看不到我这篇博文了
配置界面

四、关键代码

1.初始化

	static ftm_state_t ftm1StateStruct;
	FTM_DRV_Init(INST_FLEXTIMER_IC1, &flexTimer_ic1_InitConfig, &ftm1StateStruct);
	FTM_DRV_InitInputCapture(INST_FLEXTIMER_IC1, &flexTimer_ic1_InputCaptureConfig);

2.计算频率

	uint32_t inputCaptureMeas = 0;
	uint8_t channel = flexTimer_ic1_InputCaptureChannelConfig->hwChannelId;
	uint32_t frequency = FTM_DRV_GetFrequency(INST_FLEXTIMER_IC1);
	
	while (1)
	{
		/* Get values */
		inputCaptureMeas = FTM_DRV_GetInputCaptureMeasurement(INST_FLEXTIMER_IC1, channel);
		/* Calculate the signal frequency using recorded data*/
		inputCaptureMeas = frequency / (inputCaptureMeas);

		OSIF_TimeDelay(1000);
	}

五、注意事项

1.引脚的选择

要选择引脚描述如FTMx_CHx的引脚。最初我那硬件工程师选了FTM0_FLT2。看了下手册这是故障检测引脚,预想的我那输入频率只有几HZ,就用了中断自己计数,量了一下输入频率后,中断已经不适用了。

2.可检测的最小输入频率

为什么会有最小输入频率。首先说一下计算频率的原理。第一步是获取到两个上升沿的计数值,第二步是通过计数频率(也就是配置界面的Counter clock frequency)除以计数值,得到输入信号的频率。
两个上升沿的计数值怎么来,在两个上升沿的过程中,计数器会持续进行计数,计数频率越高,同一时间内计数值累加的越快。通过函数FTM_DRV_GetInputCaptureMeasurement可以获取到计数值。当超过最大计数值65535过后,计数值会翻转从0开始。
那么对应就会有一个异常情况,计数翻转过后,用计数频率除以计数值,就会得到一个很大的值。
为了避免这样的情况发生,我这里列了一张表格供参考
最小输入频率

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值