直流电机控制器VHDL源程序

来源:本站
导读:目前正在解读《直流电机控制器VHDL源程序》的相关信息,《直流电机控制器VHDL源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《直流电机控制器VHDL源程序》的详细说明。
简介:本文为大家提供一个直流电机控制器VHDL的源程序。

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源程序》最后刷新时间 2024-03-14 01:14:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《直流电机控制器VHDL源程序》该内容的真实性请自行鉴别。