Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
步进电机控制器.vhd
Package: VHDL 的实例程序,共44个.rar [view]
Upload User: easylife05
Upload Date: 2013-03-21
Package Size: 42k
Code Size: 3k
Category:
VHDL-FPGA-Verilog
Development Platform:
C/C++
- -- dowload from: www.fpga.com.cn & www.pld.com.cn
- LIBRARY IEEE;
- USE IEEE.std_logic_1164.ALL;
- USE IEEE.std_logic_unsigned.ALL;
- USE IEEE.std_logic_arith.ALL;
- ENTITY step_motor IS
- PORT(
- f, p, d: IN STD_LOGIC:='0';
- speed : in STD_LOGIC_VECTOR(1 downto 0);
- coil : OUT STD_LOGIC_VECTOR(3 downto 0)
- );
- END step_motor;
- ARCHITECTURE behavior OF step_motor IS
- SIGNAL ind_coil: STD_LOGIC_VECTOR(3 downto 0) := "0001";
- SIGNAL clk_scan: STD_LOGIC;
- SIGNAL PHASE,DIRECTION:STD_LOGIC;
- signal t:std_logic_vector(3 downto 0);
- signal comp:integer range 0 to 2500 ;
- SIGNAL osc:STD_LOGIC;
- BEGIN
- coil <= t;
- process(f,osc)
- variable delay:integer range 0 to 50;
- begin
- if (f'event and f='1') then
- if delay>=50 then delay:=0;osc<=not osc;
- else delay:=delay+1;
- end if;
- end if;
- if (osc'event and osc='1') then
- case speed is
- when "10" => if comp<2500 then comp<=comp+1;
- else comp<=comp;
- end if;
- when "01" => if comp>2 then comp<=comp-1;
- else comp<=comp;
- end if;
- when others => if comp<2 then comp<=2;
- else comp<=comp;
- end if;
- end case;
- end if;
- end process;
- PROCESS
- VARIABLE d_ff: integer range 0 to 2500;
- BEGIN
- WAIT UNTIL f = '1';
- if d_ff >= comp then
- d_ff :=0; clk_scan <= not CLK_SCAN;
- else
- d_ff := d_ff + 1;
- end if;
- END PROCESS ;
- PROCESS(F)
- VARIABLE B:STD_LOGIC;
- BEGIN
- IF (F'EVENT AND F='1') THEN B:=(P and (b and P) );
- IF B='1' THEN PHASE<=NOT PHASE ;B:='0';
- ELSIF P='0' THEN PHASE<=PHASE;B:='1';
- END IF;
- END IF;
- END PROCESS;
- PROCESS(F)
- VARIABLE B:STD_LOGIC;
- BEGIN
- IF (F'EVENT AND F='1') THEN B:=(D and (b and D) );
- IF B='1' THEN DIRECTION<=NOT DIRECTION ;B:='0';
- ELSIF D='0' THEN DIRECTION<=DIRECTION;B:='1';
- END IF;
- END IF;
- END PROCESS;
- motor:
- process
- begin
- --if (clk_scan'event and clk_scan='1') then
- WAIT UNTIL clk_scan= '0';
- CASE phase IS
- WHEN '1' =>
- IF direction = '0' THEN
- IF ((ind_coil = "1001") or (ind_coil = "0000")) THEN
- ind_coil <= "0001";
- ELSE
- ind_coil <= (ind_coil(2 downto 0) & ind_coil(3));
- END IF;
- ELSE
- IF ((ind_coil = "1001") or (ind_coil = "0000")) THEN
- ind_coil <= "1000";
- ELSE
- ind_coil <= (ind_coil(0) & ind_coil(3 downto 1));
- END IF;
- END IF;
- WHEN OTHERS =>
- ind_coil<=IND_COIL;
- END CASE;
- t<=not ind_coil;
- END PROCESS motor;
- END behavior;