Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 或5V 的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。
简单来说就是个可调的旋钮,值随着旋转角度而变化,从而用来控制灯的亮度、轮子的转动速度等。
pwm可调电阻连线图:
led跟之前的连线方法一样,但是引脚必须是3,5,6,9,10和11其中的一个,因为模拟输出函数只在这些引脚上才有效!!
pwm可调电阻的连线也比较简单,并列脚一个连正极,一个连负极;第3个中间独立的脚直接连A0模拟端口即可。
代码如下:
int potpin=0;//定义模拟接口0
int ledpin=11;//定义数字接口11(PWM 输出)
int val=0;// 暂存来自传感器的变量数值
void setup(){
pinMode(ledpin,OUTPUT);//定义数字接口11 为输出
Serial.begin(9600);//设置波特率为9600
//注意:模拟接口自动设置为输入
}
void loop(){
val=analogRead(potpin);// 读取传感器的模拟值并赋值给val
Serial.println(val);//显示val 变量
analogWrite(ledpin,val/4);// 打开LED 并设置亮度(PWM 输出最大值255)
delay(10);//延时10ms
}
代码说明:
通过pwm=analogRead(0)读取传感器模拟脉宽值(0-1024),除以4计算得出对应高电平亮度值,然后通过analogWrite(11, pwm/4);//模拟输出高电平亮度值(0-254)
效果图: