您现在的位置:首页 > >

基于51单片机的PWM脉宽可调波的控制系统


基于 51 单片机的 PWM 脉宽可调波的 控制系统

学院: 信息工程与自动化学院 班级:15 级通信 152 班 姓名: xxx 学号: xxxxxxx

一、功能分析 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利 用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术, 广泛应用在从测 量、通信到功率控制与变换的许多领域中。 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 (In System Programming) 在系统可编程芯片, 最高工作时钟频率为 80MHz,片内含 4K Bytes 的可反复擦写 1000 次的 Flash 只读程序 存储器,器件兼容标准 MCS-51 指令系统及 80C51 引脚结构,芯片内集成了通用 8 位 中央处理器和 ISP Flash 存储单元,具有在系统可编程(ISP)特性,配合 PC 端的控制 程序即可将用户的程序代码下载进单片机内部, 省去了购买通用编程器, 而且速度更快。 STC89C51RC 系列单片机是单时钟/机器周期(1T)的兼容 8051 内核单片机,是高速/ 低 功耗的新一代 8051 单片机, 全新的流水线/精简指令集结构,内部集成 MAX810 专用复 位电路。 特点: (1)增强型 1T 流水线/精简指令集结构 8051 CPU (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 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断 低电平触发中断方式唤醒 (14)PWM( 4 路)/ P C A(可编程计数器阵列) ,也可用来再实现 4 个定时器或 4 个外部中断(上升沿中断/ 下降沿中断均可支持) (15)STC89Cc516AD 具有 ADC 功能。10 位精度 ADC,共 8 路 (16)通用异步串行口(UART) (17)SPI 同步通信口,主模式/ 从模式 (18)工作温度范围:0 -75℃/ -40 -+85℃ 四、总结 单片机课程设计总共耗时 2 天. 虽然在之前也认真听过课读过书. 但是当把单片机 拿到手上时还是毫无头绪. 我们从附加部分开始入手慢慢的实现了要求的功能. 感觉像 是在摸着石头过河. PWM、 外部中断等等由单片机实现的功能都是经过许多次尝试才 实现的. 这次课程设计最深刻的体会还是实践之重要性 . 亲手调试单片机相比于拿着书本 学习要更生动、更深刻. 学习单片机仅仅读通书本是远远不够的. 同样我们专业还有许 多像单片机这样在前辈们无数的工程实践中所产生的学科 . 前辈们总结的工程实践中 的经验写到了书本中去. 所以在学习时也应当将书上的东西具体落实到实践中. 才会显 示出我们大学所学的知识的宝贵价值. 五、源码及注释 #include<reg51.h>

//包含 51 单片机寄存器定义的头文件

#define uint unsigned int #define uchar unsigned char sbit out=P1^0; sbit led_r=P2^0; sbit led_y=P2^4; uint pwm=50; uchar counter=0; //pwm 输出 //红灯警示 //黄灯警示 //pwm 初始化占空比 //周期计数

/******************************************* 函数功能:主函数 ******************************************/ void main(void) { EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=1; //选择负跳变来触发外中断

EX1=1; //允许使用外中断 IT1=1; //选择负跳变来触发外中断 PX1=1; //外部中断 INT1 设置优先级 TMOD=0x01; TH0=(65536-100)/256; TL0=(65536-100)%256; ET0=1; TR0=1; led_r=0; //红灯初始化 led_y=0; //黄灯初始化 while(1) { //无限循环, 防止程序跑飞 //定时器 0 设置模式 1 //大约 100us //定时器 0 中断允许 //启动定时器/计数器工作

/*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; } }

} /************************************************************** 函数功能:外中断服务程序 **************************************************************/ void int0(void) interrupt 0 //外中断 0 的中断编号为 0 { pwm+=2; //外部中断 0 INT0 加占空比 } void int1(void) interrupt 2 //外中断 0 的中断编号为 0 { pwm-=2; //外部中断 1 INT1 减占空比 } /************************************************************** 函数功能:定时器 0 中断服务程序 **************************************************************/ void timer0() interrupt 1 { TH0=(65536-100)/256; //重新赋初值 100us TL0=(65536-100)%256; counter++; if(counter>100) counter=1; //pwm 周期 100us*100=10ms if(counter<=pwm) out=1; //pwm 占空比 else out=0; }



热文推荐
友情链接: 简历 面试求职范文 职业规划 自我管理 社交礼仪 76242百科