基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計_第1頁
基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計_第2頁
基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計_第3頁
基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計_第4頁
基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于EPF10K10的步進(jìn)電機(jī)控制器的設(shè)計摘要:本次設(shè)計主要通過VHDL語言來實現(xiàn)步進(jìn)電機(jī)定位控制系統(tǒng)。介紹了VHDL語言的特點,對步進(jìn)電機(jī)定位控制系統(tǒng)的功能進(jìn)行了闡述,給出了步進(jìn)電機(jī)定位控制系統(tǒng)的VHDL模塊圖,并用VHDL語言完成了該系統(tǒng)的設(shè)計,文中對各程序模塊做出了詳細(xì)的說明,并通過仿真驗證了預(yù)定的功能,結(jié)果顯示,VHDL在數(shù)字電路的設(shè)計擁有硬件描述能力強(qiáng),靈活性設(shè)計等特點。關(guān)鍵詞:VHDL,步進(jìn)電機(jī),定位控制,EPF10K101引言可編程門陣列(簡稱FPGA)是80年代中期所出現(xiàn)的一種高密度的可編程邏輯器件,以SRAM元件的FPGA是易失性的,只要每次加電,F(xiàn)PGA均重新裝入配置數(shù)據(jù)。突出的迭代編程等優(yōu)點,當(dāng)你啟動系統(tǒng)和加載不同的配置數(shù)據(jù),使其完全不同的硬件能力,這種改變完成了系統(tǒng)功能的動態(tài)重構(gòu)。“系統(tǒng)可編程”(簡稱ISP)是將器件、電路及整個電子系統(tǒng)的邏輯功能進(jìn)行修改,重構(gòu)的能力,系統(tǒng)可編程邏輯器件支持ISP技術(shù)的可編程邏輯器件,并且不需要專門的編程器就可以利用計算機(jī)的接口和電纜就完成對器件編程了。本次設(shè)計以EDA技術(shù)的QuartusⅡ作為開發(fā)工具來設(shè)計了基于EPK10K10的步進(jìn)電機(jī)控制器。2硬件描述語言(VHDL)及仿真環(huán)境QuartusⅡ簡介2.1VHDL簡介VHDL的英文全名是Very-High-eedIntegratedCircuitHardwareDescriptionLanguage,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確為一個標(biāo)準(zhǔn)的硬件描述語言。從IEEE發(fā)布了VHDL的標(biāo)準(zhǔn)版本,各個EDA公司推出了專屬的VHDL設(shè)計方式,或宣布自己的設(shè)計工具可以和VHDL接口,隨后VHDL得到了廣泛的應(yīng)用,代替了原有非標(biāo)準(zhǔn)的硬件語言。在1993年,對VHDL進(jìn)行修訂后,進(jìn)一步擴(kuò)展VHDL的內(nèi)容,發(fā)布了新版本的VHDL版本,IEEE標(biāo)準(zhǔn)的1076-1993版本,(簡稱93版),如今,,在眾多EDA公司支持下,IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言在電子工程領(lǐng)域,已經(jīng)成了通用的硬件描述語言,VHDL與Verilog將會成為主流的數(shù)字系統(tǒng)設(shè)計任務(wù)。VHDL與其他硬件描述語言相比,有如下優(yōu)越之處:(1)VHDL語言支持自上而下(TopDown)和基于庫(Library-Base)的設(shè)計,該語言在同步電路、異步電路、FPGA和其他隨機(jī)電路的設(shè)計中也予支持。(2)VHDL語言擁有多方面描述系統(tǒng)硬件功能,從系統(tǒng)的數(shù)學(xué)模型到門級電路,高低層次RTL描述和結(jié)構(gòu)描述相互混合使用,并且自定義其數(shù)據(jù)類型。(3)VHDL對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必關(guān)心最終設(shè)計實現(xiàn)的目標(biāo)器件是什么。(4)VHDL具備電路的仿真以及驗證功能,正確保證設(shè)計,無需編寫如何測試相量就可以對源代碼級進(jìn)行調(diào)試輕松比較各種方案之間的可行性及其優(yōu)劣,無需做實際的電路實驗。(5)VHDL語言采用與工藝無關(guān)編程。(6)VHDL語言標(biāo)準(zhǔn)、規(guī)范,易于共享及復(fù)用。VHDL語言采用高層次的設(shè)計方法(即系統(tǒng)級的設(shè)計方法),設(shè)計的步驟如下:(1)通過“自頂向下”的方法對系統(tǒng)劃分。(2)輸入VHDL語言代碼。(3)對以上的設(shè)計輸入成編譯成標(biāo)準(zhǔn)的VHDL文件。(4)用綜合器對VHDL源代碼進(jìn)行綜合優(yōu)化處理,生成門級描述的網(wǎng)表文件。(5)通過適配器將網(wǎng)表文件針對目標(biāo)器件進(jìn)行邏輯映射的操作。(6)把適配器生成的器件編成文件下載電纜于目標(biāo)芯片F(xiàn)PGA或CPLD中。2.2仿真開發(fā)環(huán)境QuartusⅡ簡介QuartusII是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多種設(shè)計輸入形式,內(nèi)嵌自有的綜合器及仿真器,完成對輸入到硬件配置的完整PLD的流程。QuartusII可以在多個環(huán)境下(XP、Linux以及Unix)進(jìn)行使用,速度運行很快,界面相對統(tǒng)一,功能較集中,易學(xué)易用等特點。QuartusII還支持于Altera的IP核,包括LPM/MegaFunction的宏功能模塊庫,用戶們可充分利用成熟的模塊,將其簡化設(shè)計的復(fù)雜性、加快設(shè)計的速度,在第三方EDA工具的支持下也使用戶可以在設(shè)計的各階段使用熟悉的EDA工具。與此同時,通過DSPBuilder工具和Matlab/Simulink的結(jié)合,QuartusII可方便地完成各種DSP應(yīng)用系統(tǒng);支持Altera可編程系統(tǒng)(SOPC)的開發(fā),聚系統(tǒng)級設(shè)計、嵌入式軟件開發(fā)以及可編程邏輯,是一種綜合性的開發(fā)平臺。MaxplusII是Altera的上一代PLD設(shè)計軟件,因為其出色的易用性的特點得到了廣泛的應(yīng)用,現(xiàn)在Altera已經(jīng)對MaxplusII的更新停止支持,Altera在QuartusII中包括很多SignalTapII、ChipEditor和RTLViewer的輔助設(shè)計工具,它集成了SOPC和HardCopy的設(shè)計流程,并且繼承了MaxplusII友好的圖形界面和簡便的方法。AlteraQuartusII作為一種強(qiáng)大可編程邏輯的設(shè)計環(huán)境,因為其強(qiáng)大設(shè)計能力以及直觀易用的接口,得到了越來越多數(shù)字系統(tǒng)設(shè)計者的歡迎。Altera的QuartusII可編程邏輯軟件是第四代PLD開發(fā)平臺,這個平臺支持工作組環(huán)境下的設(shè)計要求,它包括了支持基于Internet的協(xié)作設(shè)計,Quartus平臺與Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供應(yīng)商的開發(fā)工具相兼容,提高了軟件LogicLock模塊設(shè)計的功能,并增加了FastFit編譯的選項,加大網(wǎng)絡(luò)編輯性能,提升了調(diào)試能力,支持MAX7000/MAX3000等乘積項器件。3FPGA簡介FPGA是英文FieldProgrammableGateArray的縮寫,即現(xiàn)場可編程門陣列,由1985年Xilinx推出,在PAL、GAL、EPLD等可編程器件上的發(fā)展產(chǎn)物,作為專集成電路(ASIC)環(huán)境中的半定制電路的出現(xiàn),擁有門陣列的高邏輯密度及通用性,用戶可編程(基本邏輯單元、I/O單元、互連資源多用戶可編程)特性,它解決了硬件電路的不足,并且克服了可編程器件門電路數(shù)有限缺點,廣泛的應(yīng)用于集成電路設(shè)計中。FPGA是由用戶們實現(xiàn)邏輯功能的數(shù)字集成電路,它有設(shè)計靈活、性能高、速度快的優(yōu)點,上市周期短、成本低廉,F(xiàn)PGA設(shè)計與ASIC前端設(shè)計方面很類似,并且在半導(dǎo)體領(lǐng)域中FPGA應(yīng)用得到了日益普及,成為最有活力和前途的產(chǎn)業(yè),隨著設(shè)計的技術(shù)提高和工藝的完善,它的器件性能、集成度以及工作頻率等不斷提升,目前,F(xiàn)PGA已越來越多地成為系統(tǒng)級芯片設(shè)計的選擇。FPGA是FieldProgrammableGateArray(現(xiàn)場可編程門陣列)的縮寫,它是一種可編程邏輯器件,可以在制造完成由用戶基于自己需要定義的其邏輯功能,F(xiàn)PGA包括了一個邏輯單元(可以是門,也可以是查找表RAM)的陣列、觸發(fā)器和可編程的互連線,此外,大規(guī)模的FPGA還包含了片內(nèi)RAM、嵌入式CPU和高速收發(fā)器等資源,F(xiàn)PGA的鮮明特點就是有一個窄輸入的邏輯單元,讓其使用分布式互連方案,這對于傳統(tǒng)的諸如PAL和PLA之類的器件來說,F(xiàn)PGA的設(shè)計顯得更加靈活。3.1FPGA的原理FPGA是通過存放在片內(nèi)RAM中的程序來進(jìn)行設(shè)置其工作的,所以,工作時我們需要對片內(nèi)的RAM進(jìn)行編程,用戶可以依據(jù)不同的配置模式,通過不同的編程方式,在加電過程,F(xiàn)PGA芯片會將EPROM中的數(shù)據(jù)直接讀入片內(nèi)編程RAM里,在配置完成后,F(xiàn)PGA就會進(jìn)入工作狀態(tài),掉電后,F(xiàn)PGA隨即恢復(fù)成白片,內(nèi)部的邏輯關(guān)系消失,所以FPGA能夠反復(fù)使用,F(xiàn)PGA編程無需要專門的FPGA編程器,只要用通用的EPROM、PROM編程器就可以,如果需要修改FPGA的功能,我們只要更換一片EPROM就可以,同一片F(xiàn)PGA,有不同的編程數(shù)據(jù),也可以產(chǎn)生不同的電路功能,所以FPGA的使用十分非常靈活。

FPG是由PAL(可編程陣列邏輯)和GAL(通用陣列邏輯)發(fā)展的,它基本設(shè)計的思想是借助于EDA的開發(fā)工具,以原理圖、狀態(tài)圖、布爾表達(dá)式和硬件描述語言等方式來進(jìn)行的系統(tǒng)功能及算法的描述,為了并生成編程文件,最后必須以編程器或下載電纜以目標(biāo)器件來實現(xiàn)。

FPGA器件通過邏輯單元陣列(LCA,LogicCellArray)結(jié)構(gòu)、SDRAM工藝,并且LCA是由三類可編程單元組成的。

(1)可配置邏輯塊(CLB,ConfigurableLogicBlock):被稱為核心陣列,能夠自定義邏輯功能的基本單元,整個芯片得到散布。

(2)輸入/輸出模塊(IOB,Input/OutputBlock):排列在芯片的四周,可為內(nèi)部邏輯與器件封裝的引腳之間提供可編程接口。

(3)可編程互連資源(PI,ProgrammableInterconnect):不同長度之間的連線線段和連接開關(guān),它的功能是將每個可編程邏輯塊或I/O塊連接起來并構(gòu)成特定電路。3.2FPGA芯片EPF10K10的介紹本次設(shè)計所選用的芯片是EPF10K10,它是Altera公司生產(chǎn)FLEX10K系列品牌之一,它在FPGA中有一定的典型性,一種嵌入式可編程邏輯的器件,這個芯片有突出的性能特點,如表1所示。表1EPF10K10性能參數(shù)表器件門數(shù)31000典型可用門數(shù)10000邏輯單元數(shù)576邏輯陣列塊數(shù)72嵌入式陣列塊數(shù)3總RAM位數(shù)6144最大I/O引腳數(shù)134觸發(fā)器數(shù)720EPF10K10芯片的特點主要有:(1)在線可重配置;(2)可預(yù)測在線時間延遲所產(chǎn)生的布線結(jié)構(gòu);(3)產(chǎn)生加法器和計數(shù)器專用進(jìn)位的通道;(4)使用5V的電源;(5)84個引腳的封裝。EPF10K10芯片要由邏輯單元、邏輯陣列塊、快速互連通道、I/O單元和嵌入式陣列塊這五個部分所組成得。,通過一組LE組成一個LAB,然后LAB按行和列排成一個矩陣,隨即在每一行中放置了一個EAB,在器件里面,信號的互連及信號與器件引腳之間的連接是由快速通道所提供得,在每行(或每列)FastTrack互連線的兩端都連接著很多個I/O單元。(1)邏輯單元LE(LogicElement)LE是EPF10K10結(jié)構(gòu)中最小的單元,能夠十分有效的實現(xiàn)邏輯功能,LE通過組合電路和時序電路兩個部分組成,每個LE都有兩個輸出,通過輸出可驅(qū)動局部互連和快速通道互連,LUT和寄存器來輸出是靠兩個LE的輸出端同時輸出,這個性質(zhì)被稱為積存器打包,大大的提高了LE的利用率。(2)邏輯陣列LAB(LogicArrayBlock)LAB是構(gòu)成EPF10K10的主體部分。EPF10K10的LAB通過8個LE、與LE相連的進(jìn)位鏈及級連鏈、LAB控制信號和LAB局部所產(chǎn)生的,提高EDA軟件布局布線,優(yōu)化器件,提高性能。(3)快速互連通道(FastTrack)FastTrack連接著LE和器件的I/O的引腳,它遍布于整個EPF10K10器件,在EPF10K10中,不同的LAB中的LE及LE與I/O引腳之間的相互鏈接,F(xiàn)astTrack就整個會貫穿器件的一系列水平以及垂直連續(xù)式布線的方法,這種布線結(jié)構(gòu)能夠輕松的預(yù)測復(fù)雜設(shè)計的性能,然而FPGA中產(chǎn)生的分段式連線結(jié)構(gòu)都需要用開關(guān)矩陣將不同數(shù)目的多個條線段連接起來,就可提高資源間的延時,提高使性能的下降。(4)I/O單元與專用的輸入端口EPF10K10器件的I/O引腳時通過一些I/O單元所驅(qū)動的,在快速通道的行和列的末端,其中包括了一個雙向的緩沖器和一個寄存器,EPF10K10器件共計6個專用的輸入引腳,控制驅(qū)動寄存器,輸出緩沖器可以根據(jù)需要的配置來降低低噪音和提高速模式,另外,引腳還可可以被設(shè)置成集電極開路輸出模式,對于IOE中的時鐘清除、時鐘使能及輸出的使能通常被稱為周邊控制總線的I/O控制信號網(wǎng)絡(luò)。(5)嵌入式陣列塊EAB(EmbeddedArrayBlock)EAB由一系列的嵌入式RAM單元所構(gòu)成的,在輸入與輸出口上帶有寄存器的RAM塊,既可以用作存儲器使用,也可以完成邏輯功能,每個EAB都是通過行互連饋入信號,來輸出可傳輸至行及列互連的,它可以驅(qū)動兩個行通道中任何一個和兩個列通道中的一個,沒有被利用的行通道被另一個列通道驅(qū)動,這就是EAB輸出增提高了連線資源,EAB也可以單獨使用,也可合成變?yōu)橐粋€更大的RAM和ROM來使用。根據(jù)傳輸數(shù)據(jù)的方式,EPF10K10芯片可分為四種配置方式,如表2所示。表2EPF10K10芯片的配置方式方式典型應(yīng)用主動串行(AS)利用EPC器件配置被動串行(PS)串行同步CPU接口被動并行同步(PPS)并行同步CPU接口被動并行異步(PPA)并行異步CPU接口EPF10K10芯片通過SRAM來存儲編程的數(shù)據(jù),擁有在系統(tǒng)可編程的特性,它的邏輯功能和互連關(guān)系都是通過CMOSSRAM單元來完成配置的,每次系統(tǒng)一加電,它就會通過存儲在Altera串行配置EPROM器件中所產(chǎn)生的數(shù)據(jù)和系統(tǒng)控制器提供的數(shù)據(jù)相互對它進(jìn)行配置,有被動型和主動型2種配置方式,配置好EPF10K10器件后,在復(fù)位可進(jìn)行在線重配置進(jìn)行新的數(shù)據(jù),新的配置的時間往往只有有幾百毫秒而已,所以在系統(tǒng)工作的過程中就應(yīng)實時配置的改變,不同時間給予同一EPF10K10不同的特性,來加強(qiáng)了系統(tǒng)的靈活性。4步進(jìn)電機(jī)控制器的設(shè)計4.1步進(jìn)電機(jī)定位控制系統(tǒng)功能概述控制電機(jī)在地下、水面、海洋或者高空、太空以至原子能反應(yīng)堆等環(huán)境均可使用,但是由于工作的環(huán)境很復(fù)雜多變(如高溫、低溫、煙霧、潮濕、沖擊、振動或者輻射等),必須我們要求電機(jī)能夠在每個境條件下都可以準(zhǔn)確穩(wěn)定的進(jìn)行工作,而且,許多場合(在航空航天的技術(shù))必須允許我們所控制的電機(jī)體積要小、重量輕、電耗低,于是我們通常見到的控制電機(jī)很多都是很小體積的電機(jī)。步進(jìn)電機(jī)屬于最方便的定位控制工具,和直流電機(jī)定速的控制不同點是它是開路控制,并且是利用數(shù)字信號來控制電機(jī)裝置的,每次步進(jìn)電機(jī)收到一組脈沖數(shù)字信號時,就會旋轉(zhuǎn)一個角度,這個稱為步進(jìn)角,不同的步進(jìn)電機(jī)有不同的步進(jìn)角,這是由電機(jī)內(nèi)部的線圈數(shù)量所決定的,磁場方向是由線圈中的供應(yīng)電流決定的,假設(shè)有兩組線圈A和B,如圖1所示,A組線圈中假設(shè)供A點為低電位,A'點為高電位,那么電流就會由A'螺旋向上流到A,產(chǎn)生向上的磁場方向;同理,如果給B點為低電位,給B'點為高電位,那電流就是B'點螺旋流到B點,形成向左的磁場方向,兩組線圈產(chǎn)生的總磁場方向就變?yōu)闉樽笊戏?。圖1磁場合力方向圖在進(jìn)行HDL(無論是VHDL或VERILOG)程序設(shè)計之前,首先設(shè)計者必須非常熟悉整個硬件系統(tǒng),并完成其結(jié)構(gòu)圖,F(xiàn)PGA通過接受角度的設(shè)定,激磁方式的設(shè)定和方向的設(shè)定,然后預(yù)計并比較工作,最后通過內(nèi)部編碼器所產(chǎn)生的端口信號序列進(jìn)一步驅(qū)動步進(jìn)電機(jī)的轉(zhuǎn)動。4.2步進(jìn)電機(jī)定位控制系統(tǒng)的VHDL模塊圖如果想控制步進(jìn)電機(jī),那么就必須正確產(chǎn)生輸入和輸出端口的信號,也就是FPGA所提供的,如圖2所示圖2步進(jìn)電機(jī)控制系統(tǒng)VHDL圖4.3步進(jìn)電機(jī)速度控制系統(tǒng)VHDL程序設(shè)計說明如果我們把電機(jī)的轉(zhuǎn)子放置于線圈產(chǎn)生的磁場中,轉(zhuǎn)子就會受到磁場的作用從而產(chǎn)生和磁場方向一致的力,隨后轉(zhuǎn)子就會轉(zhuǎn)動,直到轉(zhuǎn)子受到的磁場方向和線圈產(chǎn)生的磁場方向相互一致才停止,如圖3所示,兩組線圈的電流方向排列組合可以產(chǎn)生8種不同的磁場方向,分別是0度,45度,90度,135度,180度,225度,270度,315度,不同的磁場方向所對應(yīng)的電流方向列與下面表1中。圖3磁場方向所對應(yīng)的電流方向圖由表3可以知道,當(dāng)電機(jī)轉(zhuǎn)子為0度的位置時,要想轉(zhuǎn)到180度,那么就讓端口的信號依次從0001,0011,0010,0110到0100進(jìn)行變化,然而,是否有簡單的方法避免一定要經(jīng)過這4個信號過程呢?更快更省電的方法讓電機(jī)從0度轉(zhuǎn)至180位置,這便是所謂的激磁方式不相同,四相電機(jī)分為3種激磁方式。表3四相步進(jìn)電機(jī)的八個方向和電流以及電壓信號的關(guān)系磁場方向0度45度90度135度180度225度270度315度電流方向A線圈B線圈A→A'A→A'0A'→AA'→AA'→A0A→A'0B→B'B→B'B→B'0B'→BB'→BB'→B端口信號B'A'BA00010011001001100100110010001001(1)1—相激磁法:讓目標(biāo)的角度是90度的整數(shù)倍,通過這種方法,如要使0度轉(zhuǎn)至270度,只需讓端口信號的順序為0000,0001,0010,0100,1000就可以完成。(2)2—相激磁法:如果目標(biāo)角度是45度,135度,225度,315度的時,那么可以采用這種方法,如從0度轉(zhuǎn)至225度,只需讓端口信號的順序為0000,0011,0110,1100就可以完成。(3)1-2相混合激磁法:即完全按照表6-1所列信號順序。3種不同的激磁法所用到的端口信號整理與表4。表4四相步進(jìn)電機(jī)3種不同激磁方式對應(yīng)提供的端口信號磁場方向0度45度90度135度180度225度270度315度端口信號B'A'BA000100110010011001001100100010011-相激磁√√√√2-相激磁√√√√1-2相激磁√√√√√√√√表4所示的激磁順序是逆向的,如果要電機(jī)順時針方向旋轉(zhuǎn),那么只要給轉(zhuǎn)子的激磁信號序列相反即可,相對其他更多相位的步進(jìn)電機(jī)來說,它的控制原理基本相同的,找出端口信號的順序,就能自由的進(jìn)行控制,步進(jìn)電機(jī)電路模塊的VHDL程序說明如下。4.4步進(jìn)電機(jī)控制器的VHDL的程序設(shè)計下面是該搶答器各模塊的VHDL源程序。(1)entity模塊系統(tǒng)輸入信號:RESET:系統(tǒng)內(nèi)部自復(fù)位信號;DIR:步進(jìn)電機(jī)正反轉(zhuǎn)方向控制開關(guān);CLK:有FPGA內(nèi)部提供的4MHZ的時鐘信號;INI:賦初值的使能開關(guān);MANNER:[1DOWNTO0]:激磁方式的選擇開關(guān);ANGLE:[7DOWNTO0]:步進(jìn)角倍數(shù)設(shè)定輸入鍵。[補(bǔ)充說明]旋轉(zhuǎn)方向設(shè)定DIR,1BIT0:順時針旋轉(zhuǎn)1:逆時針旋轉(zhuǎn)激磁方式設(shè)定MANNER[1DOWNTO0]:00:自動檢測角度輸入,決定激磁方式;01:1-相激磁;10:2-相激磁;11:1-2-相激磁;角度設(shè)定ANGLE[7DOWNTO0]:步進(jìn)角倍數(shù)的設(shè)定,因為四相步進(jìn)電機(jī)的步進(jìn)角為45度,所以旋轉(zhuǎn)45×255度,即旋轉(zhuǎn)32圈,超過32圈重新開始。系統(tǒng)輸出信號: baba[3downto0]:把內(nèi)部計數(shù)器count[3downto0]數(shù)值編碼輸出。如下列出entity模塊的程序代碼。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitystep_motorisport(reset:instd_logic;--systemresetsignaldir:instd_logic;--directionclk:instd_logic;--systemclocksignalini:instd_logic;--enableswitchofloadinginitialmanner:instd_logic_vector(1downto0);--phaseexcitemannerangle:inintegerrange255downto0;--phasedefinebaba:outstd_logic_vector(3downto0));--stateoutputofsetpmotorendstep_motor;(2)architecture模塊這里定義一些進(jìn)程(process)之間整體共享電路內(nèi)部傳遞的信號,并整和所有的功能。諸如:count:內(nèi)部電路計數(shù)累加器,用于產(chǎn)生輸出所需要對應(yīng)的狀態(tài);cntinc:設(shè)定累加器所需要的累(加/減)的計數(shù)值;cntini:設(shè)定累加器所需要的計數(shù)初值;angledncount:設(shè)定步進(jìn)角所需要處理的計數(shù)次數(shù);angledncntdec:設(shè)定步進(jìn)角所需累減計數(shù)值;說明計數(shù)器count[2downto0];用來產(chǎn)生狀態(tài);計數(shù)器angledncount[7townto0];計算已經(jīng)選中的步進(jìn)角,每轉(zhuǎn)一個步進(jìn)角則遞減1或減2,初始值為angle.如下列出architecture模塊的程序代碼。-definethesignal_structureandflowofthedevicearchitecturestepmotor_archofstep_motorissignalcount:integerrange0to7;--countersignalcntinc:integerrange-2to2;--countincrementsignalcntini:integerrrange-1to0;--countincrementinitialsignalangledncount:integerrange255downto0;--counthowmanystep-anglesprocessedsignalangledncntdec:integerrange2downto1;--anglecountdecrementbegin(3)步進(jìn)電機(jī)方向設(shè)定電路模塊這個模塊的功能是設(shè)定步進(jìn)電機(jī)旋轉(zhuǎn)方向(順時針或逆時針轉(zhuǎn)動),并且設(shè)定電機(jī)在順時針或者逆時針轉(zhuǎn)動時所需要的初始值和累加/累減值。如下是步進(jìn)電機(jī)方向設(shè)定電路的程序代碼。step_motor_direction:blocksignalcntini:integerrange-1to0;--countincrementinitialsignalcntinc:integerrange-2to2;--countincrementsignalangledncntdec:integerrange2downto1;--anglecountdecrementbeginprocess(dir,manner,angle)beginifdir='0'then casemanneriswhen"01"=>--1-相激磁cntini<=0;cntinc<=2;angledncntdec<=2;--"10";when"10"=>--2-相激磁cntini<=-1;cntinc<=2;angledncntdec<=2;--"10";when"11"=>--1-2-相激磁cntini<=0;cntinc<=1;angledncntdec<=1;--"01";whenothers=>--manner="00"autodetectif(anglerem2)=1then--2-相激磁cntini<=-1;cntinc<=2;angledncntdec<=2;--"10";else--1-相激磁cntini<=0;cntinc<=2;angledncntdec<=2;--"10";endif;--angleendcase;--mannerelse--ifdir='1'casemanneriswhen"01"=>--1-相激磁cntini<=0;cntinc<=-2;angledncntdec<=2;--"10";when"10"=>--2-相激磁cntini<=-1;cntinc<=-2;angledncntdec<=2;--"10";when"11"=>--1-2-相激磁cntini<=0;cntinc<=-1;angledncntdec<=1;--"01";whenothers=>--manner="00"autodetectif(anglerem2)=1then--2-相激磁cntini<=-1;cntinc<=-2;angledncntdec<=2;--"10";else--1-相激磁cntini<=0;cntinc<=-2;angledncntdec<=2;--"10";endif;--angleendcase;--mannerendif;--elsedir=0endprocess;endblock;(4)步進(jìn)電機(jī)步進(jìn)移動與定位控制電路模塊這個模塊主要是通過ini(賦初值的使能開關(guān))把數(shù)值傳送到該模塊中,然后配合輸入的clk(系統(tǒng)始終)來作為同步控制信號,最后進(jìn)行步進(jìn)電機(jī)的步進(jìn)移動和定位的控制,下面是步進(jìn)電機(jī)步進(jìn)移動與定位控制電路的程序代碼。step_moving:blocksignalcount:integerrange0to7;--countersignalcntinc:integerrange-2to2;--countincrementsignalcntini:integerrange-1to0;--countincrementinitialsignalangledncount:integerrange255downto0;--counthowmanystep-anglesprocessedsignalangledncntdec:integerrange2downto1;--anglecountdecrementbeginprocess(reset,ini,angle,clk)beginifreset='1'thencount<=0;angledncount<=0;elsifclk'eventandclk='1'thenifini='0'thencount<=0+cntini;angledncount<=angle;elsecount<=count+cntinc;ifangledncount>angledncntdecthenangledncount<=angledncount-angledncntdec;elseangledncount<=0;endif;endif;endif;endprocess;endblock;(5)編碼輸出電路模塊這個模塊功能是把count和angledncount生成的數(shù)值通過編碼,并bata[3downto0]輸出連線信號,顯示輸出結(jié)果,編碼方式列在表5中。表5編碼方式對應(yīng)表計數(shù)器現(xiàn)值count01234567端口信號B'A'BABaba[3downto0]00010011001001100100110010001001磁場方向0度45度90度135度180度225度270度315度如下列出編碼輸出電路模塊的程序代碼。table_mapping:blocksignalcount:std_logic_vector(3downto0);--countersignalangledecount:integerrange255downto0;--counthowmanystep-anglesprocessedbeginbaba<="0000"whenangledncount=0else;--電機(jī)此時已經(jīng)定位停止轉(zhuǎn)動"0001"whencount=0else;第一步...a"0011"whencount=1else;第二步..ba"0010"whencount=2else;第三步..b."0110"whencount=3else;第四步.a'b."0100"whencount=4else;第五步.a'.."1100"whencount=5else;第六步b'a'.."1000"whencount=6else;第七步b'..."1001";--whencount>=7;;第八步b'..aendblock;endstepmotor_arch;4.5仿真結(jié)果步進(jìn)電機(jī)方向設(shè)定電路模塊:程序設(shè)計說明:逆時針操作模式(dir=0),則累加值為正數(shù),計數(shù)規(guī)則如下。state1:如果manner="01",電路使用1-相激磁法,則count的初始值為“000”(cntini<=0),每次加2(cntini<=2),angledncntdec每次減2(angledncntdec<=2).仿真結(jié)果如圖4所示圖4當(dāng)dir=0,manner="01",使用1-相激磁法state2:如果manner="10",電路使用2-相激磁法,則count的初始值為“111”(cnini<=0),每次加2(cnini<=2),angledncntdec每次減2(angledncntdec<=2).仿真結(jié)果如圖5所示。圖5當(dāng)dir=0,manner="10",使用2-相激磁法state3:若manner="00",那么進(jìn)行自動判斷,如果angle步進(jìn)角為偶數(shù)(角度設(shè)定可被90整除),使用1-相激磁法,則count的初始值為“000”(cnini<=0),每次加2(cnini<=2),其仿真結(jié)果如圖6所示。否則使用2-相激磁法,則count的初始值為“111”(cnini<=0),每次加2(cnini<=2)。仿真結(jié)果如圖7所示。但無論使用1-相激磁法還是二相激磁法,angledncntdec每次都是減2(angledncntdec<=2)。圖6當(dāng)dir=0,manner="00",步進(jìn)角為偶數(shù)時,使用1-相激磁法圖7當(dāng)dir=0,manner="00",步進(jìn)角不為偶數(shù)時,使用2-相激磁法state4:如果manner="11",電路使用1--2-相激磁法,則count的初始值為“000”(cnini<=0),每次加1(cnini<=1),angledncntdec每次減1(angledncntdec<=1).仿真結(jié)果如圖8所示。圖8當(dāng)dir=0,manner="11",使用1--2-相激磁法順時針操作模式(dir=1),那么累加的值為負(fù)數(shù),計數(shù)的規(guī)則如下:state1:如果manner="01",電路使用1-相激磁法,則count的初始值為“000”(cnini<=0),每次減2(cnini<=-2),angledncntdec每次減2(angledncntdec<=2).圖9當(dāng)dir=1,manner="01",使用1-相激磁法state2:如果manner="10",電路使用2-相激磁法,則count的初始值為“111”(cnini<=-1),每次減2(cnini<=-2),angledncntdec每次減(angledncntdec<=2)。圖10當(dāng)dir=1,manner="10",使用2-相激磁法state3:如果manner="00",那么進(jìn)行自動判斷,如果angle步進(jìn)角為偶數(shù)(角度的設(shè)定可以被90整除),使用1-相激磁法,則count的初始值為“000”(cnini<=0),每次減2(cnini<=-2)。否則便使用2-相激磁法,則count的初始值為“111”(cnini<=-1),每次減2(cnini<=-2)。。但無論使用1-相激磁法還是二相激磁法,angledncntdec每次都是減2(angledncntdec<=2)。圖11當(dāng)dir=1,manner="00",步進(jìn)角為偶數(shù)時,使用1-相激磁法圖12當(dāng)dir=1,manner="00",步進(jìn)角不為偶數(shù)時,使用2-相激磁法state4:如果manager="11",電路使用1--2-相激磁法,則count的初始值為“000”(cnini<=0),每次加1(cnini<=-1),angledncntdec每次減1(angledncntdec<=1)。圖13當(dāng)dir=1,manner="11",使用1--2-相激磁法步進(jìn)電機(jī)步進(jìn)移動與定位控制的電路模塊:程序設(shè)計說明:state1:假如reset=1條件成立,則將count與angledncount設(shè)置成0。state2:假如reset=0,clk為上升沿觸發(fā)(clk'eventandclk='1')且ini=0時,則將設(shè)定的初始值(cntini與angle)賦給count與angledncount兩個信號端,即(count<=0+cntini)與(angledncount<=angle)。state3:假如reset=0,clk為上升沿觸發(fā)(clk'eventandclk='1')且ini=1時,則將count與cntinc相加,再將結(jié)果存為count,即(count<=count+cntinc)。然后判斷angledncntdec的值是否大于angledncntdec.如果大于,則用angledncount減angledncntdec,將此結(jié)果保存為anglecount。否則,把a(bǔ)ngledncount設(shè)為0(此時angledncount的值是小于angledncntdec,這表明電機(jī)已達(dá)到設(shè)定的位置,所以無需繼續(xù)轉(zhuǎn)動了),2—相激磁電機(jī)順時針旋轉(zhuǎn)仿真結(jié)果如下圖14所示。圖142—相激磁方式下電機(jī)順時針旋轉(zhuǎn)的仿真圖補(bǔ)充說明:觀察圖14中angledncount連線信號的波形可以明顯的發(fā)現(xiàn),angledncount的計數(shù)值總是向下遞減2,所以angledncntdec的值為2。當(dāng)angledncount的值為1的時候,表示angledncount的值已經(jīng)小于angledncntdec,此時angledncount被設(shè)為0,既電機(jī)已經(jīng)達(dá)到設(shè)定位置,所以不再需要繼續(xù)轉(zhuǎn)動了(因此無論count的值是多少,輸出bata的狀態(tài)永遠(yuǎn)維持在0000)。編碼輸出電路模塊:程序設(shè)計說明:state1:當(dāng)angledncount=0時,將baba設(shè)定為0000,即(baba<="0000"whenangledncount=0else)。state2:否則當(dāng)count=0時,將baba設(shè)定為0001,即(baba<="0001"whencount=0else)。state3:否則當(dāng)count=1時,將baba設(shè)定為0011,即(baba<="0011"whencount=1else)。state4:否則當(dāng)count=2時,將baba設(shè)定為0010,即(baba<="0010"whencount=2else)。state5:否則當(dāng)count=3時,將baba設(shè)定為0110,即(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論