基于FPGA的步進(jìn)電動(dòng)機(jī)伺服控制器通信系統(tǒng)設(shè)計(jì)
吳喜橋,劉景林
(西北工業(yè)大學(xué)自動(dòng)化學(xué)院,西安710129)
摘要:為實(shí)現(xiàn)某掃描機(jī)構(gòu)伺服控制器與上位機(jī)的串行通信,提出了應(yīng)用于該系統(tǒng)的專用異步
串行通信和同步串行通信的FPGA設(shè)計(jì)方法。介紹了掃描機(jī)構(gòu)伺服控制系統(tǒng)的構(gòu)成;詳述了異步
串行通信各個(gè)功能模塊及光電編碼器脈沖計(jì)數(shù)值同步串行發(fā)送到上位機(jī)的FPGA設(shè)計(jì)與仿真實(shí)
現(xiàn)。分析證明該設(shè)計(jì)時(shí)序正確,實(shí)現(xiàn)了功能指標(biāo),確保了伺服控制器與上位機(jī)的通信。
關(guān)鍵詞:FPGA;異步串行通信;同步串行通信;伺服控制系統(tǒng);步進(jìn)電動(dòng)機(jī)
O 引 言
步進(jìn)電機(jī)伺服控制器是掃描機(jī)構(gòu)的核心,而通信系統(tǒng)是伺服控制器的關(guān)鍵。本系統(tǒng)采用霍爾傳感器和光電編碼器采集步進(jìn)電機(jī)的速度和角度信息,伺服控制器傳統(tǒng)的設(shè)計(jì)方法是利用單片機(jī)或DsP和上位機(jī)進(jìn)行通信。本文采用FPGA作為下位機(jī)、采用硬件描述語言Verilog HDL,設(shè)計(jì)了掃描機(jī)構(gòu)伺服控制器通信系統(tǒng)。FPGA可移植性強(qiáng),只需要簡(jiǎn)單地修改硬件接口和串口通信格式即可實(shí)現(xiàn)FPGA和不同的上位機(jī)的高速串行通信。
l伺服控制系統(tǒng)構(gòu)成
某掃描機(jī)構(gòu)系統(tǒng)框圖如圖l所示。本系統(tǒng)采用閉環(huán)控制方式驅(qū)動(dòng)步進(jìn)電機(jī)做變速的連續(xù)圓周掃描,帶動(dòng)掃描機(jī)構(gòu)實(shí)現(xiàn)精確掃描定位。
根據(jù)不同時(shí)刻的速度,由FPGA設(shè)計(jì)的細(xì)分驅(qū)動(dòng)模塊(EP2c5T144c6)產(chǎn)生不同頻率的脈沖。此脈沖控翩輸出存儲(chǔ)在FPGA內(nèi)的細(xì)分?jǐn)?shù)據(jù),功率驅(qū)動(dòng)芯片根據(jù)細(xì)分?jǐn)?shù)據(jù)進(jìn)行斬波控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng),從而控制掃描機(jī)構(gòu)按照預(yù)定方式轉(zhuǎn)動(dòng)【1】。霍爾傳感器作為伺服控制器位置基準(zhǔn),輸出的信號(hào)與光電編碼器的零位信號(hào)來確定機(jī)械零點(diǎn)。配置芯片選用EPcS4,掉電后、上電時(shí)對(duì)FPGA進(jìn)行配置。
FPGA對(duì)光電編碼器輸出的脈沖信號(hào)進(jìn)行4細(xì)分計(jì)數(shù),按照要求通過同步串口發(fā)送給Pc機(jī)。FPGA在接收到Pc機(jī)指令后通過異步串口返回遙測(cè)數(shù)據(jù)包。Pc機(jī)根據(jù)返回的數(shù)據(jù)包和光電編碼器計(jì)數(shù)值,通過異步串口向FPGA發(fā)出指令來控制步進(jìn)電機(jī)。
本系統(tǒng)中異步串行通信的物理接口為RS485、半雙工主從應(yīng)答式,波特率為9 600 bps。采用Verilog語言編寫程序,完成數(shù)據(jù)的接收與發(fā)送。電平轉(zhuǎn)換采用MAⅪM公司生產(chǎn)的MAX3160。這是一款高性能的多協(xié)議收發(fā)器件,可編程控制半雙工或全雙工Rs一485/422,RS232模式。
2 FPGA異步串行通信模塊
異步串行通信模塊在FPGA芯片內(nèi)部的硬件邏輯設(shè)計(jì)包括波特率發(fā)生器、Rs一485接收器和Rs一485發(fā)送器【3-5】,如圖2所示。
2.1波特率發(fā)生器
波特率發(fā)生器產(chǎn)生的分頻時(shí)鐘,不是波特率時(shí)鐘,而是波特率時(shí)鐘頻率的16倍,對(duì)輸入rxd不斷進(jìn)行采樣,保持接收器與Pc機(jī)同步,目的是為了在接收時(shí)進(jìn)行精確地采樣,以提取異步的串行數(shù)據(jù)。波特率發(fā)生器根據(jù)給定的系統(tǒng)時(shí)鐘頻率和要求的波特率計(jì)算出波特率分頻因子,已算出的波特率分頻因子作為分頻器的分頻數(shù)。計(jì)算公式為:分頻數(shù)=全局時(shí)鐘/(16×期望波特率)一1。
2.2 Rs-485接收器
RS一485接收器接收Pc機(jī)發(fā)送的指令,并將其轉(zhuǎn)化為并行數(shù)據(jù)。FPGA控制單元根據(jù)此數(shù)據(jù)來控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)。Pc機(jī)發(fā)送信號(hào)字符格式為:1位起始位,8位數(shù)據(jù)位,1位可程控位(標(biāo)識(shí)地址幀),1位停止位。
由于串行數(shù)據(jù)幀和接收時(shí)鐘是異步的,由邏輯l轉(zhuǎn)化為邏輯O可以被視為一個(gè)數(shù)據(jù)幀的起始位。為了避免毛刺影響,需要至少4個(gè)連續(xù)bclk的邏輯O被接收到,才認(rèn)為起始位接收到。
Rs.485接收器的接收狀態(tài)機(jī)流程圖如圖3(a)所示。狀態(tài)機(jī)一共有6個(gè)狀態(tài):sO(等待起始位)、s1(求出位的中點(diǎn))、s2(等待采樣數(shù)據(jù)位和程控位)、s3(數(shù)據(jù)位采樣)、s4(程控位采樣)、s5(存儲(chǔ)數(shù)據(jù)和停止位接收)。
sO狀態(tài):接收器異步復(fù)位后,接收狀態(tài)機(jī)將處于這一狀態(tài),一旦確定起始位到來,狀態(tài)機(jī)將轉(zhuǎn)入sl狀態(tài)。圖4(a)中的rxd—syne O、Ⅸd—syncl、rxd—sync信號(hào)是rxd的同步信號(hào)。為了排除干擾信號(hào),檢測(cè)經(jīng)過同步后的rxd—sync信號(hào)。
s1狀態(tài):對(duì)于異步串行信號(hào),在每位的中點(diǎn)檢測(cè)位信號(hào),能保證在較后的數(shù)據(jù)位檢測(cè)的時(shí)累計(jì)誤差較小。在本狀態(tài),就是由起始 |