一、原理部分

1、脉宽调制(PWM)基本原理

控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。

简单来说,就是通过调节一个周期内高电平的占比来实现对电压的控制,如上图,第一个脉冲为50%高电平、50%低电平,占空比为50%,第二个25%高电平、75%低电平,占空比为25%。

2、 PWM的实现

一般使用定时器,实现的流程为:

①编写定时器初始化函数,初始化定时器,设置定时器的THx、TLx的初始值

②编写中断服务函数,函数参数可以为占空比,在这个函数中实现PWM脉冲信号的周期设置与信号发生

定时器的设置可以观看我上一节的定时器原理及其应用。下面通过一个实际案例了解一下PWM的应用

二、程序案例

例子:通过按键S7实现对L1指示灯的4级控制,占空比分别为10%、50%、90%、0%

#include "reg52.h"sbit L1=P0^0;//定义引脚
sbit S7=P3^0;/*****************************************************************
*@Function:  SelectHC573    //
*@Description: 锁存器选择,这里只用到LED相关的锁存器    //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void SelectHC573()
{P2=P2&0x1f|0x80;
}unsigned char count=0;
unsigned char PWM_duty=0;/*****************************************************************
*@Function:InitTimer0  //
*@Description: 定时器0初始化 //
*@Input:无 //
*@Output: 无//
*@Return: 无 //
*@Others: 无 //
/*****************************************************************/
void InitTimer0()
{TMOD=0x01;//设置定时器模式 16位不可重装载模式TH0=(65536-100)/256;//设置定时器初始计数值,为100usTL0=(65536-100)%256;ET0=1;//使能定时器0中断EA=1;//使能总中断
}/*****************************************************************
*@Function: ServiceTimer0     //
*@Description: 定时器中断服务函数    //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others: 无 //
/*****************************************************************/
void ServiceTimer0() interrupt 1
{TH0=(65535-100)/256;//重新设置定时器初始值TL0=(65535-100)%256;count++;//计数变量加1// if(count<=PWM_duty)
//  {
//      L1=0;
//  }else if(count<100)
//  {
//      L1=0;
//  }else if(count==100)
//  {
//      count=0;
//  }if(count==PWM_duty)//如果等于设置的占空比(100份占比多少份){L1=1;//将L1灯开启}else if(count==100)//计数变量如果等于100,即100个100us后,为一个周期{L1=0;//关闭L1灯count=0;//计数变量置0,重新计数}
}/*****************************************************************
*@Function: DelayK     //
*@Description:用于按键延时     //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void DelayK(unsigned char t)
{while(t--);
}unsigned char stat=0;//设置状态变量/*****************************************************************
*@Function:  ScanKeys    //
*@Description: 按键扫描S7    //
*@Input:无 //
*@Output:无 //
*@Return: 无 //
*@Others:无  //
/*****************************************************************/
void ScanKeys()
{if(S7==0)//若S7按下{DelayK(100);if(S7==0){switch(stat)//switch实现S7四个状态,占空比分别为10%、50%、90%、0,实现对L1的亮度控制{case 0:L1=0;TR0=1;PWM_duty=10;stat=1;break;case 1:L1=0;TR0=1;PWM_duty=50;stat=2;break;case 2:L1=0;TR0=1;PWM_duty=90;stat=3;break;case 3:L1=1;TR0=0;stat=0;break;}while(S7==0);}}
}void main()
{SelectHC573();L1=1;InitTimer0();while(1){ScanKeys();}
}

感谢大家的观看

欢迎大家提出问题并指正~

[蓝桥杯单片机]学习笔记——PWM脉宽调制信号的发生与控制相关推荐

  1. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  2. 蓝桥杯单片机学习7——PWM脉宽调制控制LED的亮度

    上期我们学习了定时器的相关内容,这次我们来学习PWM脉宽调制 什么是PWM PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...

  3. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  4. 【蓝桥杯-单片机学习笔记(十七)】24C02原理及其读写操作

    一.24C02 24C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节.在24C02里面有一个8字节的页写缓冲器.24C02支持I2C总线协议.I2C是一种双向.两线串行通信接口, ...

  5. 【蓝桥杯-单片机学习笔记(十五)】NE555频率测量

    一.要求 在CT107D平台上测量NE555产生方波的频率值并显示在数码管上.频率数据显示用5位数码管,单位是Hz,数码管最左边显示"F".改变滑动变阻器Rb3可以改变频率大小. ...

  6. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

    一.要求 在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复. 二.数码管 1.七段数码管 七段数码管,其实内部由8个发光二极管构 ...

  7. 【蓝桥杯——单片机学习笔记】十二.LCD1602(STC15F2K60S2)

    一.原理图及引脚说明 可由Rb1电位器控制LCD的对比度 编号 引脚名 引脚说明 编号 引脚名 引脚说明 1 VSS 电源地 9 D2 Data I/O 2 VDD 电源正极 10 D3 Data I ...

  8. 【蓝桥杯-单片机学习笔记(十四)】DS1302

    一.DS1302介绍 1.功能介绍 DS1302包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口,实时时钟/日历提供包括秒.分.时.日期.月份和年份信息.闰年可 ...

  9. 【蓝桥杯-单片机学习笔记(十二)】工厂灯光控制系统

    一.要求 在CT107D单片机综合训练平台上,设计程序,实现实时显示开机系统运行时间和按键控制灯光. 1.设计系统初始化函数,关闭蜂鸣器和继电器等无关设备. 2.设计设备检测函数,首先检测LED灯,从 ...

最新文章

  1. 剑指offer系列之三十七:二叉树的深度
  2. 发现qq的mac输入法2.8,在终端全屏下输入不显示待选文字或单词
  3. 进击的Android Hook 注入术《一》
  4. python切面异常处理_Spring项目中优雅的异常处理
  5. phpcmsV9后台入口安全问题
  6. 345所开设人工智能本科专业高校名单大全
  7. java schema 验证_java实现的XMLschema验证是什么?
  8. LeetCode 72.编辑距离(动态规划)
  9. php使用 memcache 来存储 session
  10. 博图只能通过地址相同设备找到plc_很多人想要的博途PLC通讯控制变频器,PN方式,赶快收藏吧...
  11. linux进价命令(sort,comm,unip等)
  12. 夸克服务器过载或暂停维修,服务器过载或CGI脚本出错
  13. Ubuntu16.04安装Keepalived
  14. 杂牌蓝牙适配器驱动安装(转)
  15. 计算机格式化为ntfs,如何将u盘重新格式化为NTFS格式
  16. 给网页质量进行瘦身的办法-金瑞帆建站
  17. 宝塔面板IP域名绑定
  18. 成功解决502 Bad Gateway错误。
  19. 安全计算:使用ClamWin为高级用户提供免费病毒防护
  20. 苹果系统安装python环境_mac下python相关环境搭建(python开发必经之路之mac快速上手)...

热门文章

  1. 【nginx】proxy_temp目录权限问题【open() “proxy_temp/8/00/0000000008“ failed (13: Pe】
  2. DA14580开发工具的下载与使用
  3. Python开发环境的搭建(小白适用)
  4. 吉大计算机学院周丰丰,周丰丰-吉林大学计算机科学与技术学院
  5. 喜马拉雅第三方客户端开发(界面)。
  6. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
  7. <Principles of fMRI 1>课程笔记2 功能核磁数据的分析
  8. (转载) 如何定义一个号的变量名
  9. TP-LINK桥接无网断网的解决方法
  10. centos7.6配置网络并固定ip地址