一、接口简介
Pluse Width Modulaion(PWM)是通过数字输出引脚向外部设备输出比例控制信号的常用方法。例如,伺服电机使用输入PWM信号的脉冲宽度来确定它们的旋转角度,LCD显示器基于PWM信号的平均值来控制它们的亮度。
PWM是数字信号(即方波),根据指定的频率和占空比振荡:
频率(以赫兹表示)描述了输出脉冲重复多少次;
周期是每个周期需要的时间,并且是频率的倒数;
占空比(以百分数表示)描述了该频率窗口内的脉冲宽度;
例如,一个PWM信号设置为50%的占空比,每个周期的一般是活跃的。
你可以调整占空比来增加或者减少信号的平均"on"时间。下图展示了0%,25%和100%站占空比的脉冲序列。
二、使用步骤
对于PWM接口的操作,有如下步骤:
1.打开连接:创建PeripheralManagerService对象,使用你要打开的端口的名称调用openPwm()方法打开指定端口的连接。
3.启动信号:为了启动PWM信号,调用setEnable(true)。你需要暂时解除这个信号,可以调用setEnable(false)。
这里我们通过使用PWM信号的占空比来控制驼机的旋转角度,来给大家演示了一下PWM信号的使用。
1.电路搭建
2.代码编写
pwmDemo\app\src\main\java\com\chengxiang\pwmdemo\MainActivity.java
通过改变setPwmDutyCycle()的参数,为4(图1)和8(图2),改变驼机旋转的角度。如下图:
欢迎大家关注“Android Things开发”微信公众号和加入讨论QQ群,在这里你可以获得Android Things相关的最新资讯,并且第一时间获得我的技术文章,和大家交流开发心得和遇到的问题噢!
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.电路搭建
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; @Override protected 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(); } } @Override protected void onDestroy() { super.onDestroy(); if (mPwn != null) { try { //关闭连接 mPwn.close(); mPwn = null; } catch (IOException e) { e.printStackTrace(); } } } }4.运行结果
通过改变setPwmDutyCycle()的参数,为4(图1)和8(图2),改变驼机旋转的角度。如下图:
欢迎大家关注“Android Things开发”微信公众号和加入讨论QQ群,在这里你可以获得Android Things相关的最新资讯,并且第一时间获得我的技术文章,和大家交流开发心得和遇到的问题噢!
作者:p106786860 发表于2017/3/14 11:22:05 原文链接
阅读:95 评论:0 查看评论