技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于RTThread嵌入式實(shí)時(shí)系統(tǒng)的三路步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)

基于RTThread嵌入式實(shí)時(shí)系統(tǒng)的三路步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)

時(shí)間:2018-12-14 13:55:29來(lái)源:網(wǎng)絡(luò)

導(dǎo)語(yǔ):?本文設(shè)計(jì)實(shí)現(xiàn)了一種三路步進(jìn)電機(jī)控制系統(tǒng),它基于RTThread嵌入式實(shí)時(shí)系統(tǒng),提高了系統(tǒng)的實(shí)時(shí)性和后期的功能擴(kuò)展能力。

摘要:本文設(shè)計(jì)實(shí)現(xiàn)了一種三路步進(jìn)電機(jī)控制系統(tǒng),它基于RTThread嵌入式實(shí)時(shí)系統(tǒng),提高了系統(tǒng)的實(shí)時(shí)性和后期的功能擴(kuò)展能力。系統(tǒng)控制電路采用STM32F4系列的微控制器,結(jié)合小功率步進(jìn)電機(jī)驅(qū)動(dòng)器A4988,完成了硬件電路板設(shè)計(jì)。軟件中運(yùn)用操作系統(tǒng)自帶的finsh機(jī)制,實(shí)現(xiàn)對(duì)指令的初步解析,控制系統(tǒng)可以通過(guò)讀取G指令,控制多路電機(jī)按照一定軌跡運(yùn)動(dòng),同時(shí)可以調(diào)節(jié)電機(jī)運(yùn)動(dòng)的加減速參數(shù)。實(shí)際項(xiàng)目驗(yàn)證證明該系統(tǒng)具有很好的穩(wěn)定性。

引言

隨著計(jì)算機(jī)技術(shù)和微電子技術(shù)的發(fā)展,步進(jìn)電機(jī)作為自動(dòng)化控制的執(zhí)行單元,越來(lái)越多地運(yùn)用在各種領(lǐng)域中,許多控制領(lǐng)域需要對(duì)多臺(tái)步進(jìn)電機(jī)進(jìn)行同步協(xié)調(diào)控制,如軍事、航空、機(jī)器人控制。特別是近年來(lái),隨著嵌入式技術(shù)和集成化的發(fā)展,其應(yīng)用范圍逐步擴(kuò)大,逐漸擴(kuò)展到普通民用行業(yè),如小型雕刻機(jī)、3D打印等。步進(jìn)電機(jī)作為一種將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)的角位移或線(xiàn)位移的機(jī)電元件,其最大的優(yōu)點(diǎn)是易于開(kāi)環(huán)控制、無(wú)積累誤差。在應(yīng)用中,對(duì)速度、位置的精度控制尤為重要,所以對(duì)于電機(jī)的控制要具有實(shí)時(shí)性[1]。

傳統(tǒng)上,單片機(jī)控制適合比較簡(jiǎn)單的電機(jī)控制系統(tǒng),對(duì)于復(fù)雜的系統(tǒng),若電機(jī)控制只為其中的一個(gè)模塊,既要求電機(jī)控制模塊內(nèi)部協(xié)調(diào)運(yùn)動(dòng),又要求與其他模塊保持同步,結(jié)構(gòu)復(fù)雜,實(shí)現(xiàn)難度大。

隨著單片機(jī)本身性能的增強(qiáng),在嵌入式系統(tǒng)的基礎(chǔ)上,完成對(duì)多電機(jī)的實(shí)時(shí)協(xié)調(diào)控制具有很多優(yōu)點(diǎn)。嵌入式系統(tǒng)的實(shí)時(shí)性特點(diǎn)可以使其勝任對(duì)多電機(jī)的協(xié)調(diào)控制;可裁減性特點(diǎn)可以使得系統(tǒng)容易擴(kuò)展其他模塊;能夠支持多任務(wù),使得程序開(kāi)發(fā)更加容易,便于維護(hù),同時(shí)能夠提高系統(tǒng)的穩(wěn)定性和可靠性[2]。

本研究基于嵌入式實(shí)時(shí)系統(tǒng)設(shè)計(jì)出一套多步進(jìn)電機(jī)控制系統(tǒng),此系統(tǒng)基于嵌入式技術(shù)協(xié)同控制三路步進(jìn)電機(jī),以對(duì)多軸系統(tǒng)的速度、位置達(dá)到精確控制,并且可以實(shí)時(shí)調(diào)節(jié)電機(jī)的運(yùn)動(dòng)速度。本設(shè)計(jì)的重點(diǎn)為軟件方面對(duì)電機(jī)的協(xié)同控制,使得系統(tǒng)對(duì)電機(jī)的定位精度達(dá)到預(yù)期的目的。系統(tǒng)本身很容易地根據(jù)不同功能需求擴(kuò)展出各種功能,具有一定實(shí)用價(jià)值。

硬件電路設(shè)計(jì)

1.1總體設(shè)計(jì)

主控芯片采用內(nèi)置的UART串口與上位機(jī)通信,接收上位機(jī)發(fā)送的控制指令,并向上位機(jī)發(fā)送系統(tǒng)當(dāng)前狀態(tài)。通過(guò)SPI接口讀取SD卡中的Gcode文件,主控芯片逐行解析文件中的G指令,根據(jù)G指令中位置偏移和速度,最終得到驅(qū)動(dòng)電機(jī)的脈沖,從而控制3路步進(jìn)電機(jī)按照推薦速度精確達(dá)到目的位置。3路限位開(kāi)關(guān)可以反饋電機(jī)的位置信息,主要用于初始化步進(jìn)電機(jī)系統(tǒng),從而規(guī)定電機(jī)系統(tǒng)內(nèi)部坐標(biāo)系。

本設(shè)計(jì)電路中主控制器采用ST公司的STM32F4系列微控制器,電機(jī)驅(qū)動(dòng)芯片采用A4988,作為執(zhí)行機(jī)構(gòu)的步進(jìn)電機(jī)使用兩相四線(xiàn)的42步進(jìn)電機(jī)。

1.2主控芯片

本系統(tǒng)電路中主控芯片采用基于ARM內(nèi)核的STM32F40x微控制器,芯片內(nèi)部含有1MBFlash和256KBRAM,完全可以運(yùn)行小型的嵌入式系統(tǒng)。該微控制器還包括了大量的片上外設(shè)資源,非常適合控制類(lèi)應(yīng)用。

1.3驅(qū)動(dòng)模塊

本系統(tǒng)電路中電機(jī)驅(qū)動(dòng)模塊采用Allegro公司的A4988電機(jī)驅(qū)動(dòng)器,該驅(qū)動(dòng)器是一個(gè)完整的帶有內(nèi)置轉(zhuǎn)換器的微電機(jī)驅(qū)動(dòng)器,它可在全、半、1/4、1/8及1/16步進(jìn)模式時(shí)操作雙極步進(jìn)電動(dòng)機(jī),具有高達(dá)35V和±2A的輸出驅(qū)動(dòng)能力,且控制簡(jiǎn)單,只需在驅(qū)動(dòng)器相應(yīng)引腳輸入一個(gè)脈沖即可驅(qū)動(dòng)步進(jìn)電動(dòng)機(jī)產(chǎn)生一個(gè)微步,程序不必再考慮相序表等電機(jī)底層的控制。

本設(shè)備采用1/16細(xì)分模式,MS1、MS2、MS3引腳需置高電平,主控制器只需控制電機(jī)驅(qū)動(dòng)芯片上的ENABLE、DIR、STEP三個(gè)引腳即可完全控制此步進(jìn)電機(jī)。ENABLE為步進(jìn)電機(jī)控制器的使能端;DIR為電機(jī)的方向控制端,用于控制電機(jī)的轉(zhuǎn)動(dòng)方向;STEP為電機(jī)的步數(shù)控制端,輸入脈沖來(lái)控制電機(jī)的步數(shù)以及轉(zhuǎn)速。

軟件系統(tǒng)設(shè)計(jì)

2.1軟件總體設(shè)計(jì)

根據(jù)設(shè)計(jì)需要實(shí)現(xiàn)的目標(biāo),本文把系統(tǒng)分為不同的子功能,充分利用嵌入式系統(tǒng)多任務(wù)的優(yōu)勢(shì),把各個(gè)子功能作為系統(tǒng)中不同的任務(wù)進(jìn)程實(shí)現(xiàn),包括:上位機(jī)指令解析任務(wù)、用戶(hù)界面顯示、記錄監(jiān)視進(jìn)程、運(yùn)動(dòng)規(guī)劃管理進(jìn)程、電機(jī)驅(qū)動(dòng)任務(wù),各個(gè)任務(wù)通過(guò)嵌入式系統(tǒng)的信號(hào)量進(jìn)行同步。為了保證步進(jìn)電機(jī)系統(tǒng)的實(shí)時(shí)性,其中電機(jī)驅(qū)動(dòng)進(jìn)程為核心進(jìn)程,設(shè)定其任務(wù)優(yōu)先級(jí)最高,除中斷外,沒(méi)有任何進(jìn)程可以搶占它的CPU控制權(quán)。

系統(tǒng)設(shè)計(jì)有用戶(hù)互交界面,終端選用串口工控彩屏,控制簡(jiǎn)單,作為系統(tǒng)脫離上位機(jī)時(shí)的控制方式。

本文將主要介紹軟件設(shè)計(jì)電機(jī)運(yùn)動(dòng)規(guī)劃和底層驅(qū)動(dòng)的實(shí)現(xiàn):從串口或SD卡讀取運(yùn)動(dòng)指令,轉(zhuǎn)換為實(shí)際的電機(jī)機(jī)構(gòu)的移動(dòng)。

①使用finshshell機(jī)制從串口或直接從SD卡讀取指令,識(shí)別指令,隨后存放入指令緩沖區(qū);

②運(yùn)動(dòng)規(guī)劃進(jìn)程取得指令,把它們轉(zhuǎn)化為Block塊對(duì)象,其中包含了速度、方向、加速度等信息,并加入Planner中的環(huán)形緩沖隊(duì)列中;

③無(wú)論什么時(shí)候Planner中存在Block塊對(duì)象,電機(jī)驅(qū)動(dòng)進(jìn)程都將會(huì)啟動(dòng),讀取塊對(duì)象,并啟動(dòng)定時(shí)器中斷。

2.2嵌入式系統(tǒng)選擇

在實(shí)時(shí)嵌入式系統(tǒng)的選擇上,本設(shè)計(jì)選用了RTThread嵌入式操作系統(tǒng),它是一款類(lèi)Linux系統(tǒng),它是一款國(guó)內(nèi)的開(kāi)源全搶占的實(shí)時(shí)操作系統(tǒng)內(nèi)核[3]。RTThread實(shí)時(shí)操作系統(tǒng)內(nèi)核是一個(gè)高效的硬實(shí)時(shí)內(nèi)核,它具備非常優(yōu)異的實(shí)時(shí)性、穩(wěn)定性、可裁減性,最小可以只有3KBROM和1KBRAM占用。其內(nèi)核包提供了大部分的同步和通信機(jī)制,并且任務(wù)調(diào)度算法基于優(yōu)先級(jí)的全搶占式線(xiàn)程調(diào)度,最多可支持256個(gè)線(xiàn)程優(yōu)先級(jí)。此嵌入式系統(tǒng)支持從ARM7到CortexM3等多種類(lèi)型內(nèi)核的處理器。

除了內(nèi)核之外,此嵌入式系統(tǒng)還用于文件系統(tǒng)、TCP/IP協(xié)議棧、圖形用戶(hù)界面、用戶(hù)shell組件,本設(shè)計(jì)中就運(yùn)用了系統(tǒng)的shell組件來(lái)簡(jiǎn)化命令解析功能。

上位機(jī)指令解析任務(wù)依靠嵌入式系統(tǒng)中的finshshell機(jī)制,finshshell是RTThread內(nèi)置的用戶(hù)命令行組件,用戶(hù)能夠通過(guò)串口設(shè)備使用finshshell,它在系統(tǒng)中被設(shè)計(jì)為一個(gè)獨(dú)立的進(jìn)程,其進(jìn)程默認(rèn)優(yōu)先級(jí)為8,進(jìn)程試圖從外部設(shè)備中獲得用戶(hù)的輸入,然后對(duì)用戶(hù)命令進(jìn)行解析執(zhí)行。依靠嵌入式系統(tǒng)提供的shell機(jī)制,可以輕易地自定義用戶(hù)指令,通過(guò)如下宏定義實(shí)現(xiàn):FINSH_FUNCTION_EXPORT_ALIAS()。

本文中實(shí)現(xiàn)一個(gè)Gcode_recev(char*movecmd)函數(shù),參數(shù)movecmd為一行或多行G指令,函數(shù)的結(jié)構(gòu)流程,其中指令緩沖區(qū)為全局的自定義的結(jié)構(gòu)體。結(jié)構(gòu)體包含一個(gè)環(huán)形緩沖區(qū)和一個(gè)信號(hào)量,通過(guò)這個(gè)全局變量實(shí)現(xiàn)進(jìn)程間的數(shù)據(jù)共享,并且用信號(hào)量避免緩沖區(qū)數(shù)據(jù)的競(jìng)爭(zhēng)。

通過(guò)宏定義“FINSH_FUNCTION_EXPORT_ALIAS(Gcode_recev,G,"Gcode_recev(“”)")”,我們可以通過(guò)串口終端以G(“cmd”)的形式執(zhí)行運(yùn)動(dòng)指令,達(dá)到調(diào)試的目的。除此之外,系統(tǒng)還實(shí)現(xiàn)了關(guān)啟電機(jī)、清除運(yùn)動(dòng)緩沖、查看參數(shù)等函數(shù)功能。

2.3運(yùn)動(dòng)規(guī)劃管理

系統(tǒng)的實(shí)際使用狀態(tài)通常為一端不斷讀取運(yùn)動(dòng)指令,另一端不斷驅(qū)動(dòng)多路步進(jìn)電機(jī)移動(dòng)。兩端中間存在一個(gè)結(jié)構(gòu)體隊(duì)列來(lái)緩沖兩端執(zhí)行速度的差異。

系統(tǒng)通過(guò)串口或SD卡能夠識(shí)別的運(yùn)動(dòng)指令(通常為G指令),指令中包含了電機(jī)移動(dòng)的目的坐標(biāo)和速度參數(shù)。讀取一行運(yùn)動(dòng)指令后,系統(tǒng)結(jié)合全局信息對(duì)指令進(jìn)行解析,為了防止電機(jī)啟動(dòng)時(shí),啟動(dòng)速度過(guò)快造成失步,或電機(jī)停止時(shí)速度過(guò)快而不能精確定位,步進(jìn)電機(jī)的運(yùn)動(dòng)方式采用梯形運(yùn)動(dòng)方式。

在程序中,設(shè)計(jì)了Planner_t結(jié)構(gòu)體。stage1部分為一個(gè)環(huán)形緩沖區(qū),緩沖區(qū)大小可以根據(jù)實(shí)際使用情況定義。代碼如下:

typedefstruct{

//stage1

stepBlock_tstepBlock[BUFFER_SIZE];

int32_thead,tail,len;

//stage2V

……

}Planner_t;

而stepBlock_t結(jié)構(gòu)體中包含了各步進(jìn)電機(jī)運(yùn)動(dòng)的方向、步數(shù)、主步數(shù)(即各電機(jī)運(yùn)動(dòng)步數(shù)的最大值)、加速前步數(shù)、減速前步數(shù)、速度等信息,用于底層的電機(jī)驅(qū)動(dòng)函數(shù)代碼如下:

typedefstruct{

//stage1

int32_tsteps[3];

booldir[STEPPER_NUM];

int32_tsteps_event_count;

//stage2

int32_taccelerate_until;

int32_tdecelerate_after;

floatacceleration;

}stepBlock_t;

2.4電機(jī)驅(qū)動(dòng)

以上只是對(duì)步進(jìn)電機(jī)運(yùn)動(dòng)的規(guī)劃,并沒(méi)有涉及到底層的電機(jī)驅(qū)動(dòng),實(shí)際的電機(jī)驅(qū)動(dòng)一般采用兩種方式:定時(shí)器PWM脈沖或定時(shí)器中斷[4]。本文中采用定時(shí)器中斷函數(shù)在操作系統(tǒng)下層直接驅(qū)動(dòng)步進(jìn)電機(jī),只需在中斷函數(shù)中向某個(gè)電機(jī)驅(qū)動(dòng)器CLK引腳發(fā)送一個(gè)脈沖,即可驅(qū)動(dòng)電機(jī)一微步。

在系統(tǒng)中的多個(gè)用戶(hù)任務(wù)進(jìn)程中,電機(jī)驅(qū)動(dòng)進(jìn)程是最重要的,它實(shí)際上完成了對(duì)步進(jìn)電機(jī)最底層的控制,為了保證當(dāng)前運(yùn)動(dòng)指令下電機(jī)運(yùn)行的流暢,此進(jìn)程對(duì)時(shí)間要求非常敏感,它在系統(tǒng)中決定了電機(jī)運(yùn)動(dòng)速度的上限。進(jìn)程流程圖如圖5所示,此進(jìn)程用一個(gè)不斷循環(huán)的函數(shù)實(shí)現(xiàn),對(duì)應(yīng)于規(guī)劃管理進(jìn)程不斷向Planner結(jié)構(gòu)體中填充塊數(shù)據(jù),電機(jī)驅(qū)動(dòng)進(jìn)程則不斷從Planner中取出塊數(shù)據(jù),根據(jù)Block塊中的參數(shù)啟動(dòng)Timer定時(shí)器,首次設(shè)置定時(shí)器參數(shù),最終在定時(shí)器中斷服務(wù)函數(shù)中驅(qū)動(dòng)電機(jī)運(yùn)動(dòng)。

STM32F40x系列微控制器用于多個(gè)定時(shí)器資源,并且其時(shí)鐘頻率最高可達(dá)到84MHz。本系統(tǒng)中,電機(jī)的最大轉(zhuǎn)速為1500PRM,驅(qū)動(dòng)器取16細(xì)分時(shí),若要達(dá)到此速度,需要定時(shí)器頻率約為72kHz,考慮到系統(tǒng)多任務(wù)的復(fù)雜性,也完全可以滿(mǎn)足需要。

定時(shí)器中斷在系統(tǒng)中的應(yīng)用僅保證兩個(gè)微步間隔時(shí)間的精確性,為了保證嵌入式系統(tǒng)的實(shí)時(shí)性,定時(shí)器的中斷服務(wù)函數(shù)執(zhí)行時(shí)間應(yīng)盡量縮短[5],因此在中斷服務(wù)函數(shù)中只做兩件必要的任務(wù):給步進(jìn)電機(jī)脈沖和更新定時(shí)器。

結(jié)語(yǔ)

本文在RTThread的嵌入式實(shí)時(shí)系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)了對(duì)多路步進(jìn)電機(jī)的控制,基于嵌入式系統(tǒng),系統(tǒng)功能按模塊設(shè)計(jì)實(shí)現(xiàn),大大減小了設(shè)計(jì)的整體難度,并且有利于系統(tǒng)后期的功能擴(kuò)展,以較低的成本實(shí)現(xiàn)多路步進(jìn)電機(jī)的控制。基于此設(shè)計(jì)的3D打印機(jī)項(xiàng)目已經(jīng)在使用,且系統(tǒng)運(yùn)行穩(wěn)定。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:低壓電器行業(yè)中通用機(jī)柜的制作

下一篇:基于ARM和CPLD的智能輪式移動(dòng)...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。