• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      多通道步進(jìn)電機(jī)控制器設(shè)計(jì)及Linux驅(qū)動(dòng)的實(shí)現(xiàn)

      2011-02-19 07:49:58張付祥劉振宇
      制造業(yè)自動(dòng)化 2011年3期
      關(guān)鍵詞:偽碼驅(qū)動(dòng)程序寄存器

      張付祥,劉振宇

      ZHANG Fu-xiang,LIU Zhen-yu

      (河北科技大學(xué) 機(jī)械電子工程學(xué)院,石家莊 050018)

      0 引言

      機(jī)電一體化系統(tǒng)中有很多情況需要對(duì)多臺(tái)電機(jī)進(jìn)行控制[1],步進(jìn)電機(jī)控制系統(tǒng)一般基于單片機(jī)或者是PC機(jī),由于資源的限制很難實(shí)現(xiàn)復(fù)雜的步進(jìn)控制[2]。傳統(tǒng)上基于PC機(jī)的步進(jìn)電機(jī)控制系統(tǒng)的核心是步進(jìn)電機(jī)控制卡,很難實(shí)現(xiàn)多通道步進(jìn)電機(jī)的驅(qū)動(dòng)控制[3],實(shí)現(xiàn)多軸控制則需PMAC卡等[4]多軸運(yùn)動(dòng)控制卡,但控制系統(tǒng)實(shí)現(xiàn)成本較高。能夠?qū)崿F(xiàn)多通道步進(jìn)電機(jī)驅(qū)動(dòng)的控制器控制可靠,且能夠方便的通過(guò)現(xiàn)場(chǎng)總線組建大型的控制系統(tǒng)[5]。

      1 基于FPGA和SPI的多通道步進(jìn)電機(jī)控制器硬件設(shè)計(jì)

      1.1 多通道步進(jìn)電機(jī)控制器原理

      多電機(jī)控制器針對(duì)接受脈沖信號(hào)控制的步進(jìn)電機(jī),與微處理器采用SPI總線的方式傳送數(shù)據(jù),通??梢源罱ǔ蓤D1所示的多通道步進(jìn)電機(jī)控制系統(tǒng)。

      系統(tǒng)工作時(shí),具有SPI的微處理器通過(guò)其I/O口片選FPGA,多電機(jī)控制器處于工作狀態(tài)。微處理器通過(guò)SPI向FPGA發(fā)送電機(jī)控制指令,F(xiàn)PGA根據(jù)控制指令產(chǎn)生電機(jī)方向控制的電平信號(hào)和電機(jī)速度控制的脈沖信號(hào)??刂菩盘?hào)通過(guò)FPGA的輸出端口發(fā)送到相應(yīng)的步進(jìn)電機(jī)驅(qū)動(dòng)器,從而完成對(duì)多個(gè)電機(jī)的控制。這里以一片EPF10K10A實(shí)現(xiàn)對(duì)8個(gè)步進(jìn)電機(jī)的控制為例介紹多電機(jī)控制器設(shè)計(jì)及驅(qū)動(dòng)的實(shí)現(xiàn)方法。

      1.2 FPGA的硬件線路

      基于FPGA的電機(jī)控制器的硬件建立后,需要對(duì)FPGA的管腳進(jìn)行定義。除去FPGA和系統(tǒng)相關(guān)的管腳,需要定義和電機(jī)控制有關(guān)的管腳。其中f0~f7為可控脈沖頻率輸出,實(shí)現(xiàn)電機(jī)的速度控制;dir0~dir7為電機(jī)方向輸出,實(shí)現(xiàn)電機(jī)的方向控制;MOSI為SPI接口主設(shè)備對(duì)從設(shè)備的數(shù)據(jù)輸入;SCLK為SPI接口的時(shí)鐘輸入;F2M為外部有源晶振提供的頻率為2MHz的輸入脈沖;CS為片選輸入。

      1.3 多通道步進(jìn)電機(jī)控制器設(shè)計(jì)

      使用VerilogHDL語(yǔ)言,采用自頂向下的設(shè)計(jì)方法,從系統(tǒng)級(jí)開始,把系統(tǒng)劃分為兩個(gè)基本的單元,最頂層模塊為SPI_Motor,SPI_Motor模塊根據(jù)功能再進(jìn)一步細(xì)化為SPI_Core模塊和Counter模塊,系統(tǒng)構(gòu)成如圖2所示。

      系統(tǒng)上電FPGA進(jìn)行部分初始化,在得到片選信號(hào)時(shí),SPI_Core模塊開始接收數(shù)據(jù),SPI口一次傳送一個(gè)字節(jié)的數(shù)據(jù),SPI_Core模塊每接收到一個(gè)字節(jié)的數(shù)據(jù)就進(jìn)行一次串并轉(zhuǎn)換,電機(jī)的控制信號(hào)是由兩個(gè)字節(jié)所組成的,需要在數(shù)據(jù)轉(zhuǎn)化過(guò)程中進(jìn)行判斷一條命令是否轉(zhuǎn)換完畢,如果轉(zhuǎn)換完畢,則通知Counter模塊進(jìn)行數(shù)據(jù)接收。Counter模塊在系統(tǒng)上電后開始工作,根據(jù)寄存器的初始值進(jìn)行工作,當(dāng)接收到轉(zhuǎn)化后的控制命令時(shí),根據(jù)控制命令中所包含的地址信息把數(shù)據(jù)傳送到相應(yīng)的寄存器中。方向寄存器中的每一位都有一個(gè)輸出,直接跟電機(jī)驅(qū)動(dòng)板上的方向端相連,方向寄存器的變化會(huì)直接導(dǎo)致相應(yīng)電機(jī)的轉(zhuǎn)向變化。電機(jī)使能寄存器和分頻計(jì)數(shù)器相互配合工作,當(dāng)電機(jī)使能寄存器設(shè)定工作電機(jī)時(shí),相應(yīng)的電機(jī)分頻計(jì)數(shù)器才會(huì)工作,分頻計(jì)數(shù)器在沒(méi)有得到允許工作的命令之前進(jìn)行初始化,得到命令后則根據(jù)計(jì)數(shù)器中的分頻值進(jìn)行分頻。

      圖2 電機(jī)控制系統(tǒng)模塊構(gòu)成圖

      Counter模塊的功能是控制8個(gè)電機(jī)在給定的方向以一定的速度轉(zhuǎn)動(dòng),由8個(gè)定時(shí)器,一個(gè)譯碼器和一個(gè)可控分頻器組成。方向控制通過(guò)內(nèi)部寄存器Dir實(shí)現(xiàn)。可控分頻器的分頻系數(shù)寄存器為9位,初始值為1_0100_1101,對(duì)2MHz進(jìn)行668分頻,得到定時(shí)器寄存器的基準(zhǔn)時(shí)鐘2994HZ。定時(shí)器寄存器為12位,其存儲(chǔ)的最小值規(guī)定為0000_0000_0000,最大值為1111_1111_1111,如果輸入頻率為2994Hz,則輸出的最大頻率為1497Hz,最小為0.36Hz。并且對(duì)每個(gè)定時(shí)器都有一個(gè)使能控制位,從而實(shí)現(xiàn)電機(jī)轉(zhuǎn)動(dòng)的啟動(dòng)與停止。

      Counter模塊可輸出電機(jī)控制頻率為:

      式中 n1——分頻系數(shù);

      n2——定時(shí)器寄存器的數(shù)值。

      系統(tǒng)中電機(jī)驅(qū)動(dòng)器的最大輸入脈沖頻率取1500Hz,因此n1在0-324之間變化,n2在315-4095之間變化。

      SPI_Core模塊由一個(gè)串并轉(zhuǎn)換任務(wù)和數(shù)據(jù)傳輸控制器組成。SPI_Core模塊接收MOSI上的數(shù)據(jù),進(jìn)行串并轉(zhuǎn)換,并將轉(zhuǎn)換后的數(shù)據(jù)傳送給Counter模塊。串并轉(zhuǎn)換任務(wù)采用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),它將MOSI端口輸入的串行數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù)。狀態(tài)編碼采用的是獨(dú)熱編碼,數(shù)據(jù)傳輸控制器實(shí)現(xiàn)對(duì)給定的寄存器傳輸數(shù)據(jù),其中ADD_ Encode實(shí)現(xiàn)數(shù)據(jù)傳輸對(duì)象的編碼,其具體編碼如表1所示。

      表1 內(nèi)部寄存器編碼表

      2 Linux驅(qū)動(dòng)程序開發(fā)

      2.1 SPI總線的驅(qū)動(dòng)

      以S3C2410微處理器為例介紹SPI總線的驅(qū)動(dòng)方法,SPI模塊初始化的過(guò)程為:

      1)通過(guò)SPI波特率寄存器(SPPREn)設(shè)置SPI總線的波特率;

      2)設(shè)置SPI控制寄存器(SPCONn)選擇合適的SPI模式;

      3)通過(guò)往SPI數(shù)據(jù)寄存器(SPTDATn)中寫10次0xFF來(lái)初始化掛載在SPI總線上的設(shè)備;

      4)設(shè)置GPIO引腳,當(dāng)引腳低電平時(shí)片選掛載在SPI總線上的相應(yīng)設(shè)備。

      驅(qū)動(dòng)程序中用到的SPI寄存器有rSPCON0、rSPSTA0、rSPPIN0、rSPPRE0、rSPTDAT0和rSPRDAT0,端口寄存器有rGPECON、rGPEUP、rGPGCON、rGPGUP和rGPGDAT。SPI總線的驅(qū)動(dòng)由初始化函數(shù)Init_SPI()實(shí)現(xiàn),采用偽碼編寫函數(shù)如下:

      Set rSPPRE0

      Set SPCON0

      For i=1 TO 10

      Set rSPTDAT0,0xff

      Set rGPECON

      Set rGPEUP

      Set rGPHCON

      Set rGPHUP

      SPI總線傳輸數(shù)據(jù)采用輪詢方式,輪詢函數(shù)spi_poll_done()的偽碼如下:

      while do

      rSPSTA0&0x01

      SPI總線的數(shù)據(jù)傳輸函數(shù)spi_tx_date()的偽碼如下:

      spi_poll_done();

      Set rSPTDAT0,data

      spi_poll_done();

      2.2 FPGA的驅(qū)動(dòng)

      系統(tǒng)采用1個(gè)FPGA完成8個(gè)電機(jī)速度控制,通過(guò)motor_data_send()函數(shù)完成,其實(shí)現(xiàn)偽碼如下:

      Set rGPHDAT,CS

      For i=0 TO 1

      spi_tx_data(TXdata[i])

      Set rGPHDAT,unCS

      FPGA的驅(qū)動(dòng)程序模塊運(yùn)行時(shí)對(duì)FPGA的狀態(tài)進(jìn)行初始化,以保證電機(jī)不會(huì)誤動(dòng)作,其函數(shù)為Init_Motor()的偽碼如下:

      FPGA的設(shè)備文件結(jié)構(gòu)中的系統(tǒng)調(diào)用方法包括write、open和realease,F(xiàn)PGA的系統(tǒng)調(diào)用方法缺少read方法,其中write方法motor_wr()實(shí)現(xiàn)的偽碼如下:

      Set dbuf,kmalloc(sizeof(unsigned char),GFP_ KERNEL)

      copy_from_user(buf,dbuf,1)

      Set ADnTXdata[0],dbuf[0]

      kfree(dbuf)

      open方法motor_open()和close方法motor_ close()為空函數(shù),F(xiàn)PGA的設(shè)備驅(qū)動(dòng)程序卸載函數(shù)motor_exit()的實(shí)現(xiàn)方法和一般的字符設(shè)備的實(shí)現(xiàn)方法一樣。FPGA的設(shè)備驅(qū)動(dòng)程序加載函數(shù)motor_ init()比一般字符設(shè)備的加載函數(shù)要多一個(gè)電機(jī)的初始化,由函數(shù)Init_Motor()完成。

      3 試驗(yàn)研究

      為了開發(fā)應(yīng)用程序,使用Linux C語(yǔ)言開發(fā)了多通道步進(jìn)電機(jī)控制用的API函數(shù)MotorGoto(),其偽碼如下:

      Set fd,open("/dev/motor",O_RDWR)

      Set Start[0],0

      Set Start[1],Tenable

      write(fd,Start,2)

      Set Dir[0],0x10

      Set Dir[1],Dir

      write(fd,Dir,2)

      Convert n and f to H and L

      Set Out[0],H

      Set Out[1],L

      write(fd,Out,2)

      write(fd,Start,2)

      close(fd)

      電機(jī)控制器實(shí)驗(yàn)中,設(shè)定可控分頻寄存器對(duì)外部2MHz的輸入脈沖進(jìn)行2分頻作為內(nèi)部8個(gè)定時(shí)器的基準(zhǔn)脈沖,通過(guò)改變n2的值從而改變電機(jī)控制器的輸出頻率。對(duì)8個(gè)步進(jìn)電機(jī)進(jìn)行控制,電機(jī)控制器的輸出頻率從150Hz開始按50Hz遞增一直增至1500Hz。實(shí)驗(yàn)結(jié)果8個(gè)電機(jī)控制器的輸出頻率曲線基本重合在一起,電機(jī)控制器的頻率輸出端口具有良好的一致性,說(shuō)明電機(jī)控制器具有很好的精確性和可靠性。

      4 結(jié)論

      用FPGA開發(fā)具有SPI接口的多通道步進(jìn)電機(jī)控制器占用較少的微處理器I/O資源,硬件聯(lián)接簡(jiǎn)單、軟件易于實(shí)現(xiàn),程序運(yùn)行效率高,可廣泛應(yīng)用于需要對(duì)多個(gè)步進(jìn)電機(jī)進(jìn)行控制的場(chǎng)合,可廣泛應(yīng)用于機(jī)器人、數(shù)控機(jī)床及其它嵌入式的系統(tǒng)。

      [1]許瑞華,何俊華基于NextMoveES運(yùn)動(dòng)控制卡的步進(jìn)電機(jī)群控系統(tǒng)[J].微計(jì)算機(jī)信息,2006,22(1-2):9-10.

      [2]黃贊,姚耀文.步進(jìn)電機(jī)伺服系統(tǒng)設(shè)計(jì)與可視化仿真的實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2005,30(3):59-62.

      [3]趙勇.基于Ethernet的多通道步進(jìn)電機(jī)控制系統(tǒng)[J].電力系統(tǒng)自動(dòng)化,2005,25(10):71-73.

      [4]李淑萍,張?bào)阍?基于PMAC的開放式數(shù)控系統(tǒng)研究[J].微電機(jī),2009,42(7):65-68.

      [5]王改華,王江衛(wèi),劉楚湘,等.基于DeviceNet現(xiàn)場(chǎng)總線的電機(jī)控制系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2008,(10):94-96.

      猜你喜歡
      偽碼驅(qū)動(dòng)程序寄存器
      非協(xié)作多用戶短碼直擴(kuò)信號(hào)偽碼估計(jì)
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      偽碼體制脈沖串引信信號(hào)參數(shù)提取方法
      非等量采樣偽碼跟蹤環(huán)建模分析
      猝發(fā)式直擴(kuò)系統(tǒng)偽碼同步技術(shù)的FPGA實(shí)現(xiàn)
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
      驅(qū)動(dòng)程序更新與推薦
      驅(qū)動(dòng)程序更新與推薦
      盐津县| 宜丰县| 河西区| 吴旗县| 唐河县| 哈尔滨市| 吴旗县| 上虞市| 科技| 临沭县| 南溪县| 台南县| 景泰县| 洛南县| 墨玉县| 长汀县| 长岛县| 恭城| 青海省| 柘荣县| 页游| 阿鲁科尔沁旗| 黔西县| 竹溪县| 德保县| 惠东县| 峡江县| 石渠县| 加查县| 平山县| 台北市| 余庆县| 浮梁县| 舟山市| 临江市| 苏州市| 高淳县| 从化市| 襄城县| 米泉市| 都安|