硬件控制入门之树莓派PWM波生成----树莓派硬件控制学习笔记(二)

本文介绍了树莓派如何使用Python的RPi库和pigpio库生成PWM波,包括PWM波的概念、参数以及如何通过Python代码控制PWM波的频率和占空比。通过实例展示了在GPIO上的应用,如控制电机转速、舵机角度等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章 硬件控制入门之树莓派PWM波生成

第一章 树莓派硬件控制入门之GPIO口的操作
第二章 硬件控制入门之树莓派PWM波生成



前言

上篇文章介绍了三种GPIO的操控方式,今天则为大家带来pwm波的生成方法,pwm波是硬件控制中一种很重要的波形,接下来我先介绍一下它


一、什么是PWM波

PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。PWM的波形是一种周期固定的、宽度可调的方波。
pwm波有两个重点参数:

1)PWM方波的周期

2)PWM方波的占空比

用这两个参数即可表示任意一个pwm波在这里插入图片描述
这是笔者用示波器检测的一个pwm波,是一个频率为50Hz,占空比为30%的PWM波。
使用pwm波可以:
1)控制电机的转速
2)控制舵机角度
3)控制led呼吸灯,或者设置为隔几秒闪烁一下。
4)其他底层硬件控制

二、树莓派使用Python(RPi库)生成PWM波

1.引入库及测试

mu
首先我们打开树莓派自带Python IDE——mu

import RPi.GPIO  as GPIO #注意这里的i是小写=.=
GPIO.setmode(GPIO.BOARD) #指定为BOARD编号
GPIO.setwarnings(False)
pins_1=12

GPIO.setup(pins_1,GPIO.OUT)
GPIO.output(pins_1, 0)
GPIO.cleanup()

输入上一篇学习笔记的第二章讲解过的代码,这些代码将12号引脚也就是GPIO.1设置为低电平,然后释放引脚
在这里插入图片描述
点击运行,保存好文件,没有报错,说明一切正常,点击停止

2.编写生成PWM波的程序

注意这次的程序为了延时,我们多引用了一个time库,这也是系统镜像自带的

import RPi.GPIO  as GPIO #注意这里的i是小写=.=
import time
GPIO.setmode(GPIO.BOARD) #指定为BOARD编号
GPIO.setwarnings(False)  #去除警告
pins_1=12
GPIO.setup(pins_1,GPIO.OUT)#设置12针脚为输出模式

pwm = GPIO.PWM(pins_1,1)#在12号针脚上创建一个1Hz的PWM波
pwm.start(10)#以占空比为百分之十的模式启动pwm波
time.sleep(5)#延时5秒
pwm.stop()#停止pwm波
GPIO.cleanup()#释放引脚

程序运行效果为12号针脚保持0.1秒的高电平,然后是0.9秒的低电平,循环5次自动停止。

3.更改频率及占空比

pwm.ChangeFrequency(freq)   # 更改频率
pwm.ChangeDutyCycle(dc)  # 更改占空比

大家可以使用这两行代码在程序运行时自动更改频率及占空比,如下

import RPi.GPIO  as GPIO #注意这里的i是小写=.=
import time
GPIO.setmode(GPIO.BOARD) #指定为BOARD编号
GPIO.setwarnings(False)  #去除警告
pins_1=12
GPIO.setup(pins_1,GPIO.OUT)#设置12针脚为输出模式

pwm = GPIO.PWM(pins_1,1)#在12号针脚上创建一个1Hz的PWM波
pwm.start(10)#以占空比为百分之十的模式启动pwm波
time.sleep(5)#延时5秒
pwm.ChangeFrequency(2)   # 更改频率为2Hz
pwm.ChangeDutyCycle(50)  # 更改占空比为50
time.sleep(5)#延时5秒
pwm.stop()#停止pwm波
GPIO.cleanup()#释放引脚

程序运行效果为12号针脚保持0.1秒的高电平,然后是0.9秒的低电平,循环5次接着自动变为0.25秒高电平,0.25秒低电平,循环10次。

更高级的操作可以使用循环语句实现,大家可以自己尝试下。

三、树莓派使用Python(pigpio库)生成PWM波

1.启动守护进程

启动Linux终端,输入这条命令

sudo pigpiod

2.编写程序

注意pigpio库的编码模式是BCM(详见第一章第一节)

import pigpio#引入库
import time#引入库
pi = pigpio.pi()#实例化对象
gpio=21

pi.set_PWM_frequency(gpio,50)#设置频率为50Hz
pi.set_PWM_range(gpio,100)#将一个周期分为100份
pi.set_PWM_dutycycle(gpio,50)#高电平占其中50份也就是占空比为50%
print("frequencypi",pi.get_PWM_frequency(gpio),"Hz")#检测并输出21针脚上的频率
print("dutycycle:",pi.get_PWM_dutycycle(gpio),"%")#检测并输出21针脚上的占空比
time.sleep(5)#延时5秒

这个程序在21号阵脚上输出了一个50Hz,占空比50%的pwm波,程序运行结果如下
在这里插入图片描述

总结

今天为大家带来了两种在树莓派上生成pwm波的方法,其中第二种要比第一种稳定,具体我做过实验,不过当时没有记录结果,具体稳定多少等我回到学校用示波器为大家详细测试。后面的笔记将为大家带来GPIO输入模式的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值