直流风扇电机转速测量与PWM控制 论文.docx
- 文档编号:29429919
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:22
- 大小:194.93KB
直流风扇电机转速测量与PWM控制 论文.docx
《直流风扇电机转速测量与PWM控制 论文.docx》由会员分享,可在线阅读,更多相关《直流风扇电机转速测量与PWM控制 论文.docx(22页珍藏版)》请在冰豆网上搜索。
直流风扇电机转速测量与PWM控制论文
软件部分
本项目是对直流电机PWM调速器设计的实验,主要实现用单片对电动机的控制。
为实现系统的微机控制,在设计中,采用了STC89C51单片机作为整个控制系统的控制电路的核心部分,并用电动机驱动芯片L293D驱动电机,配以数码管显示,光电码盘模块,实现对电动机的转速的显示和测量;输入采用独立式键盘作为命令的输入,单片机在程序的控制下,不断产生PWM波形,H型驱动电路完成电机的正反转控制。
在设计中,采用PWM控制方式,通过改变PWM的占空比从而改变电动机的电枢电压,并采用PI算法调节占空比进而实现对电动机的速度控制。
设计的整个控制系统,在硬件结构上采用了大量的集成电路模块,大大的简化了硬件电路,提高了系统的稳定性和可靠性,使整个系统的性能得到提高。
(一)直流电机
额定功率Pn:
在额定电流和电压下,电机的负载能力。
额定电压Ue:
长期运行的最高电压。
额定电流Ie:
长期运行的最大电流。
额定转速n:
单位时间里面电机转速的快慢。
励磁电流If:
施加到电极线圈上的电流。
1.调速范围
调速范围是指最低可控转速到最高可控转速的范围,最低可控转速对最高可控转速的比值,叫电机的调速比。
2.调速的相对稳定性和静差度
所谓相对稳定性,是指负载转矩在给定的范围里面变化所引起的速度的变化,它决定于机械特性的斜率。
静差度(又称静差率)是指当电动机在一条机械特性上运行时,由理想空载到满载时的转速降落与理想空载转速n0的比值。
用百分数表示,即
,在一般的情况下,取额定转矩下的速度落差
,有
3.调速的平滑性
调速的平滑性是在一定的调速范围内,相邻两极速度变化的程度,用平滑系数
表示,即
式中
和
相邻两极,即i级与i-1级的速度
4.调速时的容许输出
调速时的容许输出是指电动机在得到充分利用的情况下,在调速的过程中轴能够输出的功率和转矩。
(二)STC89C51单片机
STC89C51单片机是一款低功耗、低电压、高性能CMOS8位单片机,片内含8KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器(EPROM),器件采用CMOS工艺和ATMEL公司的高密度,非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容,片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储编程器来编程。
因此,AT89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域[1]。
STC89C51具有以下主要性能:
1.4KB可改编程序FLASH存储器;
2.全表态工作:
0~24HZ;
3.256X8字节内部RAM;
4.32个外部双向输入,输出(I、O)口;
如图2.1。
图2-1STC89C51引脚说明
引脚功能说明如下[2]:
VCC:
电源电压。
GND:
地。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据线复用口。
作为输出口时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端。
在访问外部数据储存器或程序储存器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
FLASH编程和程序校验期间,P1接收低8位地址。
P2口:
P2是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序储存器或16位地址的外部数据储存器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据储存器(例如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。
FLASH编程或校验时,P2亦接收高位地址和其他控制信号。
P3口:
P3是一个带内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P3除了作为一般的I/O口线外,更重要的用途是它的第二功能,具体功能说明如表2-1。
P3口还接收一些用于FLASH闪速存储器编程和程序校的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
端口引脚
第二功能
P3.0
RXD(穿行输出口)
P3.1
TXD(穿行输入口)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器0)
P3.6
WR(外部数据写选通)
P3.7
RD(外部数据读选通)
表3-1P3口的第二功能表
即使不访问外部存储器,ALE仍以是时钟振荡频率的1/6输出固定的正脉冲信号,因此他可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT80C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序储存器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(Vcc端),CPU则执行内部程序储存器中的指令。
FLASH储存器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12v编程电压。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端
(三).显示设计
LED数码管是一种半导体发光器件,其基本单元是发光二极管,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字。
可以显示:
时间、日期、距离等可以用数字代替的参数。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳极数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,通过由各自独立的I/O线控制,当单片机的P0口输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对P2.4-P2.7位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在本设计中采用了四位七段数码管,用动态驱动来显示距离的值,如图5所示。
(四).软件设计
4.1主程序部分
程序的完整流程图如图4.1所示:
本程序的功能是通过对测量的转速,并用L293D器件来控制电机的转速,与电机转动的方向。
然后用4位数码管显示出来当前的转速与转动方向。
主程序程序设计如源程序代码。
是
是
否
是
图4.1主程序流程图
4.2数码管显示设计
4.2.1设计要求
数码管要显示当前各种状态,当前转速与当前转动方向。
当电机转速发生改变的时候,数码管显示内容立即显示当前转速。
4.2.2程序设计注意事项
(1)消除各个数码管之间的显示阴影部分;
(2)由于硬件没有锁存器,需要延长数码管的点亮时间,从而使数码管显示的更加清晰;
(3)合理运用程序空间,避免数码管显示不清晰;
(4)动态扫描可以实现各个数码管的不同显示。
4.2.3数码管显示程序设计
if(flat==0)
P0=table[11];//"C"
else
P0=table[12];//"A"
P2=0xfe;
delayms(3);
P2=0xfd;
P0=table[shuju/100];
delayms(3);
P2=0xfb;
P0=table[shuju%100/10];
delayms(3);
P2=0xf7;
P0=table[shuju%10];
delayms(3);
P2=0xff;//消隐部分
4.3功能程序设计
功能程序部分,主要实现各个按键的功能。
主要功能如下:
(1)启动/停止键:
用来控制电机的启动和停止按键;
(2)加速按键:
用来控制电机的转速,可以增加电机的当前转速;
(3)减速按键:
用来控制电机的转速,减缓电机的转速;
(4)正/反转按键:
改变电机的转动方向。
主要功能按键程序如下:
if(K4==0)//启动停止
{
delayms(5);
if(K4==0)
{
while(!
K4);
num=!
num;
}
}
if(K1==0)//加速键
{
delayms(5);
if(K1==0)
{
while(!
K1);
if(num<3)
num++;
}
}
if(K2==0)//减速键
{
delayms(5);
if(K2==0)
{
while(!
K2);
if(num>0)
num--;
}
}
if(K3==0)//电机正反转按键
{
delayms(5);
if(K3==0)
{
while(!
K3);
flat++;
if(flat==2)
flat=0;
}
}
5结束语
通过本次课程设计,使我学到了许多书本上无法学到的知识,也使我深刻领会到单片机技术应用领域的广泛。
不仅让我对我学过的单片机知识的巩固,同时也对单片机这门课产生了很大的兴趣,在课程设计的之中,体会良多,收获很大。
主要有以下方面:
1.巩固了书本上学习的知识,通过本次的课程设计,对书本上面的知识更加的了解,也对编写程序有了一定的认识。
2.在本次的课程设计中,我进一步加强了自己的动手的能力和运用专业知识的能力,从中学到如何去思考和解决问题
3.通过本次的课程设计,让我了解到单片机技术对当今人们生活的重要性。
同时这次课程设计也让我明白不管做什么事都要脚踏实地,刻苦努力的去做。
源程序代码:
/****************************************************
=========直流电机控制+速度显示==========
****************************************************/
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint
#defineCYCLE10//定义PWM的周期T为10ms
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff,0xc6,0x88};//0-9R共阳数码管段选数据
/***************************************************
端口定义
***************************************************/
sbitPWM1=P1^4;//PWM输出口1(电机正转)
sbitPWM2=P1^5;//PWM输出口2(电机反转)
sbitK1=P1^1;//加速
sbitK2=P1^2;//减速
sbitK3=P1^3;//正反转
sbitK4=P1^0;//启动停止
/***************************************************/
ucharPWM_ON=0;//PWM高电平时间
ucharcount=0;//中断计时
ucharnum=0;
ucharnum1=0;//中断时间计数
uintnum2=0;//外部中断次数
ucharflat=0;//正反转标示位
ucharflag=0;//刷新数据标示位
/***************************************************
函数名称:
延时子函数
函数功能:
按键消抖
***************************************************/
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/***************************************************
函数名称:
按键子函数
函数功能:
***************************************************/
voidkey()
{
if(K4==0)//启动停止
{
delayms(5);
if(K4==0)
{
while(!
K4);
num=!
num;
}
}
if(K1==0)//加速键
{
delayms(5);
if(K1==0)
{
while(!
K1);
if(num<3)
num++;
}
}
if(K2==0)//减速键
{
delayms(5);
if(K2==0)
{
while(!
K2);
if(num>0)
num--;
}
}
if(K3==0)//电机正反转按键
{
delayms(5);
if(K3==0)
{
while(!
K3);
flat++;
if(flat==2)
flat=0;
}
}
switch(num)
{
case0:
PWM_ON=0;break;//占空比为00%
case1:
PWM_ON=4;break;//占空比为40%
case2:
PWM_ON=7;break;//占空比为70%
case3:
PWM_ON=10;break;//占空比为100%
default:
break;
}
}
/*******速度数据采集*****************************************/
voidsudu()
{
uintshuju;
if(flag==1)
{
flag=0;
shuju=num2*2;//电机一秒转的圈数
num2=0;
}
if(flat==0)
P0=table[11];//"C"
else
P0=table[12];//"A"
P2=0xfe;
delayms(3);
P2=0xfd;
P0=table[shuju/100];
delayms(3);
P2=0xfb;
P0=table[shuju%100/10];
delayms(3);
P2=0xf7;
P0=table[shuju%10];
delayms(3);
P2=0xff;
}
voidinit()
{
PWM1=1;//初始化
PWM2=1;
TMOD=0x11;//打开定时器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EX0=1;
IT0=1;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET1=1;
TR1=1;
}
/**************************************************
函数名称:
主函数
函数功能:
**************************************************/
voidmain()
{
init();
while
(1)
{
key();
sudu();
}
}
/**************************************************
函数名称:
定时器/计数器0中断子函数
函数功能:
**************************************************/
voidT1_time()interrupt3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
count++;
if(count>CYCLE)
count=0;
if(count { if(flat==0) { PWM1=0; PWM2=1; } if(flat==1) { PWM1=1; PWM2=0; } } else//如果计时时间大于高电平时时间,电机停 { PWM1=1; PWM2=1; } } voidT0_time()interrupt1//定时器0 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num1++; if(num1==10)//每0.5s刷新一次数据 { num1=0; flag=1; } } voidtimer()interrupt0//外部中断1 { num2++; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直流风扇电机转速测量与PWM控制 论文 直流 风扇 电机 转速 测量 PWM 控制
![提示](https://static.bdocx.com/images/bang_tan.gif)