直流电机调速系统项目设计方案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直流电机调速系统项目
设计方案
0 前言
电动机作为最主要的机电能量转换装置,其应用围已遍及国民经济的各个领域和人们的日常生活。

无论是在工农业生产,交通运输,国防,航空航天,医疗卫生,商务和办公设备中,还是在日常生活的家用电器和消费电子产品(如电冰箱,空调,DVD等)中,都大量使用着各种各样的电动机。

据资料显示,在所有动力资源中,百分之九十以上来自电动机。

同样,我国生产的电能中有百分之六十是用于电动机的。

电动机与人的生活息息相关,密不可分。

电气时代,电动机的调速控制一般采用模拟法,对电动机的简单控制应用比较多。

简单控制是指对电动机进行启动,制动,正反转控制和顺序控制。

然而近年来,随着技术的发展和进步,以及市场对产品功能和性能的要求不断提高,直流电动机的应用更加广泛,尤其是在智能机器人中的应用。

直流电动机的起动和调速性能、过载能力强等特点显得十分重要,为了能够适应发展的要求,单闭环直流电动机的调速控制系统得到了很大的发展。

而作为单片嵌入式系统的核心—单片机,正朝着多功能、多选择、高速度、低功耗、低价格、大存储容量和强I/O功能等方向发展。

随着计算机档次的不断提高,功能的不断完善,单片机已越来越广泛地应用在各种领域的控制、自动化、智能化等方面,特别是在直流电动机的调速控制系统中。

这是因为单片机具有很多优点:体积小,功能全,抗干扰能力强,可靠性高,结构合理,指令丰富,控制功能强,造价低等。

所以选用单片机作为控制系统的核心以提高整个系统的可靠性和可行性。

1 总体方案设计
1.1 系统方案
针对本课题的设计任务,进行分析得到:本次课程设计以AT89C52单片机为核心,以5个弹跳按钮作为输入端,达到控制直流电机的正转、反转、停止、加速、减速。

在设计中,采用PWM技术对电机进行控制。

1.2 系统构成
该直流电机控制系统的设计,在总体上大致可分为以下5个部分组成:输入模块,AT89C52单片机,电源模块,驱动模块,直流电机。

系统原理框图如图1所示。

图1 系统原理框图
1.3 电路工作原理
根据励磁方式不同,直流电机分为自励和他励两种类型。

不同励磁方式的直流电机机械特性曲线有所不同。

对于直流电机来说,认为机械特性方程式为:
n=U
N /(K
e
φ
N
)-(R
ad
+R
a
)/(K
e
K
t
φ2
N
)T=n-△n (公式 1-1)
式中U
N ,φ
N
----------额定电枢电压、额定磁通量;
K e ,K
t
---与电机有关的常数;
R ad ,R
a
-----电枢外加电阻、电枢电阻;
n ,△n—理想空载转速、转速降。

分析公式 1-1 可得,当分别改变U
N 、φ
N
和R
ad
时,可以得到不同的转速n,从而
实现对速度的调节。

由于φ=T,当改变励磁电流I
f
时,可以改变磁通量φ的大小,从而
达到变磁通调速的目的。

但由于励磁线圈发热和电动机磁饱和的限制,电动机的励磁电流
I
f
和磁通量φ只能在低于其额定值的围调节,故只能弱磁调速。

而对于调节电枢外加电阻
R
ad
时,会使机械特性变软,导致电机带负载能力减弱。

PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到
控制要求的一种电压调整方法。

PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期“接通”和“断开”时间的长短。

通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。

因此,PWM又被称为“开关驱动装置”。

在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。

只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。

当我们改变占空比时,可以得到不同的电机平均速度,从而达到调速的目的。

1.4 方案选择
方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。

但是电阻网络智能实现有级调速,而数字电阻的元器件价格比较昂贵。

更主要的问题在于一般电动机的电阻很小,但电流很大,分压不仅会降低效率,而且实现起来很困难。

方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对电机的速度进行调整。

这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构容易损坏、寿命较短、可靠性不高。

方案三:采用驱动芯片L298驱动直流电机,L298具有驱动能力强,外围电路简单等优点。

综合各方面的因素,采用了方案三。

2 硬件电路设计
2.1 系统分析与硬件设计
键盘向单片机数日相应控制指令,由单片机通过P3.0与P3.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过信号放大,驱动电动机来控制电路,实现电动机转向和转速的控制。

2.2 单片机AT89C52
采用AT89C52是MSC-51系列单片机的升级版,由世界著名半导体公司ATMEL在购买MSC-51设计结构后,利用自身优势技术———闪存生产技术对旧技术进行改进和扩展,同时使用新的半导体生产工艺,最终得到成型产品。

与此同时,世界上其他的著名公司也通过基本的51核,结合公司自身技术进行改进生产,推广了一批如51F020等高性能单片机。

AT89C52片集成256字节程序运行空间,8K字节Flash存储空间,支持最大64k外部存储扩展。

根据不同的运行速度和功耗的要求,时钟频率可以设置在0-33M之间。

片资源有4组I/O控制端口、3个定时器、8个中断、软件设置低耗能模式、看门狗和断电保护。

可以在4V到5.5V宽电压围正常工作。

不断发展的半导体工艺也让该单片机的功耗不断降
低。

同时,该单片机支持计算机并口下载,简单的数字芯片就可以制成下载线,仅仅几块钱的价格让该型号单片机畅销10年不衰。

根据不同场合的要求,这款单片机提供了多种封装,本次设计根据最小系统有时需要更换单片机的具体情况,使用双列直插PID-40的封装。

2.3 复位电路和时钟电路
复位电路和时钟电路是维持单片机最小系统运行的基本模块,复位电路通常分为两种:上电复位和手动复位。

有时系统在运行过程中出现程序跑飞的情况,在程序开发过程中,经常需要手动复位,所以本次设计选用手动复位。

2.4 直流电机驱动电路设计
由于单片机P3口输出的电压最高才有5V,难以直接驱动直流电机。

所以我们需要使用恒压恒流桥式2A驱动芯片L298来驱动电机。

L298可接受标准TTL逻辑电平信号,可接4.5~7V电压。

4脚接电源电压,电压围+2.5~46V。

输出电流可达2.5A,可驱动电感性负载。

1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。

L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机。

本设计我们选用驱动一台电动机。

5,7,10,12脚接输入控制电平,控制电机的正反转。

同时需要加四个二极管在电机的两端,防止电机反转的时候产生强大的冲击电流烧坏电机。

具体驱动电路如下:
图2 驱动电路
2.5 键盘电路设计
正转、反转、停止、加速、减速五个开关分别与单片机的P1.0,P1.1,P1.2,P1.3,P1.4
相连,然后再与地相连。

正转实现直流电机的正转,反转实现直流电机的反转,停止实现直流电机的停转,加速实现直流电机的加速,减速实现直流电机的减速,具体键盘电路如下:
图3 键盘电路
3软件设计
3.1 应用软件的编制和调试
使用Keil软件编程时,项目开发流程和其它软件开发项目的流程较为相似。

(1)创建一个项目,从器件库中选择目标器件,配置工具设置;
(2)用C语言或会变语言创建源程序;
(3)用项目管理器生成应用;
(4)修改源程序中的错误;
(5)测试,连接应用。

3.2 程序总体设计
利用P3口,编制程序输出一串脉冲,经放大后驱动直流电机,改变输出脉冲的电平的持续时间,达到使电机正转、反转、停止、加速、减速等目的。

由软件编程从P3.0/P3.1管脚产生PWM信号,经驱动电路输出给电机,从而控制电机得电与失电。

软件采用延时法进行设计。

单片机上电后,系统进入准备状态。

按动正转按钮后,根据P3.0为高电平时
实现电机正转,P3.1为高电平时实现电机反转。

根据不同的加减速按钮,调整P3.0/P3.1输出高低电平时的有效值,进而控制电机的加减速。

其主程序流程如图2所示:
3.3 仿真图形
按下“正转”按钮,直流电机运行效果如图所示:
图5 电机正转
按下“加速”按钮,直流电机正向加速,运行效果如图所示:
图6 电机正转加速
按下“减速”按钮,直流电机正向减速,运行效果如图所示:
图7 电机正转减速
按下“停止”按钮,直流电机停止运转,运行效果如图所示:
图8 电机停转
按下“反转”按钮,直流电机开始反转,运行效果如图所示:
图9 电机反转
4 调试分析
在调试时,由于子程序有很多,有时没法将每一个子模块都运行到,自然也无法及时发现其中的疏漏。

为了解决这个问题,更好地查找错误,我解决的方法是将各个模块分别进行调试。

例如在调试某一模块时,先将其他模块用“//”暂时屏蔽掉,直到各个子模块都健康运行后,再整体调试,这样我们更加容易找出错误,增加效率。

软件调试需要不断的在单片机上执行看输出的结果,如果每次都在硬件上操作比较麻烦,因此我使用了“Proteus”仿真软件,将我们的电路硬件搭建出来,在这个平台上调试软件,并且达到了比较好的效果。

5 结论及进一步设想
根据实验结果,本设计基本完成了设计要求,系统能够实现正转、反转、加速、减速、停止能功能。

但是由于我对数码管等显示模块掌握度不够,系统还不能显示出电机转速,如果可以再多给我一些时间,我一定能设法用LCD或数码管显示出电机的转速。

参考文献
[1] 王鉴光.电动机控制系统.:机械工业,1994
[2] 小春,首桁.无刷直流电动机的单片机控制.自动化技术与应用,2009
[3] 王小明.电动机的单片机控制.:航空航天大学,2002
[4] 堔.直流无刷电动机原理及应用.:机械工业,1996
[5] 涵芳,徐爱卿.MCS-51/96系列单片机原理及应用.:航空航天大学,1977
[6] 何立民.单片机应用技术选编.: 航空航天大学,2003
[7] 史国生.交直流调速系统.:化学工业,2002
[8] 兴.电动机调速的原理及系统.:水利电力,2003
课设体会
通过本次课程设计,我从直流电机调速系统的设计与搭建中深深的体会到软件对于一个系统来说是多么重要。

软件可以说是一个系统的灵魂,在工作中指导硬件按照指定的方案运行。

对于刚学汇编不久的我来说,编制一个完整的系统软件可谓无任何经验可言。

在设计过程中,我们主要学习体会了单个模块的搭建与编程,例如键盘子程序, 中断子程序等等。

在这个系统搭建过程中,不但要将这些子模块有机的结合在一起,还要让它们较好的协调起来,按照我们思路运行,可以说是比较困难的。

由于我缺乏经验,所以经常犯下许多低级错误。

单片机编程是不能想当然的,我最容易犯的错误就是不经论证就去按照自己觉得可行的思路去进行,往往导致系统不能正常工作。

例如我原来在编制显示子程序时,只记得将相应段码与位码相对照,却忘记了实际硬件是共阴极还是共阳极;还有显示间隔时间的问题,我本以为长短无所谓,但结果是如果间隔大于10ms就会产生闪烁感,导致没有静态的效果,而间隔太短的话必须在显示下一个之前,将前一个位选清除,否则就容易产生“串位”,导致显示的不正常;在键盘扫描子程序中,当有键按下做相应操作,必须当按键释放时才能继续扫描,否则将导致一次按下执行多次的错误情况……虽然遇到了许多困难,但是在老师的帮助下,我还是完成了这次的课程设计。

通过本次课程设计,我进一步了解了系统搭建的过程和系统软件编程的步骤,为今后的学习打下良好的基础。

在这里我要感我的指导老师XX老师。

X老师工作很忙,但还是在我做课程设计的时间里一直关心我的进展,从设计方案的确定和修改,仿真的检查,及后来的详细设计等过程中都给了我很大的支持和关注。

本次课程设计让我把理论应用到了实践,同时通过课程设计,也加深了我对专业理论知识的理解和掌握。

在解决问题的过程中,我查阅了大量专业书籍,获得了许多专业知识,拓展了视野,提高了我的理论水平和实际的动手能力,并让我学会了解决问题的方法,激发了我的探索精神。

这样的课程设计是很好的锻炼机会,课程设计使我深入的了解到了实践能力对于工科学生的重要性,增强了我们的实践动手能力,也为我接下来大四的毕业设计提供了宝贵的经验。

[2012年7月 19日完成]
附录1电路原理图
附录2程序清单
#include<at89x51.h>
#define unchar unsigned char
#define unint unsigned int
unsigned char code
dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0 x84,0xff,0xbf};//显示代码
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7};//位选口
unsigned char dispbuf[4]={0,0,0,0};
unsigned char dispbitcnt;
unint mstcnt;
unint i;
unint count=0;
unchar tp=0;
void ledshow();
void keyscan();
void delay();
void just();
void turn();
void motorstop();
void speedup();
void speeddown();
void main(void)
{
P3_0=1;
P3_1=0;
dispbuf[0]=16;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
ledshow();//数码管显示keyscan();//键盘扫描 }
}
//延时10ms程序
void delay()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--); }
//键盘扫描程序
void keyscan()
{
unchar temp=0;
P1=0xff;
if((P1&0x1f)!=0x1f) {
delay();
if((P1&0x1f)!=0x1f) {
temp=P1&0x1f;
switch(temp)
{
case 0x1e:
just();break;
case 0x1d:
turn();break;
case 0x1b:
motorstop();break;
case 0x17:
speedup();break;
case 0x0f:
speeddown();break;
}
}
}
while((P1&0x1f)!=0x1f);
}
//数码管显示程序
void ledshow()
{
//P0=dispcode[dispbuf[dispbitcnt]]; //P2=dispbitcode[dispbitcnt];
//dispbitcnt++;
//if(dispbitcnt==4)
{
//dispbitcnt=0;
}
P2=0x01;P0=dispcode[dispbuf[0]];
for(i=0;i<700;i++);
P2=0x02;P0=dispcode[dispbuf[1]];
for(i=0;i<700;i++);
P2=0x04;P0=dispcode[dispbuf[2]]; for(i=0;i<700;i++);
P2=0x08;P0=dispcode[dispbuf[3]]; for(i=0;i<700;i++);
dispbuf[1]=tp/100;
dispbuf[2]=(tp%100)/10;
dispbuf[3]=tp%10;
}
//中断服务程序
void t0(void) interrupt 1 using 0 {
mstcnt++;
if(mstcnt==8)
{
mstcnt=0;
P0=dispcode[dispbuf[dispbitcnt]]; P2=dispbitcode[dispbitcnt]; dispbitcnt++;
if(dispbitcnt==4)
{
dispbitcnt=0;
}
}
if(count>100)
count=0;
if(count>tp)
P3_7=0;
else P3_7=1;
count++;
}
void just()
{
P3_0=1;
P3_1=0;
dispbuf[0]=16; }
void turn()
{
P3_0=0;
P3_1=1;
dispbuf[0]=17; }
void motorstop() {
tp=0;
}
void speedup() {
if(tp>99)
tp=100;
else tp++;
}
void speeddown() {
if(tp<1)
tp=0;
else tp--;
}。

相关文档
最新文档