隨著現代電子技術的發展,中高檔汽車上的組合數字儀表越來越多地采用“機電一體化”的步進電機。步進電機又稱脈沖電動機,它能將輸入的脈沖信號變成不連續的機械動作,是一種將電脈沖轉化為角位移的執行機構。對步進電機的每一相來講,輸入的是一個脈沖列,只要控制好電脈沖,就能精確控制步進電機的角位移量,轉速和轉矩。從這個意義上來說,步進電機控制的核心是PWM(脈沖寬度調制)細分控制技術。 用單片機來控制步進電機已有近15年的發展歷史。出于降低總體成本的考慮,長期以來所采用的芯片都是8位單片機。由于單片機自身性能的局限性,對于步進電機的控制常常采用不徹底的細分控制或帶外設的細分控制。不徹底的細分控制一般是將步進電動機的控制位置數(以兩相步進電機為例)的四拍通電邏輯順序變為八拍通電邏輯順序,從而將步進角降為原來的一半。這種方法細分度有限,電機運行極不平滑,而且對步進電機也有損傷。帶外設的細分控制能夠使步進電機的運行平滑穩定,但增加了外部設備(如恒流斬波電路等),使得硬件設計趨于復雜,并且提高了成本。隨著科技的進步和單片機的進一步發展,16位單片機的價格不斷降低,使得其在步進電機控制上的廣泛應用成為可能。由于單片機自身功能曾強了,繁瑣的外部設備不再需要,軟件編程也變得相對簡單。這里即采用 16位英飛凌單片機XC2267M實現步進電機的平穩控制。 硬件選擇 Infineon XC2267M屬于XC2200微控制器系列,集成了電壓調節器和多種振蕩器,是全功能的16位單片CMOS微控制器。此方案主要使用的是XC2267M 的CC2(Capture/Compare Unit2 捕獲/比較單元2)模塊。 CC2模塊提供了16個捕獲/比較通道以及同它們相配合的2個16位定時器,能支持16個內部中斷。每個CC2通道都可捕獲內部或外部事件,也可以比較計時器的內容與給定值,并修改輸出信號。這里采用的是其中的8個通道配合8個I/O口控制4個步進電機。其中,SIN+和COS+為CC2通道,輸出 PWM波形,SIN-和COS-為I/O口,進行0-1變化。 表1 CC2模塊各通道功能列表 由于單片機可以直接輸出幾路互不影響的PWM,所以無需依靠任何外部設備就可以同時實現對幾個步進電機的控制。 圖1 基于XC2267M的儀表盤步進電機控制示意圖(儀表盤其他模塊圖中未標明) 汽車儀表中應用的主要是兩相步進電機,即步進電機中有兩個獨立繞組(定子兩個相對極上的線圈串聯成為獨立繞組)。步進電機兩個繞組的夾角一般有90°和60°兩種樣式,實驗采用的是60°樣式的VID29-05,內置減速比180:1的齒輪系,輸出軸的步距角最小為1/12°,最大角速度 600°/s。 軟件編程 1確定細分度,建立變量賦值表 ● 確定步進電機每圈的細分度,并根據細分度建立電機在每個位置的兩相PWM占空比表。這里采用的是15細分,即每步間隔24°。 ● 根據兩相電壓表,結合所選用的單片機的特性建立對應的PWM寄存器賦值表,儲存在全局數組里。 ● 根據所選用的步進電機型號的特性曲線,建立速度等級數組。步進電機的轉速完全和PWM寄存器賦值的速度有關。根據VID29-05的特性,速度數組里包含 255個元素。這255個元素定義了PWM寄存器賦值的時間間隔,元素值越大,步進電機轉速越慢。 2 儀表盤步進電機驅動的編程注意事項 指針的運動要有“慣性”的視覺效果。即,指針從任意位置甲移動到目標位置乙的時候,在開始階段,要進行加速運動,運動至接近位置乙的時候,要進行減速,最后穩定在位置乙。 加速減速的幅度與當前位置和目標位置的間距以及步進電機的選型相關。在指針轉動的過程中,對目標位置的變化要實時反應。只有在當前位置和目標位置的差距大于一定范圍時,指針才運動。步進電機不允許旋轉方向的突變,比如,電機正轉時接到反轉請求,一定要勻減速至0后才能反轉。 考慮到EMC的要求,PWM的頻率不要超過20kHz。 3 算法 主程序對當前步數和目標步數比較判定,決定是否轉動,以及轉動的速度大小。為達到這個目的,引入變量Move-time 與轉動一步標志位Move_One_Step_Enable,實際轉動的速度控制通過在主循環最后Move_One_Step_Enable置1和依據當前步進電機速度級別從速度數組里取相應的元素對Move-time的賦值和來實現。只有當Move-time=0時,才再一次進入主循環對其進行賦值。 中斷程序對走步計時遞減,并根據標志做馬達轉動一步處理。每進入一次中斷,只要Move-time不為0,則Move-time減1。如果 Move_One_Step_Enable為1,步進電機賦值一次,否則不賦值,中斷時間為200μs。 比如,最低的速度等級元素為100,則在主循環里,Move_One_Step_Enable被置為1,Move-time賦值為100。在此后的第一個中斷里,電機運行一步,Move_One_Step_Enable=0,同時Move-time減為99。此后,主程序和中斷程序都不進行任何操作,直到第100次中斷發生,Move-time減為0,才再一次進入主循環對Move-time賦值。也就是說,在(200×100)μs的時間里,步進電機只行動了一次。相反,如果速度等級高,則Move-time的賦值相應小,電機會在更短的時間內再次行動,使步進電機轉速看上去“提高”了。 為保證速度之間過渡的平滑性,防止突變對步進電機造成的損傷,每3次進入主循環才允許更改一次速度等級,即每個速度等級步進電機至少走3 步。 4 主函數詳解 首先判斷指針是否需要轉動,如果否,直接跳到結束,等待新一輪判斷。如果判定結果為需要轉動,繼續判斷上一步是正向還是反向運動。 圖2 主函數流程圖 若判定結果為正向運動,進入正向運動模塊,繼續判斷當前位置和目標位置是否一致。 如果目標位置和當前位置一致,則表明指針已到達指定位置,此時進入防抖模塊,并將Move-time 置為1。 如果目標位置和當前位置不一致,則要進一步判斷目標位置是否大于當前位置。如果目標位置小于當前位置,則表明在步進電機的正向運動中檢測到反向運動的請求。此時,進入反向運動需求相應模塊,逐漸減小步進電機轉速,最后改變步進電機運行方向標志位。 如果目標位置大于當前位置,則表示運動需求仍為正向,此時需要判斷目標位置和當前位置之差的大小。如果位置差很大,而步進電機轉速沒有到達最大,則提速;如果轉速已達到最大,則保持該速度。如果位置差小于某一特定值,則進入減速狀態。 5中斷函數詳解 首先判斷指針是否需要轉動,如果是,表明上次轉動尚未完成,直接跳出中斷,等待下一次中斷。如果判定結果為不要轉動,繼續判斷上一步是正向還是反向運動。 圖3 中斷函數流程圖 若判定結果為正向,則繼續進行下一步判斷:目標位置和當前位置是否一致。結果為反向則進入反向運動中斷處理模塊,流程結果類似。 判斷轉動一步標志位是否為1。若為1,依據當前位置從PWM數組里賦新值給PWM寄存器,步進電機行動一步,當前位置前進一步(若為反向則退后一步)并清零轉動一步標志位。這樣下次進入中斷時,若轉動一步標志位沒有在主循環里重新賦值為1,步進電機就不會再次轉動。 每次進入中斷,當Move_time不為0時,Move_time減1,直至減為0為止。 實驗結果 經過巴特沃斯二階低通濾波后,步進電機兩相電壓波形都為比較平滑的正弦波,波形相位差為120°,與理論的細分波形相吻合。 步進電機從位置A移動到位置B的過程中,先加速(如果AB距離足夠大,步進電機將加速到最大轉速后勻速運行)。在接近位置B時,步進電機將減速,最后停止在位置B。從上圖可以看出,加速階段正選的波長逐漸變窄,減速時則逐漸變寬。 圖4 步進電機勻速運轉兩相電壓圖 圖5 步進電機加速狀態單相電壓示意圖 圖6 步進電機減速狀態單相電壓示意圖 結論 利用單片機可方便的對步進電機的速度和位置進行控制,可靠地實現各種步進電機的操作,完成各種復雜工作。這里提出的步進電機分步控制方法,依靠Infineon最新的XC2267M單片機CC2模塊強大的16個PWM輸出通道,同時驅動4個步進電機,成功通過軟件編程代替驅動芯片實現儀表盤步進電機的細分控制,運行結果穩定可靠,并節省了外部設備,降低了成本。 |