智能车中电磁归一化该怎么处理

描述

归一化处理

很多一开始的小白,在做电磁这一部分时,可能并不太知道归一化,只是通过滤波算法处理后就用解算出来的电感数值,开始写控制算法,这样导致的结果就是,调出来的车可能容错率不高,适应性不强。

换个场地,因受赛道各种因素的影响可能需要不停地调原有设定好的电感值,对整个程序框架影响还是挺大的。

这里我给大家通俗地讲述下到底归一化该怎么处理。

这里我们以一个电感采集为例,就把他命名为AD1,接下来的代码都是表示对AD1电感采集到的数值进行处理。

首先第一步,我们还是先通过滤波算法对AD1电感采集到的数值进行滤波处理:

//AD1-------------------------------------------------------------------------------------    
    for(num = 0; num < 10; num++)
    {
    i = adc_once(ADC1_SE8,ADC_12bit); j = adc_once(ADC1_SE8,ADC_12bit); k = adc_once(ADC1_SE8,ADC_12bit); //B0-3
        //2.取中值
        if (i > j)
        {
          tmp = i; i = j; j = tmp;
         }
         if (k > j) 
           tmp = j;
         else if(k > i) 
           tmp = k; 
         else 
          tmp = i;
         sum+=tmp;
    }
    AD_VAL1=sum/10; 
    sum=0;

然后,我们需要把AD1电感放置在能够使其数值呈现最大的位置处,读出采集到的最大值是多少。

如下图我采集到的就是4095,这里我们引入一个最大值,也引入一个最小值(最小值默认设置为0)。

int   AD_val_1_min=0;
int   AD_val_1_max=4095;

接着,对刚才滤波后的电感数值进行限幅处理

//限幅
  if(AD_VAL1 >AD_val_1_max)  AD_VAL1=AD_val_1_max

再然后,进行归一化处理,引入归一化后的电感数值ad_VAL1

//归一化
  ad_VAL1=100*(AD_VAL1 - AD_val_1_min)/(AD_val_1_max-AD_val_1_min);

经过以上步骤处理,就可以把原先电感AD1采集到的数值给限制在0~100之间,电感数值随着赛道的改变就不会变的很大。

因为本来给定的范围就很小,利用归一化处理得到的电感数值进行控制解算,会使得电磁车的适应场地能力更强。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分