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

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

ProcessorExpert配置

I/O配置

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

S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)_第1张图片

 

添加FTM模块

 选中FTM_IC右键添加模块

 

S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)_第2张图片

配置PTM_IC采集频率

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

S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)_第3张图片

S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)_第4张图片

 

配置FTM_IC 采集占空比

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

S32K--输入捕获(FTM_IC)配置与使用学习笔记(SDK3.0)_第5张图片

补全代码

生成/补全代码

 

频率采集代码:
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)));
	}
}

 


 

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

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

你可能感兴趣的:(c语言)