版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Part 1:設(shè)計(jì)簡介及背景知識控制對象由兩臺小型二相步進(jìn)電機(jī)驅(qū)動(dòng)的小車控制目標(biāo)通過檔位鍵盤(對應(yīng)信號為dang3.0)和控制鍵盤(對應(yīng)信號kong2.0)實(shí)現(xiàn)小車以兩級速度前進(jìn)、前左轉(zhuǎn)、前右轉(zhuǎn)、倒車、左倒車和右倒車。本設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,分為三個(gè)模塊(見下頁圖),隊(duì)員分工設(shè)計(jì)。第一模塊:脈沖分頻(緩慢啟動(dòng),實(shí)體名fen)第三模塊:脈沖分配器部分(分配給不同的電機(jī),實(shí)體名:fenpei )第二模塊:分頻部分(不同檔位的不同頻率,實(shí)體名dangwei)各模塊的相關(guān)說明步進(jìn)電機(jī)的轉(zhuǎn)速和輸入脈沖信號的頻率成正比,所以可以通過第二模塊產(chǎn)生不同的分頻信號控制其轉(zhuǎn)速。本設(shè)計(jì)采用二相雙四拍的電機(jī)工作
2、模式,故須在第三模塊實(shí)現(xiàn)相應(yīng)的脈沖分配。第三模塊同時(shí)將脈沖導(dǎo)向不同的電機(jī),實(shí)現(xiàn)方向控制。步進(jìn)電機(jī)啟動(dòng)時(shí)不能加太高的頻率,否則會(huì)嘯叫、震動(dòng)、丟步,無法實(shí)現(xiàn)快速、穩(wěn)定的啟動(dòng),所以在第一模塊對輸入的時(shí)鐘脈沖sr_clk進(jìn)行處理,再輸入下一級以實(shí)現(xiàn)控制信號啟動(dòng)部分的過渡。步進(jìn)電機(jī)的輸入脈沖順序相反時(shí)(相當(dāng)于反接線時(shí)),會(huì)反轉(zhuǎn),因此可以通過在第三模塊對輸出反順序賦值實(shí)現(xiàn)反轉(zhuǎn)控制。關(guān)于仿真的說明步進(jìn)電機(jī)的工作頻率在KHZ級,此頻率下可忽略芯片內(nèi)部演示帶來的影響,故一下的仿真大多為功能仿真。參考資料基于VHDL語言與Quartus軟件的可編程邏輯器件應(yīng)用與開發(fā) 鄭燕,赫建國,黨劍華編著基于Quartus I
3、I的FPGA/CPLD設(shè)計(jì) 李洪偉,袁斯華編著 VHDL語言設(shè)計(jì)技術(shù) 陳耀和著 數(shù)字電子技術(shù)基礎(chǔ)(第二版) 楊頌華 馮毛官 孫萬蓉 初秀琴 胡力山編著步進(jìn)電機(jī)綜述 北京市自動(dòng)化技術(shù)研究所,一機(jī)部電器科學(xué)研究 新版機(jī)器人技術(shù)手冊(日) 日本機(jī)器人學(xué)會(huì)編 宗光華 Part 2:各模塊代碼及詳解第一模塊 :脈沖分頻一、模塊功能對信號的起始部分的降頻(因啟動(dòng)時(shí)需頻率較低來過渡),輸出最終的控制脈沖clk。通過對脈沖計(jì)數(shù)分先后在同一輸出clk上實(shí)現(xiàn)8、4、2、1(即原頻)的輸出,以達(dá)到緩慢啟動(dòng)。二、原程序及相關(guān)說明library ieee;entity fen isport( sr_CLK:IN std
4、_logic; kong:in std_logic_vector(2 downto 0); clk:OUT std_logic );end fen;architecture div of fen is signal Q:std_logic_vector(2 downto 0);-自定義變量用于計(jì)數(shù)分頻轉(zhuǎn)接輸出等。 signal C:std_logic; signal D:std_logic; signal E:std_logic; signal R:std_logic_vector(7downto 0):="00000000" beginprocess(sr_CLK) be
5、gin if sr_CLK'EVENT AND sr_CLK='1' then if(Q="111")then Q<="000" else Q<=Q+1; end if; end if; end process;C<=Q(2);-8分頻 D<=Q(1);-4分頻 E<=Q(0);-2分頻PROCESS(sr_CLK,kong) -計(jì)數(shù),在前96個(gè)脈沖使用某低速,在其后的脈沖使用某中速,在97個(gè)脈沖之后使用據(jù)橫速度 BEGIN if sr_CLK'event and sr_CLK='1&
6、#39; then case kong is when"011"|"101"|"110"=> if(R<"10000000")then R <= R + 1; else R <= R; end if; when others=> R <="00000000" end case; end if; end process; process(R,C,D,E,sr_CLK) begin if(R="00000000")then clk<=
7、39;0' elsif(R="00000001")then clk<= C; elsif(R<"00100001")and(R>"00000001")then-第1脈沖上升沿開始八分頻 clk<= C; elsif(R="00100001")then clk<= D; elsif(R<"01000001")and(R>"00100001")then-第33脈沖上升沿開始四分頻 clk<= D; elsif(R="
8、;01000001")then clk<= E; elsif(R<"01100001")and(R>"01000001")then-第65脈沖上升沿開始二分頻 clk<= E; elsif(R>="01100001")then-第97脈沖上升沿開始原頻 clk<=sr_CLK; end if; end process; end div;三、仿真波形1、 當(dāng)控制鍵kong為011時(shí)仿真波形為2、 當(dāng)控制鍵kong為101時(shí)仿真波形為3、 當(dāng)控制鍵kong為110時(shí)仿真波形為4、 當(dāng)控制鍵ko
9、ng為111時(shí)仿真波形為四、遇到的問題(1)在仿真時(shí)遇到分頻出現(xiàn)重疊使波形不是完整的8、4分頻,為什么?答:主要原因在于設(shè)置時(shí)脈沖個(gè)數(shù)未控制好。(2)在波形仿真時(shí)出現(xiàn)一個(gè)三分頻,為什么?答:應(yīng)為二分頻和厡頻輸出的疊加。(3)原程序編譯通過,功能仿真(Functional) 和時(shí)序仿真(Timing)都能出現(xiàn),但最優(yōu)仿真卻出不來,為什么?(Error: Can't continue timing simulation using fast timing model because delay annotation information for design is missin
10、g)第二模塊:分頻部分一、功能描述:1、輸入有兩個(gè):檔位鍵盤輸入的檔位信號dang:in std-logic-vector(3 downto 0),是個(gè)四位的位型矢量;時(shí)鐘信號clk。dang 鍵盤按 “空、前一、前二、倒” 為順序,當(dāng)某個(gè)鍵被按下則由“1”變?yōu)椤?”,不按下時(shí)保持“1”;2 輸出有一個(gè):clkc 初級時(shí)鐘;3 功能:(1)當(dāng)dang 為“0111”時(shí) 為空擋 ,輸出的 clkc全為“0“空”(2)當(dāng)dang 為“1011”時(shí) 為前一檔,輸出的 clkc為 clk 一半頻率的時(shí)鐘;“前一”(3)當(dāng)dang 為“1101”時(shí) 為前二檔,輸出的 clkc 為 clk ,不做任何處理
11、;“前二”(4)當(dāng)dang 為“1110”時(shí) 為倒檔,輸出和前一檔的完全一樣;“倒”(5)其他所有情況都和空擋完全一樣。二、程序:library ieee;entity dangwei is port(dang:in std_logic_vector(3 downto 0); clk:in std_logic; clkc:out std_logic);end entity;architecture arc_dangwei of dangwei issignal count:std_logic:='0'(定義count的初始值為低電平)beginprocess(clk)begin
12、if(dang="1101") thenclkc<=clk;elsif(clk'event and clk='1') thenif(dang="1011" or dang="1110") thencount<=not count;clkc<=not count;elseclkc<='0'end if;end if;end process;end arc_dangwei;三、仿真波形:(1)dang=“1101”時(shí)的輸出波形:(2)dang=“1011”和“1110”時(shí)的輸
13、出波形: (3)dang輸出為“0000”時(shí):(4)整體輸出波形:<1> 功能仿真波形 <2>時(shí)序仿真波形四、操作過程中出現(xiàn)的問題(1)有沒有可行的語句來控制wait until clk'event and clk='1'的作用范圍,可以讓其在我們設(shè)想的范圍內(nèi)起作用,而不是控制整個(gè)process?編寫程序的初衷是用case語句實(shí)現(xiàn),并用wait until clk'event and clk='1'實(shí)現(xiàn)邊沿觸發(fā),來達(dá)到二分頻和對clkc賦值的操作,但是受邊沿觸發(fā)的影響,導(dǎo)致賦值操作時(shí)實(shí)際輸出波形如下圖示:(2)程序仿真出現(xiàn)
14、在時(shí)鐘下降沿時(shí)鐘信號不能控制輸出波形的情況該如何解決?如圖所示:第三模塊:脈沖分配器部分1、 設(shè)計(jì)基本要求 脈沖分配器部分要控制的步進(jìn)電機(jī)為兩相,其中有三個(gè)輸入clkz、dang、kong信號,有八個(gè)輸出z0z3、y0y3信號,且z0z3對應(yīng)左電機(jī)(小車左輪),y0y3對應(yīng)右電機(jī)(小車右輪)。將clkz分配為四個(gè)相互錯(cuò)開的進(jìn)程內(nèi)部信號signal V,并在dang、kong信號的作用下完成對步進(jìn)電機(jī)不同工作方式的控制,進(jìn)而實(shí)現(xiàn)對二輪小車運(yùn)動(dòng)方式的控制。2、 設(shè)計(jì)流程設(shè)計(jì)脈沖分配器部分流程如下:實(shí)體名:fenpei (“分配”)輸入有三個(gè):clkz:時(shí)鐘信號dang :in std-logic-
15、vector(3 downto 0),是個(gè)四位的位型矢量kong: in std-logic-vector(2 downto 0), 是個(gè)三位的位型矢量dang 鍵盤按 “空檔、前進(jìn)檔一、前進(jìn)檔二、倒檔 ”為順序排列,當(dāng)某個(gè)鍵被按下則由“1”變?yōu)椤?”,不按下時(shí)保持“1”kong 鍵盤按 “兩輪都工作、僅左輪工作、僅右輪工作 ”為順序排列,當(dāng)某個(gè)鍵被按下則由“1”變?yōu)椤?”,不按下時(shí)保持“1”輸出有八個(gè):輸出到左輪(z)的z0、z1、z2、z3輸出到右輪(y)的y0、y1、y2、y3功能說明:首先將輸入的clkz 分配成四個(gè)信號v0、v1、v2、v3,用于電機(jī)驅(qū)動(dòng)的錯(cuò)開的四相脈沖。然后,1.當(dāng)
16、 dang 為“1110”(倒檔)條件下: 當(dāng) kong 為“011”時(shí),將v0v3分別賦給z0z3,以及y0y3;“左右輪都工作” 當(dāng) kong 為“101”時(shí),將v0v3只賦給z0z3,y0y3全賦零;“僅左輪工作” 當(dāng) kong 為“110”時(shí),將v0v3只賦給y0y3, z0z3全賦零;“僅右輪工作” 當(dāng) kong 為其他時(shí),zl和yl均賦全零;“左右輪都不工作” 2.當(dāng) dang為“1011”或“1101”(前進(jìn)檔1,前進(jìn)檔2)條件下:當(dāng) kong 為“011”時(shí),將v3v0分別賦給z0z3,以及y0y3;“左右輪都工作” 當(dāng) kong 為“101”時(shí),將v3v0只賦給z0z3,y0
17、y3全賦零;“僅左輪工作” 當(dāng) kong 為“110”時(shí),將v3v0只賦給y0y3, z0z3全賦零;“僅右輪工作” 當(dāng) kong 為其他時(shí),z0z3和y0y3均賦全零;“左右輪都不工作” 3.當(dāng) dang為其他時(shí),z0z3和y0y3均賦全零;“左右輪都不工作”3、 設(shè)計(jì)方法 利用VHDL語言描述脈沖分配器,代碼如下:library ieee; -包含庫entity fenpei is -實(shí)體(fenpei)說明port( clkz : in std_logic; -時(shí)鐘輸入dang : in std_logic_vector(3 downto 0); -車輪工作方式第一選擇信號(4位鍵盤輸入
18、)kong : in std_logic_vector(2 downto 0); -車輪工作方式第二選擇信號(3位鍵盤輸入)w :out std_logic_vector(3 downto 0); -4位控制信號輸出 z3,z2,z1,z0,y3,y2,y1,y0 : out std_logic); -左(z)右(y)車輪控制信號輸出end fenpei;architecture arc_fenpei of fenpei is -結(jié)構(gòu)體說明 signal A:std_logic_vector(1 downto 0); -定義內(nèi)部信號 signal V:std_logic_vector(3 do
19、wnto 0);begin process(clkz) begin if clkz'event and clkz='1' then -時(shí)鐘上升沿有效 if(A="11")then A<="00" else A<=A+1; end if; end if; case A is when"00"=>V<="0110" -產(chǎn)生周期序列0011 when"01"=>V<="0011" when"10"=&g
20、t;V<="1001" when"11"=>V<="1100" end case; end process;process(dang,kong,V) begin case dang is when"1110"=> -倒檔 if kong="011"then -(倒檔)左右輪都工作 z3<=V(3); z2<=V(2); z1<=V(1); z0<=V(0); y3<=V(3); y2<=V(2); y1<=V(1); y0<
21、=V(0); elsif kong="101"then -(倒檔)僅左輪工作 z3<=V(3); z2<=V(2); z1<=V(1); z0<=V(0); y3<='0' y2<='0' y1<='0' y0<='0' elsif kong="110"then -(倒檔)僅右輪工作 z3<='0' z2<='0' z1<='0' z0<='0' y3<
22、;=V(3); y2<=V(2); y1<=V(1); y0<=V(0); else -(倒檔)左右輪都不工作 z3<='0' z2<='0' z1<='0' z0<='0' y3<='0' y2<='0' y1<='0' y0<='0' end if; when"1011"|"1101"=> -前進(jìn)檔1或前進(jìn)檔2 if kong="011&quo
23、t;then -(前進(jìn)檔)左右輪都工作 z3<=V(0); z2<=V(1); z1<=V(2); z0<=V(3); y3<=V(0); y2<=V(1); y1<=V(2); y0<=V(3); elsif kong="101"then -(前進(jìn)檔)僅左輪工作 z3<=V(0); z2<=V(1); z1<=V(2); z0<=V(3); y3<='0' y2<='0' y1<='0' y0<='0' elsif
24、 kong="110"then -(前進(jìn)檔)僅右輪工作 z3<='0' z2<='0' z1<='0' z0<='0' y3<=V(0); y2<=V(1); y1<=V(2); y0<=V(3); else -(前進(jìn)檔)左右輪都不工作 z3<='0' z2<='0' z1<='0' z0<='0' y3<='0' y2<='0' y
25、1<='0' y0<='0' end if; when others=> -其余檔, 左右輪都不工作 z3<='0' z2<='0' z1<='0' z0<='0' y3<='0' y2<='0' y1<='0' y0<='0' end case; end process; w<=V;end arc_fenpei;4、 仿真結(jié)果下面是脈沖分配器部分功能仿真和時(shí)序仿真
26、結(jié)果,各部分的功能見圖中標(biāo)示:五、問題討論 在脈沖分配模塊的源程序中,當(dāng)把控制信號輸出z3z0,y3y0 : out std_logic改為Z,Y:out std_logic_vector(3 downto 0)時(shí),輸出結(jié)果出錯(cuò)。為什么?六、結(jié)論脈沖分配器部分使用VHDL語言設(shè)計(jì)了一種步進(jìn)電機(jī)控制器。根據(jù)仿真波形的分析,基本達(dá)到了設(shè)計(jì)初期的要求,能夠完成步進(jìn)電機(jī)在不同控制檔位下工作模式的選擇,實(shí)現(xiàn)了步進(jìn)電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、停止的要求,進(jìn)而實(shí)現(xiàn)了對兩輪小車的運(yùn)動(dòng)方式的控制。Part 3:頂層設(shè)計(jì)及仿真一、過程頂層設(shè)計(jì)采用原理圖輸入。復(fù)制到工程文件夾中。在創(chuàng)建的.bdf文件中調(diào)用各個(gè)元件并連線、設(shè)定輸入輸出端口。最后,編譯,仿真。這種設(shè)計(jì)方法結(jié)構(gòu)清晰,輸入方便,也更容易修改各模塊間的邏輯關(guān)系。二、遇到的問題開始時(shí)只將.bsf文件復(fù)制在了工程文件夾中,在編譯過程中出現(xiàn)了Error
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版智慧農(nóng)業(yè)項(xiàng)目合作合同范本4篇
- 二零二五年度農(nóng)產(chǎn)品供應(yīng)鏈金融服務(wù)合同7篇
- 二零二五年度廚師食材采購與成本控制服務(wù)合同3篇
- 二零二五年度新能源研發(fā)中心聘請兼職勞務(wù)合同4篇
- 2025年文化創(chuàng)意產(chǎn)業(yè)貨款合同退款及知識產(chǎn)權(quán)保護(hù)協(xié)議3篇
- 二零二五年度排水管道安裝與水質(zhì)監(jiān)測服務(wù)合同3篇
- 二零二五年度農(nóng)藥研發(fā)成果轉(zhuǎn)化與應(yīng)用合同3篇
- 2025年度個(gè)人投資理財(cái)顧問委托合同3篇
- 2025版特色商業(yè)街區(qū)門面店裝修施工合同2篇
- 2025年度民品典當(dāng)借款合同標(biāo)準(zhǔn)化文本4篇
- 有砟軌道施工工藝課件
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學(xué)習(xí)課件
- 40篇短文搞定高中英語3500單詞
- 人教版高中數(shù)學(xué)必修二《第九章 統(tǒng)計(jì)》同步練習(xí)及答案解析
- 兒科護(hù)理安全警示教育課件
- 三年級下冊口算天天100題
- 國家中英文名稱及代碼縮寫(三位)
- 人員密集場所消防安全培訓(xùn)
- 液晶高壓芯片去保護(hù)方法
- 使用AVF血液透析患者的護(hù)理查房
- 拜太歲科儀文檔
評論
0/150
提交評論