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