菜单
  

    USE IEEE.STD_LOGIC_Arith.ALL;
    USE IEEE.STD_LOGIC_Unsigned.ALL;
    ENTITY moto_test IS
    PORT(
    clock_48M:        IN     STD_LOGIC;    --系统时钟(48MHz)
    key:        IN     STD_LOGIC_VECTOR(2 DOWNTO 0);--按键输入(key1~key3)
    pwm_in:        IN  STD_LOGIC;        --产生的PWM波输入
    pwm_en:        OUT STD_LOGIC;        --PWM控制使能端
    duty_cycle:    OUT    STD_LOGIC_VECTOR(3 DOWNTO 0);--PWM占空比控制输出
    motoa,motob:OUT STD_LOGIC;        --PWM波输出
    led:        OUT STD_LOGIC_VECTOR(4 DOWNTO 0)
    );
    END;
    ARCHITECTURE one OF moto_test IS
    SIGNAL dout1,dout2,dout3:STD_LOGIC_VECTOR(2 DOWNTO 0);--消抖寄存器
    SIGNAL moto_dir:        STD_LOGIC;--电机正反转
    SIGNAL k_debounce:        STD_LOGIC_VECTOR(2  DOWNTO 0);--按键消抖输出
    SIGNAL clk:                STD_LOGIC;--分频时钟
    SIGNAL key_edge:        STD_LOGIC_VECTOR(2  DOWNTO 0);
    BEGIN
    PROCESS(clock_48M)
    VARIABLE count:    STD_LOGIC_VECTOR(4 DOWNTO 0):="00000";--时钟分频计数器
    BEGIN
        IF RISING_EDGE(clock_48M) THEN
          IF count<20 THEN  --(仿真)    
                count:=count+1;
                clk<='0';
            ELSE
              count:=B"0_0000";  --(仿真)
                clk<='1';
            END IF;
        END IF;
    END PROCESS;
    PROCESS(clock_48M)--按键1 控制电动机速度
    VARIABLE duty_cycle_io:    STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
    VARIABLE pwm_en_io:     STD_LOGIC  :='0';
    BEGIN
        IF (RISING_EDGE(clock_48M)) THEN
            IF (key(0)='1') THEN
                duty_cycle_io:=duty_cycle_io+1;
            END IF;
            IF(key(1)='1') THEN  --按键2,控制电动机启动、停止
                pwm_en_io:='1';
            ELSE
                pwm_en_io:='0';    
            END IF;    
        END IF;
        duty_cycle <= duty_cycle_io;
        pwm_en <= pwm_en_io;
        led<=NOT (pwm_en_io & duty_cycle_io);--LED输出状态指示
    END PROCESS;
    PROCESS(clock_48M)--按键3,控制电动机正/反转
    BEGIN
        IF RISING_EDGE(clock_48M) THEN
            IF key(2)='1' THEN
                moto_dir <=NOT moto_dir;
            END IF;
        END IF;
    END PROCESS;
    motoa<=pwm_in WHEN moto_dir='1' ELSE '0';
    motob<='0' WHEN moto_dir='1' ELSE pwm_in;
    END;
    (3)VHDL程序分析
  1. 上一篇:基于FPGA的线阵CCD驱动设计+源代码
  2. 下一篇:视频深度图像的产生和编码+文献综述
  1. 基于多指标决策的通信网...

  2. VHDL+EDA波形发生器设计

  3. 基于过期CSI的多天线中继选择系统设计与仿真

  4. SPCE061A基于DDS的正弦信号发生器设计+PCB电路图

  5. STM32基于WIFI通信的数字温湿度监测系统设计

  6. 基于粒子群算法的软件可靠性模型参数估计

  7. 基于串口通信的抢答器仿真设计+电路图+程序

  8. 高警觉工作人群的元情绪...

  9. NFC协议物理层的软件实现+文献综述

  10. 上市公司股权结构对经营绩效的影响研究

  11. 浅析中国古代宗法制度

  12. 中国传统元素在游戏角色...

  13. 现代简约美式风格在室内家装中的运用

  14. 江苏省某高中学生体质现状的调查研究

  15. g-C3N4光催化剂的制备和光催化性能研究

  16. 巴金《激流三部曲》高觉新的悲剧命运

  17. C++最短路径算法研究和程序设计

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回