目录
1.什么是PWM?
2.PWM用途?
3.实现PWM的两种方法
一.什么是PWM
PWM,全称:Pulse Width Modulation,
通常中文翻译为:脉冲宽度调制,通过将一段数字信号编码为方波信号,在外部作用事物上达到拟输出效果的一种手段。
实际上,就是通过数字控制产生不同占空比的方波来模拟输出。也就是使用PWM输出模拟信号。
图中的高电平和低电平所占比例都不同,我们知道,电压信号是离散的,在这里我们只能输出0V或者5V电压,那么想要连续输出3.7V或者其他介于0-5V之间的电压怎么办呢?
通过一系列的计算我们得到,高电平信号占持续时间占这个周期得百分比决定了输出电压信号的大小。
这里说百分比,就是下面要说的,占空比。
占空比
占空比就是在一个调制周期内,某个信号持续的时间占这个时间段的百分比。
在前一个图中,占空比就是不同的,并且是高电平的占空比。
因此,
低占空比意味着输出的能量低,因为在一个周期内大部分时间信号处于关闭状态,如果pwm控制的负载为led,则具体表现例如led灯很暗。
高占空比意味着输出的能量高,在一个周期内,大部分时间信号处于on状态,具体表现为LED比较亮。
综上,我们大概可以了解PWM究竟是什么了:脉宽调制,也就是高电平信号在一个调制周期中持续时间长短,它可以用占空比去衡量,占空比越大,脉冲宽度越宽。
二.PWM用途
PWM软件法控制充电电流
该方法的基本思想就是利用单片机具有的PWM端口,在不改变PWM方波周期的前提下,通过软件的方法调整单片机的PWM控制寄存器来调整PWM的占空比,从而控制充电电流。
PWM在推力调制中的应用
1962年,Nicklas等提出了脉冲调制理论,指出利用喷气脉冲对航天器控制是简单有效的控制方案,同时能使时间或能量达到最优控制。
+脉宽调制发动机控制方式是在每一个脉动周期内,通过改变阀门在开或关位置上停留的时间来改变流经阀门的气体流量,从而改变总的推力效果,对于质量流率不变的系统,可以通过脉宽调制技术来获得变推力的效果。
在LED中的应用
在LED控制中PWM作用于电源部分,脉宽调制的脉冲频率通常大于100Hz,人眼就不会感到闪烁。
三.产生PWM信号的两种方式
先确定哪些引脚支持PWM,ATmega328的3, 5, 6, 9, 10, 和 11引脚支持PWM。
1.适用于所有GPIO的纯软件编程方式
void setup(){
pinMode(11,OUTPUT);//设定11号端口为输出
}
void loop(){
digitalWrite(11, HIGH); //11号引脚输出高电平
delayMicroseconds(100); // 大约10%占空比的1KHz方波
digitalWrite(10, LOW); //10号引脚输出低电平
delayMicroseconds(900);//延时900微秒
}
优缺点:
1、PWM 的比例可以更精确;
2、周期和频率可控制;
3、所有的 pin 脚都可以输出,不局限于那几个脚;
4、缺点:CPU 干不了其他事情了;
2.通过analogWrite函数来完成PWM信号输出
analogWrite(pin,value)
作用:让一个支持PWM输出的引脚持续输出指定脉冲宽度的方波。
参数:
pin:PWM输出的引脚编号。Pin可以等于3、5、6、9、10、11
value:用于控制占空比,范围:0~255。值为0表示占空比为0,值为255表示占空比为100%,值为127表示占空比为50%。
函数使用代码
void setup() {
pinMode(9,OUTPUT);//设定9号端口为输出端口
void loop() {
analogWrite(9, led);//将led的值写入9号端口
if (value==0)
{
digitalWrite(pin,LOW);//输出低电平
}
else if (value==255)
{
digitalWrite(pin,HIGH); //输出高电平
}
优缺点:
1:简单易行
2:高效,不占用CPU时间,可以并行干其它事
3:缺点:Arduino并没有提供改频率的接口函数,只能控制占空比。