资源描述
- .
基于单片机的直流电机控制系统设计
摘 要
以AT89C51单片机为核心,应用PWM技术对直流电机的速度进展准确调节,并测量出电动机的转速,通过模数转换系统,使用LCD液晶显示器准确的显示电动机的转速。本次课程设计的目的是更加熟练掌握单片机的工作原理及实际应用,特别是单片机的编程语言,数模转换系统,PWM调节脉冲及LCD液晶显示器的工作原理。
关键字 :AT89C51单片机;转速控制;直流电机
目录
1引言1
2设计思路2
3硬件局部的设计3
3.1硬件设计总体思路3
3.2单片机控制直流电机局部的硬件设计3
4电机驱动模块的电路设计5
4.1单片机与直流电机接口局部5
4.2各局部硬件结合原理及构造5
5软件程序设计6
5.1系统软件设计的总体概述6
5.2系统各局部软件设计的思路6
6系统的调试与现象分析9
7课设总结11
参考文献12
附录I13
附录II21
1引言
本文讨论的单片机多功能定时器的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅能满足所需要求而且还有很多功能可供开发,有着广泛的应用领域。
20世纪80年代中期以后,Intel公司以专利转让的形式把8051核技术转让给许多半导体芯片生产厂家,如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。这些厂家生产的芯片是MCS-51系列的兼容产品,准确地说是与MCS-51指令系统兼容的单片机。这些兼容机与8051的系统构造〔主要是指令系统〕一样,采用CMOS工艺,因而,常用80C51系列来称呼所有具有8051指令系统的单片机,它们对8051单片机一般都作了一些扩大,更有特点。其功能和市场竞争力更强,不该把它们直接称呼为MCS-51系列单片机,因为MCS只是Intel公司专用的单片机系列型号。MCS-51系列及80C51单片机有多种品种。它们的引脚及指令系统相互兼容,主要在部构造上有些区别。目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类:根本型、增强型、低功耗型、专用型、超8位型、片闪烁存储器型。
2设计思路
直流电机PWM控制系统的主要功能包括:直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小,能够很方便的实现电机的智能控制。其间,还包括直流电机的直接清零、启动〔置数〕、暂停、连续功能。该直流电机系统由以下电路模块组成:振荡器和时钟电路:这局部电路主要由80C51单片机和一些电容、晶振组成。设计输入局部:这一模块主要是利用带中断的独立式键盘来实现。设计控制局部:主要由80C51单片机的外部中断扩展电路组成。设计显示局部:包括液晶显示局部和LED数码显示局部。液晶显示局部由LCD液晶显示模块组成;LED数码显示局部由七段数码显示管组成。直流电机PWM控制实现局部:主要由一些二极管、电机和L298直流电机驱动模块组成。
3 硬件局部的设计
3.1硬件设计总体思路
根据本次课程设计的具体要求为,使用LCD显示出直流电机的转速,由题目可以分析出,这个题目实际是由多个局部组成的。
第一个局部用单片机控制直流电机的转速,并且应提供直流电机驱动、测速电路,使用单片机驱动直流电机,测量直流电机的转速,控制直流电机稳定运行在一个围。
第二个局部使用LCD显示系统显示出直流电机的具体转速,并且单片机控制的电机实际转速与液晶显示器显示出的转速应该时时对应。
其三,本系统应该具有数模和模数转换的局部,因为这个模数转换局部在这个系统中是不可缺少的,单片机控制的直流电机转速,在实际中无论是对电机控制的信号,还是电机输出的信号都应该是数字信号,因为只有数字信号才能被单片机所识别,而最重要的是,单片机控制的直流电机输出的转速的信号只有是数字信号时才能被液晶显LCD模块所识别,并最终准确的显示出直流电机的转速。
调速系统的硬件设计原理方框图如下列图3-1所示, 以AT89C51单片机为控制核心,包括测速电路、PWM波形发生器和PWM功放电路以及LCD显示局部。
图3.1 硬件设计方框图
3.2单片机控制直流电机局部的硬件设计
直流电动机构造由定子和转子两大局部组成。转子主要作用是产生电磁转矩和感应电动势,是直流电机进展能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。直流电动机的构造是由直流电源、直流电机、控制开关和调速器组成。直流发电机的工作原理就是把电枢线圈中感应的交变电动势,靠换向器配合电刷的换向作用,使之从电刷端引出时变为直流电动势的原理。感应电动势的方向按右手定那么确定其工作原理不外乎就是用直流电源作为能量来驱动电机旋转。通过对三极管的截止与导通进展控制,使其起到开、关和调速的作用。具体的操作为当直流电动机接上直流电源时,使用电位器旋转按钮控制三极管集极的电压。如下列图直流电机控制原理。当三极管的集极电压小于死区电压时三极管截止,那么电动机不转动;当集极电压大于死区电压而小于饱和电压时三极管处于放大状态,随着集极电压改变,从而改变了直流电动机两端的压降也就改变了电机的转速。具体原理为集极的电压大小不一样,三极管的电压放大倍数也不一样从而起到调速作用改变直流电动机的旋转速度。
对于直流电机来说,如果加在电枢两端的电压脉动电流压〔要求脉动电压的周期远小于电机的惯性常数〕,可以看出,在T不变的情况下,改变T1和T2宽度,得到的电压将发生变化。
图3.2为施加不同占空比时实测的数据绘制所得占空比与转速的关系图。
图3.2占空比与电机转速的关系
由图看出转速与占空比D并不是完全速的线性关系〔图中实线〕,原因是电枢本身有电阻,不过一般直流电机的阻较小,可以近视为线性关系。
由此可见,改变施加在电枢两端电压就能改变电机的转速成,这就是直流电机PWM调速原理。
4电机驱动模块的电路设计
4.1 单片机与直流电机接口局部
由于本系统主要由主控开关,电机励磁电路、调速电路、测速电路、整流滤波电路、平波电抗器、制动电路组成,系统采用闭环PI 调节器控制。当开关闭合后,交流电经晶闸管调速电路控制后,又经过桥式整流、滤波、平波电抗器后,获得脉冲小、连续的直流电提供应电机,同时,交流电通过励磁电路使电机获得励磁,开场工作。调节速度经过调节变阻器进展,当变阻器阻值变化时,单片机输出的控制角也相应变化,晶闸管导通角随之变化,进而由主电路输出电压调节电机转速,同时测速电路输出电压也相应变化,经PI 调节器作用后,电机在设定的速度围稳定运转。
本次课设可以先在电脑上进展模拟仿真这样就能提高设计的效率以及电路的可行性。而且在仿真的过程中非常方便进展电路修改又可以到达很好的效果。因此通过使用Protues对硬件电路精心设计并对该电路进展仿真调试,用脉冲形式代替光电耦合管测取转速,再与单片机进展通信连接,可如下列图所示。
4.2各局部硬件结合原理及构造
其电路原理图如下
电路原理图
5 软件程序设计
5.1系统软件设计的总体概述
软件局部可由1个主程序、3个中断子程序和1个P ID算法子程序组成。主程序是一个循环程序,其主要思路是,先设定好速度初始值,这个初始值与测速电路送来的值相比拟得到一个误差值,然后用P ID 算法输出控制系数给PWM发生电路改变波形的占空比,进而控制电机的转速。其程序流程图如图4-1所示。
图4.1 软件总体设计流程图
5.2系统各局部软件设计的思路
PWM软件实现方式:
方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其准确,误差只在几个us。
方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。但是基于不占用定时器资源,且对于直流电机,采用软件延时所产生的定时误差在允许围,故采用方案二。
键盘向单片机输入相应控制指令,由单片机通过P2.0与P2.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过信号放大、光耦传递,驱动H型桥式电动机控制电路,实现电动机转向与转速的控制。电动机的运转状态通过LED显示出来。电动机所处速度级以速度档级数显示。正转时数字向右移动,反转时数字向左移动。移动速度分7档,快慢与电动机所处速度级快慢一一对应。每次电动机启动后开场计时,停顿时LED显示出本次运转所用时间,时间准确到0.1s。在本次课设所用程序中需要使用到速度测取和计算问题。因此为了能更加准确测得直流电动机的旋转速度,特意运用了我们所了解数字测速法来换算速度。在此对在这几种测速方法进展比拟。这样就可以得到此次课程设计所要选择的最正确方案。本系统编程局部工作采用汇编语言完成,采用模块化的设计方法,与各子程序做为实现各局部功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和LCD显示等局部的设计。
①PWM脉宽控制:本设计中采用软件延时方式对脉冲宽度进展控制,延时程序函数如下:
void delay(unsigned char dlylevel){
int i=50*dlylevel;
while(--i);}
此函数为带参数DLYLEVEL,约产生DLYLEVEL*400us的延时,因此一个脉冲周期可以由高电平持续时间系数hlt和低电平持续时间系数llt组成,本设计中采用的脉冲频率为25Hz,可得hlt+llt=100,占空比为hlt/(hlt+llt),因此要实现定频调宽的调速方式,只需通过程序改变全局变量hlt,llt的值,该子程序流程图如图四。
②中断处理子程序:采用中断方式,按下键,单片机P3.2脚产生一负跳沿,响应该中断处理程序,完成延时去抖动、键码识别、按键功能执行。
调速档、持续加/减速:调速档通过〔0-6〕共七档固定占空比,即相应档位相应改变hlt,llt的值,以实现调速档位的实现。而要实现按住加/减速键不放时恒加或恒减速直到放开停顿,就需在判断是否松开该按键时,每进展一次增加/减少1%占空比〔即hlt++/--;llt--/++〕,其程序流程图如图五。
③显示子程序:利用数组方式定义显示缓存区,缓存区有8位,分别存放各个LED管要显示的值。显示子程序为一带参子程序,参数为显示缓存的数组名,通过for(i=0;i<8;i++)方式对每位加上位选码,送到P0口并进展一两毫秒延时。
该显示子程序只对各个LED管分别点亮一次,因此在运行过程中,每秒执行的次数不应低于每秒24次。
④定时中断处理程序:采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。对定时器置初值3CB0H可定时50ms,即系统时钟精度可达0.05s。当50ms定时时间到,定时器溢出那么响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。
对于一个数的显示,先应转成BCD码,即取出每一个位,分别送入显示缓存区,对于转BCD的算法,应对一个数循环除10取模,直至为0,程序如下:
do{dispbuff[bcd_p]=bechange%10; //dispbuff为显示缓冲区数组
bcd_p++;}while(bechange/=10) //disp_p为数组指针
软件设计中的特点:
对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停顿匀加速到默认速度,停顿那么由于当前速度逐渐降至零。这样有利于保护电机,如电机运用于小车上,在启动上采用此方式也可加大启动速度,防止打滑。对于运行时间的计算、显示。配合传感器技术可用于计算距离,速度等重要的运行数据。采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。
6 系统的调试与现象分析
图5-1给出了该系统速度时间相应曲线,可以看出该系统启动较快,转速稳定,机械强度较高。在t0 时刻系统突加扰动的情况下,可以在短时间调整到初始速度,显示了良好的抗干扰能力,表达出了PI 闭环调节的优越性。经实践证明,本系统可以满足。本系统采用单片机和驱动芯片组合设计步进电机控制电路,实践说明,控制效果较好。
该控制系统硬件电路设计简单,构造紧凑、功耗低、运行可靠、设计方便;因使用专用驱动芯片,编制软件比拟简单。TA8435H为脉宽调制式斩波驱动方式的芯片,所以其具有同频PWM驱动器的优点:运行频率高,输出转矩大,并能消除电磁噪声等。较好地解决了上下频运行时的一些问题。本控制器可以与反应检测环节连接,组成闭环控制系统用于精度和稳定性要求较高的控制系统中。设计出的以51 单片机作为控制电路的调速系统中,在中小型直流电机调速系统中具有构造简单,运行可靠,调节围宽,电流连续性好,响应快等特点,。
图5-1电机转速特性
一般的控制要求,在普通控制中得以广泛应用。本设计在硬件上采用了基于PWM技术的H型桥式驱动电路,解决了电机驱动的效率问题,在软件上也采用较为合理的系统构造及算法,提高了单片机的使用效率,且具有一定的防飞能力。LCD液晶屏能表达当前的转速进展显示。而且本设计采用AT89C51单片机和双H桥驱动对直流电机调速进展设计,通过占空比的调节,驱动口电压的改变及显示控制,从而实现电机的转速或方向发生变化,并在LCD上即时显示所调占空比(上下电平之比)的数值。经历证,电机可以从中速开场变慢,直至停顿,再从高速逐渐变慢,亦可转向,运行稳定。对于PWM调速方式如何在单片机控制系统中实现进展了着重分析,研究直流电机的控制和测量方法,提高控制精度和响应速度、节约能源等都具有重要意义,为进一步研究和优化直流电机控制方法提供了根底。设计所涉及的基于单片机的电机控制系统的根本原理,系统以单片机为核心,采用了多模块化协同控制电动机,实现数据采集、数据存储、电机运行状态控制和LCD显示等功能,具有稳定的工作特性。PID控制的采用使电动机更稳定地运行在正转加速和减速的运动状态,提高了以电动机为动力源的机械装置的工作效率。
7总结
AT89C51单片机功能强大,方便今后的功能扩展。通过各种方案的讨论及尝试,再经过屡次的整体软硬件结合调试,不断地对系统进展优化。同时对电动机控制不是一个简单的电子控制问题,它涉及很多方面的知识。相信单片机在今后的自动控制领域中将有更广阔的应用前景。相信该系统能成功运用于直流电机转速系统的实时监控,简化控制逻辑系统,而且本钱低廉、功能完整、抗干扰性能好。能成功应用于直流电机转速调节、监控、保护场合,并且监控界面友好,使用方便。能够对直流电机实行实时监控,不仅大大改善了高速运行时的稳定性,而且还实现了保护功能。
通过实验总结出要自己去摸索实践掌握相关知识。这样知识才能掌握的结实,才是真正的学到了。开场感觉这个课设很难,原因在于自己当初并没有仔细分析各个元器件的工作原理。比方电位器控制三极管的作用。刚开场只想到它的开关作用,后来再回去查了查资料才发现自己少想了它还有放大的作用,通过改变集极的电压就可以改变集电极与发射极电压的放大倍数进而改变直流电动机的旋转速度。能自己解决问题是最关键的。经历本次课程设计之后我有很多的收获。
我明白有好的理论不代表能高效的用在实践上,只有通过自己的理解并付诸实践才能掌握, 遇到困能时要虚心学习,更要靠自己去努力解决。因为以后可能没人像在学校教师帮助,只有单独完成。而且答案可能不只有一种,有了解决的方案时要考虑还有没有其他方案更简便,想得到好的结果,就要反复推敲和实践,想解决问题就必须要能专研,吃苦,有耐心、勤奋、与人团结合作等综合素质。
参考文献
[1]王小明.电动机的单片机控制.航空航天大学.2002.
[2]毅刚.新编MCS--51单片机应用设计.工业大学.2003,
[3]邵正芬.基于单片机的直流凋速系统设计.东北大学.2007
[4]何立民. MCS-51系列单片机应用系统设计.航空航天大学, 1995.
附录I
单片机程序如下:
/********************************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/********************************************************/
sbit k1=P3^4; //启动/停顿按键
sbit k2=P3^5; //减速按键
sbit k3=P3^6; //加速按键
sbit k4=P3^7; //正反转按键
sbit k5=P3^2; //模式控制
sbit RS=P0^5;
sbit RW=P0^6;
sbit E=P0^7;
sbit ENA=P1^2; //IN1,IN2使能信号
sbit IN1=P1^0; //电机输入线
sbit IN2=P1^1;
bit model=1; //手动/自动,默认手动
bit direc=1; //转向标志,默认为正转
int rate=1; //高电平时间常数
int num=0; //1ms中断记录
int count=0; //1ms中断记录,自动模式加速时间常数
uchar code tab1[]=" wele";
uchar code tab2[]=" 2012/6/9";
uchar code tab3[]=" motor control";
uchar code tab4[]=" team:DXJ ZXM ZS";
uchar code tab5[]="Dire: Model:";
uchar code tab6[]="Rate: T:30";
/*****************延时子程序*********************************/
void delay_xus(uint x)
{
while(x--);
}
void delay(uint x)
{
uint y;
for(;x>0;x--)
for(y=110;y>0;y--) ;
}
/****************LCD********************************/
void w_(uint ) //写命令
{
RS=RW=E=0;
P2=;
E=1;
delay_xus(1);
E=0;
}
void w_data(uint dat) //写数据
{
RS=1;RW=E=0;
P2=dat;
E=1;
delay_xus(1);
E=0;
}
void w_shuzu(int addr,uchar code *p) //显示字符串
{
int i;
w_(0x80+addr);
delay_xus(1);
for(i=0;p[i]!='\0';i++)
{
w_data(p[i]);
delay_xus(1);
}
}
void disp() //显示速度、转向、模式
{
if(rate<10)
{
w_(0x80+0x45);
delay_xus(1);
w_data(' ');
delay_xus(1);
w_(0x80+0x46);
delay_xus(1);
w_data(rate%10+0x30); //数字转换成ASCII
delay_xus(1);
}
else
{
w_(0x80+0x45);
delay_xus(1);
w_data(rate/10+0x30);
delay_xus(1);
w_(0x80+0x46);
delay_xus(1);
w_data(rate%10+0x30);
delay_xus(1);
}
if(direc==1)
{
w_shuzu(0x06,"F");
}
else {w_shuzu(0x06,"R");}
if(model==0) w_shuzu(0x0f,"H");
else w_shuzu(0x0f,"A");
}
/*************主程序初始化**************************************/
void init()
{
w_(0x38);
delay_xus(1);
w_(0x0c); //开显示
delay_xus(1);
w_shuzu(0x00,tab1); //显示字符串
w_shuzu(0x40,tab2);
delay(500);
w_(0x01); //清屏
delay_xus(1);
delay(2); //忙碌
w_shuzu(0x00,tab3);
w_shuzu(0x40,tab4);
delay(1000);
w_(0x01); //清屏
delay_xus(1);
delay(2);
w_shuzu(0x00,tab5);
w_shuzu(0x40,tab6);
disp();
ENA=0;
TMOD=0X01;
TH0=0XFC; //(65536-1000)=FC18〔1ms〕
TL0=0X18;
ET0=1;
TR0=0;
EX1=1;
IP=0X02; //定时器0为中断最高优先级
EA=1;
}
/****************按键处理程序*********************************/
void keyscan()
{
if(k1==0) //启停
{
delay(120);
if(k1==0)
{
TR0=~TR0;
ENA=~ENA;
rate=1;
}
}
if(k2==0&&model==0) //减速
{
delay(120);
if(k2==0&&model==0)
{
rate-=2;
if(rate<=1) rate=1;
}
}
if(k3==0&&model==0) //加速
{
delay(120);
if(k3==0&&model==0)
{
rate+=2;
if(rate>=29) rate=29;
}
}
if(k4==0&&model==0) //转向
{
delay(120);
if(k4==0&&model==0)
{
direc=~direc;
}
}
if(k5==0&&ENA==0) //模式选择
{
delay(120);
if(k5==0&&ENA==0)
{
model=~model;
}
}
disp(); //状态改变,及时更新数据
}
/***************主程序***********************************/
void main()
{
init();
while(1) ;
}
/**************中断效劳程序***********************************/
void extern1() interrupt 2 //外部中断0
{
keyscan();
}
void timer0() interrupt 1 //定时器0
{
num++;
if(num>=31) num=0;
if(direc==1) //正转
{
if(num<=rate) //高电平持续时间
{
IN1=1;
IN2=0;
}
else IN1=IN2=0; //低电平持续时间
}
else //反转
{
if(num<=rate)
{
IN1=0;
IN2=1;
}
else IN1=IN2=0;
}
if(model==1) //自动模式下,执行,加速时间常数
{
count++;
if(count==1500) //1.5s后占空常数增加,加速
{
rate+=2;
if(rate>=29) rate=29;
count=0;
disp();
}
}
TH0=0XFC; //65536-1000=FC18
TL0=0X18;
}
附录II
电机正转
电机反转
电机加速
电机减速
. word.zl.
展开阅读全文