在本教程中,我将向您展示如何使用 PWM 控制电压以使 LED 变暗。
打开和关闭 LED 很容易。 您可以在我的上一教程中了解如何执行此操作。 现在,我将向您展示如何控制电压电平以使 LED 灯变弱或变强。 通常,Raspberry GPIO 使用 3.3 的电压。 当该引脚处于上升状态时,输出电压等于 3.3,而当该引脚处于下降状态时,电压为 0。那么如何将电压更改为例如 3.3V 的 50% ? 我们可以使用脉宽调制(PWM)进行此操作。根据 Wikipedia,PWM 是:“一种用于将消息编码为脉冲信号的技术。 尽管这种调制技术可用于编码信息以进行传输,但其主要用途是允许控制提供给电气设备,尤其是惯性负载(如电机)的功率。
在 Raspberry Pi 中,只有一个引脚支持硬件 PWM。 硬件 PWN 引脚产生非常干净的信号。 虽然您可以制作一个软件 PWM,但所有引脚都可以产生 PWM。 软件的 PWM 引脚没有如此清晰的信号,您必须自行设定时序。
我们将使用与先前教程中完全相同的电路。 看下图

以下代码示例将使 LED 逐渐变亮,然后完全熄灭 3 次。 我将 Pi4j API 用于 Java 绑定。 如果您想知道如何使用 Pi4j 安装,配置和运行项目,请参阅我的上一教程。
import com.pi4j.wiringpi.Gpio;import com.pi4j.wiringpi.SoftPwm;public class DimLEDPWM {private static int PIN_NUMBER = 1;public static void main(String[] args) throws InterruptedException {// initialize wiringPi library, this is needed for PWMGpio.wiringPiSetup();// softPwmCreate(int pin, int value, int range)// the range is set like (min=0 ; max=100)SoftPwm.softPwmCreate(PIN_NUMBER, 0, 100);int counter = 0;while (counter < 3) {// fade LED to fully ONfor (int i = 0; i <= 100; i++) {// softPwmWrite(int pin, int value)// This updates the PWM value on the given pin. The value is// checked to be in-range and pins// that haven't previously been initialized via softPwmCreate// will be silently ignored.SoftPwm.softPwmWrite(PIN_NUMBER, i);Thread.sleep(25);}// fade LED to fully OFFfor (int i = 100; i >= 0; i--) {SoftPwm.softPwmWrite(PIN_NUMBER, i);Thread.sleep(25);}counter++;}}}
您可以使用以下命令在 Raspberry 上运行该程序:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' DimLEDPWM
