电机测速课程设计PWM.docx
- 文档编号:9480746
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:25
- 大小:554.45KB
电机测速课程设计PWM.docx
《电机测速课程设计PWM.docx》由会员分享,可在线阅读,更多相关《电机测速课程设计PWM.docx(25页珍藏版)》请在冰点文库上搜索。
电机测速课程设计PWM
电机测速系统设计
1、设计目的
测量小功率直流电机的转速
本次课程设计主要以单片机,直流电动机和显示器等器件及软件程序为基础,设计了一个简单的基于单片机的电机测速系统。
本统采用PWM测量电动机的转速,用STC89C52单片机对直流电动机的转速进行控制和检速。
本设计主要要求设计系统的基本结构、工作原理、运行特性及其设计方法有一定的掌握,且最终应用理论知识做出一个完整的简单测速模型,从而对测速系统的专业知识及机械化等方面的知识有一定的拓展。
二、设计要求
1.用按键控制电机起停;
2.电机有两种速度,可通过按键改变;
3.用数码管显示电机每分钟或每秒转数。
STC89C52单片机的介绍
本系统采用单片机STC8952作为主控制器,使用光电传感器测量电机的转速,最终在LED上显示测试结果。
此外,还可以根据需要调整制电机的转速,硬件组成由图3.1所示。
单片机(singleMicroControllerUnit),又称为微控制器,是指在一块芯片上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM、定时器/计数器、中断控制器以及串行和并行I/0接口等部件,构成一个完整的微型计算机。
目前,新型单片机内还有A/D(D/A)转换器、高速输入输出部件、DMA通道、浮点运算等特殊功能部件。
由于它的结构和指令功能都是按工业控制要求设计的,特别适用于工业控制及其数据处理场合。
STC89C52是拥有256字节的RAM,8K的片内ROM,3个16位定时器,6个中断源的微处理器,也就是俗称的单片机。
89系列单片机的内核是8031,所以其指令与Intel8051系列单片机完全兼容,并且具有以下优点:
(1)内部含有Flash存储器(STC89C52有8k)。
因此在系统的开发过程中可以十分容易进行程序的修改,这就大大缩短了系统的开发周期。
同时,在系统工作过程中,能有效地保存一些数据信息,即使外界电源损坏也不影响到信息的保存。
(2)插座与80C51兼容。
89系列单片机的引脚和80C51是一样的,当用89系列单片机取代80C51时,可以直接进行代换。
(3)静态时钟方式。
89系列单片机采用静态时钟方式,可以节省电能,这对于降低便携式产品的功耗十分有用。
(4)错误编程亦无废品产生。
因为89系列单片机内部采用了Flash存储器,所以,错误编程之后仍可以重新编程,直到正确为止,故不存在废品。
(5)可反复进行系统试验。
用89系列单片机设计的系统,可以反复进行系统试验,每次试验可以编入不同的程序,这样可以保证用户的系统设计达到最优。
而且随着用户的需要和发展,还可以进行修改,使系统不断能追随用户的最新要求。
STC8952引脚图如图3.5所示。
四、系统设计
1、直流电机调速原理:
本设计的主要思想为利用PWM控制占空比从而达到改变电机速度。
下面为PWM控制原理:
图1为PWM降压斩波器的原理电路及输出电压波形。
在图1a中,假定晶体
管V1先导通T1,秒(忽略V1的管压降,这期间电源电压Ud全部加到电枢上),然后关断T2秒(这期间电枢端电压为零)。
如此反复,则电枢端电压波形如图1b中所示。
电动机电枢端电压Ua为其平均值。
图1PWM降压斩波器原理电路及输出电压波形
a)原理图b)输出电压波形
(3)
式(3)中
(4)
为一个周期T中,晶体管V1导通时间的比率,称为负载率或占空比。
使用下面三种方法中的任何一种,都可以改变
的值,从而达到调压的目的:
(1)定宽调频法:
T1保持一定,使T2在0~∞范围内变化;
(2)调宽调频法:
T2保持一定,使T1在0~∞范围内变化
(3)定频调宽法:
T1+T2=T保持一定,使T,在0~T范围内变化。
不管哪种方法,
的变化范围均为0≤
≤l,因而电枢电压平均值Ua的调节范围为0~Ud,均为正值,即电动机只能在某一方向调速,称为不可逆调速。
当需要电动机在正、反向两个方向调速运转,即可逆调速时,就要使用图1—2a所示的桥式(或称H型)降压斩波电路。
在图2a中,晶体管V1、V4是同时导通同时关断的,V2、V3也是同时导通同时关断的,但V1与V2、V3与V4都不允许同时导通,否则电源Ud直通短路。
设V1、V4先同时导通T1秒后同时关断,间隔一定时间(为避免电源直通短路。
该间隔时间称为死区时问)之后,再使V2、V3同时导通T2秒后同时关断,如此反复,则电动机电枢端电压波形如图2b所示。
图2桥式PWM降压斩波器原理电路及输出电压波形
a)原理图b)输出电压波形
电动机电枢端电压的平均值为
(4)
由于0≤
≤1,Ua值的范围是-Ud~+Ud,因而电动机可以在正、反两个方向调速运转。
图3给出了两种PWM斩波电路的电枢电压平均值的特性曲线
。
图3两种斩波器的输出电压特性
2、直流电动机测速原理
电机的叶轮置于红外对射管之间,叶轮转过,挡住传感器,产生中断,给单片机,从而实现计数,进而计算出电机的速度。
四、设计方案及分析(包含设计电路图)
总体设计思路:
电机转动,利用光电传感器采集信号,送给单片机,单片机通过计算,将传感器采集到的信号通过数码管显示出来,流程图如下:
3、各硬件部分电路的设计:
电机驱动及调速电路的设计
采用专用电机控制集成芯片ULN2003a来控制电机转动及调速,该方案简单,可靠。
其电路图如下
其原理是:
ULN2003a芯片是16脚7路电机驱动芯片,这块芯片可以看做是7非门芯片,作用是保证1脚和16脚的输出为一高一低。
当某一时刻占空比大于50%时,电机呈现正转加速或者反转减速状态;某一时刻占空比小于50%时,电机呈现正转减速或者反转加速状态,电机就是通过矩形波占空比的不同来调节转速的电机呈现出来的转速是平均转速。
而我们这次是要测电机的两种转速,不需要电机的正反转,所以我们选择电机正转加速和正转减速。
4、转速测量原理
转速的测量方法很多,根据脉冲计数来实现转速测量的方法主要有M法(测频法)、T法(测周期法)和MPT法(频率周期法)等,该系统我们采用了M法。
M法(测频法):
在规定(定时)的检测时间内,检测光电传感器所产生的脉冲信号的个数来确定转速。
虽然检测时间一定但检测的起止时间具有随机性,因此M法测量转速在极端情况下会产生±1多个高低电平。
当被测转速较高或电机转动一圈发出的转速脉冲信号的个数较大时,才有较高的测量精度,因此M法适合于较高速测量。
由于转速是以单位时间(秒)内转数来测量,在变换过程中多数是有规律的重复运动。
根据光电效应原理,将一片5齿叶轮固定定在电机转轴上。
转盘随测轴旋转,叶轮也将跟着同步旋转,在转盘扫过光电器件ST151间时转动时,光敏三极管时所产生三极管的导通与否。
光电器(三极管E端)输出脉冲信号,其频率和转速成正比。
脉冲信号的周期与电机的转速有以下关系:
R=N/(5*T)
式中:
N为电机转转过圈数;5为电机转一圈的脉冲数;T定时时长。
根据上式即可计算出直流电机的转速(r/s)。
鉴于M法即测频法,能够很好的测量较高转速的电机,且其原理容易被设计者和使用者理解、掌握,故本次设计采用了M法。
5、传感检测电路
速度检测电路是由光电传感器和电机、叶轮组成。
测量电机转速的第一步就是要将电机地转速表示为单片机可以识别的脉冲信号,从而进行脉冲计数。
光电器件作为一种转速测量系统的传感器,具有结构牢固、体积小、重量轻、寿命长、安装方便等优点,当电机转动时,带动传感器,产生对应频率的脉冲信号,经过信号处理后输出到计数器或其他的脉冲计数装置,进行转速的测量。
在传感检测电路中,将光电传感器和电机进行有效相连,然后把光电传感器连接在单片机的外部中断端口。
工作时,当叶轮随转轴经过光电传感器时,由光电转换工作原理知,每次有一个叶轮转过时,将输出一个低电平信号;而当叶轮离开光电传感器后,又将输出一个高电平。
这样通过高低电平的转换,将其送入单片机后就可以测量它的转速。
其电路如图所示。
6、单片机最小系统电路
单片机最小系统电路如图3.4所示,由主控器STC89C52、时钟电路和复位电路三部分组成。
单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。
图3.4单片机最小系统
7、复位电路
单片机在RESET端加一个大于20ms正脉冲即可实现复位,上电复位和按钮组合的复位电路如图2。
在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。
只要该脉冲足够宽就可以实现复位,即
ms。
一般取R
1
,C
22uF。
当人按下按钮S1时,使电容C1通过R1迅速放电,待S1弹起后,C再次充电,实现手动复位。
R1一般取200
。
图2复位电路
8.时钟电路
当使用单片机的内部时钟电路时,单片机的XATL1和XATL2用来接石英晶体和微调电容,如图3所示,晶体一般可以选择3M~24M,电容选择30pF左右。
我们选择晶振为12MHz,电容33pF。
图3时钟电路
4)软件设计
(1)主程序设计
本系统采用STC89C52中的T0定时器和T1计数器配合使用对转速脉冲定时计数。
计数器T1工作于计数状态对外部脉冲进行计数;T0工作为定时器方式每次定时1s。
本设计程序编程的思想就是在给定的1s之内,用单片机的计数器T0对外部脉冲进行计数。
主程序的流程图如图4.1所示。
图4.5主程序流程图
(2)T0定时中断程序设计
T0定时中断程序主要是完成10ms的定时任务,并且对变量buf_min进行加一处理,其中在对T0进行赋初值时,选择为10236而不是10000。
主要是c语言在经过反汇编后,一条c语句将会编译成几条语句,这样就增加了指令执行的时间,使定时产生误差,而在经过多次调试后,选择10236为T0初值是最接近10ms的。
2.传感器脉冲信号采集电路的设计
采用光电式传感器ST151采集信号,其电路图如下
其原理是:
ST151光电式传感器内部是由一个发光二极管(左端)及一个光敏三极管(右端)组成,当电机的扇叶挡住发光二极管的时候,光敏三极管接收不到信号,不导通,此时,输出端出书低电平送给单片机进行处理,再送给数码管显示一个数,当电机扇叶(假设电机只有一个扇叶)连续挡住发光二极管的时候,光敏三极管连续不导通,连续送给单片机低电平,数码管就会显示一段时间内采集到的信号数量,即为电机的转速。
3.单片机时钟电路的设计
STC89C52单片机芯片内部设有一个由反向放大器所构成的振荡器,19脚为振荡器。
反相放大器和内部时钟发生电路的输入端,18脚为振荡器反相放大器的输出端,在18,19引脚上外接定时元器件,内部振荡电路就会产生自激震荡。
本系统采用的定时元器件为石英晶体(晶振)和电容组成的并联谐振回路,晶振频率为12MHz,电容大小为33pF。
电路图如下
该部分电路负责产生单片机所必需的时钟信号。
4.单片机复位电路的设计
STC89C52的复位是由外部的复位电路来实现的,复位电路通常采用上电复位和按钮复位两种方式。
本设计采用的是按钮复位方式,时钟频率选用12MHz,电容选用100uF的电解电容,电阻选用10千欧。
电路图如下
该部分电路作用是使单片机能够正常,有序,稳定地工作。
4.按键控制电路的设计
实验要求通过按键控制电机的转速,其电路图如下
开关按键是控制电机的起停,高低速按键是控制电机的两种转速
5.数码管显示电路
点亮LED显示器由两种方式:
静态显示和动态显示。
所谓静态显示,就是显示器显示某一个字符时,相应的发光二极管恒定的导通或截止,这种方式的电路,每一位可单独显示。
只要在要显示的那位段选线上保持段选电平,该位就能保持显示相应的显示字符。
这种电路的优点是:
在同一瞬间可以显示不同的字符;但缺点是占用的端口资源较多。
所谓动态显示,就是将要显示的多位LED显示器采用一个8位的段选端口,然后采用动态扫描方式一位一位地轮流点亮各位显示器。
本设计采用动态显示,采用四位共阳极数码管显示,电路图如下:
其中用到一个排阻作为保护电阻,保护数码管。
还用到四个三极管,是为了放大信号,一是为了提高数码管的亮度,二是为了避免信号太弱而无法显示。
4、数码管及显示电路
LED又称为数码管,它主要由8段发光二极管组成的不同组合,可以显示a~g为数字和字符显示段,h段为小数点显示,通过a~g为7个发光段的不同组合,可以显示0~9和A~F共16个数字和字母。
LED可以分为共阴极和共阳极两种结构。
共阴极结构即把8个发光二极管阴极连在一起。
这种装入数码管中显示字形的数据称字形码,又称段选码。
点亮LED显示器有两种方式:
一是静态显示:
二是动态显示。
所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定的导通或截止。
如图3.4所示
图3.4 静态显示电路
5、光电传感器
光电传感器是指能够将可见光转换成某种电量的传感器。
光敏二极管是最常见的光传感器。
光敏二极管的外型与一般二极管一样,只是它的管壳上开有一个嵌着玻璃的窗口,以便于光线射入,为增加受光面积,PN结的面积做得较大,光敏二极管工作在反向偏置的工作状态下,并与负载电阻相串联,当无光照时,它与普通二极管一样,反向电流很小(<µA),称为光敏二极管的暗电流;当有光照时,载流子被激发,产生电子-空穴,称为光电载流子。
在外电场的作用下,光电载流子参于导电,形成比暗电流大得多的反向电流,该反向电流称为光电流。
光电流的大小与光照强度成正比,于是在负载电阻上就能得到随光照强度变化而变化的电信号。
光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。
光敏三级管的外型与一般三极管相差不大,一般光敏三极管只引出两个极——发射极和集电极,基极不引出,管壳同样开窗口,以便光线射入。
为增大光照,基区面积做得很大,发射区较小,入射光主要被基区吸收。
工作时集电结反偏,发射结正偏。
在无光照时管子流过的电流为暗电流Iceo=(1+β)Icbo(很小),比一般三极管的穿透电流还小;当有光照时,激发大量的电子-空穴对,使得基极产生的电流Ib增大,此刻流过管子的电流称为光电流,集电极电流Ic=(1+β)Ib,可见光电三极管要比光电二极管具有更高的灵敏度。
图3.6光电传感器
本次设计采用的光电传感器如图3.6所示。
软件部分的设计
对于电机转速的测定,一般有两种方法:
一种是测频率,就是在给定时间内测电机转了几圈,这种方法适合于高速旋转的电机;另一种则是测周期,就是测电机转一圈的时间,这种方法适合于测低速的电机。
而我们这次使用的电机是一个高速的直流电机,所以就选用测频法来编程。
本系统采用STC89C52中的T0定时器和T1计数器配合使用对转速脉冲定时计数。
计数器T1工作于计数状态对外部脉冲进行计数;T0工作为定时器方式每次定时10ms。
本设计程序编程的思想就是在给定的10ms之内,用单片机自带的计数器T1对外部脉冲进行计数。
主程序的流程图如下:
五.问题分析与解决方法
问题1.电路板刚搭建好,接通电源的时候,数码管不亮。
分析:
电源有可能没接好,或者芯片没供电,或者是程序编写有问题。
解决方法:
通过检查编写的程序,没有发现错误。
再检查整个电路板,发现确实是因为单片机没有接电源,最后接上电源,数码管点亮了,但是有点暗,也就是出现的第二个问题。
问题2.数码管亮度很低,显示不清楚。
分析:
电压不够,或者是哪个部分所加的电阻太大。
解决方法:
通过用万用表检测电源,显示电压源是5V左右,没什么问题。
再检测每个管脚的电压高低,也没有问题。
最后考虑到信号的强弱问题,在单片机和数码管显示电路之间加了三极管,最后数码管亮度明显提高,能够清楚的显示数字。
问题3.接通电源,接上电机,发现数码管没反应,不计数。
分析:
可能是计数部分的程序问题,还有数码管的连接,传感器的连接有问题。
解决方法:
通过检查程序,没有发现错误,再检查显示电路的设计,也没发现问题,最后考虑到是不是数码坏了,或者是接法不对,通过更换传感器,数码管依然没变化,再通过网上查阅有关光电式传感器的资料,发现传感器接法不对,因为本次设计我们用的是光电式传感器,当电机扇叶每遮住传感器中的光敏二极管一次,就采集一个低电平作为脉冲信号送给单片机处理,而我们所连接的电路是每当电机扇叶不遮住光敏二极管,就采集一个高电平。
所以最后通过改变传感器的接法,实现了信号的采集,数码管才有了反应,整个电路的所有问题到此也就解决了。
六.设计结果
1.设计总电路图
开关按键控制电机的起停,高低速开关是控制电机的两种转速,从而测得这两种速度时的转速,并通过数码管显示其转数。
2.设计总程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbita0=P2^0;//千
sbita1=P2^1;//百
sbita2=P2^2;//数码管位选--十位
sbita3=P2^3;//数码管位选--个位
sbittest=P3^2;//传感器测试
sbitmotor=P1^0;//连接电机
sbitkaiguan=P1^4;//电机开关
sbitsudu1=P1^5;//速度改变按键
sbitsudu2=P1^6;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数值
uintdat;//计数变量
uintqian,bai,shi,ge;//计数变量
ucharx;//定时标志
ucharz;//开关标志
uinttimer1,aa;
/**************延时函数****************/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/******************数码管显示函数***********************/
voiddisplay()
{
a3=1;//显示ge位
P0=table[ge];
delay(5);
a3=0;
a2=1;//显示shi位
P0=table[shi];
delay(5);
a2=0;
a1=1;//显示bai位
P0=table[bai];
delay(5);
a1=0;
a0=1;//显示qian位
P0=table[qian];
delay(5);
a0=0;
}
/***************外部中断0**********************/
voidint0(void)interrupt0
{
dat++;
}
/***************定时器0中断********************************/
voidtime0_int(void)interrupt1
{
TH0=0x3C;//50毫秒
TL0=0xB0;
x--;
if(x==0)
{
x=21;
EX0=0;
dat=dat/5;
qian=dat/1000;
bai=(dat%1000)/100;
shi=(dat%100)/10;
ge=dat%10;
TR0=0;
}
}
/***************定时器1中断函数**********************/
voidtime1_int()interrupt3
{
TH1=0xFC;//10ms
TL1=0x18;
timer1++;
if(aa==1)//速度1
if((timer1<600)&&timer1>2)motor=1;
elsemotor=0;
if(timer1>600)
{
timer1=0;
}
if(aa==2)//速度2
if((timer1<600)&&timer1>550)motor=1;
elsemotor=0;
}
/***************变速函数*************************/
voidBianSu()
{
if(sudu1==0)//速度1
{
delay(3);
while(sudu1==0);
ET0=1;//开T0定时器
EX0=1;//外部中断0
aa=1;
timer1=0;
}
if(sudu2==0)//速度2
{
delay(3);
while(sudu2==0);
ET0=1;//开T0定时器
EX0=1;//外部中断0
aa=2;
timer1=0;
}
}
/*************开关函数*********************/
voidKaiGguan()
{
if(kaiguan==0)
{
delay(3);
while(kaiguan==0);
motor=1;//打开电机
z++;
//ET0=1;//开T0定时器
ET1=1;//开T1定时器
//EX0=1;//外部中断0
if(z==2)
{
motor=0;
z=0;
ET0=0;
ET1=0;
EX0=0;
}
}
}
/*****************初始化函数*****************/
voidInti()
{
motor=0;
kaiguan=1;
x=21;//定时一秒
P0=0xFF;//关闭数码管
test=1;
TMOD=0x11;//T1定时输出PWM波形调速,T0定时测速用
TH1=0xFC;//10毫秒定时
TL1=0x18;
TH0=0x3C;//50毫秒定时
TL0=0xB0;
IT0=1;//下降沿触发
EA=1;
TR0=1;
TR1=1;
PX0=1;
}
/******************主函数***************************/
voidmain()
{
Inti();
while
(1)
{
KaiGguan();
BianSu();
display();
}
}
5、设计体会与收获
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电机 测速 课程设计 PWM