树莓派教程 - 1.2 树莓派GPIO库wiringPi 软件PWM

2023-11-12

Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

使用到的硬件:

led,200Ω左右的电阻、杜邦线。

 

上一节使用硬件PWM来控制led亮度,可树莓派的硬件PWM引脚只有1路,在实际应用中,1路PWM几乎干不了什么

庆幸的是wiringPi库提供了一个软PWM功能。可以将任意GPIO都复用为PWM,但缺点是会增加CPU负担。

树莓派的软件PWM

软件PWM默认频率是100Hz,一般的pwm范围设置为100,所以一般的pwm分辨率为0.1ms,太大会增加CPU开销

int softPwmCreate (int pin, int initialValue, int pwmRange) ;    // pin引脚,initialValue初始PWM值,pwmRange输出pwm范围

用软件PWM,实现的呼吸灯:

Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

include <wiringPi.h>
#include <softPwm.h>

int spwmLed = 1;                        // 定义使用wiringPi编码的1引脚
int main(void)
{
    int xnum = 0;
    wiringPiSetup();                    // 使用wiring编码去初始化GPIO序号
    softPwmCreate (spwmLed, 0, 100);    // 设置wiringPi编码的1引脚为软件PWM输出
    while(1)
    {
        for(xnum = 0; xnum <= 100; xnum++)
        {
            softPwmWrite(spwmLed, xnum);
            delay(15);                  // 延时15ms
        }
        for(xnum = 99; xnum > 0; xnum--)
        {
            softPwmWrite(spwmLed, xnum);
            delay(15);                  // 延时15ms
        }
    }
    return 0;
}

 

应用要点

由于软件PWM会很大程度上占用树莓派的CPU开销,挤压其他任务的调度。

而且性能一般般,准确性查,几KHz以上的高频PWM几乎是输出不了的。

所以建议应用电机控制的玩家,外挂一片单片机/PCA9685,使用总线通信方式去控制其他外设做PWM输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派教程 - 1.2 树莓派GPIO库wiringPi 软件PWM 的相关文章

  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • 操作系统什么时候清除进程的内存

    进程在某些操作系统上成功或异常终止 操作系统何时决定擦除分配给该进程的内存 数据 代码等 在退出时或当它想为新进程分配内存时 这个清除内存分配过程在所有操作系统 winXP Win7 linux Mac 上都相同吗 据我了解 页表具有该进程
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案

随机推荐

  • QT笔记-窗体创建方式

    1 非模式窗体 窗体创建方式1 Modal属性决定了show 应该将弹出的dialog设置为模式状态还是非模式状态 默认情况下改属性为false并且show 弹出的窗口是非模式状态的 把这个属性设置为true就相当于QWidget wind
  • webpack引入第三方库的方式,以及注意事项

    一般情况下 我们不用担心所使用的第三方库 在npm管理仓库中找不到 如果需要某一个库 如 jquery 可以直接运行npm install jquery脚本命令来安装这个项目所需要的依赖 然后 在使用jquery的模块文件中 通过impor
  • vs2019找不着工具箱了_VS2019 Nuget找不到包的问题处理

    VS不记得改了什么设置之后 发现找不到EF 解决办法 1 点击右侧的设置按钮 2 弹出窗中左侧树形结构选择 程序包源 再点击右上方的添加按钮 然后点击更新 确定按钮 再次搜索就可找到EF安装包 vs2019中NuGet控制台的常用命令 Db
  • 关于Flink Time中的Watermaker案例的详解

    需求 自定义数据源 产出交易订单数据 设置基于事件时间窗口统计 1 交易订单数据 import lombok AllArgsConstructor import lombok Data import lombok NoArgsConstru
  • 三个审稿人,两个同意,一个不同意,最后被录用希望大吗?

    链接 https www zhihu com question 340821507 编辑 深度学习与计算机视觉 声明 仅做学术分享 侵删 作者 知乎用户 https www zhihu com question 340821507 answ
  • 【转】C++类中对同类对象private成员访问

    私有成员变量的概念 在脑海中的现象是 以private关键字声明 是类的实现部分 不对外公开 不能在对象外部访问对象的私有成员变量 然而 在实现拷贝构造函数和赋值符函数时 在函数里利用对象直接访问了私有成员变量 因而 产生了困惑 下面以具体
  • 基于Matlab实现图像配准技术(附上源码+图像)

    图像配准是数字图像处理中的重要技术之一 它的目标是将多幅图像进行准确的对齐 使得它们在空间上保持一致 图像配准在许多领域都有广泛的应用 如医学影像 遥感图像 计算机视觉等 本文将介绍如何使用Matlab实现图像配准技术 并提供一个简单的案例
  • linux文件内容操作命令,linux 操作系统中cat查看文件内容命令的使用

    cat命令的用途是连接文件或标准输入并打印 这个命令常用来显示文件内容 或者将几个文件连接起来显示 或者从标准输入读取内容并显示 它常与重定向符号配合使用 1 命令格式 cat 选项 文件 2 命令功能 cat主要有三大功能 1 一次显示整
  • 华为安防产品VCN资料下载

    首先登录网站 华为入口 下载后安装 win10 然后就能看到客户端 注册登录 点击资料领航 进入网页 然后就可以下载了
  • 您的计算机已被Malloxx勒索病毒感染?恢复您的数据的方法在这里!

    导言 在数字时代 malloxx勒索病毒已经成为一个可怕的威胁 给个人 企业和组织带来了无法估量的损失 本文91数据恢复将深入探讨 malloxx勒索病毒的运作方式 并提供一些独特的方法来恢复被它加密的数据文件 以及如何在被其困扰之前采取
  • Linux高性能服务器编程|阅读笔记:第5章 - Linux网络编程基础API

    目录 简介 5 1 socket地址API 5 1 1 主机字节序和网络字节序 5 1 2 通用socket地址 5 1 3 专用socket地址 5 1 4 IP地址转换函数 5 2 创建socket 5 3 命名socket 5 4 监
  • 面试题目收集(1)

    本博客的 面试题目搜集系列不错 1 面试题目搜集1 2 面试题目搜集2 3 面试题目搜集3 4 面试题目搜集4 5 面试题目搜集5 6 面试题目搜集6 1 字符串取除多余的空格 包括行首的空格 单词与单词之间只能有多余的空格 结尾不能有空格
  • pytorch简单的逻辑回归

    import torch import torch nn as nn import torchvision import torchvision transforms as transforms Hyper parameters input
  • vue与ios、Android交互问题总结

    1 ios与vue交互可以显示iframe的页面内容 但是不能与iframe交互 Android可以 2 ios可以直接调用html页面 但是url传参只能是问号传参 不可用json对象 Android可以 3 Android对js语法要求
  • Spark高手之路3—Spark运行架构

    文章目录 Spark 运行架构 一 运行架构 二 核心组件 Driver Executor Master Worker ApplicationMaster 三 核心概念 1 Executor 与 Core 2 并行度 Parallelism
  • 【学习笔记向】零基础小白快速制作最简陋MMD(VRoid + Unity)

    特别鸣谢B站UP主十七时的大力支援 学生时期总会有一两个没有安排的周末 不如我们来嗑CP 学习 做MMD吧 第一天 下载软件和素材 熟悉Unity 下载软件可能需要很久 请耐心 一 软件 1 VRoid Studio 用于零基础建模 B站上
  • java必知必会_Java必知必会-Spring Security

    一 Spring Security介绍 1 框架介绍 Spring 是一个非常流行和成功的 Java 应用开发框架 Spring Security 基于 Spring 框架 提供了一套 Web 应用安全性的完整解决方案 一般来说 Web 应
  • 基于DFA方法的健康人与癫痫病人EEG数据分析附代码

    引言 DFA分析方法是由C K提出的一种研究时间序列波动长时相关性的方法 主要用来区别复杂系统本身产生的波动和由外界及环境刺激作用在系统上产生的波动 外部刺激产生的变化假设引起了局部效应 而系统本身内部的动力学产生的变化假设展示了长时的相关
  • 浅拷贝和深拷贝: copy模块的copy()和deepcopy()函数(*^▽^*)

    我们在平时处理列表和字典的时候 有时候希望创建一个列表或者字典的副本拿出来使用 但是同时我们也不希望列表 字典 和其列表 字典 副本还保留着某种联系的时候 比如说我们在修改列表的时候副本也跟着同步被修改了 这是我们最不想看到的情况 这种情况
  • 树莓派教程 - 1.2 树莓派GPIO库wiringPi 软件PWM

    Git例程源码仓库 https github com ZhiliangMa raspberry git 使用到的硬件 led 200 左右的电阻 杜邦线 上一节使用硬件PWM来控制led亮度 可树莓派的硬件PWM引脚只有1路 在实际应用中