汽車儀表步進電機控制算法的仿真
在經(jīng)歷了機械式、電氣式、模擬電子式儀表時代后,汽車儀表進入了如今的步進電機全數(shù)字式儀表時代。目前,國內(nèi)部分中、高檔轎車,均配套使用步進電機汽車儀表。其它汽車也正在配套該類型的儀表。步進電機汽車儀表,將是未來一段時間內(nèi)汽車儀表的主導產(chǎn)品,有著十分廣闊的市場前景。
本文引用地址:http://m.butianyuan.cn/article/196993.htm今后,汽車儀表的功能將更加側重由軟件來完成。這對于產(chǎn)品數(shù)量大并且對成本極為敏感的汽車儀表有著特殊意義。與僅由電子硬件組成的汽車儀表相比,帶有ECU的汽車儀表功能的實現(xiàn)手段更加靈活多樣,產(chǎn)品的“柔性”更好,即在推出新款產(chǎn)品時,能最大限度地利用以前產(chǎn)品的軟、硬件設計成果,這在產(chǎn)品更新?lián)Q代很快的今天和未來顯得尤為重要。
目前,很多半導體芯片制造商都生產(chǎn)汽車儀表板的微控制器,比如NEC、freescale、Fujitsu和Micronas等公司。在此介紹一種基于Micronas CDC3207G微控制器的汽車儀表板步進電機控制的解決方案。
步進電機控制
步進電機又稱脈沖電動機,它能將輸入的脈沖信號變成電動機軸的步進轉動,是一種將電脈沖轉化為角位移的執(zhí)行機構。在非超載的情況下,電機的轉速以及停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響。
控制步進電機實際上是控制輸入脈沖序列,使步進電機軸按照預定方向轉動需要的角度。汽車儀表中應用的主要是兩相步進電機,有兩個獨立繞組。通過控制兩個獨立繞組上的脈沖信號,就能實現(xiàn)對步進電機的控制。此外,一般步進電機內(nèi)部在電機轉軸與指針之間都裝有降速齒輪組,使得轉動軸與指針之間有一定的降速比,這樣可以降低指針轉動的抖動,使電機指針轉動更加平滑。
本控制算法采用Microcomponents公司的SWITEC步進電機,其電機轉動軸與指針之間的轉速比為180:1,即步進電機轉動軸旋轉180°,步進電機的指針旋轉1°。
步進電機控制算法
控制算法基本功能
控制算法主要功能是控制步進電機以完成儀表的顯示,主要是根據(jù)實時數(shù)據(jù)計算得到顯示儀表的位置信息,再根據(jù)位置信息計算出步進電機控制指令。對于內(nèi)部集成了步進電機控制模塊的微控制器,控制算法最終輸出控制寄存器的數(shù)值,微控制器根據(jù)寄存器的數(shù)值產(chǎn)生驅動信號,實現(xiàn)對步進電機的控制。
CDC3207G微控制器
CDC3207G微控制器是Micronas(微開)公司的一款基于ARM7TDMI內(nèi)核的32位[0]微控制器,它集成了7個步進電機模塊,再加上PWM軟件模擬最多可以直接驅動8路步進電機。每個步進電機模塊通過4個控制器內(nèi)部連接了H橋的高電流輸出端口,直接驅動兩相步進電機。通過軟件便可以產(chǎn)生步進電機定位需要的各種脈沖。
CDC3207G的步進電機模塊可以提供多通道的PWM輸出,輸出信號頻率通過硬件設置來選擇,并且各個步進電機模塊輸出信號的時序具有偏移,可以提高電磁兼容性能(EMC)。
根據(jù)控制兩相步進電機的需要,CDC3207G內(nèi)部提供了3個8位的寄存器,用于通過軟件來產(chǎn)生控制脈沖。其中兩個寄存器通過模塊中的比較器與模塊計時器進行比較,用于產(chǎn)生驅動電機的PWM信號,另外一個寄存器用來選擇相應步進電機模塊以及選擇四個輸出引腳的極性。這樣,通過軟件對三個寄存器的操作就能方便地對每一路步進電機進行控制。
此外,CDC3207G還具有零位檢測功能,即檢測電機運轉時的感應電流,得到電機運行的位置信息,據(jù)此判斷電機是否達到初始位置(即汽車儀表的零位)。
控制算法的實現(xiàn)
軟件的主要任務是根據(jù)不斷更新的步進電機位置信息,計算控制寄存器的數(shù)值。同時,為了滿足儀表指示的實時性要求,本方案采用周期性調(diào)用步進電機控制函數(shù)的辦法,根據(jù)實際需要選擇周期。本方案中,調(diào)用步進電機控制函數(shù)的周期為2ms。
除了需要滿足實時性以外,步進電機控制函數(shù)還需要控制步進電機平滑地運轉,這樣,指針的顯示才不會在視覺上給人以不適的感覺。為此,控制函數(shù)需要限制步進電機的速度以及加速度。由于周期性更新步進電機位置信息,所以控制函數(shù)是通過比較當前位置與給定位置來計算每周期的步進量,最終完成給定位置的顯示??刂坪瘮?shù)流程圖如圖1所示。
圖1 步進電機控制函數(shù)流程圖
本方案的SWITEC步進電機的指針顯示范圍為330°,指針每轉動一度,步進電機轉動軸需要轉動180°,在軟件中分為256步來實現(xiàn)。所以,按照步進數(shù)計算的步進電機量程為330×256=84480步。
為保證指針顯示上平滑,流暢,需要限制每一周期的最大步進數(shù)以及相鄰兩個周期步進數(shù)量差,以常量MAX_SPEED以及MAX_ACC分別對電機運行速度和加速度進行限制。
由于需要周期性更新步進電機的位置,且每一周期時間很短,步進數(shù)量有限,所以,對于一個新的儀表位置,步進電機要完成顯示往往需要多個周期來實現(xiàn)。
部分變量的簡單說明見表1。
表1 變量說明
變量名稱
pos_set
pos_act
pos_new
delay_time
speed
speed_old
含義
目標地址
當前位置
本周期結束位置
響應時間
本周期步進數(shù)
上周期步進數(shù)
由于程序中的位置信息都是按照步進數(shù)來表示的,因此,可以預先定義一個常數(shù)數(shù)組,保存步進數(shù)對應的控制寄存器的數(shù)值。這樣,根據(jù)需要步進數(shù)查表便可以得到所需要的寄存器的數(shù)值。
控制算法分析
為了進一步分析本算法的性能,用LabVIEW編程軟件進行算法仿真,這樣就可以很方便地在不連接步進電機的情況下對算法進行分析。在LabVIEW7.1中可以采用圖2的框圖對本算法進行分析。
圖2 LabVIEW的算法框圖
在LabVIEW中,用一個while結構來周期地對算法的目標地址進行處理,每次循環(huán)都得到pos_new的數(shù)值,即每周期結束后步進電機的顯示數(shù)值,然后將該數(shù)值輸出到LabVIEW的前面板上。前面板如圖3所示。
圖3 LabVIEW的算法前面板
通過前面板中Start按鈕可以控制循環(huán)的開始與結束,手動改變pos_set的數(shù)值來模擬實際儀表中的數(shù)據(jù)變化。本例中該值的變化范圍為0至100,并且每次試驗都使該值由0突變?yōu)?00。再用Gauge(量具)來仿真步進電機的顯示,可以很方便地觀察到不同參數(shù)改變后顯示的視覺效果。此外,還可以通過LabVIEW提供的繪圖功能得到控制算法中一些重要變量隨時間變化的圖像,更加直觀地進行性能分析。
圖4 pos_new隨時間的變化
圖4為步進電機目標值pos_set由0突變?yōu)?00的過程中,步進電機實際輸出值pos_new隨時間的變化曲線圖。由于設定的while循環(huán)周期為1ms,所以,時間軸顯示每周期步進電機輸出,縱坐標POS即為步進電機的顯示結果。
觀察0至128ms區(qū)間的曲線,可以看出此階段曲線的斜率是逐漸增加的,表明步進電機在加速運行,因為初始階段步進電機目標位置與實際位置之間的差值很大,計算得到的speed_delta數(shù)值超過了MAX_ACC這一常數(shù)的限制。128ms至475ms區(qū)間的曲線為直線,說明在此區(qū)間步進電機已達到最大速度MAX_SPEED,并以該速度勻速運行。
余下區(qū)間的曲線,斜率是逐漸減小的,這時步進電機在減速運行,因為這時目標位置與實際位置的差值已經(jīng)很小,計算得到的speed_delta數(shù)值已經(jīng)處于由MAX_ACC限制的范圍內(nèi)。變量speed隨時間的變化曲線更能清楚地分辨出這三個過程。如圖5所示。
圖5 speed隨時間的變化
將常數(shù)MAX_ACC(即相鄰周期步進數(shù)量的變化)由1改為10,仿真得到結果如圖6所示。從中可以看出,增大MAX_ACC后,曲線中起始階段變陡了,即步進電機起步階段的加速變快了,而步進電機由初始值0到100的完成時間受到的影響不是很大。
圖6 改變MAX_ACC后pos_new隨時間的變化
由流程圖中不難看出,常數(shù)MAX_ACC只是限制了相鄰兩個周期步進數(shù)的變化,而每周期步進數(shù)的限制是由MAX_SPEED來設定的。將該數(shù)值由原來的128改變?yōu)?56再作同上的試驗可以發(fā)現(xiàn),曲線中200ms至400ms之間變得更陡,步進電機由0到100的完成時間縮短的比較明顯。這說明通過改變每周期步進數(shù)量的限制可以比較顯著地改變步進電機的完成時間。
當然,最后的顯示結果與仿真得到的結果,由于步進電機自身性能的原因會有偏差,并且實際步進電機還會有諸如噪音等一些用LabVIEW無法仿真出來的問題。因此,用LabVIEW進行的算法仿真只能作為參考,最后參數(shù)的確定還需要通過在實際步進電機上進行試驗后才能完成。
結語
對于本控制方案,設計開發(fā)人員可以根據(jù)實際的硬件(如步進電機型號)以及儀表產(chǎn)品的需要,在程序中修改相應變量的上下限等常量數(shù)值,就能改變步進電機指示的量程、指示的平滑性、響應速度等一序列指標。修改調(diào)試起來十分方便。
雖然本方案是針對CDC3207G微控制器而設計的,但是軟件設計中的控制算法思想,對于汽車儀表步進電機的控制具有普遍的適用性。
評論