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