EDA步进电机控制.docx

上传人:b****2 文档编号:2174056 上传时间:2022-10-27 格式:DOCX 页数:18 大小:25.66KB
下载 相关 举报
EDA步进电机控制.docx_第1页
第1页 / 共18页
EDA步进电机控制.docx_第2页
第2页 / 共18页
EDA步进电机控制.docx_第3页
第3页 / 共18页
EDA步进电机控制.docx_第4页
第4页 / 共18页
EDA步进电机控制.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

EDA步进电机控制.docx

《EDA步进电机控制.docx》由会员分享,可在线阅读,更多相关《EDA步进电机控制.docx(18页珍藏版)》请在冰豆网上搜索。

EDA步进电机控制.docx

EDA步进电机控制

....

 

EDA技术设计报告

 

《直流电机的PWM控制》

 

电子信息工程学院通信2班顾问2012214485

 

一、EDA技术概述

EDA(ElectronicDesignAutomation)技术作为现代电子设计技术的核心,

它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言

HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优

化和仿真测试等项功能,直至实现既定性能的电子综合系统功能。

EDA技术使得设计者的工作几乎仅限于利用软件的方式,即利用硬件描述语言HDL和EDA软件来完成对系统硬件功能的实现。

 

二、硬件描述语言与所用软件简介

2.1、VerilogHDL硬件描述语言功能介绍

VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

VerilogHDL语言具有下述描述能力:

设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机

制。

所有这些都使用同一种建模语言。

此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,VerilogHDL语言的核心子集

非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

 

2.2、QuartusII软件综述

QuartusII是Altera公司在21世纪初推出的FPGA/CPLD开发环境,是

 

......

....

 

Altera前一代FPGA/CPLD开发环境MAX+PLUSII的更新换代产品,其优点是功能强大、界面友好、使用便捷。

QuartusII软件集成了Altera的FPGA/CPLD开发流程中所涉及的所有工具和第三方软件接口。

通过此开发工具,设计者可以创建、组织和管理自己的设计。

 

2.3、第三方仿真工具ModelSim

ModelSim仿真工具是由Model技术开发公司开发的目前业界最通用的仿真

器之一,它支持Verilog和VHDL混合仿真,仿真精度高,仿真速度快。

其仿真

版本繁多,与Altera相关的主要有ModelSim-Altera(即AE版本)、ModelSimSE

和ModelSimPE版本等。

 

三、设计原理

3.1、直流电机PWM调速原理

脉冲宽度调制(PWM)是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方

式,也是人们研究的热点。

PWM是一种对模拟信号电平进行数字编码的方法。

通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

PWM信号任然是数字的,因为在给定的任何时刻,满幅值的直流供电

要么完全有(ON),要么完全无(OFF)。

电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

通的时候即是直流供电被加到负载上的时候,短的时候即是供电被断开的时候。

只要带宽足够,任何模拟值都可以使用PWM进行编码。

 

3.2、直流电机的PWM控制

PWM信号可以由CPU产生,也可以油FPGA产生。

由CPU产生PWM信号时,是通过模拟比较器产生的,比较器的一端接一个给定的参考电压,另一端接周期线性增加的锯齿波电压。

当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时就输出高电平。

所以改变参考电压就可以改变PWM波形的高电平的宽度,也就是改变PWM波形的占空比。

CPU产生PWM信号,需要D/A转换器

产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM,因此外围电路很复杂。

而用FPGA的数字PWM控制产生PWM信号,只需要FPGA部资源就可以实现,运用可编程逻辑器件,采用VerilogHDL硬件描述语言编程。

数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。

如果线性计数器的技术值小于设定值就输出低电平,如果线性计数器的技术值大于设定值时输出高电平。

FPGA的数字PWM控制与模拟PWM控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少、电路简单、便于控制。

 

......

....

 

四、基本功能介绍

4.1、功能简介

本次设计制作了一个PWM信号电机控制系统,共有两个按键,其中,一个按键可以控制产生的PWM的宽度(即数字‘1’的时间长度),按下该按键,PWM的宽度增加4096个主时钟宽度,从而达到电机加速的目的,共有16个档速,PWM的宽度从0-4096*15个主时钟的宽度。

另外一个按键控制PWM波的输出与否,按下,如果PWM在输出,则停止输出,如果不在输出,则开始运行,从而实现对电

机的开关控制。

同时,本系统部自行设定了一个5s定时器,可以实现每5S钟电机转向的反转。

 

4.2、设计原理框图

 

电机控制系统

转速控制

电机开关

Pwm_en指示信号

按键

Key_in[1]

Motoa电机a端

消抖

5s定时

及检

实现反

Key_in[0]

Motob电机b端

 

4.3、顶层图

 

......

....

 

4.4、引脚说明

输入:

Clock:

系统总时钟输入

Rst_n:

系统复位按键

Key[1:

0]:

系统功能按键。

Key[1]控制PWM波从输出与否

Key[0]控制电机转速,可加速

输出:

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_logic模块顶层视图

5.2.2、pwm_logic模块原理介绍

程序通过一个计数器来实现PWM的输出,通过duty_cycle来控制输出的PWM

波的占空比,PWM_en来实现PWM的输出与否。

核心程序如下:

always(posedgeclk)//计数器计数,pwm_en为使能信号

begin

if(!

rst_n)

counter<=0;

elseif(pwm_en)

counter<=counter+1'b1;

end

always(posedgeclk)//PWM_out输出,程序根据判断计数器

begin//counter【15:

12】跟duty_cycle比较来实现

if(!

rst_n)//PWM的输出,<则输出‘1’大于则输//‘0’.

pwm_out<=1'b0;

elseif(pwm_en&(counter[15:

12]<=duty_cycle))

pwm_out<=1'b1;

else

pwm_out<=1'b0;

end

5.2.3、moto模块简介

 

引脚说明:

输入:

clk:

总时钟信号

rst_n:

复位信号

Key[1:

0]:

按键输入

PWM_in:

PWM输入信号

输出:

duty_cycle:

转速控制

pwm_en:

pwm使能信号

Motoa:

电机a端口。

Motob:

电机b端口。

 

moto模块顶层视图

 

5.3、moto模块原理介绍

模块部原理:

5.3.1、按键消抖及检测部分

核心程序如下:

//按键消抖部分

always(posedgeclock)

 

......

....

 

begin

if(!

rst_n)

begin

dout1<=0;

dout2<=0;

dout3<=0;

end

elseif(div_clk)//div_clk是主时钟分频之后的时钟,

Begin//用于使能按键检测

dout1<=key;

dout2<=dout1;

dout3<=dout2;

end

end

 

//按键边沿检测部分

always(posedgeclock)

begin

if(!

rst_n)

buff<=0;

else//按键检测,通过assign语句对key_edge

buff<=dout1|dout2|dout3;//赋值,保证了按键的消抖

end

 

assignkey_edge=~(dout1|dout2|dout3)&buff;

5.3.2、时钟分频部分

核心程序如下:

always(posedgeclock)

begin

if(!

rst_n)

begin

count<=0;

div_clk<=0;

end

//elseif(count<17'd120000)

//elseif(count<17'd4000)

elseif(count<17'd4)

Begin//counter计数器计数,通过判断

count<=count+1'b1;//counter的大小来决定输出的频率

div_clk<=1'b0;

end

else

begin

count<=17'd0;

 

......

....

 

div_clk<=1'b1;

end

end

5.3.3、5s定时及反转部分

通过对计数器进行计数,计到5s,大约计数器等于30'h2FAF080时执行下列语句,来实现输出motoa,motob的反转。

moto_dir<=~moto_dir;

assignmotoa=moto_dir?

pwm_in:

1'b0;

assignmotob=moto_dir?

1'b0:

pwm_in;

5.3.4、按键控制部分

本程序共有两个按键,按键一通过控制

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1