亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        張付祥,劉振宇

        ZHANG Fu-xiang,LIU Zhen-yu

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

        0 引言

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

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

        1.1 多通道步進電機控制器原理

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

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

        1.2 FPGA的硬件線路

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

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

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

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

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

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

        Counter模塊可輸出電機控制頻率為:

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

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

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

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

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

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

        2.1 SPI總線的驅(qū)動

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

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

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

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

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

        驅(qū)動程序中用到的SPI寄存器有rSPCON0、rSPSTA0、rSPPIN0、rSPPRE0、rSPTDAT0和rSPRDAT0,端口寄存器有rGPECON、rGPEUP、rGPGCON、rGPGUP和rGPGDAT。SPI總線的驅(qū)動由初始化函數(shù)Init_SPI()實現(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ū)動

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

        Set rGPHDAT,CS

        For i=0 TO 1

        spi_tx_data(TXdata[i])

        Set rGPHDAT,unCS

        FPGA的驅(qū)動程序模塊運行時對FPGA的狀態(tài)進行初始化,以保證電機不會誤動作,其函數(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()實現(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ū)動程序卸載函數(shù)motor_exit()的實現(xiàn)方法和一般的字符設(shè)備的實現(xiàn)方法一樣。FPGA的設(shè)備驅(qū)動程序加載函數(shù)motor_ init()比一般字符設(shè)備的加載函數(shù)要多一個電機的初始化,由函數(shù)Init_Motor()完成。

        3 試驗研究

        為了開發(fā)應(yīng)用程序,使用Linux C語言開發(fā)了多通道步進電機控制用的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)

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

        4 結(jié)論

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

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

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

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

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

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

        猜你喜歡
        偽碼驅(qū)動程序寄存器
        非協(xié)作多用戶短碼直擴信號偽碼估計
        Lite寄存器模型的設(shè)計與實現(xiàn)
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        偽碼體制脈沖串引信信號參數(shù)提取方法
        非等量采樣偽碼跟蹤環(huán)建模分析
        猝發(fā)式直擴系統(tǒng)偽碼同步技術(shù)的FPGA實現(xiàn)
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        一種可重構(gòu)線性反饋移位寄存器設(shè)計
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        麻豆乱码国产一区二区三区| a√无码在线观看| 亚洲中文字幕在线一区| 人妻少妇人人丰满视频网站| 国产成人一区二区三区| 伊人狼人大香线蕉手机视频| 99国产精品视频无码免费| 亚洲综合网站久久久| 黄片亚洲精品在线观看| 国产一级特黄无码免费视频| 国产精品毛片va一区二区三区| 亚洲av综合色区久久精品天堂| 亚洲av无码精品色午夜| 国产高清一区二区三区三州| 国产精品国产自产拍高清| 亚洲日韩图片专区小说专区| 精品久久久bbbb人妻| 亚洲av熟女少妇一区二区三区| 521色香蕉网站在线观看| 国产欧美日韩精品丝袜高跟鞋| 在线视频一区二区在线观看| 色多多a级毛片免费看| 91九色中文视频在线观看| 日韩国产成人精品视频| 97在线观看播放| 日本免费视频| 国产亚洲精品精品综合伦理| 后入少妇免费在线观看| 国产丝袜爆操在线观看| 日本真人边吃奶边做爽动态图| 少妇性饥渴bbbbb搡bbbb| 国产欧美va欧美va香蕉在线观| 久久爱91精品国产一区| 日本一区二区不卡精品| 丰满少妇a级毛片野外| 中文字幕免费观看视频| 日本骚色老妇视频网站| 亚洲精品av一区二区| 欧美最大胆的西西人体44| 国产精品人妻一区二区三区四| 熟女一区二区国产精品|