基于USB的高速硬件精插補(bǔ)器設(shè)計(jì)
摘 要:介紹了一種基于USB通訊的高速硬件精插補(bǔ)器的設(shè)計(jì),設(shè)計(jì)中采用FPGA實(shí)現(xiàn)精插補(bǔ),并通過(guò)USB接口實(shí)現(xiàn)與上位PC機(jī)的高速數(shù)據(jù)通訊。該精插補(bǔ)器具有設(shè)計(jì)簡(jiǎn)單、易于實(shí)現(xiàn)、插補(bǔ)速度高等特點(diǎn),可適用于高速數(shù)控系統(tǒng)的開(kāi)發(fā)。
關(guān)鍵詞:USB通訊; FPGA; 精插補(bǔ)器
前言
數(shù)控系統(tǒng)發(fā)展到90年代后,基于個(gè)人計(jì)算機(jī)(PC)的數(shù)控系統(tǒng)(簡(jiǎn)稱PCNC)成為CNC發(fā)展的主要方向[1]。目前PC和NC的連接主要采用兩種形式,一是通過(guò)PC機(jī)的串口、并口,這種方式接口簡(jiǎn)單、連接方便,開(kāi)發(fā)費(fèi)用低,但由于傳輸速度低,已不能滿足現(xiàn)代數(shù)控系統(tǒng)的實(shí)時(shí)性要求。二是采用ISA和PCI插卡的形式,NC功能插卡化,并將其插入PC機(jī)的標(biāo)準(zhǔn)ISA/PCI插槽,可方便實(shí)現(xiàn)與用戶接口、主機(jī)系統(tǒng)通訊的開(kāi)放化,這是PCNC系統(tǒng)的一種主流形式,但PCI總線接口復(fù)雜,驅(qū)動(dòng)程序、硬件接口開(kāi)發(fā)難度大,開(kāi)發(fā)成本較高,開(kāi)發(fā)周期也較長(zhǎng),而ISA總線由于速度較慢已隨著計(jì)算機(jī)的發(fā)展逐漸被淘汰。
隨著計(jì)算機(jī)總線結(jié)構(gòu)的變革,必將影響數(shù)控系統(tǒng)的體系結(jié)構(gòu),串行總線的應(yīng)用將極大地改變現(xiàn)有的傳統(tǒng)數(shù)控系統(tǒng)的結(jié)構(gòu)形式。串行總線連接引腳數(shù)量少,連接簡(jiǎn)單,成本較低,系統(tǒng)可靠性高,USB作為一種新的通用串行總線標(biāo)準(zhǔn),應(yīng)用越來(lái)越廣泛[2]。USB總線具有較強(qiáng)的糾錯(cuò)能力、速度快、不占用系統(tǒng)資源、驅(qū)動(dòng)程序開(kāi)發(fā)簡(jiǎn)單的特點(diǎn),較好地滿足了現(xiàn)代數(shù)控系統(tǒng)的要求,因此,本文把USB這種新型接口和通訊方式應(yīng)用到數(shù)控系統(tǒng),設(shè)計(jì)了一種基于USB通訊的硬件高速精插補(bǔ)器。
1硬件精插補(bǔ)器的工作原理
硬件精插補(bǔ)器通過(guò)USB接口從上位PC機(jī)獲取粗插補(bǔ)數(shù)據(jù),由FPGA實(shí)現(xiàn)高速精插補(bǔ)輸出。精插補(bǔ)器主要由USB接口芯片、微控制器、數(shù)據(jù)緩存、FPGA等部分組成,如圖1所示。各部分功能如下:
·微控制器通過(guò)USB從上位PC機(jī)獲取粗插補(bǔ)數(shù)據(jù)和機(jī)床控制信息,通過(guò)數(shù)據(jù)緩存?zhèn)魉徒oFPGA;
·USB接口芯片負(fù)責(zé)處理所有與USB總線事務(wù)有關(guān)的任務(wù),如總線喚醒、數(shù)據(jù)接受/發(fā)送、打包、CRC校驗(yàn)等;
·FPGA通過(guò)微控制器獲取粗插補(bǔ)數(shù)據(jù)及機(jī)床控制信息,實(shí)現(xiàn)精插補(bǔ)輸出;
·數(shù)據(jù)緩存用于緩存粗插補(bǔ)數(shù)據(jù),以協(xié)調(diào)微控制器和精插補(bǔ)控制器的速度差異。
精插補(bǔ)器通過(guò)微控制器的固件程序和上位PC機(jī)應(yīng)用程序及驅(qū)動(dòng)程序的協(xié)調(diào)處理,完成高速的數(shù)據(jù)通訊。
2.1 USB通訊接口設(shè)計(jì)
USB 外圍接口芯片采用Philips公司的支持USB1.1協(xié)議的芯片PDIUSBD12(以下簡(jiǎn)稱D12), 該芯片性價(jià)比高,集成了320字節(jié)的FIFO內(nèi)存、SIE(Serial Interface Engine)、收發(fā)器以及電壓調(diào)整器, 主端點(diǎn)有雙緩存配置,增加吞吐量,容易實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)傳輸[3]。由于其為純粹的USB外設(shè)接口芯片僅處理USB總線相關(guān)事務(wù),必須有一個(gè)外部微處理器來(lái)進(jìn)行協(xié)議處理和數(shù)據(jù)交換,設(shè)計(jì)中采用PHILIPS公司內(nèi)核基于8位80C51單片機(jī)增強(qiáng)型派生產(chǎn)品P89C58X2FN ,它完全保留了80C51指令系統(tǒng)和硬件結(jié)構(gòu)的大框架,而且它在多個(gè)方面進(jìn)行了加強(qiáng)、擴(kuò)展和創(chuàng)新。如片上的FLASH EPROM擴(kuò)展到32KB,滿足當(dāng)今用嵌入式高級(jí)語(yǔ)言對(duì)片上大存儲(chǔ)容量的需要;6個(gè)中斷源和4個(gè)中斷優(yōu)先級(jí)滿足數(shù)控系統(tǒng)的多級(jí)中斷要求;速度高達(dá)33M有利于提高對(duì)D12的讀寫速度。D12與P89C58X2FN連接電路如圖2所示。
圖2 D12與P89C58X2FN的連接電路圖
D12采用數(shù)據(jù)/地址總線復(fù)用方式和P89C58X2FN相連接,D12相當(dāng)于一位(兩個(gè)地址)的外部RAM,對(duì)D12的操作就像對(duì)外部RAM操作一樣,低位地址線P0.0通過(guò)373地址鎖存后與D12的A0相連,高位P2.5產(chǎn)生片選信號(hào),這樣D12的地址為2000H和2001H, D12的通信采用這樣的方式:一個(gè)偶數(shù)地址表示送往D12的是讀/寫數(shù)據(jù),一個(gè)奇數(shù)地址表示往D12 寫入一個(gè)命令,這是由D12的內(nèi)部邏輯來(lái)實(shí)現(xiàn)的,即D12的數(shù)據(jù)地址為2000H,命令地址為2001H。D12的中斷引腳接P89C58X2FN的外部中斷1,要注意的是中斷只能采用電平觸發(fā)方式,低電平有效。
2.2 FPGA設(shè)計(jì)
隨著集成度高、速度快的可編程門陣列FPGA(FILED ROGRAMABLE GATE ARRAY)的出現(xiàn)和EDA工具的完善,使得硬件電路的設(shè)計(jì)過(guò)程大大簡(jiǎn)化,并可通過(guò)波形仿真工具驗(yàn)證電路的功能正確性,有效地縮短了電路的開(kāi)發(fā)周期,提高了設(shè)計(jì)的靈活性,可彌補(bǔ)傳統(tǒng)硬件插補(bǔ)器的缺點(diǎn)。因此,本文采用FPGA來(lái)實(shí)現(xiàn)精精插。具體設(shè)計(jì)中采用了ALTERA公司的FPGA芯片EPF10K10LC84-4,可實(shí)現(xiàn)三軸直線、兩軸圓弧聯(lián)動(dòng)精插補(bǔ),產(chǎn)生進(jìn)給序列脈沖,用于三軸步進(jìn)或伺服電機(jī)的驅(qū)動(dòng)控制。
2.2.1 精插補(bǔ)原理
精插補(bǔ)器的功能是接收通過(guò)粗插補(bǔ)計(jì)算得到的一個(gè)插補(bǔ)周期內(nèi)各軸的進(jìn)給量(微段直線),并將其轉(zhuǎn)化成頻率均勻的進(jìn)給脈沖,輸出給各軸的位置伺服控制器。脈沖轉(zhuǎn)換常用的方法是采用計(jì)數(shù)器和分頻器,其主要優(yōu)點(diǎn)是頻率均勻,但存在脈沖截?cái)嗾`差。本文采用了基于DDA(數(shù)字微分分析器)插補(bǔ)原理的脈沖轉(zhuǎn)換算法,它不僅實(shí)現(xiàn)簡(jiǎn)單,消除了脈沖截?cái)嗾`差,而且易于實(shí)現(xiàn)多坐標(biāo)進(jìn)給的同步[4]。
DDA插補(bǔ)的原理是通過(guò)對(duì)進(jìn)給量X的不斷累加、溢出,產(chǎn)生相應(yīng)的進(jìn)給脈沖。具體的說(shuō),在累加脈沖△T控制下,存儲(chǔ)在N位寄存器中的進(jìn)給量X不斷累加,累加的溢出脈沖即為驅(qū)動(dòng)坐標(biāo)軸的進(jìn)給脈沖。當(dāng)累加次數(shù)達(dá)到2N時(shí),溢出脈沖的數(shù)據(jù)量恰好等于進(jìn)給量X,一次脈沖轉(zhuǎn)換完成。此時(shí),完成一次脈沖轉(zhuǎn)換的周期是T=2N/fin,產(chǎn)生的溢出脈沖頻率為fout=fin*X/2N,其中fin為累加控制脈沖頻率。
2.2.2 FPGA實(shí)現(xiàn)
精插補(bǔ)器內(nèi)部結(jié)構(gòu)原理圖如圖3所示。其工作過(guò)程如下:精插補(bǔ)的啟動(dòng)、停止是由單片機(jī)來(lái)控制的,開(kāi)始插補(bǔ)時(shí),單片機(jī)把本次插補(bǔ)周期的粗插補(bǔ)數(shù)據(jù)發(fā)送給FPGA后,發(fā)出插補(bǔ)開(kāi)始信號(hào)。插補(bǔ)開(kāi)始信號(hào)一到,插補(bǔ)控制邏輯就把插補(bǔ)數(shù)據(jù)送入累加寄存器,并啟動(dòng)累加器進(jìn)行累加,同時(shí)輸出插補(bǔ)方向信號(hào),然后就向單片機(jī)申請(qǐng)中斷,發(fā)送下一個(gè)插補(bǔ)周期的數(shù)據(jù)到插補(bǔ)數(shù)據(jù)緩沖區(qū)中。插補(bǔ)周期未到時(shí),累加器不斷累加進(jìn)行脈沖輸出,計(jì)數(shù)器控制每個(gè)插補(bǔ)周期脈沖轉(zhuǎn)化的累加次數(shù),一旦本次插補(bǔ)周期一到,計(jì)數(shù)器對(duì)累加器清零,以免給下一次插補(bǔ)帶來(lái)偏差,并重新開(kāi)始下一個(gè)周期的插補(bǔ)。當(dāng)單片機(jī)發(fā)出停止插補(bǔ)信號(hào)后,控制邏輯立即封鎖插補(bǔ)脈沖源,停止插補(bǔ)脈沖輸出。為了提高溢出脈沖均勻性,減少溢出脈沖的頻率誤差,本文使累加次數(shù)增加Q倍,再對(duì)溢出脈沖進(jìn)行Q倍分頻。
圖3 精插補(bǔ)器內(nèi)部結(jié)構(gòu)原理圖
2.2.2精插補(bǔ)器最高輸出脈沖頻率分析
設(shè)插補(bǔ)周期為0.5ms,若硬件精插補(bǔ)器采用8位累加器,4位分頻器,則每次脈沖轉(zhuǎn)換的累加次數(shù)應(yīng)為212。累加脈沖的輸入頻率是fin=212/T=8.192MHZ,則最高輸出脈沖頻率可達(dá)fout=fin*X/212=510KHZ。當(dāng)伺服進(jìn)給的脈沖量為lum時(shí),最大進(jìn)給速度可達(dá)30.6m/min,而且通過(guò)提高累加的頻率還可獲得更高的速度??梢?jiàn)本文提出的硬件精插補(bǔ)器完全可滿足高速加工的進(jìn)給速度控制要求。
3 固件程序設(shè)計(jì)
固件程序(firmware)除了完成USB設(shè)備初始化、USB協(xié)議標(biāo)準(zhǔn)請(qǐng)求處理外,主要的任務(wù)是實(shí)現(xiàn)粗插補(bǔ)數(shù)據(jù)及機(jī)床控制命令和狀態(tài)反饋信息的傳輸。D12共有3個(gè)端點(diǎn),端點(diǎn)0、端點(diǎn)1和端點(diǎn)2。在設(shè)計(jì)中,端點(diǎn)0通過(guò)控制傳輸實(shí)現(xiàn)設(shè)備的枚舉;端點(diǎn)1通過(guò)中斷傳輸方式實(shí)現(xiàn)數(shù)控系統(tǒng)的控制信號(hào)及數(shù)據(jù)請(qǐng)求信號(hào)的傳輸,端點(diǎn)2配置為普通傳輸端點(diǎn),通過(guò)批量傳輸實(shí)現(xiàn)數(shù)控系統(tǒng)粗插補(bǔ)數(shù)據(jù)的傳輸工作。數(shù)據(jù)交換是采用中斷機(jī)制來(lái)實(shí)現(xiàn)。微控制器與USB的數(shù)據(jù)交換由外部中斷1來(lái)處理,微控制器與FPGA的數(shù)據(jù)交換由外部中斷0來(lái)處理?,F(xiàn)主要介紹固件程序?qū)崿F(xiàn)NC粗插補(bǔ)數(shù)據(jù)傳輸?shù)姆椒ā?/P>
由于NC粗插補(bǔ)數(shù)據(jù)量較大,不適合于采用中斷傳輸,盡管同步傳輸速度快,速度恒定,但由于其數(shù)據(jù)傳輸?shù)臏?zhǔn)確性差也滿足不了要求,因此NC粗插補(bǔ)數(shù)據(jù)采用批量傳輸。由于批量傳輸方式優(yōu)先級(jí)最低,系統(tǒng)響應(yīng)具有不確定性,傳輸速度也具有一定的不確定性。解決的方法是采用數(shù)據(jù)緩沖,在系統(tǒng)中配置了一個(gè)8k的外部RAM,設(shè)置兩個(gè)4000字節(jié)的粗插補(bǔ)數(shù)據(jù)緩沖區(qū)。一個(gè)插補(bǔ)周期的數(shù)據(jù)占4個(gè)字節(jié),可緩沖1000段數(shù)據(jù),系統(tǒng)插補(bǔ)周期為0.5ms,即一次傳輸加工時(shí)間為500ms,若按40k/s的批量傳輸速度計(jì)算(實(shí)際傳輸?shù)乃俣冗h(yuǎn)大于此速度),傳輸4000字節(jié)只需100ms左右,加上NC數(shù)據(jù)請(qǐng)求等待延時(shí),還有足夠的時(shí)間余量。另外,系統(tǒng)中沒(méi)有同步傳輸,中斷傳輸?shù)臄?shù)據(jù)量少,也保證了USB總線為批量傳輸提供足夠的帶寬。因此,本文采用雙緩沖區(qū)的方式完全可滿足高速加工的插補(bǔ)數(shù)據(jù)通訊要求。
具體實(shí)現(xiàn)時(shí),粗插補(bǔ)數(shù)據(jù)通過(guò)端點(diǎn)2的批量傳輸來(lái)完成的。在一個(gè)緩沖區(qū)的數(shù)據(jù)精插補(bǔ)完后,通過(guò)端點(diǎn)1向PC主機(jī)發(fā)出數(shù)據(jù)請(qǐng)求,PC主機(jī)即向該緩沖區(qū)傳輸數(shù)據(jù),固件程序通過(guò)端點(diǎn)2 OUT中斷接收該數(shù)據(jù),并存入數(shù)據(jù)緩沖區(qū)。
4 結(jié)束語(yǔ)
高速加工是當(dāng)代數(shù)控加工的發(fā)展趨勢(shì),高速硬件精插補(bǔ)器是實(shí)現(xiàn)高速加工進(jìn)給控制的關(guān)鍵技術(shù)之一。本文采用可編程邏輯器件FPGA實(shí)現(xiàn)高速精插補(bǔ)器,充分發(fā)揮了FPGA速度快、設(shè)計(jì)靈活、集成度高、性能可靠、開(kāi)發(fā)成本低等一系列優(yōu)點(diǎn)。采用USB接口實(shí)現(xiàn)通訊,完全滿足精插補(bǔ)器的高速數(shù)據(jù)傳輸要求。
參考文獻(xiàn)
[1] 孫斌、楊汝清,基于PC的數(shù)控系統(tǒng)的研究現(xiàn)狀和發(fā)展趨勢(shì),機(jī)床與液壓,2001年4期:3~5
[2] 鄭立新,串行總線計(jì)算機(jī)數(shù)控系統(tǒng),制造技術(shù)與機(jī)床,200年4期:9~10。
[3] 周立功等編著. PDIUSBD12 USB 固件編程與驅(qū)動(dòng)開(kāi)發(fā) .北京:北京航空航天大學(xué)出版社. 2003年
[4] 羅睿梅著. 高速數(shù)控系統(tǒng)的運(yùn)動(dòng)控制技術(shù). 南京航空航天大學(xué)學(xué)位論文,2003年