直流电机测控_第1页
直流电机测控_第2页
直流电机测控_第3页
直流电机测控_第4页
直流电机测控_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 直流电机控制仪直流电机测控仪摘要控制直流电机转速常采用脉冲宽度调制(Pulse Width Modulation ,PWM)控制方法,所谓PWM控制是采用周期的方波,通过控制高电位的占空比来控制直流电机所获得的有效平均电压以控制直流电机的转速。在电机外部加入了一个开关型的霍尔器件,同时在转子的转盘上加入一个能够使霍尔器件产生输出的磁钢片来进行测速。本设计简单而言是通过FPGA对4*4键盘扫描,获取当前的按键值来控制方波的占空比并在点阵LED上显示速度级别;同时FPGA对霍尔元件发送的脉冲数计数,控制8位led显示支流电机的转速。设计简单可分为时钟信号控制模块、计数模块、显示模块和键盘模块。关

2、键词:EDA;PWM直流电机速度控制;键盘扫描;目 录1 绪论41.1 背景41.2 FPGA发展前景41.3 课程设计任务62 系统设计62.1 总体设计62.2 直流电机与霍尔器件驱动72.3 键盘驱动92.4 8位7段数码管的驱动102.5 16*16点LED阵列驱动112.6 外加扩充性硬件驱动113 程序设计123.1 总体程序设计思路123.2 时钟控制信号程序设计123.3 十进制计数器程序设计133.4 键盘扫描程序设计143.5 锁存模块程序设计153.6 PWM控制信号程序设计163.7 显示模块程序设计173.8 彩色LED及报警控制模块驱动设计184 遇到的问题与设计体

3、会194.1 遇到的问题及解决方案194.2 扩展设想204.3 设计体会21参考文献22附录23附录A23附录B241 绪论1.1 背景目前以高速集成硬件描述语言(VHDL)所完成的电路设计,可以经过简 单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接

4、起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。1.2 FPGA发展前景 FPGA技术正处于高速发展时

5、期,新型芯片的规模越来越大,成本也越来越低,低端的FPGA已逐步取代了传统的数字元件,高端的FPGA不断在争夺ASIC的市场份额。先进的ASIC生产工艺已经被用于FPGA的生产,越来越丰富的处理器内核被嵌入到高端的FPGA芯片中,基于FPGA的开发成为一项系统级设计工程。随着半导体制造工艺的不同提高,FPGA 的集成度将不断提高,制造成本将不断降低,其作为替代ASIC 来实现电子系统的前景将日趋光明。(1) 大容量、低电压、低功耗FPGA大容量FPGA 是市场发展的焦点。FPGA 产业中的两大霸主:Altera和Xilinx在超大容量FPGA上展开了激烈的竞争。2007年Altera推出了65

6、nm工艺的StratixIII系列芯片,其容量为67200个L E (Logic Element,逻辑单元),Xilinx推出的65nm工艺的VitexVI系列芯片,其容量为33792个Slices (一个Slices约等于2个L E)。采用深亚微米(DSM)的半导体工艺后,器件在性能提高的同时,价格也在逐步降低。由于便携式应用产品的发展,对FPGA 的低电压、低功耗的要日益迫切。因此,无论那个厂家、哪种类型的产品,都在瞄准这个方向而努力。(2) 系统级高密度FPGA随着生产规模的提高,产品应用成本的下降,FPGA 的应用已经不是过去的仅仅适用于系统接口部件的现场集成,而是将它灵活地应用于系统

7、级(包括其核心功能芯片)设计之中。在这样的背景下,国际主要FPGA 厂家在系统级高密度FPGA 的技术发展上,主要强调了两个方面:FPGA 的IP( Intellec2tual Property ,知识产权)硬核和IP软核。当前具有IP内核的系统级FPGA的开发主要体现在两个方面:一方面是FPGA 厂商将IP硬核(指完成版图设计的功能单元模块)嵌入到FPGA 器件中,另一方面是大力扩充优化的IP软核(指利用HDL语言设计并经过综合验证的功能单元模块),用户可以直接利用这些预定义的、经过测试和验证的IP 核资源,有效地完成复杂的片上系统设计。(3) FPGA和ASIC出现相互融合虽然标准逻辑AS

8、IC 芯片尺寸小、功能强、功耗低,但其设计复杂,并且有批量要求。FPGA价格较低廉,能在现场进行编程,但它们体积大、能力有限,而且功耗比ASIC大。正因如此,FPGA和ASIC正在互相融合,取长补短。随着一些ASIC制造商提供具有可编程逻辑的标准单元,FPGA 制造商重新对标准逻辑单元发生兴趣。(4) 动态可重构FPGA动态可重构FPGA是指在一定条件下芯片不仅具有在系统重新配置电路功能的特性,而且还具有在系统动态重构电路逻辑的能力。对于数字时序逻辑系统,动态可重构FPGA的意义在于其时序逻辑的发生不是通过调用芯片内不同区域、不同逻辑资源来组合而成,而是通过对FPGA 进行局部的或全局的芯片逻

9、辑的动态重构而实现的。动态可重构FPGA在器件编程结构上具有专门的特征,其内部逻辑块和内部连线的改变,可以通过读取不同的SRAM中的数据来直接实现这样的逻辑重构,时间往往在纳秒级,有助于实现FPGA系统逻辑功能的动态构。1.3 课程设计任务本课程设计中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板直流电机与步进电机模块等资源,实现一个直流电机测控仪。(1)基本技能掌握:1 掌握时钟作用下频率的控制2 掌握十进制计数器的设计3 掌握16位的锁存器的设计4 掌握显示译码功能的设计(2)基本功能要求1 利用旋转电位器实现转速的控制2 利用PWM信

10、号实现转速的控制3 利用8位动态七段码管显示实现转速的显示(3)扩展功能选择性要求1 利用4×4键盘阵列实现键盘转速的控制2 利用16*16点阵显示实现转速级别的显示2 系统设计2.1 总体设计直流电机测控仪总体设计硬件由图2.1所示,FPGA为Altera公司的EP2C35系列,输入设备有时钟、4*4键盘、霍尔器件和警报控制开关。时钟采用1MHZ,4*4键盘给FPGA输入一个4位数组信号,霍尔器件输入计数脉冲。输出设备有直流电机、8位7段字符LED数码管、16*16点阵LED、3个彩色LED和扬声器,直流电机可采用直接由旋钮控制转速或者PWM控制转速,8位7段字符LED数码管显示每

11、分钟转速,16*16点阵LED显示速度级别,3个彩色LED显示当前速度安全状态,扬声器为当直流电机速度超过警戒速度用于报警。霍尔器件时钟1MHZFPGA直流电机警报控制开关8位7段字符LED数码管4*4键盘16*16点阵LED3个彩色LED扬声器图2.1:总体设计硬件框架图2.2 直流电机与霍尔器件驱动将直流电源通过电刷接通电枢绕组,使电枢导体有电流流过, 由于电磁作用,这样电枢导体将会产生磁场。同时产生的磁场与主磁极的的磁场产生电磁力,这个电磁力作用于转子,使转子以一定的速度开始旋转,这样电机就开始工作。图2.2:直流电机结构图为了能够测定出电机在单位时间内转子旋转了多少个周期,我们在电机的

12、外部电路中加入了一个开关型的霍尔器件,同时在电子转子上的转盘上加入了一个能够使霍尔原件产生输出的带有磁场的磁钢片。当电机旋转时,带动转盘是的磁钢片一起旋转,当磁钢片旋转到霍尔器件的上方时,可以导致霍尔器件的输出端高电平变为低电平。当磁钢片转过霍尔器件上方后,霍尔器件的输出端又恢复高电平输出。这样电机每旋转一周,则会使霍尔器件的输出端产生一个低脉冲,我们就可以通过检测单位时间内霍尔器件输出端低脉冲的个数来推算出直流电机在单位时间内的转速。直流电机和开关型霍尔器件的电路原理图如下图2.3所示:图2.3:直流电机、霍尔器件电路图直流电机驱动有两种方式,其一是可以由模拟电平来驱动,把电路图上4与3短接

13、,可以旋转实验箱左边的旋钮,调节旋钮的可以控制速度;其二是通过PWM控制,把电路图的6与5短接,PWM信号高电位选通三极管,让直流电机转动,不过为了让直流电机获得较大的转速,同样要把电机左边的旋钮调到比较大的位置。2.3 键盘驱动对键盘的电位扫描,就可以确定当前的键有没有被按下。单个按键电路如图2.4所示,在按键没有被按下时,在判断电位点可以获取高电位,在键被按下时,在判断电位为低电位,这样可以通过判断点电位的高低即可确定按键有没有被按下。图2.4:单个按键电路图4*4的键盘与FPGA连接图如下图3.4所示,扫描键盘由FPGA的8个控制端口确定,控制行端口设置为buffer模式,控制列端口设置

14、为in模式,扫描键盘的方法为先给第一行键盘为低电平,其余行列为高电平,读取纵列的电位值,如果没键被按下,在电位判断端口获取的为高电位,如果有键按下,电位判断点的电平不全为零,由电位值的第几位为零就可以确定当前行那个键被按下,依次对四行键盘扫描,扫描结束输出4位数组的信号,以告诉那个键被按下。图2.5: 4*4键盘电路图2.4 8位7段数码管的驱动七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图2.6所示。高点平点亮数码管相应的数码段。图2.6 :静态七段数码管图2.7:8位7段数码管的驱动如图2.7 的8位7段数码管的连

15、接,由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。2.5 16*16点LED阵列驱动单个的LED的电路如下图2.8所示,对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光。也就是LED点阵对应的这个点被点亮。 图2.8:单个LED电路图本设计要完成速度级别(0到

16、15)在点阵LED上的显示, 16*16点阵LED扫描的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列。图2.9:16*16点阵硬件图16*16点阵LED驱动时,依次选通LED点阵行端口,每次只能选通一个端口(Cn),字符译码的第N列结果在列端口(Rn)输入,通过高速依次点亮led点阵就可看到led点阵上显示的数字。2.6 外加扩充性硬件驱动(1) 扬声器的驱动图2.10:扬声器硬件图本设计产生的声音由1KHZ的频率驱动,蜂鸣器的叫声响一秒挺一秒,而且外加警报控制开关,只有在外加警报闭合开关

17、关闭才能禁止蜂鸣叫声。(2) 彩色LED驱动设计当中采用了红、绿、蓝3个彩色LED显示速度级别,小于2000r/m时点亮绿LED,高于4000r/min时点亮红LED,介于2000r/m与4000r/m时点亮蓝色LED。3 程序设计3.1 总体程序设计思路程序总体设计分为时钟控制信号模块、十进制计数模块、显示模块、键盘模块、pwm控制模块、十六位锁存模块、彩色led及蜂鸣器控制模块。设计思路为十进制计数器对霍尔器件的脉冲数计数,时钟控制在到了六秒时将计数值锁存到16位锁存器,显示模块的7段数码管显示锁存器所锁存的值,同时键盘模块送出键盘所按得键值,由点阵LED显示数值。3.2 时钟控制信号程序

18、设计时钟控制信号中药为下级锁存模块提供锁存控制型号,同时为计数模块提使能和清零信号,为蜂鸣器提供1khz的时钟。设计当中由Cnttemp对1MHZ的上升缘计数来产生1HZ的信号(Cnttemp<5000送出高电平,Cnttemp>5000送出低电平),Count对秒信号计数,锁存控制信号在第六秒结束时送出,清零信号在第7秒送出,所以要先产生秒脉冲。时钟控制流程如图3.7所示:Clk1hz=1Clk1hz=1Cnttemp<50000Cnttemp=0Cnttemp+1Cnttemp当前计数是否到了99999 1M的时钟Count与6比较 是 否Enal=0Clr=1Load=

19、0Enal=0Clr=0Load=1Enal=1Clr=0Load=0 小于 等于 大于 输出图3.1:时钟控制信号流程图注:Enal为输出控制计数器的使能信号。Clr为输出控制计数器的清零信号。Load为输出控制锁存器的锁存信号。3.3 十进制计数器程序设计设计当中要显示当前直流电机的转速,因而要4位十进制的计数器,对转速脉冲计数。设计当中只需要设计一位十进制的计数器,设计当中特别注意对进位脉冲的处理。设计流程如下:Count=”1001”Clr=0ena=1计数脉冲Coun<=“0000”Count<=count+1 是 是 否输出计数值输出进位脉冲图3.2:十进制计数器程序设

20、计流程图注:CLR为外部输入的清零信号。 ENA为外部输入的计数使能信号。十进制计数器对计数脉冲计数,当计数值到了9时,计数值重新到零,同时在归零的同时输出进位脉冲。3.4 键盘扫描程序设计PWM控制直流电机是通过扫描键盘的按键来控制方波的占空比,所按得键值越来,方波的占空比越大,最高可达15/16,最低为0。键盘扫描输出为一个4为的数组。扫描简单的来所就是给行低电平,看列获得的电位就可确定在此行所按下的键。大体流程如下:时钟1MHZ输入Count+1Count<=0Count=2扫描第三行Count=1扫描第二行Count=3Count=3扫描第四行Count=0扫描第一行 是 否判断

21、按键输出相应键值判断按键输出相应键值图3.3:键盘扫描流程图键盘模块大体设计思路为,由信号COUNT对时钟0到3循环计数,在CONT=N时对第N列扫描,判断列端电位,确定当前按键的键位,输出键值。3.5 锁存模块程序设计Load=116位锁存模块设计较为简单,只有在控制信号为高电平时锁存当前输入的信号值,在低电平时保持锁存被锁存的输入信号。DIN<=DINDIN<=IN 是 否OUT<=DIN图3.4: 16位锁存器设计流程注:IN为16位输入信号,OUT为16位输出信号,LOAD为输入锁存信号。信号DIN对IN信号进行保存,只有在LOAD=1时才把IN信号保存到DIN,DI

22、N再传递给OUT。3.6 PWM控制信号程序设计PWM控制信号为驱动直流电机转速的使能信号,PWM控制由四个输入信号控制pwm的占空比,本设计当中最高为15/16,由控制信号”1111”获得,最低为0,由控制信号”0000”获得。流程如下:时钟1MHZCount=0Count=16000是PWM=1PWM=0Count+1;datatcoun=datain*1000否输出pwm控制信号图3.5:PWM控制流程图注:DATAIN为输入数据大小COUNT对时钟从0到16000循环计数,当COUNT=0时把输出电平置为高电平,COUNT=输入值*1000时把输出电平置为低电平,这样就可以通过外部输入

23、控制占空比,从而控制直流电机的转速。3.7 显示模块程序设计显示模块分为两部分,分别为8位7段数码管led和16*16点阵LED,由于硬件连接的冲突(7段数码管的7段与点阵led的列的低8列连接在FPGA的统一管脚),因此把这两个显示部分在统一模块在驱动,分时段分别驱动8位7段数码管led和16*16点阵LED。COUNT<=”00000”COUNT=”10111”显示第十六列LED点阵COUNT=”01000”显示第一列LED点阵COUNT=”00111”显示第八位LEDCOUNT=”00000”显示第一位LEDCOUNT+1COUNT=”10111”时钟1MHZ 是 否图3.6:显示

24、模块程序流程显示程序中,我们把十进制计数器的百、十、个位数输入,分别在8位7段数码管上的第三、四、五位显示,设计当中,只记录六秒钟的转速,显示的为每分钟的转速,因此第六位LED数码管显示0,其他数码管显示横线。在设计当中要注意对输入的4位数组译成LED数码管能显示的7段码(如”0001”译码为“01100000“)。点阵LED显示也需要译码,按每列译码。点阵LED每次点亮一列,高速点亮就可以在阵面上看到显示汉字或者数字。3.8 彩色LED及报警控制模块驱动设计>=5000绿亮蓝亮红亮<2000>2000;<4000>=4000速度信号速度大小判断此模块为自己添加的

25、设计模块,考虑到直流电机的转速,将其划分为高、中、低三个等次,高速为转速超过4000R/MIN,低速为转速低于2000R/MIN,中速介于两者之间,用红、绿、蓝三个彩色LED显示当前的速度属于哪个速度层次。设计当中另外把5000R/MIN设为警戒速度,当电机转速超过警戒速度时,就会触发警报(扬声器发出间隔为1秒的的响声),当然超过警戒速度的警报是可以通过警报开关关闭的。否允许报警是 是 否蜂鸣器不响蜂鸣器响图3.7:彩色LED及报警控制程序流程程序中的速度信号采用锁存器的计数百位,程序设计时只对百位信号比较,来判断当前的速度是多大。红、绿、蓝三个彩色LED选取交通灯模块的LED,接线时,只需要

26、接一向即可。蜂鸣器的响声来自时钟信号控制模块提供的1KHZ,设计当中采用的蜂鸣模式是响一秒停一秒,依次还需在模块中接一个时间控制程序,用以控制扬声器的状态。4 遇到的问题与设计体会4.1 遇到的问题及解决方案问题一:PWM控制方式下,直流电机速度太低。解决方法:初始在用时,发现只有用旋律控制时,直流电机的速度才能提升,在PWM控制时,速度很低。我最初以为是PWM的周期太长,后发现将周期缩短依然无济于事,哪怕PWM信号占空比到了1,直流电机的速度依然非常低。后来查阅了电路图发现,PWM信号只是在高电位选通三极管来驱动直流电机,而决定直流电机所获得的电压由电机左边的旋钮控制,因此只需要把旋钮调大即

27、可提高PWM控制方式下的直流电机的转速。问题二:8位7段数码管与16*16点阵LED部分引脚连接在FPGA的统一 一引脚上。解决方法:8位7段数码管的a、b、c、d、e、f、g的连接脚与16*16点阵的C0、C1、C2、C3、C4、C5、C6、C7连接在FPGA的同一引脚位置,如果对点阵LED点亮时会影响到数码管的现实,同样数码管显示也会对点阵LED干扰,为解决此现象,可在不同的时间段分别对数码管和点阵LED显示,即在显示数码管时,点阵LED所有列都被禁止显示,在显示点阵LED时,数码管的片选段指向第一个数码管。注意:虽然这种方法解决了数码管与点阵LED硬件连接的缺陷,但是也造成了第一位数码管

28、无法正常显示。问题三:扬声器没有声音。解决方法:看过扬声器的电路图,本以为给予一个高电平选通蜂鸣器即会发出声音,结果大出所料。后来请教同学才知道这种蜂鸣与我之前接触到的蜂鸣器不一样,它在特定的频率下才会响,而且频率不同,声音也不一样。4.2 扩展设想设想一:声音控制直流电机速度。本次设计是通过键盘控制速度,有些时候要改变直流电机的速度而不方便按键盘未免有些麻烦。声音控制PWM调节直流电机的转速先对人发出的数字的声音AD转换,选取特定的一段AD转换数据存入到存储器里面,在人想改变电机的速度时,再对数字的声音AD转换,所转换的数据与存储器保存的数据比较,确定当前声音指令所要改变的速度级别。设想二:

29、直流电机的正反转。本设计提供的硬件是固定的,无法实现反转。我们可另更改硬件设计,可实现直流电机的反转,具体思路是:直流电机的正极端接地,负极端提供两种电压(+12V到-12V),由旋钮控制来调节直流电机负极所获得的电压大小,这样当直流电机负极电压为正时,直流电机反转,反之正转。设想三:直流电机的紧急制动。直流电机在高速状态到完全停下来,所要的时间比较长,要使直流电机紧急制动需另外添加元件。即设计方式是,通过速度传感器(速度越大输出的电压也越大,非本设计当中提供的霍尔开关器件)来控制电机两端的反向电压,这样就可以起到紧急制动的作用。设想四:液晶显示器来显示信息。实验设计也可以添加液晶显示器来显示

30、当前直流电机的速度、总转圈数及速度级别。4.3 设计体会这次EDA课程设计历时两个星期,过程中学到了很多很多的东西,不仅可以巩固以前所学过的知识,同时学到了很多在书本上所没有学到过的知识。通过这次设计,我对VHDL语言有了新的认识,虽然我们系统性的学习过VHDL语言,也做过相应的实验,但是没有这样的完整的做过一个系统,同时进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是对试验箱的不熟悉对实验调试造成了很大的困扰。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不

31、够的,只有把所学的理论知识与实践相结合起来,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。总的来说,这次设计的数字秒表还是比较成功的,在设计中遇到了些问题,最后在老师们的辛勤的指导下,总算顺利解决,觉得平时所学的知识有了实用的价值。我们这次课程设计的试验箱是新购买的,使用VHDL语言编程的软件为QUARTUS,很多模块对我们来说都很陌生,在熟悉时花费了不少力气。以一个电子行业的学生角度来说,制作一个像这样的实验箱是非常有难度的,从制版的原件布局到各种芯片的用途,很多很多的东西让我感到自己的不足。 最后,再次感谢对我给予指导的各位老师!参考文献1 SOPCIIEDA实验指导书(

32、第二版)2 SOPCII使用手册(第二版)3 EDA技术基础. 谭会生编著. 湖南大学出版社,20044 EDA技术实用教程(第二版),潘松、黄继业编著 ,科学出版社 ,2005附录附录A:总设计原理图附录B:设计程序时钟控制信号模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;-entity teltcl is port( Clk : in std_logic; -时钟输入1Mhz ena : out std_logic; -允许计

33、数 clr : out std_logic; -计数器清零信号产生 clkhz : out std_logic; -秒脉冲信号产生 clkkhz : out std_logic; -1KHZ脉冲产生 load : out std_logic -锁存、显示输出允许 ); end teltcl;-architecture behave of teltcl is signal clk1hz :std_logic;-1HZ时钟信号 signal clk1khz :std_logic; signal count : std_logic_vector(2 downto 0);-6秒计数 signal cl

34、r1 :std_logic;-清零信号 signal ena1 :std_logic;-允许计数信号 signal load1 :std_logic;-允许计数信号 signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;-计数数据 begin process(clk) -1HZ信号产生 variable cnttemp : INTEGER RANGE 0 TO 999999; variable count : integer range 0 to 999; begin IF clk='1' AND clk'event THEN I

35、F cnttemp=999999 THEN cnttemp:=0; ELSE IF cnttemp<500000 THEN clk1hz<='1' ELSE clk1hz<='0' END IF; cnttemp:=cnttemp+1; END IF; if count=999 then count:=0; else if count<500 then clk1khz<='1' else clk1khz<='0' end if; count:=count+1; end if; end if; c

36、lkhz<=clk1hz;clkkhz<=clk1khz; end process; process(Clk1hz)-6秒计数 begin if(Clk1hz'event and Clk1hz='1') then count<=count+1; if count<6 then ena1<='1'load1<='0'clr1<='0' elsif count=6 then load1<='1'ena1<='0'clr1<='0

37、' elsif count=7 then ena1<='0'load1<='0'clr1<='1' end if; end if; ena<=ena1; load<=load1;clr<=clr1; end process;end behave;十进制计数器模块程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 IS PORT (CLK:IN STD_LOGIC; -计数时钟信号 CLR:IN STD_LOGIC; -清零信号 ENA:IN

38、 STD_LOGIC; -计数使能信号 CQ :OUT INTEGER RANGE 0 TO 15;-4位计数结果输出 CARRY_OUT:OUT STD_LOGIC); -计数进位END CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15;BEGINPROCESS(CLK,ENA) ISBEGIN IF CLR= '1' THEN CQI<= 0; -计数器异步清零 elsIF CLK'EVENT AND CLK= '1' THEN IF ENA= '1

39、' THEN iF CQI=10 THEN cqi<=1; ELSE CQI<=cqi+1; END IF; -等于9,则计数器清零 END IF; END IF;END PROCESS;PROCESS (CQI) IS BEGIN IF CQI=10 THEN CARRY_OUT<= '1' -进位输出 ELSE CARRY_OUT<= '0' END IF;END PROCESS; CQ<=CQI;END ART;键盘扫描程序library ieee;use ieee.std_logic_1164.all;use iee

40、e.std_logic_arith.all;use ieee.std_logic_unsigned.all;- entity keybord is port( Clk : in std_logic; -时钟信号 Kr : in std_logic_vector(3 downto 0); -键盘行 Kc : buffer std_logic_vector(3 downto 0); -键盘列 keyout : out std_logic_vector(3 downto 0) -键值输出 );end keybord;architecture behave of keybord is signal k

41、eyr,keyc : std_logic_vector(3 downto 0); signal kcount : std_logic_vector(2 downto 0); signal dcount : std_logic_vector(2 downto 0); signal kflag1,kflag2 : std_logic; signal buff8 : std_logic_vector(3 downto 0); signal Disp_Temp : integer range 0 to 15; signal Disp_Decode : std_logic_vector(6 downto

42、 0); begin process(Clk) -扫描键盘 begin if(Clk'event and Clk='1') then if(Kr="1111") then kflag1<='0' kcount<=kcount+1; if(kcount=0) then kc<="1110" elsif(kcount=1) then kc<="1101" elsif(kcount=2) then kc<="1011" else kc<=&quo

43、t;0111" end if; else kflag1<='1' keyr<=Kr; keyc<=Kc; end if; kflag2<=kflag1; end if; end process; process(Clk) - 获取键值 begin if(Clk'event and Clk='1') then if(kflag1='1' and kflag2='0') then if(keyr="0111") then case keyc is when "01

44、11"=>buff8<="0001" when "1011"=>buff8<="0100" when "1101"=>buff8<="0111" when "1110"=>buff8<="1110" when others=>buff8<=buff8; -no change end case; elsif(keyr="1011") then case keyc is

45、when "0111"=>buff8<="0010" when "1011"=>buff8<="0101" when "1101"=>buff8<="1000" when "1110"=>buff8<="0000" when others=>buff8<=buff8; -no change end case; elsif(keyr="1101") then

46、case keyc is when "1110"=>buff8<="1111" when "1101"=>buff8<="1001" when "1011"=>buff8<="0110" when "0111"=>buff8<="0011" when others=>buff8<=buff8; -no change end case; elsif(keyr="1110

47、") then case keyc is when "1110"=>buff8<="1101" when "1101"=>buff8<="1100" when "1011"=>buff8<="1011" when "0111"=>buff8<="1010" when others=>buff8<=buff8; -no change end case; end if;

48、end if; end if; keyout<=buff8; end process;end behave; 16位锁存器模块程序设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT(LOAD: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DOUT: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ENTITY REG32B;ARCHITECTURE ART OF REG32B IS BEGINPROCESS ( LOA

49、D, DIN ) ISBEGIN IF LOAD 'EVENT AND LOAD= '1' THEN DOUT<=DIN; -锁存输入数据 END IF;END PROCESS;END ART;PWM信号控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity pwm is port( pwmin : in std_logic_vector(3 downto 0); -pwm信号输入 clk : in std_logic; -时钟 pwmout : out std_logic -电机控制信号 ); end pwm;architecture behave of pwm issignal cycle : integer range 0 to 16000;signal keynum : integer range 0 to 15; beg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论