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