基于MCU的POWERLINK SoC幀同步降低抖動(dòng)的方法
【專利摘要】本發(fā)明提供了一種基于MCU的POWERLINK?SoC幀同步降低抖動(dòng)的方法,能夠?qū)崿F(xiàn)在無(wú)ASIC和FPGA的條件下,僅通過(guò)MCU來(lái)降低Powerlink技術(shù)Soc幀抖動(dòng),充實(shí)Powerlink技術(shù)的平臺(tái)多樣化;該方法通過(guò)對(duì)定時(shí)器中斷的內(nèi)容作了詳細(xì)規(guī)劃,并通過(guò)一個(gè)高速計(jì)數(shù)器提供高精度時(shí)鐘,從而達(dá)到降低Soc幀的抖動(dòng)的目的。
【專利說(shuō)明】基于MCU的POWERLINK SoC幀同步降低抖動(dòng)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及實(shí)時(shí)以太網(wǎng)PowerLink技術(shù)的Soc幀同步技術(shù),一種無(wú)ASIC和FPGA的條件下,僅通過(guò)MCU來(lái)降低Soc幀抖動(dòng)的方案,尤其涉及一種基于MCU的POWERLINK SoC幀同步降低抖動(dòng)的方案,該方案通過(guò)MCU計(jì)數(shù)器提供高精度時(shí)鐘,Soc幀發(fā)送中斷提前進(jìn)入等候狀態(tài),忙等待查詢至準(zhǔn)確時(shí)鐘后,再發(fā)送該以太網(wǎng)幀,達(dá)到降低Soc幀抖動(dòng)的目的,提高了純CPU系統(tǒng)中Powerlink Soc巾貞同步的性能。
【背景技術(shù)】
[0002]PowerLink是一種在工業(yè)上普遍推廣應(yīng)用的以太網(wǎng)總線協(xié)議。該協(xié)議對(duì)標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)鏈路層進(jìn)行了簡(jiǎn)單的修改,禁用了 CSMA/CD機(jī)制,創(chuàng)建了等時(shí)同步機(jī)制,由主站輪詢各個(gè)從站的方式管理網(wǎng)絡(luò)上數(shù)據(jù)的收發(fā)過(guò)程,保證嚴(yán)格的時(shí)間特性,實(shí)現(xiàn)通訊功能。與其他實(shí)時(shí)以太網(wǎng)協(xié)議不同的是,PowerLink協(xié)議除了可以采用基于分布式時(shí)鐘(DistributeClock)的同步技術(shù)以外,還可以采用基于Soc幀的同步方法。
[0003]Powerlink的Soc巾貞同步方法(如圖1所示),是在每個(gè)周期的開始,主站節(jié)點(diǎn)發(fā)送Soc幀來(lái)通知各個(gè)從站節(jié)點(diǎn)開始同步動(dòng)作。在運(yùn)動(dòng)控制等實(shí)時(shí)性要求很高的行業(yè)應(yīng)用中,一般都要求主站嚴(yán)格的按照周期來(lái)發(fā)送Soc幀,即要求抖動(dòng)盡可能小。因此,主站上常常需要有FPGA或者ASIC等器件,用來(lái)保證Soc幀準(zhǔn)確的發(fā)送。但是,很多工業(yè)應(yīng)用平臺(tái)都對(duì)MCU有要求,而且MCU相比FPGA器件更加的經(jīng)濟(jì)實(shí)惠,采用通用的C語(yǔ)言開發(fā),平臺(tái)移植簡(jiǎn)單,可以大大的縮減企業(yè)的開發(fā)周期,降低系統(tǒng)難度。因此,如果采用MCU實(shí)現(xiàn)Powerlink技術(shù)的Soc巾貞同步問(wèn)題,將解決純MCU方式的Powerlink主站的同步問(wèn)題,降低了對(duì)FPGA和ASIC等器件的依賴性,使得行業(yè)解決方案更多豐富多彩,達(dá)到高效開發(fā)、便捷應(yīng)用的目的。
[0004]通過(guò)MCU來(lái)實(shí)現(xiàn)低抖動(dòng)的Soc幀發(fā)送,常見的辦法是:設(shè)置一個(gè)高優(yōu)先級(jí)的定時(shí)器,每當(dāng)該定時(shí)器中斷時(shí),觸發(fā)Soc幀的發(fā)送。但是,系統(tǒng)中往往存在著影響實(shí)時(shí)性的因素:如操作系統(tǒng)延遲、定時(shí)器中斷響應(yīng)延遲等,以至于Soc幀抖動(dòng)較大。在不考慮操作系統(tǒng)延遲的情況下,開源Power I ink Versionl.7.I在最高優(yōu)先級(jí)定時(shí)中斷里面的抖動(dòng)測(cè)試結(jié)果大于一微秒。因此,還存在一定的優(yōu)化空間。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的主要目的旨在解決上述問(wèn)題,能夠?qū)崿F(xiàn)在無(wú)ASIC和FPGA的條件下,僅通過(guò)MCU來(lái)降低Powerlink技術(shù)Soc巾貞抖動(dòng),充實(shí)Powerlink技術(shù)的平臺(tái)多樣化。該方法通過(guò)對(duì)定時(shí)器中斷的內(nèi)容作了詳細(xì)規(guī)劃,并通過(guò)一個(gè)高速計(jì)數(shù)器提供高精度時(shí)鐘,從而達(dá)到降低Soc幀的抖動(dòng)的目的。
[0006]Soc幀觸發(fā)的一般方式是通過(guò)一個(gè)定時(shí)器的不斷計(jì)數(shù)并產(chǎn)生中斷來(lái)觸發(fā),相比于這種方式,該方法做了詳細(xì)的設(shè)計(jì)程序流程圖,如圖2所示。程序初始化階段,同樣需要一個(gè)定時(shí)器,但是定時(shí)器設(shè)置值不再是一個(gè)周期,而是比周期稍微小一點(diǎn),提前一小段時(shí)間進(jìn)入中斷。提前的這一小段時(shí)間的長(zhǎng)度大于普通方式所測(cè)得的抖動(dòng)最大值,確保在Soc幀發(fā)送之前進(jìn)入該定時(shí)器中斷。另外,還需要一個(gè)輔助時(shí)鐘,靠一個(gè)高速計(jì)數(shù)器來(lái)實(shí)現(xiàn),因此也初始化一個(gè)高精度計(jì)數(shù)器。
[0007]首先對(duì)系統(tǒng)初始化完畢,啟動(dòng)Powerlink通信過(guò)程系統(tǒng)進(jìn)入正常通訊階段,當(dāng)定時(shí)器發(fā)生中斷時(shí),首先調(diào)用相應(yīng)處理,關(guān)掉其他中斷,確保該任務(wù)不會(huì)被其他任務(wù)打斷。然后,查詢高速計(jì)數(shù)器,獲取當(dāng)前時(shí)鐘。按上分析,雖然存在抖動(dòng),但是可以確保當(dāng)前時(shí)鐘距離下一個(gè)周期的起始時(shí)間還有一定差距,該差距最大值設(shè)定為定時(shí)器初始化時(shí)提前的那一小段時(shí)間的兩倍。如果時(shí)鐘到達(dá)下一個(gè)周期的時(shí)鐘值,則觸發(fā)Soc幀發(fā)送,否則繼續(xù)處于忙等待狀態(tài),繼續(xù)查詢時(shí)鐘,直到時(shí)鐘滿足要求。中斷程序的最后,開啟其他中斷服務(wù),運(yùn)行其他任務(wù)。
[0008]該方法利用了忙等待一段時(shí)間,不停地查詢高精度時(shí)鐘的過(guò)程,達(dá)到了減小抖動(dòng)的目的。這種方法雖然占用了 CPU—段時(shí)間,但是該時(shí)間不超過(guò)設(shè)置的提前時(shí)間的兩倍,在可控范圍內(nèi),不影響Powerl ink其他進(jìn)程的執(zhí)行。所以該方案是基于純MCU的Powerl ink技術(shù)降低Soc幀抖動(dòng)的可行方案。經(jīng)過(guò)測(cè)試,Soc幀的抖動(dòng)降到了 Ius以內(nèi),證實(shí)方案可行。
[0009]為解決上述問(wèn)題,本發(fā)明提供了一種基于MCU的降低PowerLink Soc同步巾貞抖動(dòng)的方法,包括:
[0010]系統(tǒng)程序在初始化階段,設(shè)置一個(gè)定時(shí)器,但是該定時(shí)器的設(shè)置值小于一個(gè)系統(tǒng)周期,提前一小段時(shí)間進(jìn)入中斷,其中提前的這一小段時(shí)間的長(zhǎng)度大于抖動(dòng)最大值,確保在Soc幀發(fā)送之前進(jìn)入該定時(shí)器中斷;同時(shí),該系統(tǒng)還包括一個(gè)輔助時(shí)鐘,通過(guò)一個(gè)高精度計(jì)數(shù)器來(lái)實(shí)現(xiàn),因此在系統(tǒng)初始化階段也初始化該高精度計(jì)數(shù)器;
[0011]初始化完畢,啟動(dòng)Powerlink通信過(guò)程系統(tǒng)進(jìn)入正常通訊階段,當(dāng)定時(shí)器中斷到來(lái)時(shí),記錄當(dāng)前計(jì)數(shù)器的值Tl ;
[0012]初始化以太網(wǎng)Soc幀的數(shù)據(jù),準(zhǔn)備好以太網(wǎng)發(fā)送控制寄存器,然后忙等待,當(dāng)查詢高精度計(jì)數(shù)器的值到了一個(gè)設(shè)定的周期值時(shí),使能Soc幀的發(fā)送;
[0013]在Soc幀發(fā)送完之后,處理Soc幀的回調(diào)函數(shù),然后重新初始化所述定時(shí)器,讀取并記錄當(dāng)前高精度計(jì)數(shù)器的值T2,通過(guò)Tl和T2計(jì)算忙等待消耗的時(shí)間,從而得出定時(shí)器下次設(shè)定的時(shí)間長(zhǎng)度,同樣提前一小段時(shí)間t進(jìn)入中斷;其中,上述Tl、T2、t的滿足關(guān)系:0〈T2-Tl〈2*t ;
[0014]打開中斷,繼續(xù)執(zhí)行其他任務(wù)。
[0015]優(yōu)選的,不需要記錄所述Tl和T2,而是在Soc幀發(fā)送之后,立刻重新啟動(dòng)定時(shí)器。
[0016]優(yōu)選的,為了保證定時(shí)器與計(jì)數(shù)器的時(shí)間同步,需要在初始化完成后同時(shí)啟動(dòng)定時(shí)器和計(jì)數(shù)器。
[0017]優(yōu)選的,直接使用定時(shí)器中斷的方式,測(cè)試所述抖動(dòng)最大值,根據(jù)這個(gè)抖動(dòng)最大值,設(shè)定定時(shí)器需要提前的一小段時(shí)間t。
[0018]優(yōu)選的,另外一個(gè)高精度計(jì)數(shù)器選擇32位計(jì)數(shù)器實(shí)現(xiàn),設(shè)成循環(huán)計(jì)數(shù)方式,每次根據(jù)讀到的計(jì)數(shù)值,換算成當(dāng)前時(shí)間。
[0019]優(yōu)選的,在Powerlink開始運(yùn)行后的所有周期通信階段,包括對(duì)從站節(jié)點(diǎn)的初始化階段和正常通信階段,都做與上類似處理,以降低Soc幀的抖動(dòng)。
[0020]通過(guò)上述技術(shù)方案,降低了 Powerlink技術(shù)Soc巾貞抖動(dòng),充實(shí)了 Powerlink技術(shù)的平臺(tái)多樣化?!緦@綀D】
【附圖說(shuō)明】
[0021]圖1是現(xiàn)有技術(shù)中的Powerlink技術(shù)的Soc巾貞同步示意圖。
[0022]圖2是Soc幀低抖動(dòng)同步方法實(shí)現(xiàn)過(guò)程示意圖。
[0023]圖3是Soc幀抖時(shí)序示意圖。
【具體實(shí)施方式】
[0024]為使本發(fā)明要解決的技術(shù)問(wèn)題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。
[0025]本發(fā)明提供了一種基于MCU的降低PowerLink Soc同步巾貞抖動(dòng)的方法,系統(tǒng)程序在初始化階段,設(shè)置一個(gè)定時(shí)器,但是該定時(shí)器的設(shè)置值小于一個(gè)系統(tǒng)周期,提前一小段時(shí)間進(jìn)入中斷,其中提前的這一小段時(shí)間的長(zhǎng)度大于抖動(dòng)最大值,確保在Soc幀發(fā)送之前進(jìn)入該定時(shí)器中斷;同時(shí),該系統(tǒng)還包括一個(gè)輔助時(shí)鐘,通過(guò)一個(gè)高精度計(jì)數(shù)器來(lái)實(shí)現(xiàn),因此在系統(tǒng)初始化階段也初始化該高精度計(jì)數(shù)器。
[0026]選擇ARM中的M4和A9兩款高性能處理器來(lái)做實(shí)驗(yàn),移植Powerlink到器件上。直接使用定時(shí)器中斷的方式,測(cè)試抖動(dòng)的最大值,記錄下來(lái)。根據(jù)這個(gè)抖動(dòng)值,設(shè)定定時(shí)器需要提前的時(shí)間。另外一個(gè)高精度計(jì)數(shù)器選擇32位計(jì)數(shù)器實(shí)現(xiàn),設(shè)成循環(huán)計(jì)數(shù)方式,每次根據(jù)讀到的計(jì)數(shù)值,換算成當(dāng)前時(shí)間。因?yàn)槭茄h(huán)計(jì)數(shù),換算時(shí)需要做計(jì)滿溢出的處理。為了保證定時(shí)器與計(jì)數(shù)器的時(shí)間同步,需要在初始化完后,同時(shí)啟動(dòng)定時(shí)器和計(jì)數(shù)器。
[0027]如圖2所示,程序初始化階段,定時(shí)器設(shè)置值不再是一個(gè)周期,而是比周期稍微小一點(diǎn),提前一小段時(shí)間進(jìn)入中斷。提前的這一小段時(shí)間的長(zhǎng)度大于普通方式所測(cè)得的抖動(dòng)最大值,確保在Soc幀發(fā)送之前進(jìn)入該定時(shí)器中斷。另外,還需要一個(gè)輔助時(shí)鐘,靠一個(gè)高速計(jì)數(shù)器來(lái)實(shí)現(xiàn),因此也初始化一個(gè)高精度計(jì)數(shù)器。
[0028]初始化完畢,啟動(dòng)Powerlink通信過(guò)程系統(tǒng)進(jìn)入正常通訊階段,當(dāng)定時(shí)器發(fā)生中斷時(shí),首先調(diào)用相應(yīng)函數(shù),關(guān)掉其他中斷,確保該任務(wù)不會(huì)被其他任務(wù)打斷。然后,查詢高速計(jì)數(shù)器,獲取當(dāng)前時(shí)鐘。按上分析,雖然存在抖動(dòng),但是可以確保當(dāng)前時(shí)鐘還是距離下一個(gè)周期的時(shí)鐘值有一定差距,該差距最大值為定時(shí)器初始化時(shí)提前的那一小段時(shí)間的兩倍。如果時(shí)鐘到達(dá)下一個(gè)周期的時(shí)鐘值,則觸發(fā)Soc幀發(fā)送,否則在此忙等待,繼續(xù)查詢時(shí)鐘,直到時(shí)鐘滿足要求。中斷程序的最后,開啟其他中斷服務(wù),運(yùn)行其他任務(wù)。
[0029]該方法利用了忙等待一段時(shí)間,不停地查詢高精度時(shí)鐘的過(guò)程,達(dá)到了減小抖動(dòng)的目的。這種方法雖然占用了 CPU—段時(shí)間,但是該時(shí)間不超過(guò)設(shè)置的提前時(shí)間的兩倍,在可控范圍內(nèi),不影響Powerlink其他進(jìn)程的執(zhí)行。所以該方案是基于純MCU的Powerlink技術(shù)降低Soc幀抖動(dòng)的可行方案。經(jīng)過(guò)測(cè)試,Soc幀的抖動(dòng)降到了 Ius以內(nèi),證實(shí)方案可行。
[0030]也可以采用另外一種方法,不需要記錄Tl和T2,在Soc幀發(fā)送之后,立刻重新啟動(dòng)定時(shí)器。因?yàn)镾oc幀發(fā)送時(shí),可以確定當(dāng)前時(shí)間為一個(gè)周期的末尾,也是下一個(gè)周期的開始。
[0031 ] 最后,打開中斷,繼續(xù)執(zhí)行其他任務(wù)。
[0032]優(yōu)選的,為了保證定時(shí)器與計(jì)數(shù)器的時(shí)間同步,需要在初始化完成后同時(shí)啟動(dòng)定時(shí)器和計(jì)數(shù)器。[0033]優(yōu)選的,直接使用定時(shí)器中斷的方式,測(cè)試所述抖動(dòng)最大值,根據(jù)這個(gè)抖動(dòng)最大值,設(shè)定定時(shí)器需要提前的一小段時(shí)間t。
[0034]優(yōu)選的,另外一個(gè)高精度計(jì)數(shù)器選擇32位計(jì)數(shù)器實(shí)現(xiàn),設(shè)成循環(huán)計(jì)數(shù)方式,每次根據(jù)讀到的計(jì)數(shù)值,換算成當(dāng)前時(shí)間。
[0035]優(yōu)選的,在Powerlink開始運(yùn)行后的所有周期通信階段,包括對(duì)從站節(jié)點(diǎn)的初始化階段和正常通信階段,都做與上類似處理,以降低Soc幀的抖動(dòng)。)
[0036]以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明所述原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種基于MCU的POWERLINK SoC幀同步降低抖動(dòng)的方法,包括: 系統(tǒng)程序在初始化階段,設(shè)置一個(gè)定時(shí)器,但是該定時(shí)器的設(shè)置值小于一個(gè)系統(tǒng)周期,提前一小段時(shí)間進(jìn)入中斷,其中提前的這一小段時(shí)間的長(zhǎng)度大于抖動(dòng)最大值,確保在Soc幀發(fā)送之前進(jìn)入該定時(shí)器中斷;同時(shí),該系統(tǒng)還包括一個(gè)輔助時(shí)鐘,通過(guò)一個(gè)高精度計(jì)數(shù)器來(lái)實(shí)現(xiàn),因此在系統(tǒng)初始化階段也初始化該高精度計(jì)數(shù)器; 初始化完畢,啟動(dòng)Powerlink通信過(guò)程系統(tǒng)進(jìn)入正常通訊階段,當(dāng)定時(shí)器中斷到來(lái)時(shí),記錄當(dāng)前計(jì)數(shù)器的值Tl ; 初始化以太網(wǎng)Soc幀的數(shù)據(jù),準(zhǔn)備好以太網(wǎng)發(fā)送控制寄存器,然后忙等待,當(dāng)查詢高精度計(jì)數(shù)器的值到了一個(gè)設(shè)定的周期值時(shí),使能Soc幀的發(fā)送; 在Soc幀發(fā)送完之后,處理Soc幀的回調(diào)函數(shù),然后重新初始化所述定時(shí)器,讀取并記錄當(dāng)前高精度計(jì)數(shù)器的值T2,通過(guò)Tl和T2計(jì)算忙等待消耗的時(shí)間,從而得出定時(shí)器下次設(shè)定的時(shí)間長(zhǎng)度,同樣提前一小段時(shí)間t進(jìn)入中斷;其中,上述Tl、T2、t的滿足關(guān)系:0〈T2-Tl〈2*t ; 打開中斷,繼續(xù)執(zhí)行其他任務(wù)。
2.如權(quán)利要求1所述的方法,其特征在于:不需要記錄所述Tl和T2,而是在Soc幀發(fā)送之后,立刻重新啟動(dòng)定時(shí)器。
3.如權(quán)利要求1或2所述的方法,其特征在于:為了保證定時(shí)器與計(jì)數(shù)器的時(shí)間同步,需要在初始化完成后同時(shí)啟動(dòng)定時(shí)器和計(jì)數(shù)器。
4.如權(quán)利要求1或2所述的方法,其特征在于:直接使用定時(shí)器中斷的方式,測(cè)試所述抖動(dòng)最大值,根據(jù)這個(gè)抖動(dòng)最大值,設(shè)定定時(shí)器需要提前的一小段時(shí)間t。
5.如權(quán)利要求1或2所述的方法,其特征在于:所述高精度計(jì)數(shù)器選擇32位計(jì)數(shù)器實(shí)現(xiàn),設(shè)成循環(huán)計(jì)數(shù)方式,每次根據(jù)讀到的計(jì)數(shù)值,換算成當(dāng)前時(shí)間。
6.如權(quán)利要求1或2所述的方法,其特征在于:在Powerlink開始運(yùn)行后的所有周期通信階段,包括對(duì)從站節(jié)點(diǎn)的初始化階段和正常通信階段,都做與上類似處理,以降低Soc幀的抖動(dòng)。
【文檔編號(hào)】H04L12/40GK103812635SQ201410077983
【公開日】2014年5月21日 申請(qǐng)日期:2014年3月5日 優(yōu)先權(quán)日:2014年3月5日
【發(fā)明者】張少林 申請(qǐng)人:武漢邁信電氣技術(shù)有限公司