进阶篇
PWM介绍
脉冲宽度调制是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
呼吸灯案例
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 | # -*- coding:utf-8 -*-
"""
呼吸灯案例
"""
import RPi.GPIO as GPIO
import time
# 定义控制引脚
bcm21_led = 21;
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
pwm_led=None
def init():
global pwm_led
GPIO.cleanup()
GPIO.setup(bcm21_led,GPIO.OUT,initial=GPIO.LOW)
pwm_led = GPIO.PWM(bcm21_led, 50);
def run():
init()
# 设置初始占空比
count=1;
# 设置每次变化的步长
step=2;
while True:
count += step
# 修改占空比
pwm_led.start(count)
# 到达边界之后,数值改变方向要取反
if count >= 99 or count <=1:
step = -1*step
# 让程序运行稍微慢一点
time.sleep(0.03)
# 将程序跑起来
try:
run()
finally:
GPIO.cleanup()
|
电机驱动
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 | # -*- coding:utf-8 -*-
"""
电机驱动的案例
注意:开发板需要与驱动板共地,否则会有问题
"""
import RPi.GPIO as GPIO
import time
# 定义引脚
bcm20_motor = 20
bcm21_motor = 21
bcm16_ena = 16
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# pwm
pwm_motor = None
def init():
GPIO.cleanup()
GPIO.setup(bcm20_motor,GPIO.OUT,initial=GPIO.HIGH);
GPIO.setup(bcm21_motor,GPIO.OUT,initial=GPIO.LOW);
GPIO.setup(bcm16_ena,GPIO.OUT,initial=GPIO.HIGH);
global pwm_motor
pwm_motor = GPIO.PWM(bcm16_ena,1000)
def run():
# 设置电机转动占空比
pwm_motor.start(5)
GPIO.output(bcm20_motor,GPIO.HIGH)
GPIO.output(bcm21_motor,GPIO.LOW)
while True:
pass
# 将程序跑起来
try:
init()
run()
finally:
GPIO.cleanup()
|