步進馬達控制實習

67
步步步步步步步步 VHDL 步步步步步步步步步步步 步步步步 -UE301

description

步進馬達控制實習. VHDL 數位電路實習與專題設計 文魁資訊 -UE301. 內容大綱. 單元9-1 步進馬達全步控制(一相激磁)實習 單元9-2 步進馬達全步控制(二相激磁)實習 單元9-3 步進馬達半步控制(一二相激磁)實習 單元9-4 步進馬達轉向控制實習 單元9-5 步進馬達轉向與全步半步選擇控制實習 單元9-6 步進馬達轉速控制實習 單元9-7 步進馬達步進數控制實習. 單元9-1 步進馬達全步控制(一相激磁)實習. 相關知識 四相式步進馬達驅動示意圖. 4相6線式步進馬達. 單元9-1 步進馬達全步控制(一相激磁)實習. - PowerPoint PPT Presentation

Transcript of 步進馬達控制實習

Page 1: 步進馬達控制實習

第第 六六 章章

步進馬達控制實習

VHDL 數位電路實習與專題設計文魁資訊 -UE301

Page 2: 步進馬達控制實習

VHDL數位電路實習與專題設計 2---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

內容大綱

單元 9-1 步進馬達全步控制(一相激磁)實習 單元 9-2 步進馬達全步控制(二相激磁)實習 單元 9-3 步進馬達半步控制(一二相激磁)實習 單元 9-4 步進馬達轉向控制實習 單元 9-5 步進馬達轉向與全步半步選擇控制實習 單元 9-6 步進馬達轉速控制實習 單元 9-7 步進馬達步進數控制實習

Page 3: 步進馬達控制實習

VHDL數位電路實習與專題設計 3---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

相關知識 四相式步進馬達驅動示意圖

N

S

A A

B

B

+V

+V

A

A

B B

轉子

4 相 6 線式步進馬達

Page 4: 步進馬達控制實習

VHDL數位電路實習與專題設計 4---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

相關知識 ( 續 ) 一個四相步進馬達的工作方式如下圖所示;其中線圈接點所連接

的開關是以脈波控制電晶體的飽和或截止加以實現。

VA A B B

Page 5: 步進馬達控制實習

VHDL數位電路實習與專題設計 5---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

相關知識 ( 續 ) 而在一般的實驗中,我們常常拿內含四組 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

Page 6: 步進馬達控制實習

VHDL數位電路實習與專題設計 6---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

A

A B B

5V

C1 C3 C2 C4

B1 B2 B3 B4

Vcc

Vcc

GND

GND

5V

220Ωx4

相關知識 ( 續 ) 當採用 FT5754 的達靈頓對電晶體來作為連接步進馬達的開關時,其電路

的結構如下所示:

Page 7: 步進馬達控制實習

VHDL數位電路實習與專題設計 7---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

相關知識 ( 續 ) 一相激磁的作法是控制每次只有一個線圈有電流通過,當四個線圈輪流

動作時,步進馬達便能開始轉動。一相激磁的控制順序如下表所列:

A B A B

  線圈控制狀態 轉動方向

順時針 逆時針

1 1 0 0 0

2 0 1 0 0

3 0 0 1 0

4 0 0 0 1

Page 8: 步進馬達控制實習

VHDL數位電路實習與專題設計 8---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

實驗電路圖

/A

EPM7064S/LCC44

4568

43

I/OI/OI/OI/O

I/GCLK1

STEP3

0

/B

STEP0STEP1

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+

A

CLOCK

STEP2

MOTOR STEPPER

123

4 5 6

VCC

B

Page 9: 步進馬達控制實習

VHDL數位電路實習與專題設計 9---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

 

程式與說明 步進馬達全步控制(一相激磁) 程式碼

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 begin21

22 ---------- process ---------23 process(clk)24 begin25 if clk'event 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;

Page 10: 步進馬達控制實習

VHDL數位電路實習與專題設計 10---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 11: 步進馬達控制實習

VHDL數位電路實習與專題設計 11---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-1 步進馬達全步控制(一相激磁)實習 程式與說明

主程式之電路連線圖:

Page 12: 步進馬達控制實習

VHDL數位電路實習與專題設計 12---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入clock

 

 

 

腳位43

 

 

 

輸出Step(3)

Step(2)

Step(1)

Step(0)

腳位4

5

6

8

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

接上 5V  直流電源

進行步進馬達實驗時,我們需要把 CPLD 的 I/O 延伸出來以外接 FT5754 和步進馬達等周邊元件,因此我們可以將 FPT-3 實驗板上的 jumper J2 由原本的 1 、 2 PIN 腳( Internal I/O ON )改套到 2 、 3 PIN 腳上( External I/O ON ),再從實驗板右邊CON1 上將 IO0~IO3 這幾個 PIN 腳跳線到麵包板上即可得到所需的激磁信號。另外 FT5754 和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。

Page 13: 步進馬達控制實習

VHDL數位電路實習與專題設計 13---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板 欲將程式檔案燒錄於力浦電子 LP-2900 實驗板時,我們必須由實驗板

上拉出 FT5754 和步進馬達所需的正、負電源,並由 CPLD-EPF10K10 CHIP-BOARD 上預留的焊孔以單心線拉出激磁信號( step(3)~setp(0) ):

Page 14: 步進馬達控制實習

VHDL數位電路實習與專題設計 14---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-1 步進馬達全步控制(一相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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)

Step(0)

腳位

37

38

39

41

Page 15: 步進馬達控制實習

VHDL數位電路實習與專題設計 15---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習

相關知識 二相激磁的控制方法是每次都讓兩個線圈通過電流,每一個步驟可以移

動一個步進角 :

A B A B

  線圈控制狀態 轉動方向

順時針 逆時針

1 1 1 0 0

2 0 1 1 0

3 0 0 1 1

4 1 0 0 1

A

Page 16: 步進馬達控制實習

VHDL數位電路實習與專題設計 16---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習

實驗電路圖

/A

EPM7064S/LCC44

4568

43

I/OI/OI/OI/O

I/GCLK1

STEP3

0

/B

STEP0STEP1

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+

A

CLOCK

STEP2

MOTOR STEPPER

123

4 5 6

VCC

B

Page 17: 步進馬達控制實習

VHDL數位電路實習與專題設計 17---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習

 

程式與說明 步進馬達全步控制(二相激磁) 程式碼

12 entity stepmotor_fullb is13 port(14 clk : in std_logic;15 step: out std_logic_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 begin22

23 ---------- process ---------24 process(clk)25 begin26 if clk'event 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 else33 "0011" when cnt=2 else34 "1001";35 end arch;

Page 18: 步進馬達控制實習

VHDL數位電路實習與專題設計 18---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 19: 步進馬達控制實習

VHDL數位電路實習與專題設計 19---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-2 步進馬達全步控制(二相激磁)實習 程式與說明

主程式之電路連線 圖:

Page 20: 步進馬達控制實習

VHDL數位電路實習與專題設計 20---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入clock

 

 

 

腳位43

 

 

 

輸出Step(3)

Step(2)

Step(1)

Step(0)

腳位4

5

6

8

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

接上 5V  直流電源

進行步進馬達實驗時,我們需要把 CPLD 的 I/O 延伸出來以外接 FT5754 和步進馬達等周邊元件,因此我們可以將 FPT-3 實驗板上的 jumper J2 由原本的 1 、 2 PIN 腳( Internal I/O ON )改套到 2 、 3 PIN 腳上( External I/O ON ),再從實驗板右邊CON1 上將 IO0~IO3 這幾個 PIN 腳跳線到麵包板上即可得到所需的激磁信號。另外 FT5754 和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。

Page 21: 步進馬達控制實習

VHDL數位電路實習與專題設計 21---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板 欲將程式檔案燒錄於力浦電子 LP-2900 實驗板時,我們必須由實驗板

上拉出 FT5754 和步進馬達所需的正、負電源,並由 CPLD-EPF10K10 CHIP-BOARD 上預留的焊孔以單心線拉出激磁信號( step(3)~setp(0) ):

Page 22: 步進馬達控制實習

VHDL數位電路實習與專題設計 22---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-2 步進馬達全步控制(二相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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)

Step(0)

腳位

37

38

39

41

Page 23: 步進馬達控制實習

VHDL數位電路實習與專題設計 23---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習 相關知識

一二相激磁的作法是以一相激磁和二相激磁來交替控制,在定子繞組切換激磁線圈電壓時,仍有一個線圈上有電流通過,可保持一定的力矩以維持運轉上的平穩,而其耗電量又比二相激磁來得節省。一二相激磁每次可以移動半個步進角,其激磁的控制順序如下:

A B A B

  線圈控制狀態 轉動方向順時針 逆時針

1 1 0 0 0

2 1 1 0 0

3 0 1 0 0

4 0 1 1 0

5 0 0 1 0

6 0 0 1 1

7 0 0 0 1

8 1 0 0 1

Page 24: 步進馬達控制實習

VHDL數位電路實習與專題設計 24---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習

實驗電路圖

/A

EPM7064S/LCC44

4568

43

I/OI/OI/OI/O

I/GCLK1

STEP3

0

/B

STEP0STEP1

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+

A

CLOCK

STEP2

MOTOR STEPPER

123

4 5 6

VCC

B

Page 25: 步進馬達控制實習

VHDL數位電路實習與專題設計 25---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習

 

程式與說明 步進馬達半步控制(一二相激磁) 程式碼

12 entity stepmotor_half is13 port(14 clk : in std_logic;15 step: out std_logic_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 clk'event and clk='1' then27 cnt <= cnt+1;28 end if;29 end process;30

31 step <= "1000" when cnt=0 else32 "1100" when cnt=1 else33 "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;

Page 26: 步進馬達控制實習

VHDL數位電路實習與專題設計 26---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 27: 步進馬達控制實習

VHDL數位電路實習與專題設計 27---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-3 步進馬達半步控制(一二相激磁)實習 程式與說明

主程式之電路連線 圖:

Page 28: 步進馬達控制實習

VHDL數位電路實習與專題設計 28---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入clock

 

 

 

腳位43

 

 

 

輸出Step(3)

Step(2)

Step(1)

Step(0)

腳位4

5

6

8

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

接上 5V  直流電源

進行步進馬達實驗時,我們需要把 CPLD 的 I/O 延伸出來以外接 FT5754 和步進馬達等周邊元件,因此我們可以將 FPT-3 實驗板上的 jumper J2 由原本的 1 、 2 PIN 腳( Internal I/O ON )改套到 2 、 3 PIN 腳上( External I/O ON ),再從實驗板右邊CON1 上將 IO0~IO3 這幾個 PIN 腳跳線到麵包板上即可得到所需的激磁信號。另外 FT5754 和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。

Page 29: 步進馬達控制實習

VHDL數位電路實習與專題設計 29---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板 欲將程式檔案燒錄於力浦電子 LP-2900 實驗板時,我們必須由實驗板

上拉出 FT5754 和步進馬達所需的正、負電源,並由 CPLD-EPF10K10 CHIP-BOARD 上預留的焊孔以單心線拉出激磁信號( step(3)~setp(0) ):

Page 30: 步進馬達控制實習

VHDL數位電路實習與專題設計 30---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-3 步進馬達半步控制(一二相激磁)實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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)

Step(0)

腳位

37

38

39

41

Page 31: 步進馬達控制實習

VHDL數位電路實習與專題設計 31---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習

相關知識 本實驗中,我們將設計一個可以控制上、下數計數功能的 DIR鍵來控制

步進馬達一相激磁之正反轉

上、下數動作之控制程式碼的寫法如下: if clk'event and clk='1' then if dir='1' then cnt <= cnt+1; else cnt <= cnt-1; end if; end if;

Page 32: 步進馬達控制實習

VHDL數位電路實習與專題設計 32---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習

實驗電路圖

EPM7064S/LCC44

4568

43

37

I/OI/OI/OI/O

I/GCLK1

I/O

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+DIR

B

STEP1

STEP3

MOTOR STEPPER

123

4 5 6

STEP0

A

/B

STEP2

0

CLOCK

VCC

/A

SW1

VCC

Page 33: 步進馬達控制實習

VHDL數位電路實習與專題設計 33---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習

 

程式與說明 步進馬達轉向控制程式碼

11 entity stepmotor_dir is12 port(13 clk : 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 begin

26 if clk'event and clk='1' then27 if dir='1' then28 cnt <= cnt+1;29 else30 cnt <= cnt-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;

Page 34: 步進馬達控制實習

VHDL數位電路實習與專題設計 34---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 35: 步進馬達控制實習

VHDL數位電路實習與專題設計 35---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-4 步進馬達轉向控制實習 程式與說明

主程式之電路連線 圖:

Page 36: 步進馬達控制實習

VHDL數位電路實習與專題設計 36---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入clock

dir  

 

 

腳位43

37

 

 

輸出Step(3)

Step(2)

Step(1)

Step(0)

腳位4

5

6

8

進行步進馬達實驗時,我們需要把 CPLD 的 I/O 延伸出來以外接 FT5754 和步進馬達等周邊元件,因此我們可以將 FPT-3 實驗板上的 jumper J2 由原本的 1 、 2 PIN 腳( Internal I/O ON )改套到 2 、 3 PIN 腳上( External I/O ON ),再從實驗板右邊CON1 上將 IO0~IO3 這幾個 PIN 腳跳線到麵包板上即可得到所需的激磁信號。另外 FT5754 和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

接上 5V  直流電源

正反轉控制

Page 37: 步進馬達控制實習

VHDL數位電路實習與專題設計 37---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板

Page 38: 步進馬達控制實習

VHDL數位電路實習與專題設計 38---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-4 步進馬達轉向控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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

 dir

 

 

腳位

55

47 

 

 

輸出

Step(3)

Step(2)

Step(1)

Step(0)

腳位

37

38

39

41

Page 39: 步進馬達控制實習

VHDL數位電路實習與專題設計 39---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習

相關知識 本實驗中,我們以 DIR鍵來控制步進馬達之正反轉動作;另外再利用 sel鍵來作步進馬達全步控制或半步控制的選擇。

實驗功能 DIR=‘1’ 時,步進馬達正轉; DIR=‘0’ 時,步進馬達反轉。 Sel=‘1’ 時,執行全步控制(二相激磁); Sel=‘0’ 時,執行半步控制(一

二相激磁)。

Page 40: 步進馬達控制實習

VHDL數位電路實習與專題設計 40---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習

實驗電路圖

/A

STEP3

SEL

STEP1

B

MOTOR STEPPER

123

4 5 6

A

STEP0

SW2

STEP2

/B

SW1

VCCCLOCK

VCC

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+DIR

EPM7064S/LCC44

4568

43

3739

I/OI/OI/OI/O

I/GCLK1

I/OI/O

0

Page 41: 步進馬達控制實習

VHDL數位電路實習與專題設計 41---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習

 

程式與說明 步進馬達轉向與全步半步選擇控制程式碼

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_dirsel;2021 architecture arch of stepmotor_dirsel is22 signal cnt : std_logic_vector(2 downto 0);23 begin2425 process(clk)26 begin27 if clk'event and clk='1' then28 if dir='1' then29 cnt <= cnt+1;30 else31 cnt <= cnt-1;32 end if;

33 end if;34 end process;3536 process(cnt,sel)37 begin38 if sel = '1' then39 case cnt is40 when "000"=>step<="1100";41 when "001"=>step<="0110";42 when "010"=>step<="0011";43 when "011"=>step<="1001";44 when "100"=>step<="1100";45 when "101"=>step<="0110";46 when "110"=>step<="0011";47 when "111"=>step<="1001";48 when others => null;49 end case;50 else

Page 42: 步進馬達控制實習

VHDL數位電路實習與專題設計 42---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習 程式與說明

步進馬達轉向與全步半步選擇控制程式碼 ( 續 )

51 case cnt is52 when "000"=>step<="1000";53 when "001"=>step<="1100";54 when "010"=>step<="0100";55 when "011"=>step<="0110";56 when "100"=>step<="0010";57 when "101"=>step<="0011";58 when "110"=>step<="0001";59 when "111"=>step<="1001";60 when others => null;61 end case;62 end if;63 end process;64 end arch;

Page 43: 步進馬達控制實習

VHDL數位電路實習與專題設計 43---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 44: 步進馬達控制實習

VHDL數位電路實習與專題設計 44---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-5 步進馬達轉向與全步半步選擇控制實習 程式與說明

主程式之電路連線 圖:

Page 45: 步進馬達控制實習

VHDL數位電路實習與專題設計 45---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 FPT-3 實驗板

輸入clock

dir  

sel 

 

腳位43

3738 

 

輸出Step(3)

Step(2)

Step(1)

Step(0)

腳位4

5

6

8

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

接上 5V  直流電源

正反轉控制

全半步控制

Page 46: 步進馬達控制實習

VHDL數位電路實習與專題設計 46---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板

Page 47: 步進馬達控制實習

VHDL數位電路實習與專題設計 47---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-5 步進馬達轉向與全步半步選擇控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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

 dir

sel 

 

腳位

55

47 

48 

 

輸出

Step(3)

Step(2)

Step(1)

Step(0)

腳位

37

38

39

41

Page 48: 步進馬達控制實習

VHDL數位電路實習與專題設計 48---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

相關知識 以一般的計數器除 N 之除頻電路來說, 1KHz ( 1000Hz )的頻率除一

所得到的頻率為 1000Hz 、除二得到 500Hz 、除三得到 333Hz 、除四得到 250Hz 、除五得到 200Hz …、 ,除八得到 125Hz ,我們可以很清楚的發現除 N 的除頻電路所得到的頻率切割結果並非是均勻分布的。

1 2 3 4 5 6 7 8100

200

300

400

500

600

700

800

900

1000

Hz

N=1

N=2

N=3

N=4 N=5

N=6 N=7 N=8

Page 49: 步進馬達控制實習

VHDL數位電路實習與專題設計 49---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習 積分除頻電路

若改以連續累加某一數值的方式來執行積分計算時,每當計數器的最高位元發生變化時( 0變 1 或 1變 0 ),就送出一個 CLK 信號,便可使得不同除頻器之間所分割的頻率變成較為均勻的分布。

首先,我們先實現下面的積分除頻電路,並從分析幾個例子的時序圖來分析與理解積分除頻電路的原理 :

6 entity stepmotor_speed is7 port( clk : in std_logic; -- 輸入週期時脈8 spd : in std_logic_vector(2 downto 0); -- 輸入連續累加值9 clk_new: out std_logic); -- 輸出 CLK 信號10 end stepmotor_speed;1112 architecture arch of stepmotor_speed is13 signal buf: std_logic_vector (3 downto 0); -- 四位元積分器14 signal dly : std_logic;15 begin

16 ---------- process ---------17 process(clk)18 begin19 if clk'event and clk='1' then20 dly <= buf(3); -- 延遲電路21 buf <= buf +('0' & spd); --積分器加上預設之輸入累加值22 end if;23 end process;2425 clk_new<=(buf(3) xor dly) and not clk; -- 輸出微分電路2627 end arch;

Page 50: 步進馬達控制實習

VHDL數位電路實習與專題設計 50---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習 積分除頻電路 ( 續 )

Buf3 在 8 個時脈週期中總共發生了 4次的 0->1 或 1->0 的變化。

利用微分的原理,讓 Buf3 的值每發生一次 0、 1 的變化時就送出一個 CLK 。 8 個時脈中共送出 4 個 CLK 。

0 1 1 0 0 1 1 0

0 1 0 1 1 0 1 0

Buf3 在 8 個時脈週期中總共發生了 6 次的0->1 或 1->0 的變化。

利用微分的原理,讓 Buf3 的值每發生一次 0 、1 的變化時就送出一個 CLK 。 8 個時脈中共送出 6 個 CLK 。

積分除頻電路動作原理(累加值為 4 )

積分除頻電路動作原理(累加值為 6 )

Page 51: 步進馬達控制實習

VHDL數位電路實習與專題設計 51---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

積分除頻電路 ( 續 ) 積分除頻電路所得到的頻率分割曲線

1 2 3 4 5 6 7 8100

200

300

400

500

600

700

800

900

1000

Hz

N=1

N=2

N=3

N=4

N=5

N=6

N=7

N=8

Page 52: 步進馬達控制實習

VHDL數位電路實習與專題設計 52---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

實驗電路圖

SPD3

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+

SPD1

STEP0

STEP3

SPD2

A

STEP1

CLOCK

MOTOR STEPPER

123

4 5 6

SW DIP-8

B

VCCSPD0

VCC

/A

/B

EPM7064S/LCC44

4568

43

361442

I/OI/OI/OI/O

I/GCLK1

I/OI/OI/OI/O

STEP2

Page 53: 步進馬達控制實習

VHDL數位電路實習與專題設計 53---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

 

程式與說明 步進馬達轉速控制程式碼

12 entity stepmotor_speed is13 port(14 clk : in std_logic;15 spd : in std_logic_vector(3 downto 0);16 step: out std_logic_vector(3 downto 0)17 ); 18 end stepmotor_speed;19 20 architecture arch of stepmotor_speed is21 signal buf: std_logic_vector (4 downto 0);22 signal dly : std_logic;23 signal clk_new: std_logic;24 signal cnt : std_logic_vector(1 downto 0);25 begin

26 ---------- process ---------27 process(clk)28 begin29 if clk'event and clk='1' then30 dly <= buf(4);31 buf <= buf +('0' & spd);32 end if;33 end process;34 clk_new<=(buf(4) xor dly) and not clk;

35 process(clk_new)36 begin37 if clk_new'event and clk_new='1' then38 cnt <= cnt+1;39 end if;40 end process;41 step <= "1000" when cnt=0 else42 "0100" when cnt=1 else43 "0010" when cnt=2 else44 "0001";45 end arch;

Page 54: 步進馬達控制實習

VHDL數位電路實習與專題設計 54---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 55: 步進馬達控制實習

VHDL數位電路實習與專題設計 55---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-6 步進馬達轉速控制實習 程式與說明

主程式之電路連線 圖:

Page 56: 步進馬達控制實習

VHDL數位電路實習與專題設計 56---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入clock

Spd(3)

Spd(2)

Spd(1)

Spd(0)

腳位43

36(DIP5)

1(DIP6)

44(DIP7)

2(DIP8)

輸出Step(3)

Step(2)

Step(1)

Step(0)

 

腳位4

5

6

8

 

轉速控制

調整 Jumper J2 的位置

由 IO0~IO3 拉出激磁信號線

Page 57: 步進馬達控制實習

VHDL數位電路實習與專題設計 57---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板

Page 58: 步進馬達控制實習

VHDL數位電路實習與專題設計 58---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-6 步進馬達轉速控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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

Spd(3)Spd(2)Spd(1)Spd(0)

腳位55

47(SW1)

48(SW2)

49(SW3)

51(SW4)

輸出Step(3)

Step(2)

Step(1)

Step(0)

 

腳位37

38

39

41

 

Page 59: 步進馬達控制實習

VHDL數位電路實習與專題設計 59---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習

相關知識 由於其輸入的激磁脈波與輸出的角度成正比關係,因此只要決定步進馬

達的步進數就能將之應用在定位控制上

程式中之步進馬達使用一相激磁的全步控制,我們設定 pos 為一個四位元大小的輸入值,它可決定步進馬達一相激磁的循環( ->->-> )次數。例如當 pos=8 時,步進馬達應可移動 8x4 (一個循環為四個激磁脈波)=32 個步進數。 cnt_p 在程式中記錄著步進馬達全步控制的循環次數,每當完成一個循環的激磁動作之後其值就累加 1 ,直到 cnt_p<pos 這個條件不成立時即便停止動作。

Page 60: 步進馬達控制實習

VHDL數位電路實習與專題設計 60---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習

實驗功能 設定不同的 pos 輸入值(四位元),步進馬達便會在執行完 pos

數值大小的激磁循環週期後停止。

SW DIP-8

MOTOR STEPPER

123

4 5 6

POS2

CLOCK

/B

STEP1 /A

VCC

A

POS3

VCC

STEP3

POS0

FT5754

95

67

812

31 2

4

1110

C3B2

GNDGND

B3B4

V+B1 C1

C2

C4V+

POS1

STEP0

B

STEP2

EPM7064S/LCC44

4568

43

361442

I/OI/OI/OI/O

I/GCLK1

I/OI/OI/OI/O

實驗電路圖

Page 61: 步進馬達控制實習

VHDL數位電路實習與專題設計 61---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習

 

程式與說明 步進馬達轉速控制程式碼

12 entity stepmotor_position is13 port(14 clk : in std_logic;15 pos : in std_logic_vector(3 downto 0);16 step: out std_logic_vector(3 downto 0)17 );18 end stepmotor_position;1920 architecture arch of stepmotor_position is21 signal cnt : std_logic_vector(1 downto 0);22 signal cnt_p: std_logic_vector(3 downto 0);23 begin24 ---------- process ---------

25 process(clk)26 begin27 if clk'event and clk='1' then28 if cnt_p < pos then29 if cnt = 3 then30 cnt_p<=cnt_p+1;31 cnt <= "00";32 else33 cnt <= cnt+1;34 end if;35 end if;36 end if;37 end process;38 step <= "1000" when cnt=0 else39 "0100" when cnt=1 else40 "0010" when cnt=2 else41 "0001";42 end arch;

Page 62: 步進馬達控制實習

VHDL數位電路實習與專題設計 62---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習 程式與說明

除頻器程式碼(將 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_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_in'event 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_in'event 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

Page 63: 步進馬達控制實習

VHDL數位電路實習與專題設計 63---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

 

單元 9-7 步進馬達步進數控制實習 程式與說明

主程式之電路連線 圖:

Page 64: 步進馬達控制實習

VHDL數位電路實習與專題設計 64---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 FPT-3 實驗板

輸入 腳位 輸出 腳位clock 43 Step(3) 4

Pos(3)

36(DIP5) Step(2) 5

Pos(2)

1(DIP6) Step(1) 6

Pos(1)

44(DIP7) Step(0) 8

Pos(0)

2(DIP8)    

調整 Jumper J2的位置

由 IO0~IO3 拉出激磁信號線

步進數控制

Page 65: 步進馬達控制實習

VHDL數位電路實習與專題設計 65---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習 功能模擬與 CPLD 下載驗證

燒錄於力浦電子 LP-2900 實驗板

Page 66: 步進馬達控制實習

VHDL數位電路實習與專題設計 66---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

單元 9-7 步進馬達步進數控制實習

功能模擬與 CPLD 下載驗證 燒錄於力浦電子 LP-2900 實驗板 ( 續 )

此外, 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)

Pos(3)

47(SW1) Step(2)

Pos(2)

48(SW2) Step(1)

Pos(1)

49(SW3) Step(0)

Pos(0)

51(SW4)  

腳位37

38

39

41

 

Page 67: 步進馬達控制實習

VHDL數位電路實習與專題設計 67---陳慶逸、林柏辰編著 文魁資訊

第六章 步進馬達控制實習

勘誤 6-61 34 列 clk_new<=(buf(4) xor dly) and not clk;