歸一化處理
很多一開始的小白,在做電磁這一部分時,可能并不太知道歸一化,只是通過濾波算法處理后就用解算出來的電感數值,開始寫控制算法,這樣導致的結果就是,調出來的車可能容錯率不高,適應性不強。
換個場地,因受賽道各種因素的影響可能需要不停地調原有設定好的電感值,對整個程序框架影響還是挺大的。
這里我給大家通俗地講述下到底歸一化該怎么處理。
這里我們以一個電感采集為例,就把他命名為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文章
663瀏覽量
56596 -
電磁
+關注
關注
15文章
1075瀏覽量
51717 -
智能車
+關注
關注
21文章
402瀏覽量
76913 -
控制算法
+關注
關注
4文章
166瀏覽量
21689
發布評論請先 登錄
相關推薦
評論