树莓派通过PWM控制航模电机

说明

普通航模电调通过50HZ ,10.6%~4.6%占空比的PWM信号来控制转速,经过测试超过10.6%或低于4.6%都无法正常使用.

控制代码如下:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

# 10.6 最高    4.6最低
p = GPIO.PWM(12, 50)  # 通道为 12 频率为50Hz

p.start(10)  # 最高占空比

input('等待滴滴两声,检测到最大值')

p.ChangeDutyCycle(4)  #检测最小值 继续滴滴两声

input('开始运转')

p.ChangeDutyCycle(5)  #开始低速运转

input('退出')

p.stop()
GPIO.cleanup()

 

由于是用软件生产的PWM,波形受线程的影响比较严重,会出现一些抖动现象,无法直接用于要求较高的场所.

树莓派输出PWM(转载)

使用 RPi.GPIO 模块的脉宽调制(PWM)功能

更新日志:
2013 年 5 月 27 日更新:根据 2013 年 4 月 10 日更新的官方文档完成了初步翻译。
本文会在适当的时间里进行增删改等操作,如果您对该文感兴趣,可以仅收藏本页。
本文链接:使用 RPi.GPIO 模块的脉宽调制功能

创建一个 PWM 实例:

p = GPIO.PWM(channel, frequency)

启用 PWM:

p.start(dc)   # dc 代表占空比(范围:0.0 <= dc <= 100.0)

更改频率:

p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

更改占空比:

p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc <= 100.0

停止 PWM:

p.stop()

注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。

以下为使 LED 每两秒钟闪烁一次的示例:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 0.5)
p.start(1)
input('点击回车停止:')   # 在 Python 2 中需要使用 raw_input
p.stop()
GPIO.cleanup()

以下为使 LED 在亮/暗之间切换的示例:

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 50)  # 通道为 12 频率为 50Hz
p.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

 

相关网站
原文地址:RPi.GPIO module PWM
项目地址:RPi.GPIO

使用树莓派点亮一个发光二极管

简介

如何点亮一个发光二极管是最基础的一件事了,树莓派最大的特色就是拥有26个GPIO口,通过这些GPIO口可以做各种你能想到的东西

开始

首先使用如下命令搭建GPIO控制环境,官方推荐使用python来操作GPIO

apt-get install python-dev python-rpi.gpio

然后编写控制程序

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)


t=0
while t<10:
    GPIO.output(24, 1)
    time.sleep(0.1)
    GPIO.output(24, 0)
    time.sleep(0.1)
    t+=1
pass

GPIO.cleanup()

另存为lcd.py 运行$ python lcd.py  后就可以看到Led闪烁

RPi.GPIO模块函数说明:

RPi.GPIO.setmode(naming_system)

设置将GPIO针的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分别代表boardcom命名系统和树莓派板子上的命名系统。而因为使用BCM 的时候(据说)不同的版本BVM针脚定义不一样,所以同一套程序在多个树莓派系统上使用的时候建议用BOARD。

RPi.GPIO.setup(channel, state)

将标号为channel的针设置为state模式。channel取值为1~26,state取值为RPi.GPIO.IN 或者RPi.GPIO.OUT,分别表示输入和输出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示将1号针设置为输入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示将3号针设置为输出模式。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.output(channel, state)

将标号为channel的针设置为state指定的电平。channel取值为1~26,state取值为RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高电平和低电平。例如RPi.GPIO.output(1, 1) 表示把1号针设置为高电平,RPi.GPIO.output(3, Flase) 表示将3号针设置为低电平。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.input(channel)

获取将标号为channel的针的电平砖头。channel取值为1~26。例如RPi.GPIO.input(1) 表示获取1号针的状态。

RPi.GPIO.cleanup()

清除掉之前RPi.GPIO.setup()设置的状态。退出程序之前一定要调用,否则下次调用的时候会报错。

rpi-pins-40-0

13120344_KqtC

自己买的扩展板一般使用的是GPIO.BCM模式, 端口18对应的板子上的p1也就是gpio1