實際應用中會遇到電池電量顯示的問題,可以用微控制器的adc模組取樣電池的電壓,然後輸出,普通的做法是將取樣的電壓如下計算得到電量百分比輸出
static uint8_t cal_percentage(void)
將得到的數值加上百分號顯示出來,就可以了。
但是在實際應用過程中,有些微控制器的供電電壓,不等過低,電壓過低就不能正常工作,相當於在電池電壓在降到工作能正常工作的電壓的最低值是就要給使用者報警資訊,此時電量顯示用改為0%較為合理。
這樣的話在實際運用過程中需要實際設計電量曲線,根據不同產品的需求可以設定不同的電量曲線,下面簡說下,用到的簡單的電量曲線的設計。
設計電量曲線的時候可以根據不同需求設定不同的掉電電量的下降的速度,可以分塊來設計,相當於用折線來擬合曲線,如下設計電量和對應的百分比值。
static const float set_voltage =
;static const uint8_t set_percentage =
;
可以看到使用的分段計算的段越多,這樣擬合出來的曲線越平滑,可以根據實際的產品設計要求來實現。
對電壓和相應的電量百分比分段後就可以就算得到的get_adc_value在乙個小的百分比段內的百分比,再加上偏移值就可以就算出實際需要的百分比。
假設現在的電壓get_adc_value在voltage_table1和voltage_table2之間,那麼實際需要的電量百分比則為:
[(get_adc_value - voltage_table2)/(voltage_table1 - voltage_table2)] * (percentage_table1
-percentage_table2) + percentage_table2
程式**如下:
static uint8_t cal_percentage(uint16_t adc_value)
}if( i>= length)
if(i == 0)
return (adc_value - set_voltage[i])/((set_voltage[i-1] - set_voltage[i])/(set_percentage[i-1] - set_percentage[i])) + set_percentage[i];
}
三次Beizer曲線擬合演算法
beizer曲線的一些特性這裡不再贅述,大家可以去網上檢視一些資料,很詳細。最近用到輪廓擬合,所以用三次beizer曲線效果還可以,有插值和近似擬合 插值就是曲線過點,近似擬合則不過點 就學習了一下。我是做的beizer曲線插值,插值和近視擬合無非就是控制點選取不一樣。beizer總方程為 p ik...
建模演算法筆記 擬合演算法
在插值演算法中,樣本點太多,那麼多項式的次數過高,會造成龍格現象。儘管可以用分段避免,但我們更想要獲得一條確定的曲線,即使這條曲線不能經過每乙個樣本點,但只要保證誤差足夠小就可以。arg是引數的縮寫,argmin是引數使得 裡面的最小 第一種 絕對值,可以變成第二種 二次方 1 但為什麼不是三次方,...
滴滴演算法大賽演算法解決過程 擬合演算法
概論 gap的 是建立在乙個擬合函式上的。也有一些機器學習的味道。總的gap函式 函式 時間,地區 交通流量和時間有關,乙個地方的擁堵程度和時間有關係 不同的地區,各種設施配置不同。天氣和時間有關。gap函式 函式 交通擁擠度函式 時間,地區編號 poi函式 地區編號 天氣函式 時間 這裡可以認為,...