EDA步进电机控制Word格式.docx
《EDA步进电机控制Word格式.docx》由会员分享,可在线阅读,更多相关《EDA步进电机控制Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
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、设计原理框图
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使能信号
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+1'
b1;
end
always@(posedgeclk)//PWM_out输出,程序根据判断计数器
begin//counter【15:
12】跟duty_cycle比较来实现
rst_n)//PWM的输出,<
则输出‘1’大于则输//‘0’、
pwm_out<
=1'
b0;
elseif(pwm_en&
(counter[15:
12]<
=duty_cycle))
else
end
5、2、3、moto模块简介
按键输入
PWM_in:
PWM输入信号
转速控制
Motoa:
电机a端口。
Motob:
电机b端口。
moto模块顶层视图
5、3、moto模块原理介绍
模块内部原理:
5、3、1、按键消抖及检测部分
//按键消抖部分
always@(posedgeclock)
begin
dout1<
dout2<
dout3<
end
elseif(div_clk)//div_clk就是主时钟分频之后的时钟,
Begin//用于使能按键检测
=key;
=dout1;
=dout2;
end
//按键边沿检测部分
always@(posedgeclock)
buff<
else//按键检测,通过assign语句对key_edge
=dout1|dout2|dout3;
//赋值,保证了按键的消抖
assignkey_edge=~(dout1|dout2|dout3)&
buff;
5、3、2、时钟分频部分
核心程序如下:
count<
div_clk<
//elseif(count<
17'
d120000)
d4000)
elseif(count<
d4)
Begin//counter计数器计数,通过判断
=count+1'
//counter的大小来决定输出的频率
=17'
d0;
5、3、3、5s定时及反转部分
通过对计数器进行计数,计到5s,大约计数器等于30'
h2FAF080时执行下列语句,来实现输出motoa,motob的反转。
moto_dir<
=~moto_dir;
assignmotoa=moto_dir?
pwm_in:
1'
assignmotob=moto_dir?
b0:
pwm_in;
5、3、4、按键控制部分
本程序共有两个按键,按键一通过控制duty_cycle的长度来控制PWM波的占空比,从而实现电机转速的控制。
按键二通过控制PWM_EN来实现PWM输出与否,从而实现电机的开关。
核心程序如下
always@(posedgeclock)//按键1,控制电动机速度
duty_cycle<
elseif(key_edge[0])
=duty_cycle+1'
//按键按下,则PWM占空比加一
always@(posedgeclock)//按键2,控制电动机启动、停止
pwm_en<
elseif(key_edge[1])//按键二按下,PWM输出使能取反
=~pwm_en;
//实现电机的开关
End
5、4、两个小模块之间的配合
两个模块moto模块、pwm_logic模块之间的连接程序如下:
motomoto_inst(
、clock(clock),
、