隨著汽車的普及,汽車的安全性越來越受到人們的重視,畢竟這是關(guān)乎生命安全的大事。而現(xiàn)在汽車多采用電動車窗,但是電動車窗仍存在著較大的安全隱患。到目前為止已經(jīng)有多起乘客被上升的車窗夾傷的事故被報道,其中大部分受傷者是兒童,因此電動車窗防夾保護被提出。所謂電動車窗防夾保護,就是一旦在車窗自動上升過程中偵測到有障礙物的存在,車窗就自動停止向上運動,防止損毀障礙物;并向下運動,以釋放障礙物。
電動車窗防夾的基本思想可以概括為:在車窗自動上升過程中,傳感器檢測到障礙物的存在(包括已被夾或判斷有障礙物存在上升途中)。當檢測到有障礙物存在時,驅(qū)動電機反轉(zhuǎn),使車窗下降一段距離,釋放障礙物。本文介紹的防夾保護算法主要是通過檢測電機轉(zhuǎn)速的變化來實現(xiàn)的。
電機周期的測量
在防夾設(shè)計中,嚴格地說涉及到的參數(shù)應(yīng)該是電機的轉(zhuǎn)速。但是,在本課題中,更確切地說,檢測到的不是轉(zhuǎn)速,而是周期。本課題采用Timer模塊里的捕捉模式來檢測兩個脈沖下降沿之間的時間間隔從而得到周期值。周期越大,速度就越慢,反之,周期越小,速度就越快。因此,從功能上看,兩個參數(shù)的效果是一致的。為了節(jié)省微控制器的資源,就直接周期來代替速度進行防夾檢測。
捕捉計算到脈沖周期與實際的脈沖周期之間的換算關(guān)系為:
Timer設(shè)置的是16預(yù)分頻,重裝載值為0000H,因此它的溢出周期為43ms,分辨率為2.7ms。
在周期檢測中,霍爾傳感器的輸出腳與XC886的P3.4口相連。P3.4復(fù)用為Timer21脈沖捕獲模式的輸入引腳。本課題中,當霍爾傳感器輸入為脈沖下降沿時,Timer產(chǎn)生中斷,并在中斷程序中計算周期。具體計算流程如下:
圖1周期計算流程圖
其中,Pre_reload為前一次脈沖到達時寄存器中的值,用當前值減去前一次的值即為周期。值得一提的是,period_count這個變量。當計時器溢出一次,period_count就加一。從而避免因計時器溢出而導(dǎo)致周期計算錯誤。
實現(xiàn)的具體做法是:由于只需在車窗自動上升時進行防夾。所以首先先判斷是否為自動上升。若是自動上升,則判斷是否為第一次進入中斷程序,如果是第一次進入中斷,將當前計數(shù)器中的值存入變量 Pre_reload,如果不是第一次進入,則將當前計數(shù)器的值減去Pre_reload的值作為周期值,再將當前值存入Pre_reload中。留待下一次進入中斷時使用。每進入一次中斷就如此工作,直到收到停止命令或車窗到達頂部為止。
車窗位置的確定
車窗在上升過程中,由于存在車窗重量和窗框阻力等因素,在每個位置上的周期大小是不一樣的。因此判斷車窗位置也是相當重要的。從機械的角度講,電機旋轉(zhuǎn)會帶動鋼絲繩的運動,從而帶動車窗的上下開閉。電機每旋轉(zhuǎn)一定角度,鋼絲繩就相應(yīng)地運動一定行程,因此車窗運動的行程與電機旋轉(zhuǎn)的圈數(shù)成線性關(guān)系。而電機的旋轉(zhuǎn)會使得霍爾傳感器產(chǎn)生脈沖信號,因此車窗位置也可以采用霍爾傳感器和XC886CS中的計時器模塊相結(jié)合的方式來測量。當電機轉(zhuǎn)過一圈,計時器Timer就會捕獲到霍爾信號的下降沿,從而在中斷服務(wù)程序中對車窗位置作出記錄。由于車窗有可能上下運動,因此車窗位置的計算不能只在車窗上升時進行,在車窗下降的時候也要作出相應(yīng)的調(diào)整。因此程序在進入中斷服務(wù)后首先查詢車窗的狀態(tài)是上升還是下降。如果是上升,則電機每轉(zhuǎn)動一圈車窗位置就相應(yīng)遞增;如果是下降,則電機每轉(zhuǎn)動一圈,車窗位置就遞減。
防夾車窗算法的提出和實現(xiàn)
本課題采用的防夾算法是基于電機運行參數(shù)的方法。如何得到準確的運行參數(shù)即周期,是防夾算法能否實現(xiàn)的關(guān)鍵。本課題還根據(jù)實際運行中發(fā)現(xiàn)的算法紕漏,對算法進行優(yōu)化。
防夾試驗數(shù)據(jù)分析
為了得到確切的基準周期和電流值,我們使用通過串口發(fā)送數(shù)據(jù)的方法。利用Keil C中的UART_vSendData8(ubyte ubData)語句發(fā)送周期和電流值,并利用串口助手這個軟件接收數(shù)據(jù)。
當車窗自動上升時,反復(fù)多次發(fā)送數(shù)據(jù)到顯示器。取出運行較好的幾組數(shù)據(jù),取其平均值,計算出每個高度上每次運行時的實時值與平均值的差值,然后確定一個較適合的容差。
從串口發(fā)送出來的值中可以看到,車窗上升的脈沖周期,也就是車窗的上升速度從底部經(jīng)過約12個脈沖后,基本呈線性上升的態(tài)勢。由于通過串口發(fā)送數(shù)據(jù)可以得到在每個點上脈沖周期的確切值,因此對每個點上的周期值均可以取到多次試驗結(jié)果的均值,通過對均值和各次試驗的實際值相比較可以發(fā)現(xiàn),這些值的均值在加上容差1846后,絕大多數(shù)的實際運行值都會小于該值,基于裕量和最大夾持力的考慮,最后決定選擇容差大小為2000。
防夾算法的提出
在算法設(shè)計的時候,只考慮了在車窗自動上升的時候才進行防夾的情況。在其他三種情況下(包括車窗手動上升、車窗手動下降以及車窗自動下降)都不進行防夾判斷。因為車窗下降不存在防夾的問題,如果車窗手動上升時有障礙物被夾持的話,則可以通過手的控制來避免被夾傷。在算法中采用標志位bWIN_Up_Down和bAutoFlag來標示車窗是否為自動上升,如果控制器得到的是自動上升的命令,則這兩位置位。如果這兩位為1,則進行防夾判斷。還有值得注意的是,根據(jù)實驗所得數(shù)據(jù),車窗從底部啟動的3個脈沖內(nèi)其電壓和脈沖周期值相當復(fù)雜而且隨機,沒有任何規(guī)律可循,而且在底部的3個脈沖車窗玻璃的總行程不會超過1cm,因此在這一段不進行防夾。
該算法的思想是,將上節(jié)中提到的基準周期存放在RAM里。然后在車窗自動上升過程中檢測電機運行的實時周期值,將實時值與基準值進行比較,若兩者之間的差值連續(xù)三個脈沖到來時超過容差,即認為有障礙物存在。車窗進入自動下降程序,車窗降到底部。若沒有連續(xù)三個脈沖到來時超過或在容差之內(nèi),則認為無障礙物存在,則自動上升直到車窗頂部。
圖2 正常狀態(tài)下的周期和電流圖
圖3 發(fā)生夾住狀況的周期和電流圖
算法優(yōu)化
根據(jù)算法在實際運行中存在的問題,必須對算法進行優(yōu)化,以得到更好的防夾效果。
4.3.1 車窗在底部啟動時的算法優(yōu)化
根據(jù)對脈沖周期值的綜合分析可知,在第12個脈沖周期之前,該值的變化十分不穩(wěn)定,經(jīng)常會出現(xiàn)超出容差范圍的情況。在此之后該值基本上均在已定容差之內(nèi)。因此對底部的啟動問提,提出的方案是,濾去前12個脈沖點,也就是在前12個脈沖點上不進行防夾。理由是,前10個脈沖點為車窗最底部的部分,車窗行程不超過3cm,對防夾保護不會產(chǎn)生大的影響。
4.3.2 車窗到頂時的算法優(yōu)化
通過實驗可知,如果車窗正常上升的話,車窗玻璃在第209個脈沖時為車窗玻璃與上窗框密封條之間的接觸點。車窗在進入上密封條后由于環(huán)境溫度、空氣濕度的不同導(dǎo)致密封條的摩擦力會不同,因此會出現(xiàn)有的時候車窗不能正常關(guān)閉的情況。
由此可以得出解決的辦法,就是將防夾的上限從第223個脈沖,降至第208個脈沖,也就是在第208個脈沖以上不進行防夾,而以下還是按照原有的算法進行防夾。
4.3.3 車窗中途停止再啟動時的算法優(yōu)化
車窗中途停止再啟動與底部啟動其本質(zhì)是一樣的,兩者的區(qū)別是,底部啟動在第一個脈沖的時候雖然會大的離譜,但是在接下來的幾個脈沖會有下降的趨勢,能給出一個容差,使得兩值能在容差范圍內(nèi),但是中途停止再啟動是連續(xù)幾個脈沖大的離譜,而且隨著車窗位置的不同以及中途停止時間的長短其大小也會發(fā)生變化,所以采取不同的策略進行算法優(yōu)化。
在車窗啟動的時候,忽略最先的8個脈沖以屏蔽由于車窗啟動帶來的脈沖周期的波動。在屏蔽之后,還是按照算法來進行防夾運算。8個脈沖是通過反復(fù)實驗得到的較為合理的值,在8個周期后,周期值基本恢復(fù)正常,在容差之內(nèi)。
圖4 優(yōu)化后的算法流程圖
圖5 發(fā)生防夾動作的周期和電路圖
電動車窗防夾的總結(jié)
本課題采用的防夾算法是離散的,并不是實時的,只是在一定的時間對周期和電流進行采樣。因為霍爾傳感器的采樣也不是實時的。這種方法適用于計算能力不是很強,處理速度不是很快的微處理器。
本課題采用的是絕對式防夾,在每個高度上檢測周期和電流,與基準值比較,三次超出容差就認為有障礙物,進入防夾處理。