系列文章目录
17届智能车:浅析总转风摄像头的图像处理_ssfight1的博客-CSDN博客_智能车摄像头图像处理
文章目录
目录
1.首先以正常速度将车推出大于1米的距离,然后测量出实际距离以及编码器脉冲积分,最后根据单位距离的脉冲数=实际距离 / 脉冲积分从而计算出单位距离的脉冲数。
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;