LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;USE IEEE.Std_logic_unsigned.All;USE IEEE.Std_logic_arith.All;ENTITY Dccount IS Port ( Clk : IN STD_LOGIC; AI : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CO : Out STD_LOGIC_VECTOR(3 DOWNTO 0); Pulse: IN STD_LOGIC; DriverA,DriverB: OUT STD_LOGIC; S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); P : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); Sp : Out STD_LOGIC);END Dccount;ARCHITECTURE A OF Dccount ISSIGNAL F: STD_LOGIC_VECTOR(5 Downto 0);SIGNAL F_hz: STD_LOGIC;SIGNAL OSC: STD_LOGIC;SIGNAL OSC1: STD_LOGIC;SIGNAL C: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL A: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CODE: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL Bcd:STD_LOGIC_VECTOR(23 Downto 0);SIGNAL COUNT:STD_LOGIC_VECTOR(23 Downto 0);SIGNAL SUM: STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL D: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";SIGNAL Ind_coil: STD_LOGIC_VECTOR(3 Downto 0) := "0001";SIGNAL Hz:STD_LOGIC;SIGNAL Spo: STD_LOGIC;SIGNAL SW:STD_LOGIC;SIGNAL KEY:STD_LOGIC;SIGNAL DRA,DRB:STD_LOGIC;BEGINDRIVERA<=DRA;DRIVERB<=DRB;P(5 Downto 0) <= F(5 Downto 0);CO(3 DOWNTO 0) <=C(3 DOWNTO 0);A (3 DOWNTO 0)<=AI(3 DOWNTO 0);SP<=SPO;-----------------Div------------------------PROCESS(OSC) VARIABLE D_ff: STD_LOGIC_VECTOR(20 Downto 0); VARIABLE DELAY: STD_LOGIC_VECTOR(23 DOWNTO 0); BEGIN WAIT UNTIL Clk = ''1''; IF D_ff(20 Downto 0) >= 2E6 THEN D_ff(20 Downto 0) := "000000000000000000000"; ELSE D_ff(20 Downto 0) := D_ff + 1; END IF; F_hz <= Not D_ff(6); OSC <= Not D_ff(10); OSC1 <= Not D_ff(17); IF DELAY>=500000 THEN DELAY:="000000000000000000000000";HZ<=NOT Hz; ELSE DELAY:=DELAY+1; END IF;END PROCESS ;---------------------------------------------- PROCESS (F_HZ,OSC,OSC1,HZ,PULSE) VARIABLE B: STD_LOGIC; VARIABLE INT: STD_LOGIC; VARIABLE Data: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE UP: STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE ST:STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE Seq: STD_LOGIC_VECTOR(1 DOWNTO 0); VARIABLE Sound: STD_LOGIC_VECTOR(1 DOWNTO 0); VARIABLE STOP: STD_LOGIC; VARIABLE Direction: STD_LOGIC; BEGIN---------------7seg Scan------------------------------- IF (F_HZ=''1'' AND F_HZ''EVENT) THEN IF ST(2 DOWNTO 0)= "101" THEN ST(2 DOWNTO 0):="000" ; ELSE ST(2 DOWNTO 0):=ST(2 DOWNTO 0)+1; END IF; END IF;-----------------------------------------------IF (OSC = ''1'' And OSC''EVENT) THEN If A="1111" Then IF Seq="11" Then Seq:="00" ; Else Seq:=Seq+1; End If; Else Seq:=Seq; End If;IF Seq="00" Then C(3 DOWNTO 0)<="1110" ;Elsif Seq="01" Then C(3 DOWNTO 0)<="1101" ;Elsif Seq="10" Then C(3 DOWNTO 0)<="1011" ;Elsif Seq="11" Then C(3 DOWNTO 0)<="0111" ;End If;End If;IF A="1111" THEN INT:=''0'';ELSE INT:=''1'';END IF;IF (HZ''EVENT AND HZ=''1'') THENIF STOP=''1'' THEN UP:=UP+1;ELSE UP:="000";END IF;END IF;IF KEY=''1'' AND COUNT/=0 THEN IF DIRECTION=''0'' THEN DRA<=''1'';DRB<=''0'';STOP:=''0''; ELSE DRA<=''0'';DRB<=''1'';STOP:=''0''; END IF; ELSIF KEY=''1'' AND COUNT=0 THEN STOP:=''1''; ELSIF STOP=''1'' AND UP<"110" THEN DRA<=NOT DRA ;DRB<=NOT DRB;ELSE DRA<=''0'';DRB<=''0'';STOP:=''0'';END IF;IF (OSC1''EVENT AND OSC1=''1'') THEN B:=(INT And (B And INT) );----------------Direction Choice-----------------------IF SW=''0'' AND B=''1'' AND Data(3 DOWNTO 0)="1010" THENBCD(23 DOWNTO 0)<=BCD(23 DOWNTO 0);B:=''0'';Direction:=''1'';ELSIF SW=''0'' AND B=''1'' AND Data(3 DOWNTO 0)="1011" THENBCD(23 DOWNTO 0)<=BCD(23 DOWNTO 0);B:=''0'';Direction:=''0'';------------------KEY LOCK ON/OFF------------------------------------ELSIF B=''1'' AND Data(3 DOWNTO 0)="1100" THENBCD<=BCD;B:=''0'';SW<=NOT SW;-------------------BACK-------------------------------ELSIF SW=''0'' AND B=''1'' AND Data(3 DOWNTO 0)="1101" THENBCD(23 DOWNTO 0)<=("0000" & Bcd(23 Downto 4) );B:=''0'';-------------------CLEAR---------------------------------ELSIF B=''1'' AND Data(3 DOWNTO 0)="1110" THENBCD<="000000000000000000000000" ;B:=''0'';SW<=''0'';------------------DOWNCOUNT 0 ------------------------------------ELSIF BCD=0 AND KEY=''1'' THEN SW<=''0'';KEY<=''0'';BCD<=BCD;------------------------------------------------------------------ELSIF SW=''1'' AND KEY=''1'' AND DATA(3 DOWNTO 0)/="1110" THEN BCD<=COUNT;ELSIF SW=''1'' AND DATA(3 DOWNTO 0)="1110" THEN SW<=''0'';BCD<="000000000000000000000000";KEY<=''0'';-------------------ENTER------------------------------ELSIF SW=''0'' AND B=''1'' AND Data(3 DOWNTO 0)="1111" AND BCD/=0 THENB:=''0'';SW<=''1'';KEY<=''1'';ELSIF SW=''0'' AND B=''1'' AND Data(3 DOWNTO 0)="1111" AND BCD=0 THENBCD<=BCD;B:=''0'';SW<=''0'';KEY<=''0'';----------------------NUMBER SHIFT---------------------------ELSIF SW=''0'' AND B=''1'' THEN Bcd(23 Downto 0)<= Bcd(19 Downto 0) & DATA(3 DOWNTO 0);B:=''0'';Elsif INT=''0'' Then Bcd<=Bcd;B:=''1'';END IF;END IF;------------------------------------------------------SUM(1 DOWNTO 0)<= Seq;Sum(4 Downto 2)<=Code;---------------------SOUND-----------------------------If (Osc''Event And Osc=''1'') ThenIf INT=''1'' AND SW=''0'' Then Sound:=Sound+1;Spo<=Sound(1) ;Else Spo<=''0'';End If;End If;----------------------------------------------------------------------------------DOWNCOUNT--------------------IF SW=''0'' THEN COUNT<=BCD;ELSEIf (PULSE = ''1'' And PULSE''EVENT) THENIF KEY=''1'' AND COUNT/=0 THEN----------------------------1--------------------------------------------------- IF COUNT(3 DOWNTO 0)= 0 AND COUNT(23 DOWNTO 4)>=1 THEN COUNT(3 DOWNTO 0) <="1001" ; ELSE COUNT(3 DOWNTO 0) <= COUNT(3 DOWNTO 0)-1; END IF;----------------------------2--------------------------------------------------------- IF COUNT(7 DOWNTO 4)= 0 AND COUNT(23 DOWNTO 8)>=1 AND COUNT(3 DOWNTO 0)=0 THEN COUNT(7 DOWNTO 4) <= "1001" ; ELSIF COUNT(3 DOWNTO 0)=0 AND COUNT(23 DOWNTO 4)>=1 THEN COUNT(7 DOWNTO 4) <=COUNT(7 DOWNTO 4 )-1; END IF;----------------------------3------------------------------------------------------- IF COUNT(11 DOWNTO 8)= 0 AND COUNT(23 DOWNTO 12)>=1 AND COUNT(7 DOWNTO 0)=0 THEN COUNT(11 DOWNTO 8) <="1001"; ELSIF COUNT(7 DOWNTO 0)=0 AND COUNT(23 DOWNTO 8)>=1 THEN COUNT(11 DOWNTO 8) <=COUNT(11 DOWNTO 8 )-1;END IF;---------------------------4-------------------------------------------------------------- IF COUNT(15 DOWNTO 12)= 0 AND COUNT(23 DOWNTO 16)>=1 AND COUNT(11 DOWNTO 0)=0 THEN COUNT(15 DOWNTO 12) <="1001"; ELSIF COUNT(11 DOWNTO 8)=0 AND COUNT(23 DOWNTO 12)>=1 AND COUNT(7 DOWNTO 0)=0 THEN COUNT(15 DOWNTO 12) <=COUNT(15 DOWNTO 12 )-1;END IF;-------------------------5------------------------------------------------------------ IF COUNT(19 DOWNTO 16)= 0 AND COUNT(23 DOWNTO 20)>=1 AND COUNT(15 DOWNTO 0)=0 THEN COUNT(19 DOWNTO 16) <="1001"; ELSIF COUNT(15 DOWNTO 12)=0 AND COUNT(23 DOWNTO 16)>=1 AND COUNT(11 DOWNTO 0)=0 THEN COUNT(19 DOWNTO 16) <=COUNT(19 DOWNTO 16 )-1;END IF;-------------------------6------------------------------------------------- IF COUNT(23 DOWNTO 20)= 0 THEN COUNT(23 DOWNTO 20) <="0000"; ELSIF COUNT(19 DOWNTO 16)=0 AND COUNT(23 DOWNTO 20 )>=1 AND COUNT(15 DOWNTO 0)=0 THEN COUNT(23 DOWNTO 20) <=COUNT(23 DOWNTO 20 )-1; END IF;END IF;END IF;END IF;------------------7seg Scan---------------------------CASE ST IS --?@潮 WHEN "000"=> D(3 DOWNTO 0) <= Bcd(3 DOWNTO 0) ; F(5 Downto 0)<="111110"; WHEN "001"=> D(3 DOWNTO 0) <= Bcd(7 DOWNTO 4) ; F(5 Downto 0)<="111101"; WHEN "010"=> D(3 DOWNTO 0) <= Bcd(11 DOWNTO 8) ; F(5 Downto 0)<="111011"; WHEN "011"=> D(3 DOWNTO 0) <= Bcd(15 DOWNTO 12) ; F(5 Downto 0)<="110111"; WHEN "100"=> D(3 DOWNTO 0) <= Bcd(19 DOWNTO 16) ; F(5 Downto 0)<="101111"; WHEN "101"=> D(3 DOWNTO 0) <= Bcd(23 DOWNTO 20) ; F(5 Downto 0)<="011111"; WHEN OTHERS => D(3 DOWNTO 0) <= "1100" ; F(5 Downto 0)<="111111";END CASE;------------------Key Scan-------------------------CASE A(3 DOWNTO 0) IS WHEN"1110" => CODE<="100"; WHEN"1101" => CODE<="101"; WHEN"1011" => CODE<="110"; WHEN"0111" => CODE<="111"; WHEN OTHERS => CODE<="000";End Case;---------------------Key Table------------------------CASE SUM(4 DOWNTO 0) IS WHEN"10000"=> Data:="0001";--0 WHEN"10001"=> Data:="0101";--1 WHEN"10010"=> Data:="1001";--2 WHEN"10011"=> Data:="1100";--3
导读:目前正在解读《直流电机控制器VHDL源程序》的相关信息,《直流电机控制器VHDL源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《直流电机控制器VHDL源程序》的详细说明。
简介:本文为大家提供一个直流电机控制器VHDL的源程序。
提醒:《直流电机控制器VHDL源程序》最后刷新时间 2024-03-14 01:14:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《直流电机控制器VHDL源程序》该内容的真实性请自行鉴别。