S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)

    使用NXP S32K148EVB的官方开发板,UART1引脚RX-PTC6 TX-PTC7。

ProcessorExpert配置

I/O配置

选择FTM0 0通道 PTD15设置为输入 用以采集PWM频率及占空比

 

添加FTM模块

 选中FTM_IC右键添加模块

 

配置PTM_IC采集频率

选择PTM0 通道0 模式为测量模式

 

配置FTM_IC 采集占空比

FTM0 通道0 边沿采集模式 双边沿采集

补全代码

生成/补全代码

 

频率采集代码:
FTM_DRV_Init(INST_FLEXTIMER_IC1, &flexTimer_ic1_InitConfig, &ftm1StateStruct);
FTM_DRV_InitInputCapture(INST_FLEXTIMER_IC1, &flexTimer_ic1_InputCaptureConfig);
FTMIC_frequency = FTM_DRV_GetFrequency(INST_FLEXTIMER_IC1);
/* Get values */
inputCaptureMeas = FTM_DRV_GetInputCaptureMeasurement(INST_FLEXTIMER_IC1, 0U);
/* Calculate the signal frequency using recorded data*/
inputCaptureMeas = FTMIC_frequency / (inputCaptureMeas); //最终计算所得频率=时钟频率/脉冲一周期起振次数

占空比采集代码:
flexTimer_ic1_InputCaptureChannelConfig[0].channelsCallbacks = channelsCallbacks_0;//检测到边沿跳变执行次回调函数

FTM_DRV_Init(INST_FLEXTIMER_IC1, &flexTimer_ic1_InitConfig, &ftm1StateStruct);
FTM_DRV_InitInputCapture(INST_FLEXTIMER_IC1, &flexTimer_ic1_InputCaptureConfig);
FTMIC_frequency = FTM_DRV_GetFrequency(INST_FLEXTIMER_IC1);

void channelsCallbacks_0(ic_event_t event, void *userData)
{
	static uint16_t GetCNVBuff[3];
	uint16_t CalculationResut1,CalculationResut2;
	uint32_t Pinstate;

	Pinstate = (PINS_DRV_ReadPins(PTD)>>15)&0x01; //读取输入引脚状态

    /* 取三个跳变沿时间点 (三个跳变沿 PWM为一周期)*/
	GetCNVBuff[0] = GetCNVBuff[1];    
	GetCNVBuff[1] = GetCNVBuff[2];    
	GetCNVBuff[2] = FTM_DRV_GetInputCaptureMeasurement(INST_FLEXTIMER_IC1, 0U);//读取C(n)V寄存器计数
	CalculationResut1 = GetCNVBuff[1]-GetCNVBuff[0]; //取两个相邻跳变沿之间的时间计数差值
	CalculationResut2 = GetCNVBuff[2]-GetCNVBuff[1]; //同上


	if(Pinstate)    //由于不知道两个跳变之间是高电平还是低电平 故判断PWM当前状态 计算占空比
	{
		Duty_cycle = (uint16_t)(((CalculationResut1*100)/(CalculationResut1 + CalculationResut2)));
	}
	else
	{
		Duty_cycle = (uint16_t)(((CalculationResut2*100)/(CalculationResut1 + CalculationResut2)));
	}
}

 


 

————————————————————————————————————————————

小学生一枚,在此做个学习笔记,有什么不妥的地方还请海涵。

  • 8
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值