蓝桥杯09-PWM脉冲调制的操作

目录

一、原理

二、设置思路:

三、题目练习


一、原理

 1.脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波占空比调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

2、配置PWM模块的功能,具体有:

①:设置PWM定时器周期,该参数决定PWM波形的频率。

②:设置PWM定时器比较值,该参数决定PWM波形的占空比。

3.简单来说,就是通过控制PWM的占空比duty(高电平所占时间)来实现所需的功能;(第七届比赛赛题)

二、设置思路:

计算出占空比在给定频率(1KHz)下的时间,通过引入count变量,以一个脉冲周期100次为例,60%占空比就是count++到60次高电平状态;当count=duty(占空比)时,执行操作;

对于多状态转换,使用状态机更好

三、题目练习

以b站小蜜蜂老师的题目为引例:

 

#include "reg52.h"

sbit L1 = P0^0;
sbit S7 = P3^0;

void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		
		case 4: P2 = (P2 & 0x1f) | 0x80; break;
		case 5: P2 = (P2 & 0x1f) | 0xa0; break;
    case 6: P2 = (P2 & 0x1f) | 0xc0; break;
	  case 7: P2 = (P2 & 0x1f) | 0xe0; break;
	}
	
}

unsigned char count=0;
unsigned char pwm_duty=0; //占空比设置为可变
void InitTimer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	
	ET0 = 1;
	EA = 1;
	
}

void ServiceTimer() interrupt 1
{
	TH0 = (65535 - 100) / 256;       //10 ms = 10000us  定时中断100us,则100次中断达到一个周期
	TL0 = (65535 - 100) % 256;       //    将一个脉冲划分为100份,若占空比10%,则计数10次高电平后计数90次低电平后置零完成
	
	count++;
	if(count == pwm_duty)
	{
		L1 = 1 ;
	}
	
	
	else if(count == 100)
	{
		L1 = 0;
		count = 0;
	}
	
	
}



void Delay(unsigned char t)
{
	while(t--);
}
unsigned char stat=0;
void ScanKey()
{
	if(S7 == 0)
	{
		Delay(500);
		if(S7 == 0)
		{
			 //多状态时使用状态机的跳转
			switch(stat)
			{
				case 0 : L1 = 0; 
								TR0 = 1;
								pwm_duty = 10;
								stat = 1;
				break;
				
				case 1 : 
								pwm_duty = 50;
								stat = 2;
				break;
				
				case 2 : 
								pwm_duty = 90;
								stat = 3;
				break;	
				
					case 3 : 
								L1 = 1;
					     TR0 = 0;
								stat=0;
				break;
			}
			while (S7 == 0); //防止出现误判误操作
		}
	
	}
}



void main()
{
	SelectHC573(4);
	L1 = 1;
	InitTimer0();
	while(1)
	{
		ScanKey();
	}
	
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值