17届智能车:使用编码器计算实际路程

系列文章目录

17届智能车:浅析总转风摄像头的图像处理_ssfight1的博客-CSDN博客_智能车摄像头图像处理


文章目录

目录

系列文章目录

文章目录

前言

一、编码器脉冲数获取

二、路程换算

1.测量并计算单位路程的脉冲数(pulse/m)

1.首先以正常速度将车推出大于1米的距离,然后测量出实际距离以及编码器脉冲积分,最后根据单位距离的脉冲数=实际距离 / 脉冲积分从而计算出单位距离的脉冲数。

2.开电机,利用定时器通过测量一定时间内车跑出的实际距离,然后根据单位距离的脉冲数=实际距离 / 脉冲积分从而计算出单位距离的脉冲数。

2.计算瞬时路程



前言

能够很好地运用编码器对于智能车而言是如虎添翼的,编码器读取的脉冲数不仅可以用于速度环的输入输出,还可根据单位路程读取的脉冲数计算出行驶的总路程。下面我们简单介绍怎样利用编码器对路程进行换算。


一、编码器脉冲数获取

我们以英飞凌芯片为例,编码器脉冲数获取代码如下:

//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPT12计数读取(编码器采集)
//  @param      gptn         	选择所使用的GPT12定时器
//  @return     void
//  Sample usage:           	speed = gpt12_get(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
int16 gpt12_get(GPTN_enum gptn)
{
	switch(gptn)
	{
		case GPT12_T2: return (int16)IfxGpt12_T2_getTimerValue(&MODULE_GPT120);
		case GPT12_T3: return (int16)IfxGpt12_T3_getTimerValue(&MODULE_GPT120);
		case GPT12_T4: return (int16)IfxGpt12_T4_getTimerValue(&MODULE_GPT120);
		case GPT12_T5: return (int16)IfxGpt12_T5_getTimerValue(&MODULE_GPT120);
		case GPT12_T6: return (int16)IfxGpt12_T6_getTimerValue(&MODULE_GPT120);
		default: return 0;
	}
}

IFX_INLINE uint16 IfxGpt12_T2_getTimerValue(Ifx_GPT12 *gpt12)
{
    return (uint16)gpt12->T2.U;
}

二、路程换算

1.测量并计算单位路程的脉冲数(pulse/m)

#define DISTANDE_RATIO (11400.0f)//1M记到的路程,用于换算成实际的路程,5ms记录一次

下面给出两种测量方法:

1.首先以正常速度将车推出大于1米的距离,然后测量出实际距离以及编码器脉冲积分,最后根据单位距离的脉冲数=实际距离 / 脉冲积分从而计算出单位距离的脉冲数。

2.开电机,利用定时器通过测量一定时间内车跑出的实际距离,然后根据单位距离的脉冲数=实际距离 / 脉冲积分从而计算出单位距离的脉冲数。

 

Distance_Integral +=  gpt12_get(GPT12_T2);

 

2.计算瞬时路程

 我们知道单片机每1ms进入一次中断

这里我们每隔5ms读取一次编码器脉冲

IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
{
	enableInterrupts();//开启中断嵌套
	control_flag++;
	if (control_flag == 5) //每5ms控制一次电机,编码器,陀螺仪
	{
		Speed_Get();
		control_flag = 0;
	}
	PIT_CLEAR_FLAG(CCU6_0, PIT_CH0);

}

然后根据脉冲数积分推算出总的脉冲数

 Distance_Integral +=  gpt12_get(GPT12_T2);

通过我们得到的单位路程的脉冲数,根据瞬时路程=瞬时脉冲积分 / 单位路程脉冲数

得出瞬时路程

代码如下:

   Real_Distance = (float)Distance_Integral / DISTANDE_RATIO; 


你可能感兴趣的:(python,开发语言,后端)