C语言-嵌入式开发-C51:为什么要用PWM调制?

        掌握PWM是作为嵌入式开发逃不掉一项基本技能,那首先我们先来了解一下到底什么是PWM吧!!!

PWM 是 Pulse Width Modulation(脉冲宽度调制)的缩写,是一种常用的信号调制技术,主要应用于模拟控制和功率变换领域。以下是关于 PWM 的详细说明:

基本原理

脉冲宽度调制通过周期性地产生一系列固定频率的脉冲波形,其中每个脉冲的持续时间(即脉冲宽度)可变,而脉冲序列的总周期保持不变。关键在于,脉冲的占空比(即脉冲宽度与整个周期之比)与所需控制的物理量(如电压、电流、功率等)成比例关系。这样,通过调整脉冲宽度(即占空比),就可以在数字信号的框架下实现对模拟量的精确控制。

应用场景

PWM 在多个领域有着广泛的应用,包括但不限于:

  • 电源管理与变换:在开关电源、电机驱动器、LED 照明调光等领域,PWM 可以用来控制输出电压或电流的平均值,实现功率的高效转换和精确调节。例如,在开关电源中,通过改变开关器件(如晶体管或 MOSFET)的导通时间(即脉冲宽度),可以在保持开关频率不变的情况下调整输出电压。

  • 电机控制:对于直流电机、无刷直流电机(BLDC)和步进电机等,PWM 信号被用来驱动电机控制器,通过调整占空比来控制电机的速度、转矩或方向。在伺服系统中,PWM 还用于精确控制伺服电机的位置和速度。

  • 通信与控制:PWM 可用于简单且低速的数据传输,如遥控模型中的舵机控制,其中脉宽对应特定的角度位置。此外,PWM 信号也可用于传感器数据的编码和解码,如某些温度传感器输出的 PWM 信号,其占空比与测量温度成一定关系。

  • 音频与音频功放:在某些低成本或特定应用的音频系统中,PWM 被用于音频信号的数字化处理和放大。通过快速切换音频信号对应的 PWM 波形,可以在扬声器端重建出近似的模拟音频信号。

  • 照明控制:LED 灯具的亮度控制常采用 PWM 方式,通过调整 LED 驱动电流的占空比,可以在不改变颜色特性的前提下平滑调节光照强度。

特点与优势

PWM 技术具有以下特点与优势

  1. 数字控制模拟量:PWM 允许使用微处理器等数字设备直接控制原本需要模拟信号处理的电路,简化了硬件设计,提高了系统的集成度和灵活性。

  2. 效率高:在开关电源和电机驱动等应用中,PWM 控制的开关元件工作在开关状态(全开或全关),减少了线性工作的损耗,从而实现高效率的能量转换。

  3. 噪声抑制:通过选择合适的开关频率和滤波设计,PWM 输出的高频纹波可以被有效滤除,得到平滑的模拟输出,同时降低电磁干扰(EMI)。

  4. 分辨率可调:通过增加PWM 的频率或者改进调制算法,可以提高控制的分辨率,实现更细腻的模拟量控制。

  5. 易于实现:现代微控制器和数字信号处理器通常内置 PWM 生成模块,简化了软件编程和硬件接口设计。

综上所述,PWM 是一种利用数字手段对模拟电路进行有效控制的技术,通过改变脉冲宽度(占空比)来精确调节电压、电流、功率等物理量,广泛应用于电源管理、电机控制、通信、照明等多个领域,以其高效、灵活、易于实现等优点备受青睐。

         当然以上都是文献讲解,要是我们能认认真真的去看完文献资料,那各位看官也不会点进我的文章了哈哈哈!开个玩笑,在座的各位都是大帅哥、大美女!!!

        通俗点来讲,我们都知道,所有电子设备中,都涉及到了一个叫做脉冲信号(晶振)的东西,它是我们基本上所有电子芯片、模块、设备的大脑,所有的决定都是基于它来实现的。

        我们大多数的指令都是根据脉冲信号的不同波动来周期性的Write或Read,讲的恶俗一点就拿拍手(papapa)来举例,假如我拍一次手掌要花1秒,来看图

        我每一次击掌,合拢的时间为0.5s,松手的时间为0.5s,合起来的1s就构成了我们一次击掌的频率。那么这是默认所有人的papapa的频率,你如果说想要多合拢一会儿呢?那你就可以自己去调制这个松手的时间,也就是我们所说的占空比。

        我呢不是一个贪图享乐的人(反话),我们来看调制后的波段吧,看图!

        此时我们看到,还是同样的频率,1s一次,但是此时我们击掌的时间只剩下20%,也就是说,占空比高达80%,这就是我们所要实现的PWM调制的目的。

        说了这么多,那我们应该如何去实现这个功能呢,这才是重点:

        下面的是一段中断函数,我们要去做这么几个步骤

void Time0Handler() interrupt 1{
    /*首先我们要设置每一次计时器运行的时间,每次“爆表”都会来到这个中断处处理该函数*/
	//重置初始值,时间0.5ms,也就是每隔0.5ms就会跳进中断函数
	TL0 = 0x33;	
	TH0 = 0xFE;
	//cnt是用来计算总共中断了几次,它是个全局变量,我每个波段是40*0.5ms=20ms
    //我们可以设置jd的值,用来设置PWM的占空比,
	if(cnt<jd){//此处如果jd=4,那么我的占空比就是:(40-4)/40=90%,当cnt<4时,sg90_con=1高电平
		sg90_con=1;
	}else{//其余时间都是低电平
		sg90_con=0;
	}
	cnt++; 
	
	if(cnt==40){//每次0.5毫秒,40次即为20ms,结束一段波,进行复位
		cnt	= 0;
	}
}

        以上便是我对PWM调制的粗浅理解,如有不足,请大家评论区补充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值