一、接口简介
Pluse Width Modulaion(PWM)是通过数字输出引脚向外部设备输出比例控制信号的常用方法。例如,伺服电机使用输入PWM信号的脉冲宽度来确定它们的旋转角度,LCD显示器基于PWM信号的平均值来控制它们的亮度。
PWM是数字信号(即方波),根据指定的频率和占空比振荡:
  频率(以赫兹表示)描述了输出脉冲重复多少次;
  周期是每个周期需要的时间,并且是频率的倒数;
  占空比(以百分数表示)描述了该频率窗口内的脉冲宽度;
例如,一个PWM信号设置为50%的占空比,每个周期的一般是活跃的。

你可以调整占空比来增加或者减少信号的平均"on"时间。下图展示了0%,25%和100%站占空比的脉冲序列。

二、使用步骤
对于PWM接口的操作,有如下步骤:
1.打开连接:创建PeripheralManagerService对象,使用你要打开的端口的名称调用openPwm()方法打开指定端口的连接。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {mPwm = mPeripheralManager.openPwm(PWM_NAME);} catch (IOException e) {Log.w(TAG, "Unable to access PWM", e);}
}

2.配置信号:在第一启动信号之前,你必须使用setPwmFrequencyHz()方法设置信号周期和setPwmDutyCycle()方法占空比这些参数。
3.启动信号:为了启动PWM信号,调用setEnable(true)。你需要暂时解除这个信号,可以调用setEnable(false)。

public void initializePwm(Pwm pwm) throws IOException {pwm.setPwmFrequencyHz(120);pwm.setPwmDutyCycle(25);pwm.setEnabled(true);
}

4.关闭连接:当完成PWM端口通信,使用close()方法关闭连接并释放资源。

@Override
protected void onDestroy() {super.onDestroy();if (mPwm != null) {try {mPwm.close();mPwm = null;} catch (IOException e) {Log.w(TAG, "Unable to close PWM", e);}}
}

三、案例演示
这里我们通过使用PWM信号的占空比来控制驼机的旋转角度,来给大家演示了一下PWM信号的使用。
1.硬件准备
     
树莓派开发板 1块

驼机 1个
广告时间咯:如果你还没有自己的开发板和元器件,到我们的“1024工场”旗舰店来逛逛一逛吧(文章底部二维码),这里能一次性有买到你想要的!

2.电路搭建

2.代码编写

pwmDemo\app\src\main\java\com\chengxiang\pwmdemo\MainActivity.java

public class MainActivity extends AppCompatActivity {//PWM输出名称private static final String PWN_NAME = "PWM0";//PWM输出private Pwm mPwn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);PeripheralManagerService service = new PeripheralManagerService();try {//打开并设置PWM,通过设置不同的占空比来控制旋转的角度mPwn = service.openPwm(PWN_NAME);mPwn.setPwmFrequencyHz(50);mPwn.setPwmDutyCycle(4);mPwn.setEnabled(true);} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();if (mPwn != null) {try {//关闭连接mPwn.close();mPwn = null;} catch (IOException e) {e.printStackTrace();}}}
}

代码库:https://github.com/ThingsDeveloper/pwddemo

广告时间咯:如果你需要完成的Demo源码,请关注“1024工场服务号”->工场仓库->Things代码(文章底部二维码),就可以找到你想要的代码噢。
4.运行结果
通过改变setPwmDutyCycle()的参数,为4(图1)和8(图2),改变驼机旋转的角度。如下图:

1.抛弃各种找元器件的烦恼,来“1024工场”旗舰店,一次性买到你所想要的:树莓派套装—专为Android Things打造。

电脑用户,点击如下链接进入淘宝宝贝页面:
https://item.taobao.com/item.htm?spm=686.1000925.0.0.3f11c9ed68fPu7&id=549263158263
手机用户,打开淘宝客户端扫描二维码:
2.完整和持续更新的《使用Android打开物联网开发大门——Andoid Thigns开发》文档,欢迎大家阅读! 
https://www.kancloud.cn/workshop1024/android_things_develop/360773 
 
3.新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息。

4.加入“Android Things开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)

Android Things:外设I/O接口-PWM相关推荐

  1. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  2. 定制Android系统开发之一——提供接口的方式

    何为定制Android系统?就是在特定的硬件上,移植上Android操作系统,并修改原生Android系统以提供给定制的APP操作定制硬件的方法. 所以,定制Android的主要工作有以下三部分: 适 ...

  3. Android 9 的非 SDK 接口限制 | 中文教学视频

    我们一直致力于为 Android 用户和开发者提供稳定的体验.秉持这种理念,我们逐步限制应用使用非公开接口,因为这种做法往往导致用户遭遇系统崩溃及开发者需要紧急发布修复的风险.在 Android 8. ...

  4. Android P (4)一种绕过Android P上非SDK接口限制的简单方法

    一种绕过Android P上非SDK接口限制的简单方法 众所周知,Android P 引入了 针对非 SDK 接口(俗称为隐藏API)的使用限制.这是继 Android N上 针对 NDK 中私有库的 ...

  5. android 首页接口设计方案,Android开发最佳实践——1.接口设计

    Android开发最佳实践--1.接口设计 一个项目刚开始的时候,最需要确认的就是接口设计了:数据如何传递,使用什么格式什么协议乃至如何保证安全性.如果一个项目的接口设计不合理--比如没有考虑到安全性 ...

  6. Android 推送消息开放接口 OpenPush

    Android 推送消息开放接口 OpenPush 我们知道, 在中国不能使用 google 的服务. 在中国销售的手机甚至没有安装 google 的服务.所以, 原本由 google gcm 提供的 ...

  7. Android开发规范:API接口安全设计规范

    公众号[国民程序员]回馈粉丝福利: 现金红包和送书活动火热进行中,点击参与! 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买. 书籍详情请 ...

  8. Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo

    Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo 标签: app在线更新下载Update升级 2016-09-18 20:47  ...

  9. Android P版本非SDK接口管控特性,参考华为

    Android P版本非SDK接口管控特性解读及适配指导 在Android P版本中,谷歌加入了非SDK接口使用限制,无论是通过调用.反射还是JNI等方式,开发者都无法对非SDK接口进行访问,此接口的 ...

最新文章

  1. 【面试 struts2】【第三篇】struts2的问题
  2. python中calendar怎么用_Python时间模块datetime、time、calendar的使用方法
  3. 逻辑判断 java_写 JS 逻辑判断,不要只知道用 if-else 和 switch
  4. Linux学习之遇到的小问题---查看系统版本,虚拟机创建共享文件夹,用到的命令记录。
  5. Pycharm远程调试之ssh remote debug(二)
  6. 5G通信的一些关键技术
  7. 飞鸽传书2011真正把用户利益放在股东的利益
  8. android 还可以输入多少个字符
  9. 蓝绿部署、滚动部署、灰度发布、金丝雀发布-概念介绍---应用部署001
  10. linux 文件 16进制显示,linux 16进制 产看文件
  11. 计算机第二学期末考试题,离散数学期末考试试题及答案
  12. 计算机软件著作权 评审,软件著作权在评职称过程中有用吗
  13. 数字逻辑课上如何制作FPGA游戏?
  14. 使用Xmanger/Xbrowser 远程桌面Ubuntu 12.04 LTS
  15. 【宇麦科技】腾xun云登场,群晖NAS自定义域名教程来啦~
  16. 范特西视频 v1.3.8
  17. 分享107个竞聘述职PPT模板,总有一款适合您
  18. 【语音去噪】基于matlab小波硬阈值语音降噪【含Matlab源码 532期】
  19. PHP对接谷歌search console 第一篇
  20. 第一章 初识NANO板卡

热门文章

  1. 基于MIission planner的VTOL垂直起降固定翼航线设计方法
  2. EMC 2 完美的EMC电路设计攻略之:元器件选型(上)
  3. windows 2003 系统优化参考
  4. Windows10中Edge浏览器突然出现“无法访问该页面”问题的解决方案
  5. Java 模拟斗地主发牌
  6. UOS系统适配-常用开发工具安装
  7. C++ 缺省参数 详解
  8. SpringBoot项目中自动加载datasourceConfig配置导致启动失败
  9. 开发用台式机还是笔记本_您应该开发台式机还是Web应用程序?
  10. java 视频压缩_Java 压缩视频(无需安装插件)