找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7931|回复: 4
打印 上一主题 下一主题
收起左侧

基于VHDL的直流电机控制系统的设计报告

[复制链接]
跳转到指定楼层
楼主
ID:263449 发表于 2018-1-17 02:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  • 题目

直流电机综合测控系统的设计

  • 直流电机驱动控制电路的功能

采用PWM控制方式对直流电机进行速度控制、旋转方向的控制和变速控制。

  • 设计要求
    • 详细说明系统工作原理与设计方案;
    • VHDL编写设计程序;
    • 给出系统仿真结果;
    • 进行硬件验证;
目    录

1 引言1
1.1 课题研究背景3
1.2 课题研究的现状4
1.3 可以主要研究内容及意义
2 PWM原理及课题原理6
2.1 PWM原理6
2.2课题原理7
3课程设计原理及模块介绍
3.1 系统总体组成及框图
3.2 电机转速控制模块
      3.2.1 设计思想及模块原理图
      3.2.2 转速模块VHDL设计语言
      3.2.3 转速模块仿真结果
3.3 正反转向控制模块
    3.3.1 设计思想及模块原理图
3.3.2 正反转向模块VHDL设计语言
3.3.3 正反转向模块仿真结果
3.4 转速测定及显示模块
3.4.1 设计思想及模块图
3.4.2 转速测定模块CHDL设计语言
3.4.3 转速测定仿真结果
3.5 消抖模块
3.5.1 设计思想及原理图
3.5.2 消抖模块VHDL设计语言
3.5.3 消抖模块仿真结果
4 硬件电路及测试结果
4.1 直流电机的介绍
4.2 红外测速模块
4.3 引脚配置
4.4 测试
5 结论34
参考文献 35
附录 36

一 引言
1.1 课题研究背景
   电机作为机电能转换装置,其范围已遍及国民经济的各个领域。近些年来,随着现代电力电子技术、控制技术和计算机技术的发展,电机的控制技术也得到了进一步的发展,电机应用已由过去简单的起停控制、提供动力为目的的应用,上升到对其速度、位置、转矩等进行精确的控制,使被驱动的机械符合预想的要求。采用功率器进行控制,将预定的控制方案、规划指令转变成期望的机械运动,这种新型控制技术已经不是传统的“电机控制”、“电气传动”而是“运动控制”。运动控制使被控制机械运动实现精确地位置控制、速度控制、加速控制、转矩或力的控制,以及这些被控制两量的综合控制。
1.2 课题研究的现状
近几年来,由于微电子技术与计算机技术的飞速发展及单片机的普及,将调速装置向密集化、小型化和智能化方向发展。国外交直流系统数字化已经达到实用阶段。由微处理器为技术核心的数字控制系统硬件电路的标准化程度高,需要成本低,并不受器件的温度漂移所引起的影响。数字控制系统能够有效的进行逻 辑判断和复杂的运算,能做到不同于一般线性调节的最优化、适应性、非线性、智能化等控制规律。如采用微机控制产生PWM信号。用微机或单片机产生PWM信号波形,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。单片机,虽然D S P 具 备生 成PWM信号及捕获电机编码器信号的能力,但其对IC生成 PWM信 号 的通 道数目及电机编码器捕获通道数目有限。对多个直流电机的控制很难满足要求。
基于现场可编程门阵列FPGA对直流电机的控制策略, 为实现电动机数字控制提供了一种有效的方法。FPGA器 件具有集成度高、体积小、运算速度快、易于修改等特点。用FPGA来实现多 路PWM调控,内部自带数模变换功能,不再需要外接数模转换设备,形式简单,误差小、控制性能强。用单片机和DSP的控制都难以达到同样的控制效果
1.3 课程的主要研究内容及意义
FPGA的开发语言(VHDL语言)是一种用于数字系统设计和测试的硬件描述语言,也是我们国家极力推广的一种标准语言。本课题是以FPGA为控制核心,学习直流电机PWM的FPGA控制,通过PWM的控制,实现对直流电机的转速测量、转速调节和转向控制。
设计直流电机控制系统能够充分发挥电机的特性,通过本课题,一方面训练我在查阅资料的基础上,了解FPGA控制的一些基本技术,掌握其控制系统的分析方法与实现;另一方面通过本次设计,设计出相应的控制系统,以实现对直流电机转速的测量、转速的调节和转向的控制,并以此培养自己的自学和动手能力,从而为今后参加工作或进一步深造打下良好的基础。
  • PWM原理及课题原理
2.1 PWM原理
脉冲宽度调制(PWM)是英文“Pulse Width Modulation”的缩写,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。
    对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。
    总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。
2.2 课题原理
一般的脉宽调制PWM信号是通过模拟比较器产生的,比较器的一端接给定的参考电压,另一端接周期性线性增加的锯齿波电压。当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时输出高电平。改变参考电压就可以改变PWM波形中高电平的宽度。若用单片机产生PWM信号波形,需要通过DA装换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。
FPGA中的数字PWM控制与一般的模拟PWM控制不同。用FPGA产生PWM波形,只需FPGA内部资源就可以实现。用数字比较器代替比较器,其一端接设定值计数器输出,另一端接线性递增计数器输出。当线性计数器的计数值小于设定值设定值时输出低电平,当计数值大于设定值时输出高电平。
  • 课程设计原理及模块介绍
3.1 系统总体组成及框图
直流电机控制电路构思如图1所示,整个设计大致有4个模块组成。

图1  直流电机控制总系统图
第一个模块是PWM脉宽调制信号发生模块。这个模块也是用来控制转速的模块,通过设计两个计数器的值,一个计数器的值是根据时钟时刻改变的,改变的时钟频率来自锁相环,这里把这个计数器叫做“时变计数器”,这是个8为计数器,输出的数据相当于锯齿波信号。另一个计数器的值是通过档位按键来决定的,按键按下一次,计数器就相应的加一或者减一,这里把这个计数器叫做“设定值计数器”。这以为是个8为计数器,其中低4位设定为恒定1111,高4为由按键控制。这两个计数模块的值通过比较,就能输出一个一定占空比的PWM波,通过设定计数器的值就能改变PWM波的占空比,这样就控制了电机的转速,于是也就通过手动按键控制电机的转速。
第二个模块是电机正反转模块。这个模块是通过按键来控制的,当按下一次按键后,电机的转向就改变一次。这个模块我是通过用状态机来实现正反转状态的改变,电机正转是一个状态,反转是一个状态,用状态机书写这个模块会使电机正反转模块更加稳定。
第三个模块是电机转速测定显示模块。本课程是通过红外光电测定转速的,这个模块的关键问题是产生一个1s的闸门时间,通过记下1s输入的脉冲数并所存,然后译码通过数码管显示在硬件电路上。如图3.1所示,外部脉冲通过消抖后,就直接进入1s输入脉冲计数器,1s结束后,把记下的脉冲数所存起来,用译码管显示出来。
第四个模块是消抖模块。消抖模块是个必不可少的模块。在本课程中,按键需要消抖,不消抖就会出现不稳定的现象,输入脉冲也需要消抖,不消抖就出现技术不准。消抖的原理是,一个需要消抖的信号,和一个高频率的脉冲信号,当消抖信号处于高电平时,高频率信号同时开始计数,当计数达到预设的计数值时,高电平仍为高电平,则这个高电平信号有效,反之如果到达计数值时消抖信号变为低电平,则这个高电平无效。同理低电平一样。
那么,由这4个模块就构成了上图的直流电机控制电路。
3.2 电机转速控制模块
3.2.1 设计思想及模块原理图
在用FPGA控制直流电机转速时,其核心是改变每个PWM周期的占空比。在这里需要产生一个设定值计数器,一个时变计数器和一个数字比较器。原理图如图2所示。
    具体地说,设定值计数器就是根据按键按下时选取的不同档位,输出一个不同的数值。本次设计速度分为十六档,每增加一档,转速相应增加,十六档时转速达到最大。据此,首先要设计一个档位调节模块,当输入不同的档位数值时,要输出一个计数值,这个数值规定了设定值计数器的输出数值。当档位增加时,设定值计数器的值相应增加,从而改变PWM信号占空比,使其占空比增大,电机转速加快。设定值计数器的输出加到比较器的一端,和时变计数器的数值进行比较。时变计数器的时钟数值来自对锁相环的分频,时钟数值能决定电机相应时间的快慢。
    实验室的电机一般都能达到100转左右,所以计数器的位数不应低于7位,若更低的话,每改变一位数,对应的转数还达不到一转,这样就不能对每一转进行细分,也就无法精确控制电机的转速。在设计中计数器位数设成了8位。
那么PWM信号的占空比具体是如何随着档位的不同而改变的呢?在前面已经设计好了一个设定值计数器和一个时变计数器,这两个数值加在数字比较器输入端进行比较,当设定值计数器的值大于时变计数器的值时,比较器输出低电平;当设定值计数器的值小于时变计数器的值时,比较器输出高电平。
因为设定值计数器的低四位恒为1,高四位由按键决定,当按键按下去一次,高四位就加1,因为这是四位,所以解释了为什么了有十六个档位。

                          图 2  电机转速模块原理图

端口介绍:
DOUT[7..0]:是8位时变计数器的输出    CIN[7..0]:是8位设定值计数器输出
DOUT[3..0]:是档位的4位输出 正好对应十六个档位     OT:比较结果
3.2.2、转速模块VHDL设计语言
PWM脉宽调制信号:发生模块当时变计数值小于设定值时输出低电平,当时变计数值大于设定值时输出高电平。 仿真结果如图3
  • LIBRARY IEEE;
  1. USE IEEE.STD_LOGIC_1164.ALL;
  2. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  3. ENTITY SQU1 IS
  4.               PORT ( CIN,ADR : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
  5.                         OT   : OUT STD_LOGIC );
  6. END SQU1;
  7. ARCHITECTURE BHV OF SQU1 IS
  8.               BEGIN
  9.               PROCESS(CIN)  BEGIN
  10.                             IF (ADR<CIN) THEN OT<='0';
  11.                             ELSE  OT<='1'; END IF;
  12.               END PROCESS;
  13. END  BHV;
复制代码
  • 8为时变计数器:这个8为计数器是根据时钟0计数的 仿真结果如图4
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY CNT8B IS
  5. PORT (CLK : IN STD_LOGIC;
  6.       DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
  7.       END CNT8B;
  8. ARCHITECTURE BHV OF CNT8B IS
  9.               BEGIN
  10. PROCESS(CLK)
  11.               VARIABLE CQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
  12. BEGIN
  13.               IF CLK'EVENT  AND CLK = '1'  THEN
  14.                             IF CQ<255 THEN               --最大计数到255
  15.                      CQ := CQ + 1 ;
  16.                             ELSE CQ := (OTHERS=>'0') ;
  17.                             END IF;
  18.               END IF;
  19.               DOUT <= CQ;
  20.               END PROCESS;
  21. END BHV;   
复制代码


  • 8为设定值计数器  仿真结果如图5
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY CNT4B IS
  5. PORT (CLK : IN STD_LOGIC;
  6.    CIN: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --8为设定值
  7.    DOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); --4位档位信号
  8.       END CNT4B;
  9. ARCHITECTURE BHV OF CNT4B IS
  10. SIGNAL CQ1 : STD_LOGIC_VECTOR(3 DOWNTO 0);
  11.               BEGIN
  12. PROCESS(CLK)
  13.               VARIABLE CQ : STD_LOGIC_VECTOR(3 DOWNTO 0);
  14. BEGIN
  15.               CQ1 <="1111";          --低四位预设为1111
  16.               IF CLK'EVENT AND CLK = '1'  THEN   --CLK上升沿到来时
  17.                             IF CQ<15 THEN
  18.                             CQ := CQ + 1 ;
  19.                             ELSE CQ := (OTHERS=>'0') ;
  20.                             END IF;
  21.               END IF;            
  22.     DOUT <=CQ(3 DOWNTO 0);
  23.     CIN  <=CQ&CQ1;
  24.               END PROCESS;
  25. END BHV;
复制代码


3.2.3、转速模块仿真结果
   由仿真结果可以看出,确实满足当时变计数值小于设定值时输出低电平,当时变计数值大于设定值输出高电平。

图3  比较器仿真图

图4 时变计数器仿真图

图5 设定计数器仿真图

3.3 正反转向控制模块
3.3.1 设计思想及原理图
    这个模块就是按键来控制电机的转向,正反向对应着2中状态,因此可以通过按键来实现状态的改变,每按一次状态改变一次。当然这里应该还有一个使能控制,可以来启动和暂停电机转动。
工作原理 当按键K1第一次按下的时候,假定令M赋值给M0,则M1应赋值为低电平,当按键第二次按下的时候,则把M赋值给M1,则M0应赋值为低电平。如此反复的就实现了电机的正转,反转。当按键K3被按下时,则电机开始转动,当K3再次被按下时,则电机停止转动。设计原理图如图6
图6 正反转模块原理图
端口介绍 M :为比较器输出的电平值
         SL :按键K1的输入端,用来控制正反转、
         M0,M1 :为电机的两个输入端。
         K : 为按键K3的输入端,用来控制电机的启动和暂停

3.3.2 正反转向模块VHDL设计语言     仿真结果如图7所示
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. use ieee.std_logic_arith.all;
  5. ENTITY SLT IS                     --M为比较值
  6.               PORT (SL, M, K : IN STD_LOGIC; --SL为正反转按键
  7.                               m0, m1: OUT STD_LOGIC );  --K为启动停止按键
  8.               END SLT;
  9. ARCHITECTURE BHV OF SLT IS
  10. TYPE FSM_ST IS (S0,S1);          --正反两种状态
  11. SIGNAL c_st, next_state: FSM_ST :=S0;
  12. BEGIN
  13. REG : PROCESS (SL)
  14. BEGIN
  15. IF SL='1'AND SL'EVENT THEN c_st <= next_state;--按键按下,次态变为现态
  16. END IF;
  17. END PROCESS REG ;
  18.   COM : PROCESS (c_st, M) BEGIN
  19.   IF K='1' THEN  m0 <='0'; m1 <='0';  --如果有高电平,那么m0,m1都为0,则电机不转
  20.   ELSE
  21.               CASE c_st IS
  22.                             WHEN S0 => m0 <= M; m1 <='0';  next_state <= S1;
  23.                             WHEN S1 => m1 <= M; m0 <='0';  next_state <= S0;
  24.               END CASE;
  25.               END IF;
  26.   END PROCESS;
  27. END BHV;
复制代码


程序分析,本模块使用状态机来实现电平的转换,K为高电平时,输出为0电机不动,低电平时,初始状态为S0,当SL有上升沿变化的时候,初态就转为次态。
3.3.3 正反转向模块仿真结果
根据图7 可知,当检测SL第一次上升沿变化的时候,M1的就和M相同,同时MO就为低电平,当检测SL第二次上升沿变化的时候,M0的就和M相同,同时M1就为低电平,其后的过程中这两种状态就交替进行。当检测到K为高电平时,M1和M2都为低电平。
图7 正反转向模块仿真图

3.4、转速测定及显示模块
3.4.1 设计思想及模块图
设计这个模块的关键问题是产生一个1s的闸门信号,记下1s钟输入的脉冲数,锁存,然后译码输出到硬件电路上。设计原理图如图8所示。
图8 转速测定模块原理图
端口介绍:
      C1: 为锁相环输出5MHz   C0: 为锁相环输出4096Hz
KIN: 为待测频率         LEDA LEDB:为所存信号输出

3.4.2转速测定模块CHDL设计语言
(1)分频模块:通过对锁相环输出的4096Hz时钟进行分频以获得1 Hz时钟,为频率计控制模块TF_CTRL提供1 S的闸门时间。程序如下:
  1. LIBRARY IEEE ;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY CNT IS
  5.               PORT(CLOCK : IN STD_LOGIC ;COUT : OUT STD_LOGIC);
  6. END ;
  7. ARCHITECTURE bhv OF  CNT IS
  8.               SIGNAL C1,C2 : STD_LOGIC_VECTOR(8 DOWNTO 0) ;
  9.                  SIGNAL M1,M2 : STD_LOGIC ;
  10.    BEGIN
  11.   PROCESS(CLOCK,C1) BEGIN
  12.               IF RISING_EDGE(CLOCK) THEN
  13.               IF (C1="111111111") THEN C1<="000000000";  ELSE C1<=C1+1; END IF;
  14.               IF (C1="000000001") THEN M1<=NOT M1;  ELSIF (C1="100000000")  THEN M1<=NOT M1;
  15.               END IF;END IF;
  16. END PROCESS;
  17. PROCESS (CLOCK,C2)  BEGIN
  18.               IF FALLING_EDGE(CLOCK)  THEN
  19.               IF(C2="111111111") THEN C2<="000000000"; ELSE C2<=C2+1;END IF;
  20.               IF(C2="000000001") THEN M2<=NOT M2 ; ELSIF (C2="100000000") THEN M2<=NOT M2;
  21. END IF;  END IF;
  22. END PROCESS;
  23.     COUT<=M1 OR M2;
  24. END bhv;
复制代码


  • 频率计控制模块:这个模块时产生测频控制信号的,TF_CTRL计数使能信号CNT_EN能产生一个1s脉宽的周期信号,并对频率计中的8位二进制电机脉冲计数器CNT10D的ENABL使能端进行同步控制,同时产生计数所存信号LOCK。程序如下:
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY TF_CTRL IS
  5. PORT (CLK1 : IN STD_LOGIC; -- 1Hz
  6. CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能
  7. CLR : OUT STD_LOGIC; -- 计数器清零
  8. LOCK : OUT STD_LOGIC ); -- 输出锁存信号
  9. END TF_CTRL;
  10. ARCHITECTURE behav OF TF_CTRL IS
  11. SIGNAL Div2CLK : STD_LOGIC;
  12. BEGIN
  13. PROCESS( CLK1 )
  14. BEGIN
  15. IF CLK1'EVENT AND CLK1 = '1' THEN
  16. Div2CLK <= NOT Div2CLK;
  17. END IF;
  18. END PROCESS;
  19. PROCESS (CLK1, Div2CLK)
  20. BEGIN
  21. IF CLK1='0' AND Div2CLK='0' THEN CLR<='1';-- 产生计数器清零信号
  22. ELSE CLR <= '0'; END IF;
  23. END PROCESS;
  24. LOCK <= NOT Div2CLK; CNT_EN <= Div2CLK;
  25. END behav;
复制代码


(3)电机脉冲计数器:当ENABL高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
  1. LIBRARY IEEE; --8位计数器
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY CNT10D IS
  5. PORT (CLK : IN STD_LOGIC; -- 时钟信号
  6. CLR : IN STD_LOGIC; -- 清零信号
  7. ENABL : IN STD_LOGIC; -- 计数使能信号
  8. COUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
  9. DOUT1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
  10. DOUT2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); -- 计数结果
  11. END CNT10D;
  12. ARCHITECTURE behav OF CNT10D IS
  13. SIGNAL CQ2 : STD_LOGIC_VECTOR(3 DOWNTO 0);
  14. SIGNAL CQ3 : STD_LOGIC_VECTOR(3 DOWNTO 0);
  15. BEGIN
  16. PROCESS(CLK, CLR, ENABL)
  17. BEGIN
  18. IF CLR = '1'
  19. THEN CQ2 <= (OTHERS=>'0'); CQ3 <= (OTHERS=>'0'); -- 清零
  20. ELSIF CLK'EVENT AND CLK = '1' THEN
  21. IF ENABL = '1' THEN
  22. IF CQ2>8 THEN CQ3<=CQ3+1; CQ2(3 DOWNTO 0)<="0000";
  23. ELSE CQ2 <=CQ2+1;
  24. END IF;
  25. END IF;
  26. END IF;
  27. END PROCESS;
  28. COUT <= CQ3&CQ2;
  29. DOUT1 <=CQ2;
  30. DOUT2 <=CQ3;
  31. END behav;
复制代码


(4)锁存模块:锁存信号LOAD的上升沿将计数器在前1秒钟的计数
值锁存进锁存器LOCK8中,设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。程序如下:
  1. LIBRARY IEEE; --8位锁存器
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. ENTITY LOCK8 IS
  4. PORT ( LK : IN STD_LOGIC;
  5. D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
  6. LEDA: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
  7. LEDB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  8. END LOCK8;
  9. ARCHITECTURE behav OF LOCK8 IS
  10. BEGIN
  11. PROCESS(LK, D)
  12. BEGIN
  13. IF LK'EVENT AND LK = '1' THEN LEDA <= D(7 DOWNTO 4);  LEDB <= D(3 DOWNTO 0);
  14. END IF;
  15. END PROCESS;
  16. END behav;
复制代码


3.4.3、 转速测定仿真结果
图9 分频模块仿真结果
图10 频率计控制模块仿真结果
图11 电机脉冲计数模块仿结果

图12计数所存模块仿真结果
3.5、 消抖模块
3.5.1、设计思想及原理图
为避免按键抖动和光耦模块产生干扰信号,按键模块和脉冲前应接入消抖模块ERZP。此消抖模块采用的是定时方式去毛刺。在本设计中,其中CLK的信号频率为5MHZ,高电平持续的时间当CLK的计数到12的时候,即为有效高电平,低电平持续的时间当CLK的计数到7的时候,即为有效低电平。原理图如图13所示
   
图13 消抖模块原理图
端口介绍:
        CLK: 消抖模块的时钟
        KIN: 输入的信号
        KOUT: 消抖后的信号
3.5.2、消抖模块VHDL设计语言
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY ERZP IS
  5.               PORT(CLK,KIN : IN STD_LOGIC;
  6.                                 KOUT : OUT STD_LOGIC );
  7.               END;
  8. ARCHITECTURE BHV OF ERZP IS
  9.               SIGNAL KL,KH : STD_LOGIC_VECTOR(3 DOWNTO 0);
  10.               BEGIN
  11.               PROCESS(CLK,KIN,KL,KH )  BEGIN
  12.                             IF CLK'EVENT AND CLK = '1' THEN
  13.                                           IF(KIN='0') THEN KL<=KL+1;
  14.                                           ELSE KL<="0000";   END IF;
  15.                       IF(KIN='1') THEN KH<=KH+1;
  16.                                           ELSE KH<="0000";   END IF;
  17.                                           IF(KH>"0101") THEN  KOUT<='1';
  18.                                           ELSIF (KL>"0101") THEN KOUT<='0';
  19.                                           END IF;   END IF;
  20.                             END PROCESS;
  21.               END;
复制代码


3.5.3 消抖模块仿真结果
图14  消抖模块仿真结果

word格式的完整设计报告51黑下载地址:
基于VHDL的直流电机控制系统.7z (113.49 KB, 下载次数: 79)

本设计的完整的源码下载地址:
http://www.51hei.com/bbs/dpj-105339-1.html


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:263449 发表于 2018-1-17 02:44 | 只看该作者
文件有点大 其余部分在另一个包
回复

使用道具 举报

板凳
ID:284246 发表于 2018-2-16 21:44 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
ID:649915 发表于 2019-11-28 16:14 来自手机 | 只看该作者
搂主,你在吗?
回复

使用道具 举报

5#
ID:989497 发表于 2021-12-11 19:40 | 只看该作者
好像不完整啊楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表