15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx

上传人:b****6 文档编号:18848558 上传时间:2023-01-01 格式:DOCX 页数:10 大小:122.80KB
下载 相关 举报
15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx_第1页
第1页 / 共10页
15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx_第2页
第2页 / 共10页
15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx_第3页
第3页 / 共10页
15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx_第4页
第4页 / 共10页
15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx

《15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

15基于单片机STC89C52的直流电机PWM调速控制系统Word文档格式.docx

而用PWM技术后,避免上述的缺点,实现了数字式控制模拟信号,可以大幅度减低成本和功耗。

并且PWM调速系统开关频率较高,仅靠电枢电感的滤波作用就可以获得平滑的直流电流,低速特性好;

同时,开关频率高,快响应特性好,动态抗干扰能力强,可获很宽的频带;

开关元件只需工作在开关状态,主电路损耗小,装置的效率高,具有节约空间、经济好等特点。

随着我国经济和文化事业的发展,在很多场合,都要求有直流电机PWM调速系统来进行调速,诸如汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合。

1.2本设计任务:

任务:

单片机为控制核心的直流电机PWM调速控制系统设计的主要内容以及技术参数:

功能主要包括:

1)直流电机的正转;

2)直流电机的反转;

3)直流电机的加速;

4)直流电机的减速;

5)直流电机的转速在数码管上显示;

6)直流电机的启动;

7)直流电机的停止;

第二章:

总体设计方案

总体设计方案的硬件部分详细框图如图一所示。

键盘向单片机输入相应控制指令,由单片机通过P1.0与P1.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过信号放大、光耦传递,驱动H型桥式电动机控制电路,实现电动机转向与转速的控制。

电动机的运转状态通过数码管显示出来。

电动机所处速度级以速度档级数显示。

正转时最高位显示“三”,其它三位为电机转速;

反转时最高位显示“F”,其它三位为电机转速。

每次电动机启动后开始显示,停止时数码管显示出“0000”。

1、系统的硬件电路设计与分析

电动机PWM驱动模块的电路设计与实现具体电路见下图。

本电路采用的是基于PWM原理的H型桥式驱动电路。

PWM电路由复合体管组成H型桥式电路构成,四部分晶体管以对角组合分为两组:

根据两个输入端的高低电平决定晶体管的导通和截止。

4个二极管在电路中起防止晶体管产生反向电压的保护作用,防止电动机两端的电流和晶体管上的电流过大的保护作用。

在实验中的控制系统电压统一为5v电源,因此若复合管基极由控制系统直接控制,则控制电压最高为5V,再加上三极管本身压降,加到电动机两端的电压就只有4V左右,严重减弱了电动机的驱动力。

基于上述考虑,我们运用了TLP521-2光耦集成块,将控制部分与电动机的驱动部分隔离开来。

输入端各通过一个三极管增大光耦的驱动电流;

电动机驱动部分通过外接12V电源驱动。

这样不仅增加了各系统模块之间的隔离度,也使驱动电流得到了大大的增强。

在电动机驱动信号方面,我们采用了占空比可调的周期矩形信号控制。

脉冲频率对电动机转速有影响,脉冲频率高连续性好,但带带负载能力差脉冲频率低则反之。

经实验发现,当电动机转动平稳,但加负载后,速度下降

明显,低速时甚至会停转;

脉冲频率在10Hz以下,电动机转动有明显跳动现象。

而具体采用的频率可根据个别电动机性能在此范围内调节。

通过P10输入高电平信号,P11输入低电平,电机正转;

通过P10输入低电平信号,P11输入高电平,电机反转;

P10、P11同时为高电平或低电平时,电机不转。

通过对信号占空比的调整来对电机转速进行调节。

2、系统的软件设计

本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和数码管显示等部分的设计。

单片机资源分配如下表:

P0

显示模块接口

键盘中断

P1

键盘模块接口

P1.0/P1.1

PWM电机驱动接口

系统时钟

①PWM脉宽控制:

本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下:

/*****************延时函数*************************/delays()

{

uchari;

for(i=5000;

i>

0;

i--);

}

②键盘中断处理子程序:

采用中断方式,按下键,完成延时去抖动、键码识别、按键功能执行。

要实现按住加/减速键不放时恒加或恒减速直到放开停止,就需在判断是否松开该按键时,每进行一次增加/减少一定的占空比。

③显示子程序:

利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。

④定时中断处理程序:

采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。

对定时器置初值B1E0H可定时20ms,即系统时钟精度可达0.02s。

当20ms定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。

3、软件设计中的特点:

对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停止匀加速到默认速度,停止则由于当前速度逐渐降至零。

这样有利于保护电机。

键盘处理上采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。

第三章:

系统硬件电路设计

第四章:

系统功能调试

3、输出波形如下:

4、加速分5档,波形依次如下:

5、减速分5档,波形如下:

第五章:

程序

/************头文件*********/

#include<

reg51.h>

absacc.h>

#include<

intrins.h>

/**************************/

/********自定义变量********/

#defineuintunsignedint//自定义变量

#defineucharunsignedcharchargw,sw,bw,qw;

ucharj;

//定时次数,每次20msucharf=5;

//计数的次数

sbitP10=P1^0;

//PWM输出波形1sbitP11=P1^1;

//PWM输出波形2sbitP12=P1^2;

//正反转

sbitP13=P1^3;

//加速sbitP14=P1^4;

//减速sbitP15=P1^5;

//停止sbitP16=P1^6;

//启动uchark;

uchart;

//脉冲加减

/**************************/*

/*********控制位定义********************/

ucharcode

smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};

//程序存储区定义字型码表

chardataled[4]={0x08,0x04,0x02,0x01};

//位码uintx;

//数码管显示的数值

display();

//数码管显示delays();

//延时函数key();

displays();

/*****************************************/

/***************主函数********************/main(void)

TMOD=0x51;

//T0方式1定时计数T1方式1计数TH0=0xb1;

//装入初值20MS

TL0=0xe0;

TH1=0x00;

//计数567TL1=0x00;

TR0=1;

//启动t0

TR1=1;

//启动t1gw=sw=bw=qw=0;

//数码管初始化P0=0xc0;

P2=1;

while

(1)//无限循环

//数码管显示key();

/***************数码管显示****************/display()

gw=x%10;

//求速度个位值,送到个位显示缓冲区sw=(x/10)%10;

//求速度十位值,送到十位显示缓冲区bw=(x/100)%10;

//求速度百位值,送到百位显示缓冲区qw=x/1000;

//求速度千位值,送到千位显示缓冲区for(i=0;

i<

4;

P2=led[i];

if(i==0)//显示个位

P0=smg[gw];

delays();

elseif(i==1)//显示十位

P0=smg[sw];

elseif(i==2)//显示百位

P0=smg[bw];

elseif(i==3)//显示千位

if(k==0)//正转时显示"

三"

P0=0x49;

delays();

else

i++;

P0=0x71;

//反转时显示"

F"

/*******************************************************/

/************************************************/

/*********t0定时*中断函数*************/voidt0()interrupt1using2

TH0=0xb1;

//重装t0TL0=0xe0;

f--;

if(k==0)

if(f<

t)P10=1;

elseP10=0;

P11=0;

t)P11=1;

elseP11=0;

P10=0;

if(f==0)

{f=5;

}j++;

if(j==50)

{j=0;

x=TH1*256+TL1;

//t1方式1计数,读入计数值TH1=0x00;

TL1=0x00;

x++;

/****************按键扫描**************/key()

if(P12==0)//如果按下,

while(!

P12)//去抖动display();

k=~k;

if(P16==0)//启动

while(P16==0);

IE=0x8a;

if(P13==0)//加速

while(P13==0);

t++;

if(t>

=5)t=5;

if(P14==0)//减速

while(P14==0);

t--;

if(t<

1)t=1;

if(P15==0)//停止

while(P15==0);

EA=0;

/******************************************************/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1