您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > 基于51单片机的PWM脉宽可调波的控制系统
基于51单片机的PWM脉宽可调波的控制系统学院:信息工程与自动化学院班级:15级通信152班姓名:xxx学号:xxxxxxx一、功能分析脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM控制系统的主要功能包括:1.实现PWM波的输出2.能够对PWM的占空比进行控制3.对占空比进行检测主体电路说明:1.51单片机最小系统2.PWM控制系统输入部分:利用51单片机的两个外部中断INT0和INT1,即P3.2和P3.3对PWM控制系统的占空比进行加和减3.PWM控制系统输出部分:利用P1.0对应的LED_BLUE对PWM占空比的变化进行更直观的显示,同时对PWM占空比进行检测,大于上限亮黄灯即P2.4,小于下限亮红灯即P2.0。方案说明:1、PWM控制系统初始化,PWM波,周期为10ms,占空比为50%,LED_BLUE闪烁。2、对PWM控制系统进行控制,按INT0对占空比进行增大,每次按下占空比增大2%,当占空比增大至上限99%时,黄灯LED_YELLOW亮起,说明占空比达到上限,停止外部中断0的增大控制,占空比被固定在99%,而LED_BLUE变为常亮。3、对PWM控制系统进行控制,按INT1对占空比进行减小,每次按下占空比减小2%,当占空比减小至下限1%时,红灯灯LED_RED亮起,说明占空比达到下限,停止外部中断1的减小控制,占空比被固定在2%,而LED_BLUE变为常灭。二、连接电路图三、STC51单片机介绍STC89C51RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含4KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。特点:(1)增强型1T流水线/精简指令集结构8051CPU(2)(5V单片机)/2.0V-3.8V(3V单片机(3)时钟频率0~35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节(5)片上集成512字节RAM(6)通用I/O口(27/23个),复位后为:准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片(8)EEPROM功能(9)看门狗(10)内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)(11)时钟源:外部高精度晶体/时钟,内部R/C振荡器。用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。常温下内部R/C振荡器频率为:5.2MHz~6.8MHz。精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz~8MHz(12)有2个16位定时器/计数器(13)外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒(14)PWM(4路)/PCA(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/下降沿中断均可支持)(15)STC89Cc516AD具有ADC功能。10位精度ADC,共8路(16)通用异步串行口(UART)(17)SPI同步通信口,主模式/从模式(18)工作温度范围:0-75℃/-40-+85℃四、总结单片机课程设计总共耗时2天.虽然在之前也认真听过课读过书.但是当把单片机拿到手上时还是毫无头绪.我们从附加部分开始入手慢慢的实现了要求的功能.感觉像是在摸着石头过河.PWM、外部中断等等由单片机实现的功能都是经过许多次尝试才实现的.这次课程设计最深刻的体会还是实践之重要性.亲手调试单片机相比于拿着书本学习要更生动、更深刻.学习单片机仅仅读通书本是远远不够的.同样我们专业还有许多像单片机这样在前辈们无数的工程实践中所产生的学科.前辈们总结的工程实践中的经验写到了书本中去.所以在学习时也应当将书上的东西具体落实到实践中.才会显示出我们大学所学的知识的宝贵价值.五、源码及注释#includereg51.h//包含51单片机寄存器定义的头文件#defineuintunsignedint#defineucharunsignedcharsbitout=P1^0;//pwm输出sbitled_r=P2^0;//红灯警示sbitled_y=P2^4;//黄灯警示uintpwm=50;//pwm初始化占空比ucharcounter=0;//周期计数/*******************************************函数功能:主函数******************************************/voidmain(void){EA=1;//开放总中断EX0=1;//允许使用外中断IT0=1;//选择负跳变来触发外中断EX1=1;//允许使用外中断IT1=1;//选择负跳变来触发外中断PX1=1;//外部中断INT1设置优先级TMOD=0x01;//定时器0设置模式1TH0=(65536-100)/256;//大约100usTL0=(65536-100)%256;ET0=1;//定时器0中断允许TR0=1;//启动定时器/计数器工作led_r=0;//红灯初始化led_y=0;//黄灯初始化while(1)//无限循环,防止程序跑飞{/*pwm大于上限,亮黄灯警示,停止外部中断INT0*/if(pwm=99)//pwm大于上限{pwm=99;//停在上限led_y=1;//亮黄灯警示EX0=0;}else{led_y=0;EX0=1;}/*pwm小于下限,亮红灯警示,停止外部中断INT1*/if(pwm=1)//小于1{pwm=1;//pwm小于下限led_r=1;//亮红灯警示EX1=0;}else{led_r=0;EX1=1;}}}/**************************************************************函数功能:外中断服务程序**************************************************************/voidint0(void)interrupt0//外中断0的中断编号为0{pwm+=2;//外部中断0INT0加占空比}voidint1(void)interrupt2//外中断0的中断编号为0{pwm-=2;//外部中断1INT1减占空比}/**************************************************************函数功能:定时器0中断服务程序**************************************************************/voidtimer0()interrupt1{TH0=(65536-100)/256;//重新赋初值100usTL0=(65536-100)%256;counter++;if(counter100)counter=1;//pwm周期100us*100=10msif(counter=pwm)out=1;//pwm占空比elseout=0;}
本文标题:基于51单片机的PWM脉宽可调波的控制系统
链接地址:https://www.777doc.com/doc-7119613 .html