本發(fā)明涉及汽車電子嵌入式技術(shù)領(lǐng)域,尤其涉及一種基于車載控制器的編碼器旋鈕控制方法及設(shè)備。
背景技術(shù):
汽車中控臺一般都有多個編碼器旋鈕,方便駕駛員通過旋轉(zhuǎn)來調(diào)節(jié)電子設(shè)備,如車載娛樂系統(tǒng)的音量調(diào)節(jié)、收音機(jī)的頻點(diǎn)調(diào)節(jié),還有空調(diào)控制器的溫度、風(fēng)量調(diào)節(jié)等。目前編碼器旋鈕控制方法都是通過查詢多個端口高低電平狀態(tài),根據(jù)端口高低電平的先后順序的規(guī)律來判斷編碼器是順時針或逆時針旋轉(zhuǎn)。為了防止誤判或無響應(yīng)等問題,這就要求處理器快速周期查詢多個端口電平的狀態(tài),常用的做法是大約1毫秒周期定時查詢多個端口電平的狀態(tài)變化。但這對一個繁忙系統(tǒng)來說,只要系統(tǒng)其它任務(wù)最大執(zhí)行周期大于1毫秒,就會導(dǎo)致系統(tǒng)不能按照規(guī)定的周期查詢編碼器端口的狀態(tài),造成誤判或無響應(yīng)等問題。而且編碼器端口每毫秒查詢也增大了處理器的資源使用率,影響系統(tǒng)其它功能的穩(wěn)定性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于,提出一種能夠防止編碼器旋轉(zhuǎn)時的誤判或無響應(yīng)等問題,能夠降低處理器負(fù)載資源利用率,本發(fā)明提供了一種基于車載控制器的編碼器旋鈕控制方法,通過外部中斷和定時中斷相結(jié)合來判斷編碼器旋鈕的邏輯處理,大大提升系統(tǒng)負(fù)載資源使用率,降低編碼器旋轉(zhuǎn)時的誤判等問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案為:
一種基于車載控制器的編碼器旋鈕控制方法,包括如下步驟:
初始化編碼器端口a、編碼器端口b及編碼器端口c的端口電平狀態(tài)變量為0,設(shè)置第一定時中斷及第二定時中斷,為編碼器端口a配置一外部中斷;
采集編碼器端口a的端口電平并判斷采集到的端口電平變化是否滿足所述外部中斷的條件,若滿足所述外部中斷條件,則確認(rèn)編碼器旋鈕旋轉(zhuǎn)并關(guān)閉外部中斷開啟所述第一定時中斷;若不滿足外部中斷條件則循環(huán)該步驟;
采集編碼器端口a、編碼器端口b及編碼器端口c的端口電平,獲取端口電平狀態(tài)變量,當(dāng)所述端口電平狀態(tài)變量滿足所述第二定時中斷條件時,確認(rèn)編碼器旋鈕的旋轉(zhuǎn)方向,完成旋轉(zhuǎn)檢測;
關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。
其中,所述第二定時中斷條件包括順時針變量與逆時針變量;當(dāng)所述端口電平狀態(tài)變量等于所述順時針變量時,確認(rèn)編碼器旋鈕為順時針旋轉(zhuǎn),當(dāng)所述端口電平狀態(tài)變量等于所述逆時針變量時,確認(rèn)編碼器旋鈕為逆時針旋轉(zhuǎn)。
其中,若至少兩個以上端口電平為低或在設(shè)定任務(wù)周期內(nèi)未采集到第二定時中斷條件,則關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。
其中,所述編碼器端口a的外部中斷為電平下降沿中斷。
其中,所述第一定時中斷的定時周期為200us,第二定時中斷的定時周期為2ms。
本發(fā)明還公開一種基于車載控制器的編碼器旋鈕控制設(shè)備,包括:
處理器,適于實(shí)現(xiàn)各指令;以及
存儲設(shè)備,適于存儲多條指令,所述指令用于由處理器加載并執(zhí)行:
初始化編碼器端口a、編碼器端口b及編碼器端口c的端口電平狀態(tài)變量為0,設(shè)置第一定時中斷及第二定時中斷,為編碼器端口a配置一外部中斷;
采集編碼器端口a的端口電平并判斷采集到的端口電平變化是否滿足所述外部中斷的條件,若滿足所述外部中斷條件,則確認(rèn)編碼器旋鈕旋轉(zhuǎn)并關(guān)閉外部中斷開啟所述第一定時中斷;若不滿足外部中斷條件則循環(huán)該步驟;
采集編碼器端口a、編碼器端口b及編碼器端口c的端口電平,獲取端口電平狀態(tài)變量,當(dāng)所述端口電平狀態(tài)變量滿足所述第二定時中斷條件時,確認(rèn)編碼器旋鈕的旋轉(zhuǎn)方向,完成旋轉(zhuǎn)檢測;
關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。
其中,所述第二定時中斷條件包括順時針變量與逆時針變量;當(dāng)所述端口電平狀態(tài)變量等于所述順時針變量時,確認(rèn)編碼器旋鈕為順時針旋轉(zhuǎn),當(dāng)所述端口電平狀態(tài)變量等于所述逆時針變量時,確認(rèn)編碼器旋鈕為逆時針旋轉(zhuǎn)。
其中,若至少兩個以上端口電平為低或在設(shè)定任務(wù)周期內(nèi)未采集到第二定時中斷條件,則關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。
其中,所述編碼器端口a的外部中斷為電平下降沿中斷。
其中,所述第一定時中斷的定時周期為200us,第二定時中斷的定時周期為2ms。
本發(fā)明的有益效果為:
一、本發(fā)明通過外部中斷事件觸發(fā)編碼器的按鍵旋轉(zhuǎn)判斷處理,當(dāng)編碼器旋鈕無旋轉(zhuǎn)操作時就不需要有任何操作,不需要周期性的掃描端口狀態(tài),有效解決了查詢方式導(dǎo)致處理器效率低的問題,也降低了編碼器識別操作對系統(tǒng)其他任務(wù)的時序干擾。
二、通過外部中斷和定時中斷相結(jié)合,使得整個編碼器旋轉(zhuǎn)識別都在中斷函數(shù)中識別,通過配置中斷的優(yōu)先級,使得編碼器識別不被其他系統(tǒng)任務(wù)打斷,保證了旋轉(zhuǎn)識別的正確性,也規(guī)避了任務(wù)中周期查詢時的誤判問題。
三、根據(jù)編碼器端口a、編碼器端口b及編碼器端口c電平的變化規(guī)律,通過獲取端口電平狀態(tài)變量進(jìn)行判斷是順時針還是逆時針操作,簡化了編碼器識別的方法。
四、本發(fā)明由于在外部中斷中已經(jīng)識別到了按鍵旋轉(zhuǎn)操作,考慮到代碼的一致性和健壯性,將旋轉(zhuǎn)判斷放在定時中斷中處理。
附圖說明
圖1為本發(fā)明一種基于車載控制器的編碼器旋鈕控制方法的流程圖;
圖2為本發(fā)明編碼器旋鈕順時針旋轉(zhuǎn)的端口波形圖;
圖3為本發(fā)明編碼器旋鈕逆時針旋轉(zhuǎn)的端口波形圖。
具體實(shí)施方式
以下將結(jié)合附圖所示的具體實(shí)施方式對本發(fā)明進(jìn)行詳細(xì)描述。但這些實(shí)施方式并不限制本發(fā)明,本領(lǐng)域的普通技術(shù)人員根據(jù)這些實(shí)施方式所做出的結(jié)構(gòu)、方法、或功能上的變換均包含在本發(fā)明的保護(hù)范圍內(nèi)。
參閱圖1只圖3所示,本發(fā)明的一實(shí)施方式中公開一種基于車載控制器的編碼器旋鈕控制方法,包括如下步驟:
s100:初始化編碼器端口a、編碼器端口b及編碼器端口c的端口電平狀態(tài)變量為0,設(shè)置第一定時中斷及第二定時中斷,為編碼器端口a配置一外部中斷;
對編碼器模塊初始化,所述初始化包括將編碼器端口a、編碼器端口b及編碼器端口c配置成輸入端口,并設(shè)置第一定時中斷及第二定時中斷,優(yōu)選的設(shè)定好定時周期為200us,但此時不開啟定時中斷。并為編碼器端口配置一外部中斷,優(yōu)選的設(shè)定為電平下降沿外部中斷。初始化后端口電平臨時狀態(tài)變量為0,端口電平狀態(tài)變量為0。
s200:采集編碼器端口a的端口電平并判斷采集到的端口電平變化是否滿足所述外部中斷的條件,若滿足所述外部中斷條件,則確認(rèn)編碼器旋鈕旋轉(zhuǎn)并關(guān)閉外部中斷開啟所述第一定時中斷;若不滿足外部中斷條件則循環(huán)該步驟;
編碼器端口a、編碼器端口b及編碼器端口c默認(rèn)為高電平,如果旋轉(zhuǎn)編碼器時,編碼器端口a電平由高到低時,會產(chǎn)生下降沿外部中斷。即采集到的端口電平滿足外部中斷條件,即可確認(rèn)存在旋轉(zhuǎn)操作。接著開啟所述第一定時中斷,等到第一定時中斷到定時周期后執(zhí)行下一步驟。
s300:采集編碼器端口a、編碼器端口b及編碼器端口c的端口電平,獲取端口電平狀態(tài)變量,當(dāng)所述端口電平狀態(tài)變量滿足所述第二定時中斷條件時,確認(rèn)編碼器旋鈕的旋轉(zhuǎn)方向,完成旋轉(zhuǎn)檢測;
在該步驟中,等待第一定時周期到后,采集各個端口的端口電平,在端口臨時狀態(tài)變量中,位0保存編碼器端口a的電平狀態(tài),位1保存編碼器端口b的電平狀態(tài),位2保存編碼器端口c的電平狀態(tài)。如果編碼器端口a、編碼器端口b或編碼器端口c有一個管腳為低電平,當(dāng)編碼器端口b為低電平時,觸發(fā)第二定時中斷條件,端口臨時狀態(tài)變量=0x05;當(dāng)編碼器端口c為低電平時也觸發(fā)第二定時中斷條件,端口臨時狀態(tài)變量=0x03。端口電平狀態(tài)變量=端口臨時狀態(tài)變量。系統(tǒng)依據(jù)端口電平狀態(tài)變量的值確定編碼器旋鈕的旋轉(zhuǎn)方向,所述第二定時中斷條件包括順時針變量與逆時針變量,本發(fā)明的一實(shí)施方式中設(shè)定順時針變量為0x03,設(shè)定逆時針變量為0x05。當(dāng)所述端口電平狀態(tài)變量等于所述順時針變量時,確認(rèn)編碼器旋鈕為順時針旋轉(zhuǎn),當(dāng)所述端口電平狀態(tài)變量等于所述逆時針變量時,確認(rèn)編碼器旋鈕為逆時針旋轉(zhuǎn)。即當(dāng)編碼器端口b為低電平時,所述端口電平狀態(tài)變量等于所述順時針變量0x03,確認(rèn)編碼器旋鈕為順時針旋轉(zhuǎn)。當(dāng)編碼器端口c為低電平時,所述端口電平狀態(tài)變量等于所述逆時針變量0x05,確認(rèn)編碼器旋鈕為逆時針旋轉(zhuǎn)。
s400:關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。在完成一次旋轉(zhuǎn)檢測后,把各個端口電平狀態(tài)變量清0,變量左移四位重新開始下一次旋轉(zhuǎn)檢測,
在步驟s300中若至少兩個以上端口電平為低或在設(shè)定任務(wù)周期內(nèi)未采集到第二定時中斷條件,則關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。在一任務(wù)周期內(nèi),若第二定時中斷始終未被觸發(fā),則將關(guān)閉第一定時中斷即第二定時中斷,開啟外部中斷,重新開始旋轉(zhuǎn)檢測。在所述任務(wù)周期內(nèi),如果同時有兩個以上端口電平為低,則把端口電平狀態(tài)變量清0,關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷。所述任務(wù)周期可依據(jù)需求進(jìn)行設(shè)定,如設(shè)定成10毫秒、50毫秒或80毫秒等時間周期,在任務(wù)周期內(nèi)若沒有完成旋轉(zhuǎn)檢測則強(qiáng)行關(guān)掉第一定時中斷、第二定時中斷,開啟外部中斷。
上述實(shí)施方式中,所述第一定時中斷的定時周期可設(shè)定為200us,第二定時中斷的定時周期可設(shè)定為1-2毫秒之間的值。所述第一定時中斷、第二定時中斷可依據(jù)需求進(jìn)行靈活配置。
本發(fā)明的一實(shí)施方式中還公開一種基于車載控制器的編碼器旋鈕控制設(shè)備,包括:
處理器,適于實(shí)現(xiàn)各指令;以及
存儲設(shè)備,適于存儲多條指令,所述指令用于由處理器加載并執(zhí)行:
初始化編碼器端口a、編碼器端口b及編碼器端口c的端口電平狀態(tài)變量為0,設(shè)置第一定時中斷及第二定時中斷,為編碼器端口a配置一外部中斷;
采集編碼器端口a的端口電平并判斷采集到的端口電平變化是否滿足所述外部中斷的條件,若滿足所述外部中斷條件,則確認(rèn)編碼器旋鈕旋轉(zhuǎn)并關(guān)閉外部中斷開啟所述第一定時中斷及第二定時中斷;若不滿足外部中斷條件則循環(huán)該步驟;
采集編碼器端口a、編碼器端口b及編碼器端口c的端口電平,獲取端口電平狀態(tài)變量,當(dāng)所述端口電平狀態(tài)變量滿足所述第二定時中斷條件時,確認(rèn)編碼器旋鈕的旋轉(zhuǎn)方向,完成旋轉(zhuǎn)檢測;
關(guān)閉第一定時中斷及第二定時中斷,開啟外部中斷,將端口電平狀態(tài)變量清0。
在一實(shí)施方式中,所述第二定時中斷條件包括順時針變量與逆時針變量;當(dāng)所述端口電平狀態(tài)變量等于所述順時針變量時,確認(rèn)編碼器旋鈕為順時針旋轉(zhuǎn),當(dāng)所述端口電平狀態(tài)變量等于所述逆時針變量時,確認(rèn)編碼器旋鈕為逆時針旋轉(zhuǎn)。
在上述實(shí)施方式的又一改進(jìn)實(shí)施方式中,所述第一定時中斷的定時周期為200us,第二定時中斷的定時周期為2ms。
上述實(shí)施方式的又一改進(jìn)實(shí)施方式中,所述編碼器端口a的外部中斷為電平下降沿中斷。
上述實(shí)施方式的又一改進(jìn)實(shí)施方式中,所述第一定時中斷的定時周期可設(shè)定為200us,第二定時中斷的定時周期可設(shè)定為1-2毫秒之間的值。
上述實(shí)施方式中,通過外部中斷事件觸發(fā)編碼器的按鍵旋轉(zhuǎn)判斷處理,當(dāng)編碼器旋鈕無旋轉(zhuǎn)操作時就不需要有任何操作,不需要周期性的掃描端口狀態(tài),有效解決了查詢方式導(dǎo)致處理器效率低的問題,也降低了編碼器識別操作對系統(tǒng)其他任務(wù)的時序干擾。通過外部中斷和定時中斷相結(jié)合,使得整個編碼器旋轉(zhuǎn)識別都在中斷函數(shù)中識別,通過配置中斷的優(yōu)先級,使得編碼器識別不被其他系統(tǒng)任務(wù)打斷,保證了旋轉(zhuǎn)識別的正確性,也規(guī)避了任務(wù)中周期查詢時的誤判問題。根據(jù)編碼器端口a、編碼器端口b及編碼器端口c電平的變化規(guī)律,通過獲取端口電平狀態(tài)變量進(jìn)行判斷是順時針還是逆時針操作,簡化了編碼器識別的方法。本發(fā)明由于在外部中斷中已經(jīng)識別到了按鍵旋轉(zhuǎn)操作,考慮到代碼的一致性和健壯性,將旋轉(zhuǎn)判斷放在定時中斷中處理。
應(yīng)當(dāng)理解,雖然本說明書按照實(shí)施方式加以描述,但并非每個實(shí)施方式僅包含一個獨(dú)立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個整體,各實(shí)施方式中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。
上文所列出的一系列的詳細(xì)說明僅僅是針對本發(fā)明的可行性實(shí)施方式的具體說明,它們并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實(shí)施方式或變更均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。