1. 什么是 PWM ?有何用途?
脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
![](https://img.haomeiwen.com/i17611068/1808d013e9542aec.png)
用途
脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
PWM软件法控制充电电流
该方法的基本思想就是利用单片机具有的PWM端口,在不改变PWM方波周期的前提下,通过软件的方法调整单片机的PWM控制寄存器来调整PWM的占空比,从而控制充电电流。
PWM在推力调制中的应用
1962年,Nicklas等提出了脉冲调制理论,指出利用喷气脉冲对航天器控制是简单有效的控制方案,同时能使时间或能量达到最优控制。
脉宽调制发动机控制方式是在每一个脉动周期内,通过改变阀门在开或关位置上停留的时间来改变流经阀门的气体流量,从而改变总的推力效果,对于质量流率不变的系统,可以通过脉宽调制技术来获得变推力的效果。
在LED中的应用
在LED控制中PWM作用于电源部分,脉宽调制的脉冲频率通常大于100Hz,人眼就不会感到闪烁。
2. Arduino产生 PWM 信号的两种方式
2.1 适用于所有GPIO的纯软件编程方式
数字IO转换法
int pin = 0; //对于Uno,可以是0~19,或A0~A5,你没看错,G哥就是要和别人不一样,并不是大多数说的仅仅是0~13
void setup(){pinMode(pin, OUTPUT);//这是必须的!
}
void loop(){
digitalWrite(pin, HIGH);
delayMicroseconds(100);
digitalWrite(pin, LOW);
delayMicroseconds(1000 - 100);
}
上面这段代码会产生一个PWM=0.1的,周期为 1ms 的方波(1000Hz)
这种方式的优缺点都很明显:
1、PWM 的比例可以更精确;
2、周期和频率可控制;
3、所有的 pin 脚都可以输出,不局限于那几个脚;
4、缺点:CPU 干不了其他事情了;
2.2 仅适用于6个端口的硬件方式
analogWrite(pin,val)函数法
这是Arduino首推的方法,因为它Niubility吗?No!No!No!因为它太Simple了!为Pin指定一个IO口,为val指定一个0~255之间的任意一个数,它就可以输出方波了,而且,你还能同时并行干其它事!
注意:pin参数:只能用 3,5,6,9,10,11 !画重点了!val是 0~255 的整数值,对应电压从 0 到+5V,值越小,输出等效电压越低。
示例代码:
int pin = 3; //3,5,6,9,10,11
void setup(){
pinMode(pin, OUTPUT);//这也是必须的!
}
void loop(){
analogWrite(pin, 128);//注意:下面这个延时并不是产生方波用,而是避免程序太过频率地设置analogWrite(pin,128)函数,因为它们在LOOP区,而且analogWrite(pin,128)函数其实只用设置一次就够了!
delay(500);
}
这种方式优缺点同样很明显:
优点1:Too Simple!一条语句搞定!
优点2:高效!不占用CPU时间,可以并行干其它事!
缺点:输出的PWM波频率定死了,Arduino并没有提供改频率的接口函数,你能控制的只要改占空比!
AnalogWrite函数的用法
(1)函数原型: AnalogWrite(pin,value)
(2)功能:将模拟值(PWM波)输出到管脚。可用于在不同的光线亮度调节发光二极管亮度或以不同的速度驱动马达。调用analogWrite()后,该引脚将产生一个指定占空比的稳定方波,直到下一次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。
(3)参数: pin:整型,要写入的引脚编号;value:占空比,在0~255之间。(0时候为关,即LOW;255为开,即HIGH)
(4)返回值:无
3. 串口输入输出的基本方法
4. 串口控制变色灯的实现
网友评论