蓝桥杯-pwm

本文参考该博主而写,这位博主大大写的十分详细,大家有兴趣可以去参考

(1条消息) 蓝桥杯单片机基础之PWM(Pulse width modulation)__WILLPOWER_的博客-CSDN博客https://willpower.blog.csdn.net/article/details/122393472我之所以再 画蛇添足 写这个是因为我想记录一下我作为小白视角如何去使用


(1)蓝桥杯第7届模拟风扇

蓝桥杯的使用包括:(1)按键控制引脚的不同PWM

 因此,先分析一下这种使用情况(基于蓝桥杯第7届模拟风扇

(1)pwm的实现原理

pwm实现,说白了就是控制信号的高低电平的比例!控制的方法通过定时器的中断函数进行控制。比如说,定时器时间设置为 1ms,那么到了 1ms就会进入该中断,这时我们设置一个计数值count,count是用来表示进入了几次中断,然后再设置一个max,表示一共需要进入多少次。当进入次数count=max时,count置为0,表示某信号的一个周期结束

那么,如何实现占空比呢。我们可以利用count和max的比例进行控制,比如max=10,count这时为5,并且count在 1-5期间时,引脚输出高电平,而在6-10期间输出低电平。那么我们就说pwm的占空比为50%。

那么,如何实现引脚输出高电平或者低电平呢?代码如下:

if(pwm_cnt++ < pwm_max );
		else
		{
			OutPut=1;
			pwm_cnt = 0;
		}
		if(pwm_cnt == pwm_table[pwn_i])
		{
			OutPut=0;
		}

 可能很多同学看不懂,因为我没把代码全部copy上来。不过没事,因为我是自己记录用的,如果有问题,欢迎评论区咨询。或者看下文的全代码

(2)周期以及占空比确定

该比赛中,要求P34为 1Khz,且占空比为 2,3,7的比例。由周期于频率成倒数。所以可得:T=1ms。此外,为了实现周期要求,中断函数进入时间必须 < 1ms,我们设置为 100us,如何max为10,这样10*100=1000us=1ms了。那么占空比的count分别为2,3,7.

uint pwm_cnt=0;
uint pwm_max=10;
uint pwm_table[]={2,3,7};
uint pwn_i=0;


void Timer0Init(void)		//100微秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x50;		//设置定时初始值
	TH0 = 0xFB;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;
}

void Timer0Handle() interrupt 1
{

		if(pwm_cnt++ < pwm_max );
		else
		{
			OutPut=1;
			pwm_cnt = 0;
		}
		if(pwm_cnt == pwm_table[pwn_i])
		{
			OutPut=0;
		}
}



void KS1()
{
	switch(key)
	{
		case 4:
			{
				pwn_i++;
				if(pwn_i==3)
				{
					pwn_i=0;
				}	
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值