【文章內(nèi)容簡(jiǎn)介】
數(shù)據(jù) 類型、常量、子程序等 。 5 設(shè)計(jì)庫(kù) 存放編譯過的設(shè)計(jì)單元 (包括實(shí)體說明、結(jié)構(gòu)體、配置說明、程序包等 ), 庫(kù)中的內(nèi)容可用作VHDL描述的資源 , 接受其設(shè)計(jì)單元的訪問 。 通常 , 以上 5 個(gè)部分就是一個(gè)完整的VHDL程序應(yīng)該包含的內(nèi)容 。 3. CPLD設(shè)計(jì)流程 CPLD即復(fù)雜可編程邏輯器件 , 它可以使電子設(shè)計(jì)工程師在實(shí)驗(yàn)室內(nèi)快速方便地開發(fā)專用集成電路 (ASIC )。 CPLD器件的設(shè)計(jì)流程通常分為設(shè)計(jì)準(zhǔn)備、設(shè)計(jì)輸入、設(shè)計(jì)驗(yàn)證、布局布線、設(shè)計(jì)仿真、熔線圖生成和下載等步驟 。 1 設(shè)計(jì)準(zhǔn)備 設(shè)計(jì)準(zhǔn)備是為了選擇合適的CPLD器件 。 從邏輯上看 , 首先要考慮器件的I /O資源是否夠用 2 設(shè)計(jì)輸入 設(shè)計(jì)輸入是將所設(shè)計(jì)的電路以開發(fā)軟件要求的某種形式表達(dá)出來(lái) , 并輸入計(jì)算機(jī) , 如邏輯圖和硬件描述語(yǔ)言 (HDL )。 3 設(shè)計(jì)驗(yàn)證 邏輯設(shè)計(jì)輸入后 , 應(yīng)對(duì)輸入的文件進(jìn)行檢驗(yàn) , 包括語(yǔ)法檢驗(yàn)、設(shè)計(jì)規(guī)則檢驗(yàn)、邏輯最小化檢驗(yàn)、邏輯適配檢驗(yàn)和全局設(shè)計(jì)規(guī)則檢查 。 4 布局布線 此項(xiàng)工作由軟件自動(dòng)完成 , 并能以最優(yōu)的方式對(duì)邏輯元件布局 。 5 設(shè)計(jì)仿真 仿真包括邏輯仿真和時(shí)序仿真 。 按照開發(fā)軟件的要求輸入一定的測(cè)試序列 , 軟件可以將這種電 路的這種序列作 用下的輸出波形顯示出來(lái) 。 6 熔絲圖生成和下載 軟件自動(dòng)生成JEDEC文件 , 并通過下載電纜裝入芯片中 。 電路構(gòu)成及各模塊功能實(shí)現(xiàn) 在此使用 4 相反應(yīng)式步進(jìn)電機(jī)。 整個(gè)電路由 波形信號(hào)發(fā)生器 ( SQUARE) ,步進(jìn)電機(jī)控制器( MYBJDJ) ,數(shù)碼 動(dòng)態(tài)顯示 ( XIANSHI) ,步進(jìn)電機(jī)方向控制器 ( MYBJDJDIR) 及鍵盤去抖動(dòng)電路( JPQDD) 五 個(gè)模塊 組成。 頂層原理圖 如圖 9所示 。 CLK16M 為時(shí)鐘信號(hào), RST 為開始 /復(fù)位鍵,通過 SQUARE 模塊產(chǎn)生預(yù)置的步進(jìn)脈沖, 步進(jìn)脈沖 分別 輸入 MYBJDJ模塊和 XIANSHI 模塊,使電機(jī)轉(zhuǎn)動(dòng)相應(yīng)的步數(shù)并 顯示出電機(jī)轉(zhuǎn)動(dòng)的步數(shù) ,其中 Y3Y0 輸出至功放電路, SPEAK 關(guān)喇叭, Q7Q0輸出至數(shù)碼管, MYBJDJDIR 模塊控制電機(jī)轉(zhuǎn)動(dòng)方向 , JPQDD 消除鍵盤按鍵的彈跳抖動(dòng), KEY1 鍵為步進(jìn)電機(jī)的正 /反轉(zhuǎn)控制。 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 11 圖 9 步進(jìn)電機(jī)控制頂層原理圖 CPLD 設(shè)計(jì)及電路時(shí)序 在此 選用 ALTERA公司 FLEX系列的 EPF10K10可編程邏輯電路 芯片 , 整個(gè)設(shè)計(jì)是在 MAX+PLUSⅡ軟件下實(shí)現(xiàn)的 。采用了電路行為描述手段,分層設(shè)計(jì)的方法。 底層模塊由 VHDL硬件描述語(yǔ)言設(shè)計(jì),頂層文件采用圖形方 法,完成各個(gè)模塊間的連接。 步進(jìn)電機(jī)控制 模塊 MYBJDJ 模塊采用了狀態(tài)機(jī)的方法 ,由兩個(gè)進(jìn)程組成,程序如下: Library ieee。 Use 。 Use 。 Entity mybjdj is port (clk1,rst,dir:in std_logic。 speak:out std_logic。 y:out std_logic_vector(3 downto 0))。 End。 Architecture one of mybjdj is signal t:integer range 0 to 16000000。 signal a:std_logic_vector(3 downto 0)。 signal b:std_logic_vector(3 downto 0)。 type mystate is (st0,st1,st2,st3)。 signal state:mystate。 P1: Process(clk1,rst) begin if rst=39。039。 then state=st0。 elsif clk139。event and clk1=39。139。 then case state is when st0=state=st1。a=1001。b=1100。 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 12 when st1=state=st2。a=0011。b=0110。 when st2=state=st3。a=0110。b=0011。 when st3=state=st0。a=1100。b=1001。 end case。 end if。 end process。 P2: Process(clk1) Begin if(clk139。event and clk1=39。139。) then if dir=39。139。 then y=a。 elsif dir=39。039。 then y=b。 end if。 end if。 End process。 Speak=39。139。 End。 P1 進(jìn)程 為控制步進(jìn)電機(jī)的二相激磁方式, VHDL 語(yǔ)言用狀態(tài)機(jī)描述方法設(shè)計(jì)該模塊。 P2 進(jìn)程為步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向的選擇,輸出 A為正轉(zhuǎn),輸出 B為反轉(zhuǎn)。 波形信號(hào)發(fā)生 模塊 SQUARE 模塊 輸出脈沖信號(hào) 至電機(jī)控制模塊 作步進(jìn)脈沖 , 決定步進(jìn)電機(jī)的轉(zhuǎn)步, KEY2, KEY3,KEY4, KEY5 分別為 20 步, 40 步, 70 步, 100 步 。 共有三個(gè)進(jìn)程,程序如下: Library ieee。 Use 。 Use 。 Entity square1 is port (clk16m:in std_logic。 key2,key3,key4,key5:in std_logic。 rst: in std_logic。 qout: out std_logic)。 End。 Architecture one of square1 is signal t:integer range 0 to 16000000。 signal a:std_logic。 signal count:integer range 0 to 255。 signal data:integer range 0 to 255。 signal enb:std_logic。 signal q:std_logic。 Begin 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 13 Process(clk16m,rst) begin if rst=39。039。 then a=39。139。count=0。 elsif clk16m39。event and clk16m=39。139。 then if t16000001 then t=t+1。 t 控制步進(jìn)電機(jī)的轉(zhuǎn)速 else t=0。a=not a。count=count+1。 count 計(jì)步進(jìn)電機(jī)的轉(zhuǎn)數(shù) end if。 end if。 end process。 Process(clk16m) begin if clk16m39。event and clk16m=39。139。 then if count=data then enb=39。039。 轉(zhuǎn)數(shù)超過指定的脈沖數(shù)則停止 elsif rst=39。039。 the