(廣西師范大學(xué) 電子工程學(xué)院,廣西 桂林 541004)
隨著社會與經(jīng)濟的飛速發(fā)展,自動化控制代替人為操作越顯明顯[1]。步進電機作為自動化控制重要的執(zhí)行機構(gòu)來說,其控制一直以來都是一個重要的研究課題,其主要研究集中在加減速曲線優(yōu)化和具體實現(xiàn)上。與此同時隨著嵌入式技術(shù)的快速發(fā)展,特別是其ARM架構(gòu)芯片的性能有了大幅度的提升以及嵌入式實時控制系統(tǒng)的功能變得更加完善。因此將嵌入式技術(shù)應(yīng)用于多路步進電機控制系統(tǒng)中不僅可以提高了步進電機控制的實時性和可靠性,而且還降低了控制系統(tǒng)的成本[2]。本文設(shè)計的主控芯片使用了ST公司的的STM32F4系列微處理器,嵌入式以太網(wǎng)控制器W5500、電機控制芯片A4984、光電傳感器、RFID射頻識別傳感器等多種外設(shè),操作系統(tǒng)采用嵌入式實時操作系統(tǒng)FreeRTOS,上位機控制軟件應(yīng)用程序采用PyQt,并進行相應(yīng)的軟件程序開發(fā),本設(shè)計致力于設(shè)計一種可靠穩(wěn)定,實時性高的多路步進電機控制系統(tǒng)。
本設(shè)計總體架構(gòu)如圖1所示。主控芯片通過嵌入式以太網(wǎng)控制器W5500與上位機通信,接收上位機軟件發(fā)送的命令,并向上位機返回現(xiàn)在所處的工作狀態(tài)。W5500通過SPI通信將上位機命令發(fā)送給主控制端STM32,后由主控進行命令解析,得到指令中的電機脈沖數(shù)、頻率以及正反轉(zhuǎn)等參數(shù),最終得到驅(qū)動電機的脈沖數(shù)量、脈沖頻率以及脈沖信號順序,從而控制各路步進電機按照指令所需的頻率精確達到目的位置。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
本設(shè)計電路中主控芯片采用ST公司的STM32F407系列微控制器,電機驅(qū)動芯片采用A4984SLPTR-T芯片,步進電機選擇倆相四線的混合式步進電機。
STM32網(wǎng)絡(luò)通信主要有倆種方式一種采用移植LWIP協(xié)議棧,一種是采用外置網(wǎng)絡(luò)芯片與主控芯片之間進行通信。由于主控芯片已經(jīng)移植了小型操作系統(tǒng)FreeRTOS,為了不增加主控芯片的內(nèi)存壓力且外置網(wǎng)絡(luò)芯片加以外部晶振,較LWIP協(xié)議棧以及內(nèi)部晶振時鐘會更加精確,故采用外置網(wǎng)絡(luò)芯片加以外部晶振來進行網(wǎng)絡(luò)通信。網(wǎng)絡(luò)通信芯片采用韓國WIZnet公司的W5500芯片,該芯片集成了IP/TCP協(xié)議棧,方編程模塊化,有助于系統(tǒng)后期的擴展性,也減少了主控芯片的資源占用。
本系統(tǒng)電路中電機驅(qū)動模塊采用Allegro公司的A4984SLPTR-T電機驅(qū)動器,該驅(qū)動器是一個完整的帶有內(nèi)置轉(zhuǎn)換器的微電機驅(qū)動器。A4984SLPTR-T包括一個固定停機時間電流穩(wěn)壓器,該穩(wěn)壓器可在慢或混合衰減模式下工作。該電機驅(qū)動器具有高達35 V和±2 A的輸入驅(qū)動能力,且控制簡單。若電機的溫度過高,會導(dǎo)致電機力矩降低乃至失步,故將電機的電流設(shè)定為1.414 A,既可以使得電機芯片不過載,又盡可能的使得電機的利用率更高。驅(qū)動模塊電路如圖2所示。
圖2 電機驅(qū)動模塊原理圖
根據(jù)設(shè)計需要實現(xiàn)的目標(biāo),本文把系統(tǒng)分為不同的子功能,充分利用嵌入式系統(tǒng)多任務(wù)的優(yōu)勢,把各個子功能作為系統(tǒng)中不同的任務(wù)進程實現(xiàn)[3],包括:網(wǎng)絡(luò)通信任務(wù)、上位機通訊協(xié)議解析任務(wù)、電機驅(qū)動任務(wù)、光電傳感器任務(wù)等,各個任務(wù)通過操作系統(tǒng)的信號量進行同步運行,由上位機軟件統(tǒng)籌規(guī)劃。為了保證步進電機系統(tǒng)的實時性,其中電機驅(qū)動進程為核心進程,設(shè)定其任務(wù)優(yōu)先級為次高,除W5500的通信模塊,沒有其他進程可以搶占他的CPU控制權(quán)。
本文主要介紹軟件設(shè)計網(wǎng)絡(luò)通信管理和電機控制的實現(xiàn):從網(wǎng)口讀取運動指令,轉(zhuǎn)換為實際電機的移動。
1)上位機軟件通過工作人員設(shè)定的電機工作時序來發(fā)送相對應(yīng)的電機控制指令,命令通過網(wǎng)絡(luò)傳輸至網(wǎng)絡(luò)控制芯片中的命令緩存區(qū)中,后由SPI通信發(fā)送至主控制端STM32所建立的循環(huán)鏈表中進行存儲,防止命令丟失,最后又主控制端進行相對應(yīng)的命令解析;
2)主控制端解析電機控制命令后,使用電機控制算法來控制電機來進行相對應(yīng)的電機動作,其中主要參數(shù)包括電機脈沖頻率、電機轉(zhuǎn)動方向、脈沖總數(shù)以及加減速脈沖數(shù)等信息;
3)完成動作后,主控制端再通過SPI向網(wǎng)絡(luò)控制芯片傳輸完成指令,請求下一指令;網(wǎng)絡(luò)控制芯片向上位機返回相對應(yīng)的結(jié)束命令,結(jié)束動作,等待下一次協(xié)議命令;
ARM系列的微處理器不支持大型操作系統(tǒng)的移植,但是在單片機模式下的縱向處理程序處理又滿足不了任務(wù)量多的程序設(shè)計。而此時嵌入式實時操作系統(tǒng)既滿足ARM處理器的內(nèi)存要求且可以進行多個任務(wù)假性同步運行,一個處理器核心每次僅可以執(zhí)行一個任務(wù),但實時操作系統(tǒng)的主要工作則是將任務(wù)切換的時間變得非常短,而這已經(jīng)滿足了本設(shè)計對操作系統(tǒng)的需求。
本設(shè)計采用了FreeRTOS嵌入式實時操作系統(tǒng)。FreeRTOS實時操作系統(tǒng)內(nèi)核占用空間小、源碼公開、可移植、實時性高,可免費用于商業(yè)用途。其基本功能包括:通過時間片調(diào)度切換任務(wù);多種信號量應(yīng)用于各種場景;多個實時任務(wù)且及其優(yōu)先級的配置;文件任務(wù)的管理等。
在嵌入式領(lǐng)域,F(xiàn)reeRTOS是不多的同時具有實行性,開源性,可靠性,易用性,多平臺支持等特點的嵌入式操作系統(tǒng)[4]。
由于單步執(zhí)行的程序架構(gòu)中,下位機會來不及處理上位機發(fā)送的連續(xù)運動指令,上位機向網(wǎng)關(guān)發(fā)送命令,對數(shù)據(jù)進行實時監(jiān)控,但是由于接收到的命令要從流水線的控制器交互,交互需要一個過程,在這個過程里,導(dǎo)致上位機命令冗余,存儲在一個數(shù)組里,但是上位機長時間收不到命令,網(wǎng)絡(luò)連接會中斷,這種異常在工業(yè)控制里是堅決不允許的,所以,對處理的命令進行過濾,即設(shè)計了一個環(huán)形鏈表算法,將先存儲在鏈表中但未處理的命令刪除,把剛接收到的命令,插入尾部。如圖3環(huán)形鏈表示意圖。
圖3 環(huán)形鏈表示意圖
環(huán)形鏈表結(jié)構(gòu)體定義所示:
typedef struct rx_net_data
{
char rx_data[CMD_MAX_DATA_LEN];
unsigned char rx_data_len;
SemaphoreHandle_t task_binarySemaphore;
SemaphoreHandle_t ISR_binarySemaphore;
Struct rx_net_data *next;
} RX_NET_DATA_LinkedListDef;
結(jié)構(gòu)體中的 rx_data用來存放上位機發(fā)送過來的指令,rx_data_len表示rx_data數(shù)據(jù)長度,task_binarySemaphore為任務(wù)級的二值信號量,ISR_binarySemaphore為中斷級的信號量,用來同步中斷中接收到的數(shù)據(jù)與數(shù)據(jù)包解析任務(wù)同步。
中斷接收指令過程,流程圖如圖4所示。
圖4 網(wǎng)絡(luò)通信流程圖
步進電機的控制方式通常分為倆種,一種是使用定時器中斷來驅(qū)動步進電機,另一種則是定時器PWM脈寬調(diào)制來驅(qū)動。本文采用的則是定時器PWM脈寬調(diào)制,通過設(shè)置自動裝載值和預(yù)分頻值來控制占空比,從而控制電機的頻率。
由于步進電機本身的局限性,在步進電機起始階段頻率變化過大,則會導(dǎo)致電機失步、過沖現(xiàn)象,所以啟動階段需要一段較為緩慢的預(yù)熱階段。為了防止電機出現(xiàn)過沖或失步的現(xiàn)象,在電機控制中加入改進型S型算法,則有效的規(guī)避了該現(xiàn)象。
由文獻[3]可得S型曲線的速度函數(shù),所得的S型曲線,如圖5所示:
(1)
式(1)中:a為設(shè)定的系統(tǒng)加速度;Vm為步進電機運行的最大速度;Vs為步進電機運行的起始速度。
S型算法的好處是速度具有很好的平滑性,運動精度也很高[5-6]。S型算法又名Sigmoid函數(shù),Sigmoid函數(shù)原型為:
(2)
對其加以修改,式如下所示:
(3)
在式(3)所示:F(i)為即時頻率值;Fmin為步進電機運行的起始速度;Fmax為步進電機運行的最大速度;k為代表設(shè)定的加速度;i為加速或者減速的脈沖索引(i≥2 num)。
給定K值為7時,電機運作較為良好,值得提醒的是加速階段或者減速階段脈沖索引都從0開始計數(shù)。
通過MATLAB對公式(3)的加速部分進行仿真,取電機初始頻率Fmin為2 000 Hz,最大頻率Fmax為3 000 Hz,加速脈沖數(shù)num(電機一個脈沖數(shù)為1.8°)為4 000,T1取值為2 000,加速度k為7,所獲得加速S曲線如圖5所示:電機轉(zhuǎn)動主要分為3個階段,加加速,勻加速以及加減速階段[7-8],減速和加速階段類似,故不做多余講解。
圖5 文獻[3]S型加速曲線圖
圖6 本文S型加速曲線圖
通過圖5,圖6倆者比較可以明顯發(fā)現(xiàn),本文中的S型算法有效的避免了電機初始加速速率變化過大而導(dǎo)致的電機速率突變的情況,避免了電機過沖與丟步的現(xiàn)象;電機也可以在最短的時間內(nèi)達到所需的頻率,也大大的降低系統(tǒng)的功耗[9-10]。將圖5、圖6進行對比,通過對MATLAB仿真圖進行取脈沖值0,1 000,2 000,3 000,4 000,得到電機的實時頻率值,比較S型加減速的脈沖數(shù)和頻率之間的關(guān)系如表1。
PC上位機使用python3.5和pyqt5進行研發(fā)編寫。
表1 步進脈沖時間間隔
Python是功能很強大的跨平臺解釋性腳本語言,而 PyQt 是python針對Qt的一門功能性拓展[11]。由于Qt本身功能的強大性加上Python語言的良好的擴展性,該設(shè)計選擇Python和PyQt作為開發(fā)語言和開發(fā)環(huán)境。
界面如圖7所示,電機開始偵聽則開始與下位機進行連接,連接成功則顯示連接成功,如果失敗則返回連接失敗。界面主要參數(shù)包括:脈沖總數(shù)、電機轉(zhuǎn)向、起始頻率值、最大頻率值、脈沖加速脈沖數(shù)、減速脈沖數(shù)以及電機選擇等。通訊協(xié)議數(shù)據(jù)幀以圖7為例為:
圖7 上位機軟件示意圖
0231|CT|MA|500|10 000|CW|20 000|5 000|5 000|AABB03。其中起始位0231,控制位CT;電機選擇為MA;起始頻率為500;最大頻率10 000;電機轉(zhuǎn)向,正向為CW,反向為CCW;電機總脈沖數(shù)為20 000;加速脈沖數(shù)為5 000;減速脈沖數(shù)為5 000;校驗位為AABB以及截止位為03。當(dāng)電機動作完成之后,下位機需返回信息給上位機告知動作完成。返回信息的通訊協(xié)議僅將控制位和電機選擇進行互換,表示是下位機向上位機返回的信息。電機動作完全結(jié)束后,需將電機進行復(fù)位,等待下一次的動作命令。復(fù)位是通過觸碰光電傳感器從而使電機返回初始位置,后進入待機狀態(tài),等待上位機的協(xié)議命令。電機的誤差就不會進行疊加。
在實際應(yīng)用中有8臺步進電機同時工作,所以在FreeRTOS中創(chuàng)建8個實時電機控制任務(wù)。給電機相同起始頻率2 000以及最大頻率5 000,不同脈沖數(shù),比較丟失步的比例。由于電機轉(zhuǎn)動需要主控制端給脈沖,而每給一個脈沖數(shù)就要進入一次定時器中斷,故在定時器中斷中給一個疊加參數(shù),當(dāng)脈沖數(shù)完成后由串口通信打印至串口調(diào)試助手,即可得到其電機實際接受到的脈沖數(shù)。
表2 電機丟失步比例情況
由上述數(shù)據(jù)以及通過若干次測試可以顯示該電機控制系統(tǒng)的丟失步比例均在1%以內(nèi),電機一個脈沖為1.8°,加上電機細分?jǐn)?shù)為8細分,所以電機丟失步所造成的轉(zhuǎn)動距離非常的小。因此將此控制系統(tǒng)運用至實際工程中去,實際項目工程圖如圖8所示。
圖8 項目工程圖
用嵌入式實時控制系統(tǒng)和步進電機控制技術(shù),設(shè)計了一種基于嵌入式系統(tǒng)的多路步進電機控制系統(tǒng),并且闡述了系統(tǒng)的硬件設(shè)計、步進電機控制技術(shù)以及上位機控制軟件應(yīng)用程序。通過測試表明該系統(tǒng)提高了電機控制的穩(wěn)定性以及可靠性,有效的防止步進電機失步和過沖現(xiàn)象,有效的提高了試管架的檢測效率;另一方面使用ARM7微處理器的嵌入式控制技術(shù),使得控制成本大大降低,更適合中小型控制系統(tǒng)的低成本要求。該系統(tǒng)現(xiàn)已在多進樣流水線中運用,且系統(tǒng)運作良好。