一、PWM
PWM就是脉宽调制技术
1.频率
PWM的频率(f):1s内信号从低电平到高电平的总次数
2.周期
PWM周期(T):从一个高电平到下一个高电平的时间
f
=
1
T
{f=\frac{1}{T}}
f=T1
3.脉宽
PWM脉宽(W):一个周期内的高电平时间
4.占空比
占空比(D):一个周期内脉宽占周期长度的百分比
D
=
W
T
{D=\frac{W}{T}}
D=TW
二、使用PWM
1.创建一个PWM实例
PWM=GPIO.PWM(channel,freq)
2.启动PWM实例
PWM.start(dc)
dc:占空比,范围是:0.0~100.0
3.修改频率
PWM.ChangeFrequency(frequency)
4.停止PWM实例
PWM.stop()
三、LED闪烁
import RPi.GPIO as GPIO
import time #导入时间模块
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("import RPi.GPIO error")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
while True:
GPIO.output(12,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(12,GPIO.LOW)
time.sleep(0.5)
四、呼吸灯
import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
led1=12
led2=18
freq=50
dc=0
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led1,GPIO.OUT)
GPIO.setup(led2,GPIO.OUT)
PWM1=GPIO.PWM(led1,freq)
PWM2=GPIO.PWM(led2,freq)
PWM1.start(dc)
PWM2.start(dc)
freq = int(input("Please input the frequency:"))
PWM1.ChangeFrequency(freq)
PWM2.ChangeFrequency(freq)
while True:
if(dc==0):
while 1:
dc=dc+1
sleep(0.01)
PWM1.ChangeDutyCycle(dc)
PWM2.ChangeDutyCycle(dc)
if (dc==100):
break
if(dc==100):
while 1:
dc=dc-1
sleep(0.01)
PWM1.ChangeDutyCycle(dc)
PWM2.ChangeDutyCycle(dc)
if (dc==0):
break
input()
PWM.stop()
GPIO.cleanup()