基于89C51的单极性PWM控制课程设计Word文档下载推荐.docx
- 文档编号:4776641
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:15
- 大小:850.15KB
基于89C51的单极性PWM控制课程设计Word文档下载推荐.docx
《基于89C51的单极性PWM控制课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于89C51的单极性PWM控制课程设计Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定。
并且在采用单片机产生PWM脉冲的软件实现上比较方便。
开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。
PWM软件实现方式
方案一:
采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。
方案二:
采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。
故采用方案一。
4、设计结果与分析
系统硬件电路设计
硬件电路设计框图如下图所示,硬件电路结构初步设想由以下4部分组成:
按键控制电路、单片机、电机驱动电路、数码管显示电路。
驱动部分采用了直流电动机驱动芯片LMD18200T构成。
控制部分采用C语言编程控制,STC89C52芯片的定时器产生PWM脉冲波形,通过调节波形的宽度来控制驱动电动机的电压,便能够实现对电机速度的控制。
根据硬件系统电路设计框图,对各部分模块的原理进行分析,编写个子模块
程序,最终将其组合
矩阵式按键
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
消除键抖动。
一般按键在按下的时候有抖动的问题,即键的簧片在按下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。
若在簧片抖动时进行扫描就可能得出不正确的结果。
因此,在程序中要考虑防抖动的问题。
最简单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描”,延迟时间为10~20ms。
程序采用查询工作方式,即直接在主程序中插入键盘检测子程序,主程序每执行一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果把没有键按下,则跳过键识别,直接执行主程序;
如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。
单片机开发板
近年来,单片机的发展非常迅速,就通用单片机而言,世界上一些著名的计算机厂家已投放市场的产品就有50多个系列,数百个品种。
尽管单片机的品种很多,但是在我国使用最多的还是Intel公司的MCS—51系列单片机和美国Atmel公司的89C51单片机MCS—51[7]系列单片机包括三个基本型8031、8051、8751。
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
电机驱动电路
在电动机驱动信号方面,我们采用了占空比可调的周期矩形信号控制。
脉冲频率对电动机转速有影响,脉冲频率高连续性好,但带带负载能力差脉冲频率低则反之。
通过P3.7输入信号对PWM占空比调整来对车速进行调节,P3.3输入高电平控制电动机停止,P3.6输入高低电平分别控制电动机的正转与反转。
驱动电路采用LMD18200直流电机驱动芯片,LMD18200是专用于直流电动机驱动的H桥组件。
LMD18200广泛应用于打印机、机器人和各种自动化控制领域。
数码管显示电路
显示电路采用两个8段共阳4位数码管,分别对正、反转,电机旋转圈数和转速进行显示。
74HC573是拥有八路输出的锁存器,加上上拉电阻,单片机通过控制锁存器控制数码管位码的显示。
系统的软件设计
中断处理子程序
采用定时器0中断,定时器0工作在模式1,产生PWM波。
调速档通过(5-95)共8档固定占空比,以实现调速档位的实现。
PWM脉宽控制
一个脉冲周期可以由高电平持续时间t1和低电平持续时间t2组成,占空比为t1/(t1+t2),因此要实现定频调宽的调速方式,只需通过程序改变全局变量speed的值。
5、设计体会
通过对PWM脉宽直流调速系统的设计,使我更深刻的理解课本所学知识,对双闭环系统的设计步骤和设计过程有了更深入的了解。
通过本次课程设计,加深了对所学电力拖动自动控制系统课程知识的理解,特别是单极性闭环pwm直流调速系统的设计,以及PWM在调速中的运用和作用。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到各种各样的问题,由于对很多知识掌握的不够熟练,解决这些问题可以说得是困难重重,通过向同学请教,自己查阅书籍,总算完成了这次的课程设计,这次的课程设计很好的锻炼了自己的操作能力,相信在以后的工作中遇到相似的问题自己一定可以很好的完成任务。
#include<
reg52.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineGPIO_KEYP2
sbitBRA=P3^3;
//制动
sbitPWM=P3^7;
//调速
sbitDIR=P3^6;
//转向
ucharflag,KeyValue;
//方向标志位
ucharspeed=55;
//初始转速
uintnum,ON;
//圈数
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/****************************************************************
*延时函数
****************************************************************/
voiddelay(uintx)
{
uchari;
while(x--)
{for(i=0;
i<
110;
i++);
}
*名称:
init()
*功能:
初始化函数,设置串口,定时器0
*输入:
无
*输出:
voidinit()
{
TMOD=0x31;
//定时器0工作在模式1,产生PWM波
TH0=0xff;
//定时100us
TL0=0xa4;
TR0=1;
//开定时器0
ET0=1;
//开定时器0中断
EA=1;
//开总中断
display()
显示子函数,显示圈数,转速和转向,停止指示
圈数,转速,转向
voiddisplay_sum(num)//圈数显示
P0=table[num%1000/100];
//显示圈数百位
P1=0x02;
delay
(1);
P1=0;
P0=table[num%100/10];
//显示圈数十位
P1=0x04;
P0=table[num%10];
//显示圈数个位
P1=0x08;
voiddisplay_speed(speed)//转速显示
P0=table[speed%100/10];
//显示转速十位
P1=0x10;
P0=table[speed%10];
//显示转速个位
P1=0x20;
voiddisplay_dir(flag)//方向显示
P0=table[flag];
P1=0x01;
voiddisplay_OFF()//停止指示
P0=0xc0;
P0=0x8e;
}
dispose()
正反转加减速子函数
voiddispose()//按键处理
chara=0;
GPIO_KEY=0xf0;
if(GPIO_KEY!
=0xf0)//读取按键是否按下
{
delay(5);
//延时5ms进行消抖
if(GPIO_KEY!
=0xf0)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0xe0):
KeyValue=0;
break;
case(0xd0):
KeyValue=1;
case(0xb0):
KeyValue=2;
case(0x70):
KeyValue=3;
}
//测试行
GPIO_KEY=0x0f;
case(0x0e):
KeyValue=KeyValue;
case(0x0d):
KeyValue=KeyValue+4;
case(0x0b):
KeyValue=KeyValue+8;
case(0x07):
KeyValue=KeyValue+12;
}
if(KeyValue==0)//停止
{
BRA=1;
ON=0;
//刹车
if(KeyValue==1)//正转
BRA=0;
//关刹车
DIR=1;
//电机正转
PWM=1;
//开电机
flag=0;
//电机正转标志
ON=1;
if(KeyValue==2)//反转
DIR=0;
//电机反转
flag=1;
//电机反转标志
}
if((KeyValue==3)&
&
(speed<
=90))//加速
{
speed=speed+10;
if((KeyValue==4)&
(speed>
=10))//减速
speed=speed-10;
while((a<
50)&
(GPIO_KEY!
=0x0f))//检测按键松手检测
delay(10);
a++;
KeyValue=0;
}
}
*主函数
voidmain()
init();
PWM=1;
P0=0xff;
P1=0x00;
while
(1)
dispose();
//按键处理
if(ON)
{
display_speed(speed);
//显示速度
display_sum(num);
//显示圈数
display_dir(flag);
//显示转向
else
display_OFF();
}
timer0()
定时器0子函数,产生PWM波
voidtimer0()interrupt1//PWM频率为1/(100us*100)=10kHz
{
ucharcount;
//100us
if(count==speed)
PWM=0;
//关电
count++;
if(count==100)
count=0;
PWM=1;
//开电
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 C51 极性 PWM 控制 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)