趙兵,黃曉華
(南京理工大學(xué)機械工程學(xué)院,江蘇南京 210094)
串口通訊因為其協(xié)議簡單,操作方便,如今已在工業(yè)控制系統(tǒng)、儀器測量系統(tǒng)等各個領(lǐng)域被越來越廣泛地應(yīng)用[1]。而現(xiàn)代計算機、各種處理芯片等其他控制終端僅僅配備了少量的通用串口,在很多需要多串口的系統(tǒng)中并不能滿足需求。為了解決在所研究的全向移動機器人運動控制系統(tǒng)中出現(xiàn)的串口個數(shù)不能滿足的問題,現(xiàn)使用FPGA(field-programmable gate array)芯片進行邏輯編程,實現(xiàn)了擴展多個串口進行通信的功能。
在全向移動機器人的運動控制中,使用伺服電動機控制底盤驅(qū)動機器人可以進行精密的運動控制,本文使用MAXON電動機搭載以色列公司生產(chǎn)的Elmo伺服控制器進行伺服控制。Elmo伺服驅(qū)動器提供了串口與控制芯片通信進行命令地接收和反饋。在運動控制系統(tǒng)中,微處理器采集各種傳感器的信息進行分析綜合,判定機器人當前所處的狀態(tài),根據(jù)目前自身所處的狀態(tài)(包括姿態(tài),方向角,位置點,加速度,速度等其他方面),對安裝于機器人底盤的三個電動機發(fā)出不同的運動命令,使各個電動機帶動機器人的三個全向輪協(xié)同工作,達到所需要的運動軌跡,速度,姿態(tài)等。
本文的運動控制系統(tǒng)采用了美國公司德州儀器所生產(chǎn)的DSP2812作為主控制器,DSP2812擁有兩個串行通信口SCIA和SCIB,但是,在該全向定位控制系統(tǒng)中,不僅需要控制三個伺服電動機的運動,而且還需要與其他傳感器和一些監(jiān)測設(shè)備(例如監(jiān)測狀態(tài)的電腦終端等)進行通訊,因此,為了實現(xiàn)這些擴展的功能,利用FPGA設(shè)計了中間擴展模塊。全向機器人運動控制系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 控制系統(tǒng)結(jié)構(gòu)圖
該系統(tǒng)中的DSP2812與FPGA之間的數(shù)據(jù)傳輸采用了并口通信,將擴展的子串口映射到不同的地址中,需要往哪個子串口傳輸數(shù)據(jù)時往相應(yīng)的地址中寫入數(shù)據(jù)即可,讀取時,當可讀信號脈沖來時,給予中斷并通過控制線判定讀取的串口號。
考慮到并行通信口要比串口速度快,速度級并不一致,所以設(shè)計了緩存模塊,在發(fā)送和接收系統(tǒng)中加入16×8的FIFO(first input first output)。
另外,F(xiàn)PGA是TTL電平,而串口協(xié)議規(guī)定的邏輯1電平是-3V~-15V,邏輯0電平是+3V~+15V,兩者使用了max232進行電平轉(zhuǎn)換。
為了實現(xiàn)上述的控制要求,本次設(shè)計的FPGA使用Altera公司的Cyclone II系列的EP2C5Q208C8芯片,軟件設(shè)計在Quartus II開發(fā)集成設(shè)計環(huán)境中完成。通過Verilog硬件描述語言實現(xiàn)的功能設(shè)計。設(shè)計的一些主要模塊有全局控制模塊,時鐘發(fā)生器模塊,發(fā)送模塊,接收模塊。通過對這些模塊的設(shè)計編程實現(xiàn)相應(yīng)的時序控制,完成串口擴展的功能。
圖2 時鐘模塊程序塊圖
對頻率為40MHz的晶振源進行分頻,產(chǎn)生所需要的各種時鐘頻率。將串口通信的波特率設(shè)為9600bit/s,在具體的實現(xiàn)過程中,發(fā)送和接收模塊工作頻率設(shè)為波特率的16倍,具體分頻時,創(chuàng)建一個發(fā)送器時鐘變量和一個計數(shù)變量,初始化為零,每當系統(tǒng)時鐘上升沿到來時,計數(shù)變量自加1,當計數(shù)到130時,發(fā)送器時鐘變量電平立即反轉(zhuǎn),計數(shù)清零,這樣循環(huán)往復(fù),就產(chǎn)生了所需的發(fā)送接收模塊的工作頻率。同理,還可以用它產(chǎn)生其他所需要的各種時鐘頻率。
通過時鐘發(fā)生模塊得到的接收模塊的工作時鐘頻率為波特率的16倍,接收模塊首先等待數(shù)據(jù)的到來,串口通信在空閑時為高電平,當有數(shù)據(jù)進行通訊時首先發(fā)送一個低電平的起始位,接收模塊在每個工作頻率的上升沿到來時檢測輸入是否為低電平,若是則開始計數(shù),如果連續(xù)8個工作頻率都檢測為低電平,則確認接收到了起始位,此后每隔16個時鐘接收一位數(shù)據(jù),并將接收到的數(shù)據(jù)通過移位寄存器轉(zhuǎn)化成并行數(shù)據(jù)。最后通過并行口傳輸給主控制器。若接收過程中發(fā)現(xiàn)錯誤接收,Error線拉低,并且丟棄此次所接收數(shù)據(jù)。
圖3 接收模塊程序塊圖
圖4 發(fā)送模塊程序塊圖
從DSP輸出的并行數(shù)據(jù)在發(fā)送模塊里轉(zhuǎn)化成串行數(shù)據(jù)從相對應(yīng)的串口輸出。當發(fā)送數(shù)據(jù)信號電平為高,則將并行數(shù)據(jù)鎖存放入特定寄存器,判定發(fā)送寄存器是否有數(shù)據(jù),如果有將數(shù)據(jù)放入FIFO模塊,等待發(fā)送。對于要發(fā)送的數(shù)據(jù),在時鐘的控制下移位寄存器將它按照從低到高依次發(fā)出。
完成上述各子模塊的設(shè)計后,需要考慮如何使這些子模塊在完成自己的功能的同時相互之間配合完成所需的功能。為此,設(shè)計了一個全局模塊負責(zé)這些子模塊的協(xié)調(diào)調(diào)度。并口的讀寫時序與DSP的讀寫時序同步,需要發(fā)送數(shù)據(jù)時,DSP先拉低FPGA的WR信號線,通過地址線和數(shù)據(jù)線往相應(yīng)的地址發(fā)送相應(yīng)的數(shù)據(jù)。FPGA接收到數(shù)據(jù)后,由于地址的不同,端口選擇線CS[2∶0]將需要發(fā)送的端口線拉低。在時序的推動下,并行數(shù)據(jù)發(fā)送給相應(yīng)分端口的發(fā)送模塊,然后發(fā)送模塊通過將數(shù)據(jù)移位按照一定的波特率串行發(fā)送出去。接收數(shù)據(jù)時,F(xiàn)PGA在接收模塊中將串行數(shù)據(jù)接收轉(zhuǎn)化并行數(shù)據(jù),并拉低自身的狀態(tài)線,全局控制模塊通過對狀態(tài)線的讀取獲取數(shù)據(jù)來自于哪一個端口。整個FPGA串口擴展系統(tǒng)的程序圖如圖5所示。
圖5 Quartus II中各模塊連接程序圖
本文成功地在運動控制系統(tǒng)中實現(xiàn)了基于FPGA的串口擴展,解決了處理器串口較少的問題。用Labview編寫的上位機測試軟件對此系統(tǒng)進行了長達數(shù)個小時的發(fā)送和接收測試,結(jié)果表明效果良好。并且此設(shè)計還可以運用到其他需要串口擴展的平臺或系統(tǒng)中去,應(yīng)用面廣,實用前景好。
[1]樊正方,羅暉.基于FPGA的串口集線器設(shè)計[J].工業(yè)控制計算機,2008,21(9):54-55.
[2]張羽,胡玉貴,等.基于FPGA的多串口擴展實現(xiàn)[J].電子器件,2009,32(1):233-236.
[3]張偉,談良.串行通信接口的擴展在電臺組網(wǎng)控制系統(tǒng)中的應(yīng)用[J].指揮信息系統(tǒng)與技術(shù),2010,01(1):46-49,81.
[4]周之炎,毛玉良.機器人多路傳感器數(shù)據(jù)采集系統(tǒng)的實現(xiàn)[J].機械制造與自動化,2009,38(1):157-159.
[5]楊茂林.基于FPGA的智能串口模塊設(shè)計[J]工業(yè)控制計算機.,2010,23(5):4-5,8.