利用51单片机定时器模拟输出PWM波

PWM即为“脉冲宽度调制”

脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中

 使用定时器0做为PWM波的一个周期,然后改变一个周期的高电平和低电平时间,高低电平时间加起来就是一个周期,周期一旦固定好是恒定不变的,改变脉宽宽度(占空比)

 GPIO初始化,单片机系统时钟为11.0592MHZ

#include <STC8G.h>

//系统时钟为11.0592MHZ

#define DOW   P32
#define UP	  P33
#define PWM   P54

//引脚初始化
void GPIO_Init(void)
{
	P3M0 &= ~(1<<2);
	P3M1 &= ~(1<<2);
	P3M0 &= ~(1<<3);
	P3M1 &= ~(1<<3);
	
	P5M0 |= 1<<4;
	P5M1 &= ~(1<<4);
}

 定时器0初始化函数,定时器时间为10us中断一次,中断100次则1ms,即周期是1KHZ

//定时器0初始化
void Time0_Init(void)
{
	TMOD &= 0xF0;
	TMOD |= 0x00; //配置定时器0为16位自动重装模式
//	TH0 = 0xFC; //1ms
//	TL0 = 0x66;
	TH0 = 0xFF;   //10us
	TL0 = 0xF7;
	TR0 = 1;      //定时器0运行使能
	ET0 = 1;      //使能定时器0中断
	EA = 1;       //开启总中断
}

 按键调节占空比需要定义一个变量,占空比上电默认为10%

//PWM占空比调整
unsigned char Dut=10;

按键调整占空比函数

//PWM占空比调节按键扫描函数
void Key_Scan(void)
{
	static bit Keyup_Flag=1,Keydow_Flag=1;
	
	if(UP != Keyup_Flag)
	{
		if(Keyup_Flag == 0)
		{
			Dut += 5;			//按键按下每次增加5
			if(Dut >= 100)
				Dut = 100;
		}
		Keyup_Flag = UP;
	}
	
	if(DOW != Keydow_Flag)
	{
		if(Keydow_Flag == 0)
		{
			if(Dut != 10)
				Dut -= 5;      //按键按下每次减少5
		}
		Keydow_Flag = DOW;
	}
}

已下是定时器0中断函数,即PWM输出

void main(void)
{
	GPIO_Init();    //引脚配置初始化
	Time0_Init();   //定时器0初始化
	
	while(1)
	{
		Key_Scan();
	}
}

//定时器0中断服务函数
void Time0_ISR(void) interrupt 1
{
	static unsigned char PWM_CNT=0;
	static bit PWM_Out=0;  //此变量为在Debug中使用,在实际中是不需要的
	
	PWM_CNT++;
	if(PWM_CNT > Dut)
	{
		PWM = 0;
		PWM_Out = 0;
	}
	else
	{
		PWM = 1;
		PWM_Out = 1;
	}
	
	if(PWM_CNT >= 100)
		PWM_CNT = 0;
}

keil仿真输出波形图

占空比:10%

 占空比:50%

 占空比:95%

压缩文件下载链接:https://download.csdn.net/download/qq_43265868/86339425?spm=1001.2014.3001.5501

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值