归一化处理
很多一开始的小白,在做电磁这一部分时,可能并不太知道归一化,只是通过滤波算法处理后就用解算出来的电感数值,开始写控制算法,这样导致的结果就是,调出来的车可能容错率不高,适应性不强。
换个场地,因受赛道各种因素的影响可能需要不停地调原有设定好的电感值,对整个程序框架影响还是挺大的。
这里我给大家通俗地讲述下到底归一化该怎么处理。
这里我们以一个电感采集为例,就把他命名为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之间,电感数值随着赛道的改变就不会变的很大。
因为本来给定的范围就很小,利用归一化处理得到的电感数值进行控制解算,会使得电磁车的适应场地能力更强。
-
滤波
+关注
关注
10文章
661浏览量
56563 -
电磁
+关注
关注
15文章
1073浏览量
51652 -
智能车
+关注
关注
21文章
401浏览量
76875 -
控制算法
+关注
关注
4文章
165浏览量
21663
发布评论请先 登录
相关推荐
评论