1、第第六六章章步進馬達控制實習VHDL數位電路實習與專題設計文魁資訊-UE301第六章 步進馬達控制實習VHDL數位電路實習與專題設計2陳慶逸、林柏辰編著-文魁資訊內容大綱內容大綱n單元9-1 步進馬達全步控制(一相激磁)實習 n單元9-2 步進馬達全步控制(二相激磁)實習n單元9-3 步進馬達半步控制(一二相激磁)實習 n單元9-4 步進馬達轉向控制實習 n單元9-5 步進馬達轉向與全步半步選擇控制實習 n單元9-6 步進馬達轉速控制實習 n單元9-7 步進馬達步進數控制實習 第六章 步進馬達控制實習VHDL數位電路實習與專題設計3陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(
2、一相激磁)實習步進馬達全步控制(一相激磁)實習 n相關知識四相式步進馬達驅動示意圖 N S A A BB+V +V A A B B 轉子 4相6線式步進馬達 第六章 步進馬達控制實習VHDL數位電路實習與專題設計4陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n相關知識(續)一個四相步進馬達的工作方式如下圖所示;其中線圈接點所連接的開關是以脈波控制電晶體的飽和或截止加以實現。VAABB第六章 步進馬達控制實習VHDL數位電路實習與專題設計5陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(
3、一相激磁)實習n相關知識(續)而在一般的實驗中,我們常常拿內含四組NPN達靈頓電晶體的FT5754元件來驅動步進馬達,達靈頓電晶體在B極輸入正電壓而導通飽和時,可以放大C極端從線圈往下流通的電流,電源能否提供足夠的電流來驅動步進馬達會影響到步進馬達的轉速與力矩。FT5754外觀及內部結構如下所示:GND B C Vcc FT5754 B1 C1 Vcc C2 B2 G N D G N D B3 C3 Vcc B4 C4 第六章 步進馬達控制實習VHDL數位電路實習與專題設計6陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習 AA B
4、B 5V C1 C3 C2 C4 B1 B2 B3 B4 Vcc Vcc GND GND 5V 220 x4 n相關知識(續)當採用FT5754的達靈頓對電晶體來作為連接步進馬達的開關時,其電路的結構如下所示:第六章 步進馬達控制實習VHDL數位電路實習與專題設計7陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n相關知識(續)一相激磁的作法是控制每次只有一個線圈有電流通過,當四個線圈輪流動作時,步進馬達便能開始轉動。一相激磁的控制順序如下表所列:ABAB 線圈控制狀態轉動方向順時針逆時針11000201003001040001第六章
5、 步進馬達控制實習VHDL數位電路實習與專題設計8陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n實驗電路圖/AEPM7064S/LCC44456843I/OI/OI/OI/OI/GCLK1STEP30/BSTEP0STEP1FT5754956781231241110C3B2GNDGNDB3B4V+B1C1C2C4V+ACLOCKSTEP2MOTOR STEPPER123456VCCB第六章 步進馬達控制實習VHDL數位電路實習與專題設計9陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(
6、一相激磁)實習 n程式與說明步進馬達全步控制(一相激磁)程式碼 11 entity stepmotor_fulla is12 port(13 clk:in std_logic;14 step:out std_logic_vector(3 downto 0)15 );16 end stepmotor_fulla;1718 architecture arch of stepmotor_fulla is19 signal cnt:std_logic_vector(1 downto 0);20 begin2122-process-23 process(clk)24 begin25 if clkeven
7、t and clk=1 then26 cnt=cnt+1;27 end if;28 end process;29 step=1000 when cnt=0 else30 0100 when cnt=1 else31 0010 when cnt=2 else32 0001;33 end arch;第六章 步進馬達控制實習VHDL數位電路實習與專題設計10陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13 entity clk_div_step is14 generi
8、c(divisor:integer:=36864);15 port(16 clk_in:in std_logic;17 clk_out:out std_logic18 );19 end clk_div_step;2021 architecture arch of clk_div_step is22 signal cnt2:std_logic;23 begin24 -clk divider-25 process(clk_in)26 variable cnt1,divisor2:integer range 0 to divisor;27 begin28 divisor2:=divisor/2;29
9、 -up counter-30 if(clk_inevent and clk_in=1)then31 if cnt1=divisor then32 cnt1:=1;33 else34 cnt1:=cnt1+1;35 end if;36 end if;37 -clk_out register clk generator-38 if(clk_inevent and clk_in=1)then39 if(cnt1=divisor2)or(cnt1=divisor)then40 cnt2=not cnt2;41 end if;42 end if;43 clk_out=cnt2;44 end proce
10、ss;45 end arch;46 第六章 步進馬達控制實習VHDL數位電路實習與專題設計11陳慶逸、林柏辰編著-文魁資訊 單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n程式與說明主程式之電路連線圖:第六章 步進馬達控制實習VHDL數位電路實習與專題設計12陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入clock 腳位43 輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整Jumper J2的位置由IO0I
11、O3拉出激磁信號線接上5V 直流電源q進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumper J2由原本的1、2 PIN腳(Internal I/O ON)改套到2、3 PIN腳上(External I/O ON),再從實驗板右邊CON1上將IO0IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。q另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。第六章 步進馬達控制實習VHDL數位電路實習與專題設計13陳慶逸、林柏辰編著-文魁資訊單元
12、單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板 欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10 CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)setp(0)):第六章 步進馬達控制實習VHDL數位電路實習與專題設計14陳慶逸、林柏辰編著-文魁資訊單元單元9-1 步進馬達全步控制(一相激磁)實習步進馬達全步控制(一相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(
13、續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-entity clk_div_step isgeneric(divisor:integer:=200000);-將將divisor設定為設定為200000 port(clk_in:in std_logic;clk_out:out std_logic );end clk_div_step;-輸入clock 腳位55 輸出Step(3)Step(2)Step
14、(1)Step(0)腳位37383941第六章 步進馬達控制實習VHDL數位電路實習與專題設計15陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n相關知識二相激磁的控制方法是每次都讓兩個線圈通過電流,每一個步驟可以移動一個步進角:ABAB 線圈控制狀態轉動方向順時針逆時針11100201103001141001A第六章 步進馬達控制實習VHDL數位電路實習與專題設計16陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n實驗電路圖/AEPM7064S/LCC44456843I
15、/OI/OI/OI/OI/GCLK1STEP30/BSTEP0STEP1FT5754956781231241110C3B2GNDGNDB3B4V+B1C1C2C4V+ACLOCKSTEP2MOTOR STEPPER123456VCCB第六章 步進馬達控制實習VHDL數位電路實習與專題設計17陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習 n程式與說明步進馬達全步控制(二相激磁)程式碼 12 entity stepmotor_fullb is13 port(14 clk:in std_logic;15 step:out std_log
16、ic_vector(3 downto 0)16 );17 end stepmotor_fullb;1819 architecture arch of stepmotor_fullb is20 signal cnt:std_logic_vector(1 downto 0);21 begin2223-process-24 process(clk)25 begin26 if clkevent and clk=1 then27 cnt=cnt+1;28 end if;29 end process;30 31 step=1100 when cnt=0 else32 0110 when cnt=1 els
17、e33 0011 when cnt=2 else34 1001;35 end arch;第六章 步進馬達控制實習VHDL數位電路實習與專題設計18陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13 entity clk_div_step is14 generic(divisor:integer:=36864);15 port(16 clk_in:in std_logic;17 clk_out:out std_logic18 );19 end clk_div_ste
18、p;2021 architecture arch of clk_div_step is22 signal cnt2:std_logic;23 begin24 -clk divider-25 process(clk_in)26 variable cnt1,divisor2:integer range 0 to divisor;27 begin28 divisor2:=divisor/2;29 -up counter-30 if(clk_inevent and clk_in=1)then31 if cnt1=divisor then32 cnt1:=1;33 else34 cnt1:=cnt1+1
19、;35 end if;36 end if;37 -clk_out register clk generator-38 if(clk_inevent and clk_in=1)then39 if(cnt1=divisor2)or(cnt1=divisor)then40 cnt2=not cnt2;41 end if;42 end if;43 clk_out=cnt2;44 end process;45 end arch;46 第六章 步進馬達控制實習VHDL數位電路實習與專題設計19陳慶逸、林柏辰編著-文魁資訊 單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n程
20、式與說明主程式之電路連線 圖:第六章 步進馬達控制實習VHDL數位電路實習與專題設計20陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入clock 腳位43 輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整Jumper J2的位置由IO0IO3拉出激磁信號線接上5V 直流電源q進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumper J2由原本的1、2 PIN
21、腳(Internal I/O ON)改套到2、3 PIN腳上(External I/O ON),再從實驗板右邊CON1上將IO0IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。q另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。第六章 步進馬達控制實習VHDL數位電路實習與專題設計21陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板 欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板
22、上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10 CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)setp(0)):第六章 步進馬達控制實習VHDL數位電路實習與專題設計22陳慶逸、林柏辰編著-文魁資訊單元單元9-2 步進馬達全步控制(二相激磁)實習步進馬達全步控制(二相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000
23、000Hz/200000=50Hz)-entity clk_div_step isgeneric(divisor:integer:=200000);-將將divisor設定為設定為200000 port(clk_in:in std_logic;clk_out:out std_logic );end clk_div_step;-輸入clock 腳位55 輸出Step(3)Step(2)Step(1)Step(0)腳位37383941第六章 步進馬達控制實習VHDL數位電路實習與專題設計23陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)
24、實習 n相關知識一二相激磁的作法是以一相激磁和二相激磁來交替控制,在定子繞組切換激磁線圈電壓時,仍有一個線圈上有電流通過,可保持一定的力矩以維持運轉上的平穩,而其耗電量又比二相激磁來得節省。一二相激磁每次可以移動半個步進角,其激磁的控制順序如下:ABAB 線圈控制狀態轉動方向順時針逆時針1100021100301004011050010600117000181001第六章 步進馬達控制實習VHDL數位電路實習與專題設計24陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n實驗電路圖/AEPM7064S/LCC44456843I/O
25、I/OI/OI/OI/GCLK1STEP30/BSTEP0STEP1FT5754956781231241110C3B2GNDGNDB3B4V+B1C1C2C4V+ACLOCKSTEP2MOTOR STEPPER123456VCCB第六章 步進馬達控制實習VHDL數位電路實習與專題設計25陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習 n程式與說明步進馬達半步控制(一二相激磁)程式碼 12 entity stepmotor_half is13 port(14 clk:in std_logic;15 step:out std_log
26、ic_vector(3 downto 0)16 );17 end stepmotor_half;1819 architecture arch of stepmotor_half is20 signal cnt:std_logic_vector(2 downto 0);21 begin22 23-process-24 process(clk)25 begin26 if clkevent and clk=1 then27 cnt=cnt+1;28 end if;29 end process;3031 step=1000 when cnt=0 else32 1100 when cnt=1 else3
27、3 0100 when cnt=2 else34 0110 when cnt=3 else35 0010 when cnt=4 else36 0011 when cnt=5 else37 0001 when cnt=6 else38 1001;39 end arch;第六章 步進馬達控制實習VHDL數位電路實習與專題設計26陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13 entity clk_div_step is14 generic(divisor:in
28、teger:=36864);15 port(16 clk_in:in std_logic;17 clk_out:out std_logic18 );19 end clk_div_step;2021 architecture arch of clk_div_step is22 signal cnt2:std_logic;23 begin24 -clk divider-25 process(clk_in)26 variable cnt1,divisor2:integer range 0 to divisor;27 begin28 divisor2:=divisor/2;29 -up counter
29、-30 if(clk_inevent and clk_in=1)then31 if cnt1=divisor then32 cnt1:=1;33 else34 cnt1:=cnt1+1;35 end if;36 end if;37 -clk_out register clk generator-38 if(clk_inevent and clk_in=1)then39 if(cnt1=divisor2)or(cnt1=divisor)then40 cnt2=not cnt2;41 end if;42 end if;43 clk_out=cnt2;44 end process;45 end ar
30、ch;46 第六章 步進馬達控制實習VHDL數位電路實習與專題設計27陳慶逸、林柏辰編著-文魁資訊 單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n程式與說明主程式之電路連線 圖:第六章 步進馬達控制實習VHDL數位電路實習與專題設計28陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入clock 腳位43 輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整Jumper J2的位置由IO0IO3拉出激磁信
31、號線接上5V 直流電源q進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumper J2由原本的1、2 PIN腳(Internal I/O ON)改套到2、3 PIN腳上(External I/O ON),再從實驗板右邊CON1上將IO0IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。q另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。第六章 步進馬達控制實習VHDL數位電路實習與專題設計29陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步
32、進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板 欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10 CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)setp(0)):第六章 步進馬達控制實習VHDL數位電路實習與專題設計30陳慶逸、林柏辰編著-文魁資訊單元單元9-3 步進馬達半步控制(一二相激磁)實習步進馬達半步控制(一二相激磁)實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此
33、外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-entity clk_div_step isgeneric(divisor:integer:=200000);-將將divisor設定為設定為200000 port(clk_in:in std_logic;clk_out:out std_logic );end clk_div_step;-輸入clock 腳位55 輸出Step(3)Step(2)Step(1)
34、Step(0)腳位37383941第六章 步進馬達控制實習VHDL數位電路實習與專題設計31陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習 n相關知識本實驗中,我們將設計一個可以控制上、下數計數功能的DIR鍵來控制步進馬達一相激磁之正反轉 上、下數動作之控制程式碼的寫法如下:if clkevent and clk=1 then if dir=1 then cnt=cnt+1;else cnt=cnt-1;end if;end if;第六章 步進馬達控制實習VHDL數位電路實習與專題設計32陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進
35、馬達轉向控制實習n實驗電路圖 EPM7064S/LCC4445684337I/OI/OI/OI/OI/GCLK1I/OFT5754956781231241110C3B2GNDGNDB3B4V+B1C1C2C4V+DIRBSTEP1STEP3MOTOR STEPPER123456STEP0A/BSTEP20CLOCKVCC/ASW1VCC第六章 步進馬達控制實習VHDL數位電路實習與專題設計33陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習 n程式與說明步進馬達轉向控制程式碼 11 entity stepmotor_dir is12 port(13 clk:
36、in std_logic;14 dir:in std_logic;15 step:out std_logic_vector(3 downto 0)16 );17 end stepmotor_dir;1819 architecture arch of stepmotor_dir is20signal cnt:std_logic_vector(1 downto 0);21 begin2223-process-24 process(clk)25 begin26 if clkevent and clk=1 then27 if dir=1 then28 cnt=cnt+1;29 else30 cnt=c
37、nt-1;31 end if;32 end if;33 end process;3435 step=1000 when cnt=0 else36 0100 when cnt=1 else37 0010 when cnt=2 else38 0001;39 end arch;第六章 步進馬達控制實習VHDL數位電路實習與專題設計34陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習n程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13 entity clk_div_step is14 generic(divisor:integer:=36864
38、);15 port(16 clk_in:in std_logic;17 clk_out:out std_logic18 );19 end clk_div_step;2021 architecture arch of clk_div_step is22 signal cnt2:std_logic;23 begin24 -clk divider-25 process(clk_in)26 variable cnt1,divisor2:integer range 0 to divisor;27 begin28 divisor2:=divisor/2;29 -up counter-30 if(clk_i
39、nevent and clk_in=1)then31 if cnt1=divisor then32 cnt1:=1;33 else34 cnt1:=cnt1+1;35 end if;36 end if;37 -clk_out register clk generator-38 if(clk_inevent and clk_in=1)then39 if(cnt1=divisor2)or(cnt1=divisor)then40 cnt2=not cnt2;41 end if;42 end if;43 clk_out=cnt2;44 end process;45 end arch;46 第六章 步進
40、馬達控制實習VHDL數位電路實習與專題設計35陳慶逸、林柏辰編著-文魁資訊 單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習n程式與說明主程式之電路連線 圖:第六章 步進馬達控制實習VHDL數位電路實習與專題設計36陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習n功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入clockdir 腳位4337 輸出Step(3)Step(2)Step(1)Step(0)腳位4568q進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實
41、驗板上的jumper J2由原本的1、2 PIN腳(Internal I/O ON)改套到2、3 PIN腳上(External I/O ON),再從實驗板右邊CON1上將IO0IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。q另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。調整Jumper J2的位置由IO0IO3拉出激磁信號線接上5V 直流電源正反轉控制 第六章 步進馬達控制實習VHDL數位電路實習與專題設計37陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習n功能模擬與CPLD
42、下載驗證燒錄於力浦電子LP-2900實驗板 第六章 步進馬達控制實習VHDL數位電路實習與專題設計38陳慶逸、林柏辰編著-文魁資訊單元單元9-4 步進馬達轉向控制實習步進馬達轉向控制實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-entity clk_div_step isgeneric(divisor:integer:=200000
43、);-將將divisor設定為設定為200000 port(clk_in:in std_logic;clk_out:out std_logic );end clk_div_step;-輸入clock dir 腳位5547 輸出Step(3)Step(2)Step(1)Step(0)腳位37383941第六章 步進馬達控制實習VHDL數位電路實習與專題設計39陳慶逸、林柏辰編著-文魁資訊單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習 n相關知識本實驗中,我們以DIR鍵來控制步進馬達之正反轉動作;另外再利用sel鍵來作步進馬達全步控制或半步控制的選擇。n實驗功
44、能DIR=1 時,步進馬達正轉;DIR=0 時,步進馬達反轉。Sel=1時,執行全步控制(二相激磁);Sel=0時,執行半步控制(一二相激磁)。第六章 步進馬達控制實習VHDL數位電路實習與專題設計40陳慶逸、林柏辰編著-文魁資訊單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習n實驗電路圖/ASTEP3SELSTEP1BMOTOR STEPPER123456ASTEP0SW2STEP2/BSW1VCCCLOCKVCCFT5754956781231241110C3B2GNDGNDB3B4V+B1C1C2C4V+DIREPM7064S/LCC4445684337
45、39I/OI/OI/OI/OI/GCLK1I/OI/O0第六章 步進馬達控制實習VHDL數位電路實習與專題設計41陳慶逸、林柏辰編著-文魁資訊單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習 n程式與說明步進馬達轉向與全步半步選擇控制程式碼 12 entity stepmotor_dirsel is13 port(14 clk:in std_logic;15 dir:in std_logic;16 sel:in std_logic;17 step:out std_logic_vector(3 downto 0)18 );19 end stepmotor_di
46、rsel;2021 architecture arch of stepmotor_dirsel is22 signal cnt:std_logic_vector(2 downto 0);23 begin2425 process(clk)26 begin27 if clkevent and clk=1 then28 if dir=1 then29 cnt=cnt+1;30 else31 cnt stepstepstepstepstepstepstepstep null;49 end case;50 else第六章 步進馬達控制實習VHDL數位電路實習與專題設計42陳慶逸、林柏辰編著-文魁資訊單元
47、單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習n程式與說明步進馬達轉向與全步半步選擇控制程式碼(續)51 case cnt is52 when 000=stepstepstepstepstepstepstepstep null;61 end case;62 end if;63 end process;64 end arch;第六章 步進馬達控制實習VHDL數位電路實習與專題設計43陳慶逸、林柏辰編著-文魁資訊單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習n程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):
48、13 entity clk_div_step is14 generic(divisor:integer:=36864);15 port(16 clk_in:in std_logic;17 clk_out:out std_logic18 );19 end clk_div_step;2021 architecture arch of clk_div_step is22 signal cnt2:std_logic;23 begin24 -clk divider-25 process(clk_in)26 variable cnt1,divisor2:integer range 0 to divisor
49、;27 begin28 divisor2:=divisor/2;29 -up counter-30 if(clk_inevent and clk_in=1)then31 if cnt1=divisor then32 cnt1:=1;33 else34 cnt1:=cnt1+1;35 end if;36 end if;37 -clk_out register clk generator-38 if(clk_inevent and clk_in=1)then39 if(cnt1=divisor2)or(cnt1=divisor)then40 cnt2=not cnt2;41 end if;42 e
50、nd if;43 clk_out=cnt2;44 end process;45 end arch;46 第六章 步進馬達控制實習VHDL數位電路實習與專題設計44陳慶逸、林柏辰編著-文魁資訊 單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習n程式與說明主程式之電路連線 圖:第六章 步進馬達控制實習VHDL數位電路實習與專題設計45陳慶逸、林柏辰編著-文魁資訊單元單元9-5 步進馬達轉向與全步半步選擇控制實習步進馬達轉向與全步半步選擇控制實習n功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入clockdir sel 腳位433738 輸出Ste