步进马达控制实习_第1页
步进马达控制实习_第2页
步进马达控制实习_第3页
步进马达控制实习_第4页
步进马达控制实习_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

步進馬達控制實習VHDL數位電路實習與專題設計文魁資訊-UE301陳慶逸、林柏辰編著---文魁資訊1VHDL數位電路實習與專題設計內容大綱單元9-1步進馬達全步控制(一相激磁)實習單元9-2步進馬達全步控制(二相激磁)實習單元9-3步進馬達半步控制(一二相激磁)實習單元9-4步進馬達轉向控制實習單元9-5步進馬達轉向與全步半步選擇控制實習單元9-6步進馬達轉速控制實習單元9-7步進馬達步進數控制實習陳慶逸、林柏辰編著---文魁資訊2VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習相關知識四相式步進馬達驅動示意圖4相6線式步進馬達陳慶逸、林柏辰編著---文魁資訊3VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習相關知識(續)一個四相步進馬達的工作方式如下圖所示;其中線圈接點所連接的開關是以脈波控制電晶體的飽和或截止加以實現。陳慶逸、林柏辰編著---文魁資訊4VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習相關知識(續)而在一般的實驗中,我們常常拿內含四組NPN達靈頓電晶體的FT5754元件來驅動步進馬達,達靈頓電晶體在B極輸入正電壓而導通飽和時,可以放大C極端從線圈往下流通的電流,電源能否提供足夠的電流來驅動步進馬達會影響到步進馬達的轉速與力矩。FT5754外觀及內部結構如下所示:

陳慶逸、林柏辰編著---文魁資訊5VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習相關知識(續)當採用FT5754的達靈頓對電晶體來作為連接步進馬達的開關時,其電路的結構如下所示:陳慶逸、林柏辰編著---文魁資訊6VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習相關知識(續)一相激磁的作法是控制每次只有一個線圈有電流通過,當四個線圈輪流動作時,步進馬達便能開始轉動。一相激磁的控制順序如下表所列:

線圈控制狀態轉動方向順時針逆時針11000201003001040001陳慶逸、林柏辰編著---文魁資訊7VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊8VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習

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

11entitystepmotor_fullais12port(13clk:instd_logic;14step:outstd_logic_vector(3downto0)15);16endstepmotor_fulla;1718architecturearchofstepmotor_fullais19signalcnt:std_logic_vector(1downto0);20begin2122----------process---------23process(clk)24begin25ifclk'eventandclk='1'then26cnt<=cnt+1;27endif;28endprocess;

29step<="1000"whencnt=0else30"0100"whencnt=1else31"0010"whencnt=2else32"0001";33endarch;

陳慶逸、林柏辰編著---文魁資訊9VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊10VHDL數位電路實習與專題設計

單元9-1步進馬達全步控制(一相激磁)實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊11VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習功能模擬與CPLD下載驗證

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

輸入clock

腳位43

輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整JumperJ2的位置由IO0~IO3拉出激磁信號線接上5V

直流電源進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumperJ2由原本的1、2PIN腳(InternalI/OON)改套到2、3PIN腳上(ExternalI/OON),再從實驗板右邊CON1上將IO0~IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。陳慶逸、林柏辰編著---文魁資訊12VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)~setp(0)):陳慶逸、林柏辰編著---文魁資訊13VHDL數位電路實習與專題設計單元9-1步進馬達全步控制(一相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clock

腳位55

輸出Step(3)Step(2)Step(1)Step(0)腳位37383941陳慶逸、林柏辰編著---文魁資訊14VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習相關知識二相激磁的控制方法是每次都讓兩個線圈通過電流,每一個步驟可以移動一個步進角:

線圈控制狀態轉動方向順時針逆時針11100201103001141001陳慶逸、林柏辰編著---文魁資訊15VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊16VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習

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

12entitystepmotor_fullbis13port(14clk:instd_logic;15step:outstd_logic_vector(3downto0)16);17endstepmotor_fullb;1819architecturearchofstepmotor_fullbis20signalcnt:std_logic_vector(1downto0);21begin2223----------process---------24process(clk)25begin26ifclk'eventandclk='1'then27cnt<=cnt+1;28endif;29endprocess;3031step<="1100"whencnt=0else32"0110"whencnt=1else33"0011"whencnt=2else34"1001";35endarch;陳慶逸、林柏辰編著---文魁資訊17VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊18VHDL數位電路實習與專題設計

單元9-2步進馬達全步控制(二相激磁)實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊19VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習功能模擬與CPLD下載驗證

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

輸入clock

腳位43

輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整JumperJ2的位置由IO0~IO3拉出激磁信號線接上5V

直流電源進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumperJ2由原本的1、2PIN腳(InternalI/OON)改套到2、3PIN腳上(ExternalI/OON),再從實驗板右邊CON1上將IO0~IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。陳慶逸、林柏辰編著---文魁資訊20VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)~setp(0)):陳慶逸、林柏辰編著---文魁資訊21VHDL數位電路實習與專題設計單元9-2步進馬達全步控制(二相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clock

腳位55

輸出Step(3)Step(2)Step(1)Step(0)腳位37383941陳慶逸、林柏辰編著---文魁資訊22VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習相關知識一二相激磁的作法是以一相激磁和二相激磁來交替控制,在定子繞組切換激磁線圈電壓時,仍有一個線圈上有電流通過,可保持一定的力矩以維持運轉上的平穩,而其耗電量又比二相激磁來得節省。一二相激磁每次可以移動半個步進角,其激磁的控制順序如下:

線圈控制狀態轉動方向順時針逆時針1100021100301004011050010600117000181001陳慶逸、林柏辰編著---文魁資訊23VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊24VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習

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

12entitystepmotor_halfis13port(14clk:instd_logic;15step:outstd_logic_vector(3downto0)16);17endstepmotor_half;1819architecturearchofstepmotor_halfis20signalcnt:std_logic_vector(2downto0);21begin2223----------process---------24process(clk)25begin26ifclk'eventandclk='1'then27cnt<=cnt+1;28endif;29endprocess;3031step<="1000"whencnt=0else32"1100"whencnt=1else33"0100"whencnt=2else34"0110"whencnt=3else35"0010"whencnt=4else36"0011"whencnt=5else37"0001"whencnt=6else38"1001";39endarch;

陳慶逸、林柏辰編著---文魁資訊25VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊26VHDL數位電路實習與專題設計

單元9-3步進馬達半步控制(一二相激磁)實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊27VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習功能模擬與CPLD下載驗證

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

輸入clock

腳位43

輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整JumperJ2的位置由IO0~IO3拉出激磁信號線接上5V

直流電源進行步進馬達實驗時,我們需要把CPLD的I/O延伸出來以外接FT5754和步進馬達等周邊元件,因此我們可以將FPT-3實驗板上的jumperJ2由原本的1、2PIN腳(InternalI/OON)改套到2、3PIN腳上(ExternalI/OON),再從實驗板右邊CON1上將IO0~IO3這幾個PIN腳跳線到麵包板上即可得到所需的激磁信號。另外FT5754和步進馬達線圈共同點所需的電源必須與實驗板上接出來的信號具有共同的地電位,這也是實驗中要留意的地方。陳慶逸、林柏辰編著---文魁資訊28VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板欲將程式檔案燒錄於力浦電子LP-2900實驗板時,我們必須由實驗板上拉出FT5754和步進馬達所需的正、負電源,並由CPLD-EPF10K10CHIP-BOARD上預留的焊孔以單心線拉出激磁信號(step(3)~setp(0)):陳慶逸、林柏辰編著---文魁資訊29VHDL數位電路實習與專題設計單元9-3步進馬達半步控制(一二相激磁)實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clock

腳位55

輸出Step(3)Step(2)Step(1)Step(0)腳位37383941陳慶逸、林柏辰編著---文魁資訊30VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習相關知識本實驗中,我們將設計一個可以控制上、下數計數功能的DIR鍵來控制步進馬達一相激磁之正反轉上、下數動作之控制程式碼的寫法如下:

ifclk'eventandclk='1'thenifdir='1'thencnt<=cnt+1;elsecnt<=cnt-1;endif;endif;

陳慶逸、林柏辰編著---文魁資訊31VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊32VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習

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

11entitystepmotor_diris12port(13clk:instd_logic;14dir:instd_logic;15step:outstd_logic_vector(3downto0)16);17endstepmotor_dir;1819architecturearchofstepmotor_diris20signalcnt:std_logic_vector(1downto0);21begin2223----------process---------24process(clk)25begin26ifclk'eventandclk='1'then27ifdir='1'then28cnt<=cnt+1;29else30cnt<=cnt-1;31endif;32endif;33endprocess;3435step<="1000"whencnt=0else36"0100"whencnt=1else37"0010"whencnt=2else38"0001";39endarch;

陳慶逸、林柏辰編著---文魁資訊33VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊34VHDL數位電路實習與專題設計

單元9-4步進馬達轉向控制實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊35VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習功能模擬與CPLD下載驗證

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

輸入clockdir

腳位4337

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

直流電源正反轉控制

陳慶逸、林柏辰編著---文魁資訊36VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板

陳慶逸、林柏辰編著---文魁資訊37VHDL數位電路實習與專題設計單元9-4步進馬達轉向控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clock

dir

腳位5547

輸出Step(3)Step(2)Step(1)Step(0)腳位37383941陳慶逸、林柏辰編著---文魁資訊38VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習相關知識本實驗中,我們以DIR鍵來控制步進馬達之正反轉動作;另外再利用sel鍵來作步進馬達全步控制或半步控制的選擇。實驗功能DIR=‘1’時,步進馬達正轉;DIR=‘0’時,步進馬達反轉。Sel=‘1’時,執行全步控制(二相激磁);Sel=‘0’時,執行半步控制(一二相激磁)。陳慶逸、林柏辰編著---文魁資訊39VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊40VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習

程式與說明步進馬達轉向與全步半步選擇控制程式碼12entitystepmotor_dirselis13port(14clk:instd_logic;15dir:instd_logic;16sel:instd_logic;17step:outstd_logic_vector(3downto0)18);19endstepmotor_dirsel;2021architecturearchofstepmotor_dirselis22signalcnt:std_logic_vector(2downto0);23begin2425process(clk)26begin27ifclk'eventandclk='1'then28ifdir='1'then29cnt<=cnt+1;30else31cnt<=cnt-1;32endif;endif;34endprocess;3536process(cnt,sel)37begin38ifsel='1'then39casecntis40when"000"=>step<="1100";41when"001"=>step<="0110";42when"010"=>step<="0011";43when"011"=>step<="1001";44when"100"=>step<="1100";45when"101"=>step<="0110";46when"110"=>step<="0011";47when"111"=>step<="1001";48whenothers=>null;49endcase;50else陳慶逸、林柏辰編著---文魁資訊41VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習程式與說明步進馬達轉向與全步半步選擇控制程式碼(續)51casecntis52when"000"=>step<="1000";53when"001"=>step<="1100";54when"010"=>step<="0100";55when"011"=>step<="0110";56when"100"=>step<="0010";57when"101"=>step<="0011";58when"110"=>step<="0001";59when"111"=>step<="1001";60whenothers=>null;61endcase;62endif;63endprocess;64endarch;

陳慶逸、林柏辰編著---文魁資訊42VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊43VHDL數位電路實習與專題設計

單元9-5步進馬達轉向與全步半步選擇控制實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊44VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習功能模擬與CPLD下載驗證

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

輸入clockdir

sel

腳位433738

輸出Step(3)Step(2)Step(1)Step(0)腳位4568調整JumperJ2的位置由IO0~IO3拉出激磁信號線接上5V

直流電源正反轉控制

全半步控制

陳慶逸、林柏辰編著---文魁資訊45VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板

陳慶逸、林柏辰編著---文魁資訊46VHDL數位電路實習與專題設計單元9-5步進馬達轉向與全步半步選擇控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clock

dir

sel

腳位5547

48

輸出Step(3)Step(2)Step(1)Step(0)腳位37383941陳慶逸、林柏辰編著---文魁資訊47VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習相關知識以一般的計數器除N之除頻電路來說,1KHz(1000Hz)的頻率除一所得到的頻率為1000Hz、除二得到500Hz、除三得到333Hz、除四得到250Hz、除五得到200Hz、…,除八得到125Hz,我們可以很清楚的發現除N的除頻電路所得到的頻率切割結果並非是均勻分布的。陳慶逸、林柏辰編著---文魁資訊48VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習積分除頻電路若改以連續累加某一數值的方式來執行積分計算時,每當計數器的最高位元發生變化時(0變1或1變0),就送出一個CLK信號,便可使得不同除頻器之間所分割的頻率變成較為均勻的分布。首先,我們先實現下面的積分除頻電路,並從分析幾個例子的時序圖來分析與理解積分除頻電路的原理:6entitystepmotor_speedisport(clk:instd_logic;--輸入週期時脈spd:instd_logic_vector(2downto0);--輸入連續累加值clk_new:outstd_logic);--輸出CLK信號10endstepmotor_speed;1112architecturearchofstepmotor_speedissignalbuf:std_logic_vector(3downto0);--四位元積分器14signaldly:std_logic;15begin16----------process---------17process(clk)18begin19ifclk'eventandclk='1'then20dly<=buf(3);--延遲電路buf<=buf+('0'&spd);--積分器加上預設之輸入累加值22endif;23endprocess;24clk_new<=(buf(3)xor

dly)andnotclk;--輸出微分電路2627endarch;陳慶逸、林柏辰編著---文魁資訊49VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習積分除頻電路(續)Buf3在8個時脈週期中總共發生了4次的0->1或1->0的變化。利用微分的原理,讓Buf3的值每發生一次0、1的變化時就送出一個CLK。8個時脈中共送出4個CLK。0110011001011010Buf3在8個時脈週期中總共發生了6次的0->1或1->0的變化。利用微分的原理,讓Buf3的值每發生一次0、1的變化時就送出一個CLK。8個時脈中共送出6個CLK。積分除頻電路動作原理(累加值為4)積分除頻電路動作原理(累加值為6)陳慶逸、林柏辰編著---文魁資訊50VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習積分除頻電路(續)積分除頻電路所得到的頻率分割曲線陳慶逸、林柏辰編著---文魁資訊51VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習實驗電路圖陳慶逸、林柏辰編著---文魁資訊52VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習

程式與說明步進馬達轉速控制程式碼12entitystepmotor_speedis13port(14clk:instd_logic;15spd:instd_logic_vector(3downto0);16step:outstd_logic_vector(3downto0)17);18endstepmotor_speed;1920architecturearchofstepmotor_speedis21signalbuf:std_logic_vector(4downto0);22signaldly:std_logic;23signalclk_new:std_logic;24signalcnt:std_logic_vector(1downto0);25begin26----------process---------27process(clk)28begin29ifclk'eventandclk='1'then30dly<=buf(4);31buf<=buf+('0'&spd);32endif;33endprocess;34clk_new<=(buf(4)xordly)andnotclk;

35process(clk_new)36begin37ifclk_new'eventandclk_new='1'then38cnt<=cnt+1;39endif;40endprocess;41step<="1000"whencnt=0else42"0100"whencnt=1else43"0010"whencnt=2else44"0001";45endarch;

陳慶逸、林柏辰編著---文魁資訊53VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習程式與說明除頻器程式碼(將1.8432MHz除頻產生50Hz輸出):13entityclk_div_stepis14generic(divisor:integer:=36864);15port(16clk_in:instd_logic;17clk_out:outstd_logic18);19endclk_div_step;2021architecturearchofclk_div_stepis22signalcnt2:std_logic;23begin24----------clkdivider----------25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-----upcounter-----30if(clk_in'eventandclk_in='1')then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;35endif;

36endif;37-----clk_outregisterclkgenerator-----38if(clk_in'eventandclk_in='1')then39if((cnt1=divisor2)or(cnt1=divisor))then40cnt2<=notcnt2;41endif;42endif;43clk_out<=cnt2;44endprocess;45endarch;46陳慶逸、林柏辰編著---文魁資訊54VHDL數位電路實習與專題設計

單元9-6步進馬達轉速控制實習程式與說明主程式之電路連線圖:陳慶逸、林柏辰編著---文魁資訊55VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習功能模擬與CPLD下載驗證

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

輸入clockSpd(3)Spd(2)Spd(1)Spd(0)腳位4336(DIP5)1(DIP6)44(DIP7)2(DIP8)輸出Step(3)Step(2)Step(1)Step(0)

腳位4568

轉速控制調整JumperJ2的位置由IO0~IO3拉出激磁信號線陳慶逸、林柏辰編著---文魁資訊56VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板

陳慶逸、林柏辰編著---文魁資訊57VHDL數位電路實習與專題設計單元9-6步進馬達轉速控制實習功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)此外,LP-2900實驗板上所提供的振盪時脈為10MHz,我們想要除頻產生50Hz的計數時脈信號就必需將除頻器程式碼(clk_div_step.vhd)中的divisor設定為200000(100000000Hz/200000=50Hz)-------------------------------------------------------------------entityclk_div_stepisgeneric(divisor:integer:=200000);--將divisor設定為200000

port(clk_in:instd_logic;clk_out:outstd_logic);endclk_div_step;----------------------------------------------------------------------------

輸入clockSpd(3)Spd(2)Spd(1)Spd(0)腳位5547(SW1)48(SW2)49(SW3)51(SW4)輸出Step(3)Step(2)Step(1)Step(0)

腳位37383941

陳慶逸、林柏辰編著---文魁資訊58VHDL數位電路實習與專題設計單元9-7步進馬達步進數控制實習相關知識由於其輸入的激磁脈波與輸出的角度成正比關係,因此只要決定步進馬達的步進數就能將之應用在定位控制上程式中之步進馬達使用一相激磁的全步控制,我們設定pos為一個四位元大小的輸入值,它可決定步進馬達一相激磁的循環(->->->)次數。例如當pos=8時,步進馬達應可移動8x4(一個循環為四個激磁脈波)=32個步進數。cnt_p在程式中記錄著步進馬達全步控制的循環次數,每當完成一個循環的激磁動作之後其值就累加1,直到cnt_p<pos這個條件不成立時即便停止動作。陳慶逸、林柏辰編著---文魁資訊59VHDL數位電路實習與專題設計單元9-7步進馬達步進數控制實習實驗功能設定不同的pos輸入值(四位元),步進馬達便會在執行完pos數值大小的激磁循環週期後停止。實驗電路圖

陳慶逸、林柏辰編著---文魁資訊60VHDL數位電路實習與專題設計單元9-7步進馬達步進數控制實習

程式與說明步進馬達轉速控制程式碼12entitystepmotor_positionis13port(14clk:instd_logic;15pos:instd_logic_vector(3downto0);16step:outstd_logic_vector(3downto0)17);18endstepmotor_position;1920architecturearchofstepmotor_positionis21signalcnt:std_logic_vector(1downto0);22signalcnt_p:std_logic_vector(3downto0);23begin24----------process---------

25process(clk)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论