基于大學生方程式賽車的車速測量與資料顯示
一、設計背景
? 根據調查顯示,越來越多的車隊已經或有意向使用多電機作為賽車的驅動方式,因此賽車各驅動輪的扭矩分配就顯得相當重要,從而需要精準地測量出賽車在各個狀態的車速,
二、設計目標
? 能夠實時、準確地檢測并顯示賽車在0~88 KM/h 的車速,30KM內的里程數,記錄并保存資料
三、設計原理
上圖為車輪內部測速齒輪,其右側為齒輪齒速傳感器(用一吊耳固定在立柱上)
? 齒輪齒速傳感器原理:本質為接近開關,或者稱為霍爾齒輪齒速傳感器,當傳感器檢測在一定距離內檢測到導磁金屬,則發出相應的電平信號,(具體資料某寶上很多,各人型號不同,不做贅述)
? 我們只需要使用單片機采集信號,并計數,每隔一段時間采集一次計數值,并計算即可得出相應的里程數和車速,
? 由于目標測速輪為從動輪,可以較為準確的測量車輛的實時速度,能夠降低演算法的復雜度,同時由于本文主要講解測速的基本方法,這里暫不考慮車輛發生側向滑移以及車輪抱死的情況,
四、設備/器材
單片機:STM8s105k4 單片機
傳感器:齒輪測速高頻率傳感器 三線NPN常開型 安裝尺寸:M8
顯示幕:0.96寸OLED顯示屏(IIC) 或 陶晶馳3.5寸串口屏
測驗車輛:鹽城工學院電動方程式 E 45 賽車
五、設計概念圖

六、演算法設計
? 從第三部分,我們知道可以用單位時間內傳感器掃過的齒輪齒數來計算車速以及里程數,
? 設傳感器掃過的齒數為 N ,單位時間為 T ,則單位時間內傳感器掃過的齒數v為:
?
v
=
N
/
T
v=N/T
v=N/T
? 已知齒輪齒數為n,車輪直徑為d,則車輛行駛的里程數S為:
?
S
=
N
/
n
?
(
p
i
?
d
)
S=N/n*(pi*d)
S=N/n?(pi?d)
? 車速為:
?
V
=
(
p
i
?
d
)
?
v
/
n
V=(pi*d)*v/n
V=(pi?d)?v/n
七、軟體實作
? 本設計采用STM8s105k4單片機作為主控芯片(僅供參考),使用IAR作為編譯軟體,ST-LINK為仿真器,采取外部中斷方式捕獲信號,傳感器每發出一次高電平則單片機產生一次中斷,以此計數,
? 先定義幾個變數:
uchar Num=0;//檢測到的齒輪齒數
uchar N=0;//檢測到的齒輪齒數
uint S=0;//里程
uint V=0;//速度
uint C=用戶自定義;//周長
uchar n1=0;//車輪轉過的圈數
? 這里使用外部中斷EXTI0來捕獲傳感器信號,因此需對相應的I/O口、中斷配置初始化:
/********************GPIO初始化*******************/
void GPIO_Init()
{
PA_DDR_DDR2=0;//PA2配置為輸入模式
PA_CR1_C12 =1;
PA_CR2_C22 =1;//設定為中斷上拉輸入
}
/********************EXTI0初始化*******************/
void EXTI0_Init()
{
EXTI_CR1 = 0X02;//設定PA僅為下降沿觸發
//這里沒有配置中斷優先級,原因是本部分設計中并不涉及其他中斷,若涉及其他中斷須配置中斷優先級
}
? 在配置完成后,就進入主函式進行運算,其他的一些初始化配置須參考實際情況:
/******主函式******/
int main( void )
{
CLK_Init();
asm("sim");//main函式的優先級配置為3級(禁止中斷)
EXTI0_Init();
GPIO_Init();
asm("rim");//main函式的優先級配置為0級(中斷使能)
while(1)
{
******自定義代碼********
Delay_nms(500);//自行定義延時函式,此處不贅述
V=Num*((pi*d)/n)*2;
Num=0;
******自定義代碼********
}
}
? Num與N相等,由于計算速度需要,Num要定期清零,為不影響里程數,此處區別開,而速度的定義為單位時間內為物體移動的距離,所以為了方便顯示速度500ms變化一次,代入計算時須×2以得出每秒的速度,若速度須帶入計算,精度要求較高,則可:
while(1)
{
******自定義代碼********
Delay_nms(20);//自行定義延時函式,此處不贅述
V=Num*(C/n)*50;
Num=0;
******自定義代碼********
}
在運行主函式時傳感器觸發外部中斷,則進入中斷服務函式:
#pragma vector = 0x05//埠A外部中斷
__interrupt void EXTI_PORTA_IRQHandler( void)
{
Delay_nms(50);
N++;
Num++;
n1=N/n;
S=n1*C;
}
顯示的代碼很快更新,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291348.html
標籤:其他
上一篇:Chrome終于被超越了!!!
