單片機開發商深圳英銳恩分享單片機技術在電氣傳動控制系統中的應用與研究。
摘 要:本文從單片機的技術應用角度出發,提出了一種用80C196系列單片機實現數字調速的系統控制方案,并在實際中驗證了本方案的可行性,同時對80C196單片機的一些關鍵技術作了深入研究,以期開發出更高性能的單片機系統。
關鍵詞:80C196 單片機 RL196 PWM C96
0 引 言
單片機進入中國10余年以來,以其體積小、功能強、擴展靈活、使用方便等特點,逐漸應用到各行業的工程實際應用中。目前,大多數系統以51系列的8位單片機為首選,但是在一些比較復雜的、性能要求較高的系統中,它不得不讓位于16位單片機。本文采用的MCS-96系列的16位單片機特別適用于各類自動控制系統。如交直流調速機、工業過程控制系統、伺服系統等。本文以一直流伺服控制系統裝置為例,介紹了系統的結構,改進了有關算法,實驗證明,此系統可以良好地跟蹤給定速度曲線,響應時間可控制在10-3s的數量級以內。
1 硬件系統的構成
1.1 電氣主回路
主電路結構圖如圖1所示,采用雙極性的H橋構成,用大功率硅管整流橋將交流整流成直流,采用
電壓型穩壓方式(并入大容量電容)提供主電源,用IPM中的IGBT構成H橋,采用PWM進行調速,其中富士通的IPM技術較為成熟,并具有多種保護功能。只需加入一定的周邊電路便可進行驅動。
1.2 單片機系統
本文采用MCS-96系列的80C196MC構成16位總線的單片機系統,與MCS-51系列相比,此類型的單片機至少在以下幾方面提高了系統的實時性。
?。?)CPU中的算術邏輯單元不采用常規的累加器結構,改用寄存器-寄存器結構,CPU的操作直接面向256字節的寄存器,消除了CPU結構中存在的累加器瓶頸效應,提高了操作速度和數據吞吐能力。
?。?)256字節寄存器中,24字節是專用寄存器,其余232字節均為通用寄存器。其通用寄
存器的數量遠比一般CPU的寄存器數量多。這樣可以為各中斷服務程序中的局部變量指定專門的寄存器,免除了中斷服務過程中保護和恢復現場所支付的軟件開銷,并大大方便了程序設計。
?。?)80C196MC具有波形發生器(WG),不用外圍元器件即可生成PWM波形,而波形發生器(WG)具有靈活的死區調節功能。這對實用
PWM功率放大器很關鍵,它能防止雙極H型主電路四個IGBT“共態穿通”。所謂“共態穿通”即橋臂中的一個IG-BT沒有退出飽和而另一個IGBT已導通而形成電源短路的現象。
?。?)有一套效率更高、執行速度更快的指令系統,可采用20M赫茲的時鐘,并新增加了EPA(事件處理器陣列),PTS(外設事務服務器),再加上其內帶的10位A/D轉換器,從而可以快速完成電流和轉速的轉換過程,滿足對系統動態響應時間的要求。
其中,16位單片機的系統構成如下:由于伺服系統電流控制調節器采樣周期短、計算量大,所以80C1
96MC系統采用16位系統總線以提高系統的吞吐能力。二片EPROM27C256地址分配為:2000H~7FFFH;二片RAM62256地址分配為:A000H~FFFFH;由于采用16位地址數據總線,二片存儲器共用同一地址,具體聯接如下:系統地址總線A0不用,A1與EPROM、RAM的
A0連接,A2與A1連接,……依此類推,A15與A14連接。當CPU讀存儲器高位地址時,同時選中高、低位的存儲器,高8位、低8位的數據同時讀入
CPU,由CPU正確選擇高8位的數據作為操作數,舍去低8位的數據;讀低8位時情況也一樣。RAM的片選信號由INST和A15通過與非門構成(RAM
=INST+A15———),其中要注意的是INST在讀程序存儲器時為低電平,但要避開2000- 2080的地址,因為在讀取中斷向量時,INST引腳為高電平。其系統原理框圖如圖2所示。
2 軟件系統
采用C與ASM的混合編程模式,下面著重于其協同開發和算法的改進進行闡述。
2.1 C程序與匯編程序的協同開發
匯編語言的難點在于數據處理。由于匯編語言不直接支持單精度的浮點運算,而現在單片機開發日趨復雜,在許多地方必須應用高精度的復雜算法。C96直接支持單精度的浮點運算,對于大多數場合已經夠用,并且可以方便的通過算法擴展到雙精度。算法的設計上已有大量的C程序可供選用,基本不用重新開發。在這些模塊中應用C96可以盡快地解決問題。然而,完成同樣的功能,C96程序經編譯連接生成的代碼比匯編生成的代碼稍長。在需要實時響應的場合,開發者往往從執行速度的角度出發,把這些模塊用匯編代碼實現。其實,筆者認為凡是匯編實現的功能用C96都能實現,只是一個熟練程度的問題,而且據最新資料,新版的
C96編譯器的效率可以達到1.1。在單片機項目中應用C96,更重要的是開發周期可以大大縮短,一般來說,一個資深的C96程序員,他只要花費匯編程序員的一半不到的時間就可以完成開發任務,而兩者的執行速度相差無幾,如果不是有特別苛刻的要求,用C96開發程序將是事半功倍。
例如:
Timer1=0x33f8;
而在匯編中則需要寫成:
LD1CH,33F8H
ST1CH,1F7A[00H]
顯然,C96寫出來的程序具有良好的可讀性,并方便日后的修改和維護,而匯編大多數則要靠注釋來解讀,而且個人注釋風格不同,會帶來調試工作和日后的軟件升級的困難,加長了開發時間和人力投入。
在開發單片機的項目時,經常會遇到關于匯編模塊和C模塊相互調用的問題,下面從兩個方
面加以闡述:
?。?)如果不涉及參數傳遞,則可以采用在程序中嵌入ASM{…}偽指令實現(適用于C96和C51 ) 。
?。?)當涉及參數傳遞的時候,下面以C語言作主程序為例,說明一個相互調用的實例;(只適用于C51)。
主程序:
但在A-FUNC.A51文件中則需按照C51與匯編語言的接口規則進行書寫,完成相應的功能。
NAMEA-FUNC
;聲明函數名稱
;聲明外部函數代碼段名
PUBLICA-FUNC
;外部公共符號
RSEG?DT?-a-func?A-FUNC
?-a-func?BYTE:
;可覆蓋局部數據段
x?00: DS 2;定義傳遞參數字節
RSEG?DT?A-FUNC?A-FUNC
-A-FUNC:
…;程序代碼體
END
;A-FUNC函數結束
因此,我們可以很方便地在程序代碼體處加入所期望的匯編程序。
最后,全部程序編譯鏈接通過后,應仔細查看生成的M96或M51文件,有無溢出或沖突的情況,數
據存儲區與程序存儲區是否定位恰當。對于C196來說,C96程序的代碼段、參數段可以設成是浮動定
位還是絕對定位的,當C96代碼段、參數段與匯編程序沖突時,應用RL196的編譯控制選項ram(…),rom(…),romcode(…),romdata(…)來精確定位代碼數據段解決沖突。
例如:
以上定義了模塊MOD2的代碼的常量數據,MOD3的代碼放在ROM1中,即(2000-3FFFH)處。main、mod1、mod3的代碼和常量放在第二段ROM(4000-FFFFH)中,MOD1的常量數據放在(4000-5FFFH)的ROM中。STACK堆棧段的值應根據最后的
M96文件顯示的總共占用的內存RAM,設為最大可用的堆棧段(用STACKSIZE控制項),C96的子程序調用最好不要超過三級,以免堆棧溢出。經實踐證明,這些C96程序與匯編語言作到了真正意義上的“無縫鏈接”。
2.2 算法的改進
2.2.1 波形發生器工作原理簡介
波形發生器WG是80C196MC單片機最具特色的外設,在PWM伺服系統中起到關鍵的作用。80C196MC的WG可產生三相(三路)正弦PWM
(SP-WM)波形用于三相交流同步電機的變頻調速,這種情況的WG工作方式稱為中心對準方式;也可產生斬波調壓的PWM用于直流電機調壓調速,這種工作方式稱為邊沿對準方式。下面對PWM伺服系統采用的邊沿對準方式給予簡要介紹。
工作于邊沿對準方式,不考慮死區時間的影響的工作波形見圖3。有關的幾個寄存器意義如下:
?。?)WG-RELOAD:重裝載寄存器,決定載波周期。
?。?)WG-COMPX(X=1,2,3):相位比較寄存器,決定波形占空比。
?。?)WG-COUNT:雙向計數器,為WG的時基(邊沿對準時,只向上計數)。
當WG-COUNT的值一直與WG-RELOAD的值比較,當等于WG-RELOAD的值時,WG復位到1,又重新開始計數。同時WG-COUNT的值也一直與WG-COMPX的值比較,當WG-COUTN的值等于WG-COMPX的值時改變輸出引腳(WGX)的電平,輸出PWM波形。當WG-COUNT復位為1時,引發一次WG中斷,CPU響應WG中斷時,根據電流環運算得出的新的WG-COMPX的值,改寫WG-COMPX的值,改變輸出波形的占空比,實現調節電機轉速的目的。
?。?)WG-CON:控制、死區時間寄存器,決定WG的工作方式和死區時間。
前文已談到H型PWM電路中的一個橋臂,當其中的一個IGBT沒有退出飽和時,另一個IGBT又開始導通,會造成電源直接短路的“共態導通”現象,這是絕對不能出現的故障。要避免這一現象的發生
就是設置合適的死區時間,即當一個IGBT關斷后,經歷一個死區時間,另一個IGBT接著導通,這樣就
可避免“共態導通”現象出現。
2.2.2 算法改進的思路
實際上,在轉速和電流環的計算中并不是全部計算都需要用到浮點運算的方式,為簡單起見,下面論述只考慮轉速環(電流環當成一比例環節):
因為采用的是轉速編碼器采樣轉速信號,而80C196MC系列的單片機用相移計數器的方式即可
以獲得時間T內的轉速值,而這個值一定是整數,因此轉速的跟蹤精度實際上取決于轉速編碼的精度,當T時間取一較小的時間間隔,我們完全可以用時間T內獲得的脈沖數PL作為轉速值,實際上此時的轉速為:PL/T,我們以時間T作為速度環控制回路采樣周期,當給定速度同樣在整數值給出時,如圖4所示,由于輸出PWM周期一定(WG-RELOAD取為100μs),輸出比較寄存器WG-COMP1也只能在整數范圍變化,PI控制器的輸入為整數SP-GIVEN-SP-NOW,輸出同樣為整數,所以只需調整PI的參數就可達到對轉速環的控制。
實際上,我們不難證明給定轉速如果換算成在T時間內脈沖數不是整數的話,其控制作用同整數值的效果是一樣的。但是PI參數經常以浮點數的方式出現,我們在調試過程中先用浮點數計算定下P、I參數的值之后,再利用C96的賦值運算符賦予一整型變量,這樣即充分利用了C96的浮點運算庫,又精簡了代碼,提高了運算速度。對于電流環同樣可以依照以上方法確定電流環的P、I參數并進行電流控制。
2.2.3 程序框圖和實驗結果
在以上思路的指引下,我們設計了如下程序框圖并對轉速環進行了驗證,可以控制轉速環的調節時間在數量級以內。
(文源網絡,侵刪)