許家林,王 鶴,樸仁官
(中國科學(xué)院 長春光學(xué)精密機械與物理研究所,吉林 長春 130000)
步進電機由于其轉(zhuǎn)動的角度和其輸入驅(qū)動脈沖的個數(shù)成正比,可以使用開環(huán)控制來代替閉環(huán)控制,因此,在精度要求不高的運動控制系統(tǒng)中,在工業(yè)領(lǐng)域得到了大量應(yīng)用。特別在多自由度的設(shè)備中,步進電機的個數(shù)隨著自由度的增加而增加。隨著電機個數(shù)的增加,使用一個處理器來控制所有的電機已經(jīng)不能勝任。而通常需要遵循嚴格的時序要求的運動可能只有2~3個,這些有嚴格時序要求運動的控制必須使用1個處理器來實現(xiàn);而其他的運動沒有嚴格時序要求的運動,可以使用不同的處理器來控制。各個處理器之間的同步可以使用網(wǎng)絡(luò)總線進行通訊。
基于Modbus RTU的電機控制系統(tǒng)在伺服系統(tǒng)中得到了應(yīng)用[1],一個較為簡單易實現(xiàn)該協(xié)議的網(wǎng)絡(luò)便是RS-485網(wǎng)絡(luò)。這是個主從式的網(wǎng)絡(luò)結(jié)構(gòu),使用一個主機多個從機。主機負責(zé)所有電機的管理,從機接收主機各種運動指令,并且執(zhí)行響應(yīng)的指令。根據(jù)實時性要求,從機處理器可以只控制一個電機,也可以控制多個電機。這種基于網(wǎng)絡(luò)的步進電機控制器,可以控制的電機數(shù)目由原理的幾個可以寬展到上百個,并且分模塊設(shè)計的設(shè)計方法也增加了系統(tǒng)的可靠性。
文中設(shè)計了基于RS-485網(wǎng)絡(luò)的多步進電機控制系統(tǒng),系統(tǒng)中步進電機的驅(qū)動采用集成功率驅(qū)動器,使用STM32單片機作為步進電機的主控處理器,并且在STM32中實現(xiàn)了Modbus[2]協(xié)議。
基于RS-485網(wǎng)絡(luò)的多步進電機控制系統(tǒng)的結(jié)構(gòu)如圖1所示,在圖中,有一個主機多個從機,使用總線型的拓撲結(jié)構(gòu)將所有的主機、從機組成網(wǎng)絡(luò)。
圖1 主從式RS-485網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Master-slave type RS-485 network structure
在單個處理器構(gòu)成的從機單元中,根據(jù)需要嚴格聯(lián)動的步進電機的數(shù)量,需要設(shè)計單軸、雙軸和三軸的步進電機控制單元,這些控制單元在系統(tǒng)網(wǎng)絡(luò)中有各自的地址,并且有各自的Modbus RTU數(shù)據(jù)模型。
一個三軸控制單元的結(jié)構(gòu)框圖如圖2所示,單片機負責(zé)零位,極限位置的處理,脈沖的發(fā)送和計數(shù)等,電機的驅(qū)動器負責(zé)接收單片機的脈沖信號、方向信號、細分信號等,控制電機的繞組流過的電流,控制電機進行正反轉(zhuǎn)。使用STM32的一個異步串口(UART)進行網(wǎng)絡(luò)通信,并使用SN75176A做電平轉(zhuǎn)換,同時使用一個單片機的一個IO口作為發(fā)送和接收的使能端口。
圖2 三軸系統(tǒng)框圖Fig.2 Three-axis system diagram
步進電機系統(tǒng)由于采用開環(huán)設(shè)計,必須要有零點檢測,否則系統(tǒng)在上電后不能找到系統(tǒng)的零點。也必須有兩個極限位置檢測以防止運動部件超出行程造成機械碰撞導(dǎo)致破壞。一個運動機構(gòu)在運動過程中達到這3個位置時,需要通過光電開關(guān)、機械行程開關(guān)等形式通知控制系統(tǒng),系統(tǒng)以中斷的形式進行管理。STM32F103的外部時間中斷源多達19個,可以方便地為每一個電機分配3個中斷源,提高了控制的可靠性。
步進電機的驅(qū)動方法包括高低壓驅(qū)動,斬波恒流驅(qū)動,調(diào)頻調(diào)壓[3-4]等方式,市場上目前有各種集成功率驅(qū)動器可供選擇。兩相步進電機的驅(qū)動芯片基本都是斬波恒流的方式。根據(jù)功率和電流的大小,可以使用的不同的驅(qū)動芯片,如Allegro MicroSystem公司的A3979[5]可以驅(qū)動2.5 A以下的兩相步進電機,東芝的THB6064H可以驅(qū)動4.5 A以下的兩相步進電機,如果需要更大的驅(qū)動電流,通常使用外置的MOSFET,如 Allegro MicroSystem 公司的 A3986[6],可以提供30~500W的功率,10 A以上的電流。
使用集成功率驅(qū)動芯片驅(qū)動步進電機的關(guān)鍵點是步進電機實現(xiàn)恒流驅(qū)動的原理和細分技術(shù),以選取合適的參數(shù)來使電機穩(wěn)定可靠的運行。
文中根據(jù)設(shè)計需要,使用A3979作為驅(qū)動,實現(xiàn)恒流的方式是固定關(guān)斷時間的PWM電流控制電路。其內(nèi)部使用兩個H橋路分別驅(qū)動步進電機的兩個繞組,并在下橋臂和地之間使用采樣電阻,采集流過繞組的電流,如圖3所示。
兩相繞組中每一項電流的大小,和兩個參數(shù)有關(guān),一個參數(shù)是通過外部設(shè)定的參考電壓,這個參考電壓決定了在整個工作周期中,繞組中電流的最大值,最大值的大小為:
另一個參數(shù)是電機每一步的細分數(shù)決定的,細分數(shù)決定了通過繞組電流占電流最大值的百分比。
圖3 雙H橋驅(qū)動兩相步進電機的結(jié)構(gòu)Fig.3 System structure of 2-phase steppermotor drove by dual H-bridge
當(dāng)電流值達到設(shè)定的百分比值后,開始衰減,衰減的模式有3種:快速衰減、慢速衰減和混合衰減,如圖4所示。固定關(guān)斷時間指的便是這里的衰減時間。衰減的方式不同是依靠H橋的MOS管開關(guān)來實現(xiàn)的。其中要設(shè)置的參數(shù)就是固定關(guān)斷時間。設(shè)置了關(guān)斷時間便可以根據(jù)衰減方式和電流的上升時間計算出MOS管的開關(guān)頻率。MOS管的開關(guān)頻率應(yīng)該避開機械系統(tǒng)的固有頻率,避免發(fā)生共振。使用慢速衰減時,PWM的頻率最高,使用快速衰減時,PWM的頻率最低。A3979的關(guān)斷時間為30~46 ns,加上電流的上升時間,PWM的頻率約為 12~25 kHz。
步進電機轉(zhuǎn)動依靠脈沖驅(qū)動,單片機產(chǎn)生脈沖的方法是使用定時器來實現(xiàn),在定時中斷中翻轉(zhuǎn)IO口的電平,使用兩次中斷來產(chǎn)生一個脈沖。在程序中計算速度和位置時都要處理由此引起的2倍關(guān)系。
Modbus串行傳輸模式有兩種,ASCII模式和RTU模式,兩種模式的區(qū)別在于:編碼格式不一樣,信息幀的起始、結(jié)束方法不一樣,信息幀內(nèi)部的延時不一樣,錯誤校驗算法不一樣,ASCII數(shù)據(jù)使用7位,信息的起始和結(jié)束用的字符作為標志,用0x3A表示起始,用0x0D或者0x0A表示結(jié)束,字符之間的延時可以長達1 s,使用縱向冗余校驗(LRC);RTU數(shù)據(jù)使用的是8位,起始和結(jié)束使用3.5個以上字符的時間間隔,數(shù)據(jù)幀內(nèi)的延時不得大于1.5個字符時間,使用循環(huán)冗余校驗(CRC)。RTU的傳輸效率大于ASCII。
RTU數(shù)據(jù)幀的格式如下:
其中,地址表示設(shè)備的地址,每個設(shè)備分配唯一的地址,功能碼表示對數(shù)據(jù)處理的方式,如讀、寫等。數(shù)據(jù)有4中不同的模型,包括讀離散輸入、讀寫線圈、只讀寄存器和保持寄存器。數(shù)據(jù)根據(jù)類型有各自的地址,范圍0~65 535。錯誤校驗使用CRC。
圖4 A3979的電流衰減模式Fig.4 Current decaymode of A3979
表1 數(shù)據(jù)幀格式Tab.1 Form at of data fram e
對于本應(yīng)用,一軸的步進電機只需要設(shè)置3種數(shù)據(jù)模型就可以完成絕大部分功能,如表2所示,三軸系統(tǒng)設(shè)置3組這樣的數(shù)據(jù)模型即可。
表2 步進電機數(shù)據(jù)模型Tab.2 Stepper m otor data model
在單片機中,IO的狀態(tài)的改變使用IO中斷的方法,特別是極限開關(guān)的處理,當(dāng)極限開關(guān)動作時,需要步進電機立刻停止工作。
在硬件上,單片機實現(xiàn)Modbus RTU使用了一個異步串口和一個定時器。異步串口負責(zé)接收數(shù)據(jù),把數(shù)據(jù)放在接收緩沖區(qū),并且給定時器賦初值;定時器負責(zé)計時,時刻監(jiān)視每兩個數(shù)據(jù)之間的時間間隔,當(dāng)一幀數(shù)據(jù)開始后,當(dāng)間隔大于3.5個字符長度時間,認為接收數(shù)據(jù)完成,通知主程序處理本幀數(shù)據(jù)。主程序處理一幀數(shù)據(jù)的流程圖如下。
圖5 軟件流程圖Fig.5 Flow chart of the software design
如果設(shè)備地址或者校驗碼不正確,都將本幀數(shù)據(jù)放棄;其余出錯方式按照Modbus的錯誤類型的定義。在生成返回信息時,如果是出錯信息,返回的功能碼是原來的功能碼+0x80,即將原來的功能碼最高位置1。
為了減小單片機CPU的效率,這里所有的串口返回數(shù)據(jù)都是用DMA進行。這樣CPU計算完成返回信息后不需要等待串口設(shè)備進行數(shù)據(jù)發(fā)送,節(jié)約了CPU的時間。
文中設(shè)計的支持Modbus RTU協(xié)議的步進電機控制系統(tǒng)在某設(shè)備中得到了應(yīng)用。應(yīng)用中,主控單元根據(jù)軟件要求,同時控制了13路步進電機,其中有3路由嚴格的時序要求,這3路使用一個處理器進行控制,占用一個物理地址。其余10路分別使用各自的處理器,并分配各自的物理地址?;赗S-485網(wǎng)絡(luò)來控制多電機系統(tǒng),不但滿足了控制要求的實時性,而且控制電機的數(shù)目顯著增加,各個電機之間模塊可以互換,具有較高的可靠性,在運動自由度較多的場合會得到更多的應(yīng)用。
[1]楊世超,陶正蘇.基于Modbus RTU通信協(xié)議的伺服電機聯(lián)動控制系統(tǒng)[J].電子設(shè)計工程,2012,20(1):91-97.
YANG Shi-chao,TAO Zheng-su.Servo-motor control system based on Modbus RTU communication protocol[J].Electronic Design Engineering,2012,20(1):91-97.
[2]Modbus-IDA.Modbus application protocol specification[EB/OL].(2006-12).http://www.modbus-ida.org/docs/Modbus_Application_Protocol_V1_1b.pdf.
[3]史敬灼,王宗培.步進電動機驅(qū)動控制技術(shù)的發(fā)展[J].微特電機,2007(7):50-54.
SHI Jing-zhuo,WANG Zong-pei.Review of stepping motors’driving technology[J].Small& Special Electrical Machines,2007(7):50-54.
[4]李玲娟.多細分二相混合式步進電機驅(qū)動器的研制[D].陜西:西北工業(yè)大學(xué),2007.
[5]AllegroMicro systems,Inc.A3979Micro stepping DMOSDriver with Translator[EB/OL].(2005-10).http://www.a(chǎn)llegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/Bipolar-Stepper-Motor-Drivers/~/media/Files/Datasheets/A3979-Datasheet.a(chǎn)shx.
[6]AllegroMicro systems,Inc.A3986Dual Full-BridgeMOSFET Driver with Micro-stepping Translator[EB/OL].(2012-01).http://www.a(chǎn)llegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/Bipolar-Stepper-Motor-Drivers/~/media/Files/Datasheets/A3986-Datasheet.a(chǎn)shx.