单片机 占空比可调的PWM波形发生器概要文档格式.docx
- 文档编号:16349221
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:15
- 大小:219.70KB
单片机 占空比可调的PWM波形发生器概要文档格式.docx
《单片机 占空比可调的PWM波形发生器概要文档格式.docx》由会员分享,可在线阅读,更多相关《单片机 占空比可调的PWM波形发生器概要文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
实现对直流电机转速的调整,能够很方便的实现电机的智能控制。
主体电路:
即直流电机PWM控制模块。
这部分电路主要由AT89C51单片机的I/O端口、定时计数器、外部中断扩展等调整直流电机的转速,能够很方便的实现电机的智能控制。
其间是通过AT89C51单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。
该直流电机PWM控制系统由以下电路模块组成:
设计输入部分:
这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速控制。
设计控制部分:
主要由AT89C51单片机的外部中断扩展电路组成。
直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。
设计显示部分:
LED数码显示部分,实现对PWM脉宽调制占空比的实时显示。
三、方案设计
系统框架设计
总体设计方案的硬件部分详细框图如图一所示。
方案说明:
直流电机PWM调速系统以AT89C51单片机为控制核心,由命令输入模块、LED显示模块及电机驱动模块组成。
采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转和急停控制;
同时单片机不停的将PWM脉宽调制占空比送到LED数码管完成实时显示。
四、系统硬件设计
4.1硬件模块组成
(1)单片机控制模块
(2)L298电机驱动模块
(3)LED显示模块
(4)独立键盘控制模块3.3系统硬件各模块电路
4.2单片机整个控制模块
这里利用定时计数器让单片机P2口的P2.6、P2.7引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。
驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。
当需要改变电机转动方向时,两个引脚的输出相反。
定时计数器若干时间(1us)中断一次,就使P2.6或P2.7产生一个高电平或低电平。
直流电机的速度分成100个等级,因此一个周期就有100个脉冲,周期为一百个脉冲的时间,速度等级对应一个周期的高电平脉冲的个数。
占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。
一个周期加在电机两端的电压为脉冲高电压乘以占空比。
占空比越大,加在电机两端的电压越大,电机转动越快。
电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。
当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。
五、PWM的基本工作原理
PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
六、软件设计
主程序设计:
主程序部分主要对定时计数器T1的工作方式、中断入口地址、计数初值、中断产生、进行设置,为了方便程序编程。
主程序流程图
定时中断子程序设计
1.定时计数器TMOD设置
选用T0作为产生脉冲用的定时器并且使它工作在模式1下。
在模式1中,寄存器TH0和TL0以全8位参与操作,构成一个16位定时/计数器,当TH0溢出时向中断标志位TF0进位,并申请中断。
在这种模式下T0定时时间最长,有利于在更大的范围内对电机进行调速。
工作模式寄存器TMOD
TMOD的高4位用于T1,低4位用于T0,4种符号含义如下:
GATE:
门控位。
C/T:
定时/计数器方式选择位。
C/T=0为定时器方式,C/T=1时为计数器方式。
M1M0:
工作模式选择位,具体如下:
TMOD寄存器
GATEC/TM1M2GATEC/TM1M0
00010000
M1M0=00:
模式0(13位定时/计数器)
M1M0=01:
模式1(16位定时/计数器)
M1M0=10:
模式2(8位自动重装常数的定时/计数器)
M1M0=11:
模式3(2个8位定时/计数器,仅对T0)
因在程序中T0是作为定时器,T0的C/T控制位就应设置为0;
T0工作在模式1,TMOD中控制T0的M1M0应设置为01,其它位全部设置为0,即应给工作模式寄存器TMOD赋值01H。
2.工作方式1及初值计算
当M1,M0=01时,定时/计数器处于工作方式1,此时,定时/及数器的等效电路仍以定时器0为例,定时器1与之完全相同。
方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,而方式1则为16位,由TH0作为高8位,TL0为低8位,有关控制状态字(GATA、C/T、TF0、TR0)和方式0相同。
在工作方式1下,计数器的计数值范围是:
1—65536(216)。
当为定时工作方式1时,定时时间的计算公式为:
(216—计数初值)╳晶振周期╳12
如果单片机的晶振选为6.000MHz,则最小定时时间为:
[213—(216—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us)
(216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)
定时/计数器中的计数器是在计数初值基础上以加法计数的,并能在计数器从全“1”变为全“0”时自动产生溢出中断请求。
因此,可以把计数器计数初值设定为TC,定时器定时时间T的计算公式为:
T=(M-TC)T计数[2]式中M为计数器模值,该值和计数器工作模式有关。
在模式1时M为216。
在定时器模式下,T计数是单片机振荡周期的12倍。
上式也可写成:
TC=M-T/T计数在程序设计中工作模式为模式1,则计数器模值M=216=65536;
假设单片机仿真器的晶振频率为22.1184MHz,则:
T计数=12/(22.1184×
106)=5.425347×
10
若定时时间长度为30ms,则:
TC=65536-30×
10-3/5.425347×
10-7=10240=2800H
给定时器赋值时:
MOVTL0,#00H;
MOVTH0,#28H
3.中断设置
除特殊功能寄存器TCON和SCON中的某些位与中断有关以外,还有一个特殊功能寄存器即中断允许寄存器IE用来设定各个中断源的打开和关闭。
中断系统的结构框图
IE寄存器各位的含义如下:
EA(IE.7):
CPU的中断总允许标志位。
当EA=1时,CPU允许中断;
当EA=0时,CPU禁止所有的中断请求。
ES(IE.4):
串行口中断允许位。
当ES=1时,允许串行口中断;
当ES=0时,禁止中断。
ET1(IE.3):
定时器T1的溢出中断允许位。
当ET1=1时,允许T1中断;
当ET1=0时,禁止T1中断。
EX1(IE.2):
外部中断1的中断允许标志位。
当EX1=1时,允许外部中断1中断;
当ES=0时,禁止外部中断1中断。
ET0(IE.1):
定时器T0溢出中断允许位。
当ET0=1时,允许T0中断;
当ET0=0时,禁止T0中断。
EX0(IE.0):
外部中断0允许位。
当EX0=1时,允许外部中断0中断;
当EX0=0时,禁止外部中断0中断。
定时中断子程序流程
根据程序的需要,先为IE的各位赋值:
外部中断0的中断允许位:
EX0=1,允许外部中断SETBEX0
定时器T0溢出中断允许位:
ET0=1,允许中断请求SETBET0
允许中断(EA=1,CPU允许中断)SETBEA
串行口中断允许位:
ES=1,允许串行口中断SETBES
以上各位等于1时,CPU开放中断;
等于0时,CPU禁止该中断。
单片机系统复位后,IE中各位均被清零,即禁止所有中断。
因此程序中开T0中断则应将ET0置1,另外如果要使用中断EA也要置1,故应给IE赋值为82H。
七、系统功能调试
仿真整体图如下:
直流电机的调试功能仿真如下图:
加速分5档,波形依次如下:
减速分5档,波形如下:
八、设计总结
通过本次课程设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。
不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。
在本次课程设计过程中,我学会了有关本设计的各硬件的资源,其中包括:
直流电机PWM调速、AT89C51单片机、L289引脚图及其引脚功能、LED数码管显示等知识。
参考文献
[1]林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:
北京航空航天大学出版社,2006.9
[2]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:
北京航空航天大学出版社,2006.5
[3]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:
电子工业出版社,2007.4
[4]周润景,张丽娜.PROTEUS入门实用教程[M].北京:
机械工业出版社,2007.9
[5]楼然苗,李光飞.51系列单片机设计实例[M].北京:
北京航空航天大学出版社,2003.3
[6]楼然苗,李光飞.单片机课程设计指导[M].北京:
北京航空航天大学出版社,2007.7
直流电机PWM调速C语言程序:
#include<
reg51.h>
absacc.h>
#include<
intrins.h>
/********自定义变量********/
#defineuintunsignedint//自定义变量
#defineucharunsignedchar
chargw,sw,bw,qw;
ucharj;
//定时次数,每次20ms
ucharf=5;
//计数的次数
sbitP10=P1^0;
//PWM输出波形1
sbitP11=P1^1;
//PWM输出波形2
sbitP13=P1^3;
//加速
sbitP14=P1^4;
//减速
sbitP15=P1^5;
//停止
sbitP16=P1^6;
//启动
uchark;
uchart;
//脉冲加减
/*********控制位定义********************/
ucharcodesmg[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;
//计数567
TL1=0x00;
TR0=1;
//启动t0
TR1=1;
//启动t1
gw=sw=bw=qw=0;
//数码管初始化
P0=0xc0;
P2=1;
while
(1)//无限循环
{
display();
//数码管显示
key();
}
}
/***************数码管显示****************/
display()
{
uchari;
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];
delays();
}
elseif(i==3)//显示千位
}
i++;
}
/*****************延时函数*************************/
delays()
for(i=5000;
i>
0;
i--);
/*********t0定时*中断函数*************/
voidt0()interrupt1using2
//重装t0
f--;
if(k==0)
if(f<
t)
P10=1;
else
P10=0;
P11=0;
else
P11=1;
if(f==0)
f=5;
}
j++;
if(j==50)
j=0;
x=TH1*256+TL1;
//t1方式1计数,读入计数值
x++;
display();
/****************按键扫描**************/
key()
if(P12==0)//如果按下,
while(!
P12)//去抖动
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;
P10=0;
P11=0;
/****************END**************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 占空比可调的PWM波形发生器概要 可调 PWM 波形 发生器 概要
![提示](https://static.bdocx.com/images/bang_tan.gif)