EDA步进电机控制

上传人:pu****.1 文档编号:455145738 上传时间:2023-08-15 格式:DOC 页数:22 大小:1.70MB
返回 下载 相关 举报
EDA步进电机控制_第1页
第1页 / 共22页
EDA步进电机控制_第2页
第2页 / 共22页
EDA步进电机控制_第3页
第3页 / 共22页
EDA步进电机控制_第4页
第4页 / 共22页
EDA步进电机控制_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《EDA步进电机控制》由会员分享,可在线阅读,更多相关《EDA步进电机控制(22页珍藏版)》请在金锄头文库上搜索。

1、EDA技术设计报告直流电机的PWM控制电子信息工程学院 通信2班 顾问 2012214485一、 EDA技术概述EDA(Electronic Design Automation)技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试等项功能,直至实现既定性能的电子综合系统功能。EDA技术使得设计者的工作几乎仅限于利用软件的方式,即利用硬件描述语言HDL和EDA软件来完成

2、对系统硬件功能的实现。二、 硬件描述语言与所用软件简介2.1、Verilog HDL硬件描述语言功能介绍Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计

3、外部访问设计,包括模拟的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。2.2、Quartus II软件综述Quartus II是Altera公司在21世纪初推出的FPGA/CPLD开发环境,是Alte

4、ra前一代FPGA/CPLD开发环境MAX+PLUSII的更新换代产品,其优点是功能强大、界面友好、使用便捷。Quartus II软件集成了Altera的FPGA/CPLD开发流程中所涉及的所有工具和第三方软件接口。通过此开发工具,设计者可以创建、组织和管理自己的设计。2.3、第三方仿真工具ModelSimModelSim仿真工具是由Model技术开发公司开发的目前业界最通用的仿真器之一,它支持Verilog和VHDL混合仿真,仿真精度高,仿真速度快。其仿真版本繁多,与Altera相关的主要有ModelSim-Altera(即AE版本)、ModelSim SE和ModelSim PE版本等。三

5、、设计原理3.1、直流电机PWM调速原理脉冲宽度调制(PWM)是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号任然是数字的,因为在给定的任何时刻,满幅值的直流供

6、电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,短的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。3.2、直流电机的PWM控制PWM信号可以由CPU产生,也可以油FPGA产生。由CPU产生PWM信号时,是通过模拟比较器产生的,比较器的一端接一个给定的参考电压,另一端接周期线性增加的锯齿波电压。当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时就输出高电平。所以改变参考电压就可以改变PWM波形的高电平的宽度,也就是改变PWM波形的占空比。

7、CPU产生PWM信号,需要D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM,因此外围电路很复杂。而用FPGA的数字PWM控制产生PWM信号,只需要FPGA内部资源就可以实现,运用可编程逻辑器件,采用VerilogHDL硬件描述语言编程。数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。如果线性计数器的技术值小于设定值就输出低电平,如果线性计数器的技术值大于设定值时输出高电平。FPGA的数字PWM控制与模拟PWM控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少、电路简单、便于控制。四、基本功能介绍4.1、功能简介 本次设计制作了一个PWM信

8、号电机控制系统,共有两个按键,其中,一个按键可以控制产生的PWM的宽度(即数字1的时间长度),按下该按键,PWM的宽度增加4096个主时钟宽度,从而达到电机加速的目的,共有16个档速,PWM的宽度从0-4096*15个主时钟的宽度。另外一个按键控制PWM波的输出与否,按下,如果PWM在输出,则停止输出,如果不在输出,则开始运行,从而实现对电机的开关控制。同时,本系统内部自行设定了一个5s定时器,可以实现每5S钟电机转向的反转。4.2、设计原理框图 电机控制系统Key_in1Key_in0Pwm_en指示信号Motoa电机a端Motob电机b端按键消抖及检测5s定时实现反转转速控制电机开关4.3

9、、顶层图4.4、引脚说明 输入: Clock:系统总时钟输入 Rst_n:系统复位按键 Key1:0:系统功能按键。Key1控制PWM波从输出与否 Key0控制电机转速,可加速 输出: motoa,motob:电机的两个输入引脚 pwm_en:pwm波指示:1-输出(即电机开启) 0-停止(即无PWM输出)五、代码各部分模块介绍5.1、系统模块RTL视图5.2、系统各模块简介: 5.2.1、pwm_logic模块简介引脚说明:输入:clk:总时钟信号 rst_n:复位信号 pwm_en: pwm使能信号 duty_cycle: 控制PWM宽度 输出: pwm_out:PWM输出 PWM_log

10、ic模块顶层视图5.2.2、pwm_logic模块原理介绍程序通过一个计数器来实现PWM的输出,通过duty_cycle来控制输出的PWM波的占空比,PWM_en来实现PWM的输出与否。 核心程序如下: always (posedge clk) /计数器计数,pwm_en为使能信号begin if(!rst_n) counter = 0; else if(pwm_en) counter = counter + 1b1;endalways (posedge clk) /PWM_out输出,程序根据判断计数器begin /counter【15:12】跟duty_cycle比较来实现 if(!rst

11、_n) /PWM的输出,则输出1大于则输/0. pwm_out = 1b0; else if (pwm_en & (counter15:12 = duty_cycle) pwm_out = 1b1; else pwm_out = 1b0;end 5.2.3、moto模块简介引脚说明:输入:clk:总时钟信号 rst_n:复位信号 Key1:0:按键输入 PWM_in:PWM输入信号输出: duty_cycle:转速控制 pwm_en: pwm使能信号 Motoa:电机a端口。 Motob:电机b端口。 moto模块顶层视图5.3、moto模块原理介绍 模块内部原理: 5.3.1、按键消抖及检测

12、部分 核心程序如下: /按键消抖部分always (posedge clock)begin if(!rst_n) begin dout1 = 0; dout2 = 0; dout3 = 0; end else if(div_clk) /div_clk是主时钟分频之后的时钟, Begin / 用于使能按键检测 dout1 = key; dout2 = dout1; dout3 = dout2; endend/按键边沿检测部分 always (posedge clock) begin if(!rst_n) buff = 0; else /按键检测,通过assign 语句对key_edge buff

13、 = dout1 | dout2 | dout3; /赋值,保证了按键的消抖 endassign key_edge = (dout1 | dout2 | dout3) & buff;5.3.2、时钟分频部分核心程序如下:always (posedge clock)begin if(!rst_n) begin count = 0; div_clk = 0; end /else if (count 17d120000) /else if (count 17d4000) else if (count 17d4) Begin /counter 计数器计数,通过判断 count = count + 1b1; /counter的大小来决定输出的频率

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号