PFGA的直流电机控制.docx
- 文档编号:24108474
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:10
- 大小:119.05KB
PFGA的直流电机控制.docx
《PFGA的直流电机控制.docx》由会员分享,可在线阅读,更多相关《PFGA的直流电机控制.docx(10页珍藏版)》请在冰豆网上搜索。
PFGA的直流电机控制
【连载】FPGAVerilogHDL系列实例
VerilogHDL之直流电机PWM控制
一、实验前知识准备
在上一篇中总结了步进电机的控制,这次我将学习一下直流电机的控制,首先,我们简要了解下步进电机和直流电机的区别。
(1)步进电机是以步阶方式分段移动,直流电机通常采用连续移动的控制方式。
(2)步进电机采用直接控制方式,它的主要命令和控制变量都是步阶位置;直流电机则是以电机电压为控制变量,以位置或速度为命令变量。
(3)直流电机需要反馈控制系统,他会以间接方式控制电机位置。
步进电机系统多半以“开环方式”进行操作。
1、什么是直流电机
输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机械能互相转换的电机。
当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。
2、什么是PWM
PWM(脉冲宽度调制)是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
3、开发平台中直流电机驱动的实现
开发板中的直流电机的驱动部分如图1.1所示。
利用FPGA设计一个0、1组成的双极性PWM发生器。
图1.1直流电机的驱动部电路
二、实验平台
QuartusII7.2集成开发环境、SOPC-MBoard板、ByteBlasterII下载电缆
三、实验目标
1、了解直流电机PWM的控制方法。
2、具有调速功能。
四、实验实现
详细实现步骤请参考 【连载】FPGAVerilogHDL系列实例--------8-3编码器
1、在设计文件中输入Verilog代码。
1//--------------------------------------------------------------------------------------------------
2//Title:
pwm
3//Author:
liwei
4//Generated:
ThuJun1622:
30:
122005
5//-------------------------------------------------------------------------------------------------
6`timescale1ns/1ps
7
8modulepwm(enable,rst,Dir,clk,spd_sel,MA);
9
10inputrst;
11inputclk;
12inputenable;//控制开关
13inputDir;//控制方向
14input[1:
0]spd_sel;//控制转速
15
16output[1:
0]MA;//电机控制
17
18reg[15:
0]cntReg;
19reg[15:
0]cnt;
20reg[15:
0]cnt_r;
21regpulseout;
22reg[1:
0]MA_r;
23
24parameterperiod='d10000;
25assignMA=MA_r;
26
27always@(posedgeclkornegedgerst)
28
29begin
30if(!
rst)//复位
31begin
32cntReg<=#116'b0;
33cnt<=#116'b0;
34pulseout<=#11'b0;
35end
36else
37if(enable==1'b0)MA_r<=2'b00;
38else
39begin
40MA_r[0]<=pulseout;
41MA_r[1]<=~pulseout;
42
43if(Dir==1'b1)cntReg<=cnt_r;
44elseif(Dir==1'b0)cntReg<=period-cnt_r;
45
46cnt<=cnt+1;
47if(cnt==cntReg-1)pulseout<=#11'b1;//设定周期时间的一半
48elseif(cnt==period-1)//设定的周期时间
49begin
50pulseout<=#11'b0;
51cnt<=#1'b0;
52end
53end
54end
55
56always@(spd_sel)
57begin
58case(spd_sel)
592'b00:
cnt_r<=period-'d3500;
602'b01:
cnt_r<=period-'d2500;
612'b10:
cnt_r<=period-'d1750;
622'b11:
cnt_r<=period-'d1000;
63endcase
64end
65
66endmodule
2、分析
思考:
(1)如何控制顺时针转和逆时针转?
(2)速度的大小如何控制的?
第38行~第53行:
由2个引脚控制生成双极性PWM发生器。
结论:
(1)以MA_r[0]为准,当状态0的时间大于状态1的时间时,电机逆时针转动;反之,电机顺时针转动。
那且看上面代码中是如何控制状态0的时间和状态1的时间长短的。
不难看出,时间长短是由方向变量Dir(第43、44行)和预设值cnt_r(第59行~第62行)决定。
可以好好体会一下。
(2)速度的快慢是由占空比决定的,占空比越大,速度越快。
当然,这里指的是比值大于1。
占空比是如何确定的呢?
这是由第59行~第62行中的数值确定的,这些数值可以自己定义,但必须在0~10000之间,这里所说的占空比是指不小于的值,当数值设置为5000时,就会得到最慢的速度了。
3、由设计文件生成的.bsf文件,其外接接口如图1.2所示。
图1.2 外接接口图
4、引脚分配
enable接按键,控制开关;rst接复位信号;Dir接按键,控制转动方向;clk接系统时钟;spd_sel接2个按键,调节转动速度;MA接直流电机。
5、实验结果
通过拨动开关控制开关、转速、方向。
【连载】FPGAVerilogHDL系列实例
VerilogHDL之步进电机驱动控制
步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心。
那么,下面我们就了解下什么是步进电机,它是怎么控制的。
一、步进电机相关知识简介
1、步进电机概述
步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。
单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。
多相步进电动机有多相方波脉冲驱动,用途很广。
使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各相绕组。
每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。
正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。
由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。
2、步进电机的种类
目前常用的步进电机有三类:
(1)反应式步进电动机(VR):
它的结构简单,生产成本低,步距角可以做的相当小,但动态性能相对较差。
(2)永磁式步进电动机(PM):
它的出力大,动态性能好;但步距角一般比较大。
(3)混合步进电动机(HB):
它综合了反应式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机。
如果还想做更深入的了解,自行查找相关资料。
3、步进电机控制的实现
我们实验中所使用的步进电机为四相步进电机。
转子小齿数为64。
系统中采用四路I/O进行并行控制,FPGA直接发出多相脉冲信号,在通过功率放大后,进入步进电机的各相绕组。
这样就不再需要脉冲分配器。
脉冲分配器的功能可以由纯软件的方法实现。
四相步距电机的控制方法有四相单四拍,四相单、双八拍和四相双四拍三种控制方式。
步距角的计算公式为:
其中:
m为相数,控制方法是四相单四拍和四相双四拍时C为1,控制方法是四相单、双八拍时C为2,Zk为转子小齿数。
本系统中采用的是四相单、双八拍控制方法,所以步距角为360°/512。
但步进电机经过一个1/8的减速器引出,实际的步距角应为360°/512/8。
试验中使用EXI/O的高四位控制四相步进电机的四个相。
按照四相单、双八拍控制方法,电机正转时的控制顺序为A→AB→B→BC→C→CD→D→DA。
EXI/O的高四位的值参见表1.1。
表1.1电机正转时,FPGA四位IO口的值
反转时,只要将控制信号按相反的顺序给出即可。
步进电机的频率不能太快,也不能太慢。
在200Hz附近最好。
频率太快是转动不起来的。
注:
为什么步进电机高于一定速度就无法启动:
步进电机有一个技术参数:
空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。
在有负载的情况下,启动频率应更低。
如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
二、实验平台
QuartusII7.2集成开发环境、SOPC-MBoard板、ByteBlasterII下载电缆
三、实验实现
详细实现步骤请参考 【连载】FPGAVerilogHDL系列实例--------8-3编码器
1、在设计文件中输入Verilog代码。
1//--------------------------------------------------------------------------------------------------
2//Title:
StepMotorPorts
3//Author:
wangliang
4//Generated:
2011.08.16
5//-------------------------------------------------------------------------------------------------
6
7moduleStepMotorPorts(StepDrive,clk,Dir,StepEnable,rst);
8
9inputclk;
10inputDir;
11inputStepEnable;
12inputrst;
13
14output[3:
0]StepDrive;
15
16reg[3:
0]StepDrive;
17reg[2:
0]state;
18reg[31:
0]StepCounter=32'b0;
19parameter[31:
0]StepLockOut=32'd200000;//250HZ
20regInternalStepEnable;
21
22always@(posedgeclkornegedgerst)
23begin
24if(!
rst)
25begin
26StepDrive<=4'b0;
27state<=3'b0;
28StepCounter<=32'b0;
29end
30
31else
32begin
33if(StepEnable==1'b1)InternalStepEnable<=1'b1;
34
35StepCounter<=StepCounter+31'b1;
36if(StepCounter>=StepLockOut)
37begin
38StepCounter<=32'b0;
39
40if(InternalStepEnable==1'b1)
41begin
42InternalStepEnable<=StepEnable;
43if(Dir==1'b1)state<=state+3'b001;
44elseif(Dir==1'b0)state<=state-3'b001;
45case(state)
463'b000:
StepDrive<=4'b0001;
473'b001:
StepDrive<=4'b0011;
483'b010:
StepDrive<=4'b0010;
493'b011:
StepDrive<=4'b0110;
503'b100:
StepDrive<=4'b0100;
513'b101:
StepDrive<=4'b1100;
523'b110:
StepDrive<=4'b1000;
533'b111:
StepDrive<=4'b1001;
54endcase
55end
56end
57end
58end
59endmodule
注:
(1)第19行,此处的数值为200000,因为实验中所使用的晶振时钟频率是50MHz,这样我们为步进电机提供了250Hz的频率,使之能正常工作。
(2)第43、44行是选择正转还是反转。
(3)第45行~第54行:
就是根据表1.1而来的,配置步进电机的IO口值。
2、由设计文件生成的.bsf文件,其外接接口如图1.2所示。
3、引脚分配
clk接时钟;Dir接按键,控制正转还是反转;StepEnable接按键,表示开关;rst接复位信号;StepDrive接步进电机的4个引脚。
4、实验结果
烧写到FPGA上以后,通过拨动开关就可以使步进电机正转反转了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PFGA 直流电机 控制