Android Things:外设I/O接口-PWM

一、接口简介


Pluse Width Modulaion(PWM)是通过数字输出引脚向外部设备输出比例控制信号的常用方法。例如,伺服电机使用输入PWM信号的脉冲宽度来确定它们的旋转角度,LCD显示器基于PWM信号的平均值来控制它们的亮度。

PWM是数字信号(即方波),根据指定的频率和占空比振荡:

  • 频率(以赫兹表示)描述了输出脉冲重复多少次;
  • 周期是每个周期需要的时间,并且是频率的倒数;
  • 占空比(以百分数表示)描述了该频率窗口内的脉冲宽度;

例如,一个PWM信号设置为50%的占空比,每个周期的一般是活跃的。


Android Things:外设I/O接口-PWM_第1张图片
50%占空比PWM信号

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


Android Things:外设I/O接口-PWM_第2张图片
0%,25%,50%占空比PWM信号

二、使用步骤


对于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. 硬件准备

  • 树莓派3开发板 1块
  • 驼机 1个

2. 电路搭建

Android Things:外设I/O接口-PWM_第3张图片
PWM电路图

3. 代码编写
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:外设I/O接口-PWM_第4张图片
图1

Android Things:外设I/O接口-PWM_第5张图片
图2


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

Android Things:外设I/O接口-PWM_第6张图片
树莓派套装

电脑用户,点击如下链接进入淘宝宝贝页面:
https://item.taobao.com/item.htm?spm=686.1000925.0.0.3f11c9ed68fPu7&id=549263158263
手机用户,打开淘宝客户端扫描二维码:
Android Things:外设I/O接口-PWM_第7张图片
宝贝二维码

2.完整和持续更新的《使用Android打开物联网开发大门——Andoid Thigns开发》文档,欢迎大家阅读!
https://www.kancloud.cn/workshop1024/android_things_develop/360773
Android Things:外设I/O接口-PWM_第8张图片
这里写图片描述

3.新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息。(甭客气!尽情的扫描或者长按!)
Android Things:外设I/O接口-PWM_第9张图片
服务号

4.加入“Android Things开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
Android Things:外设I/O接口-PWM_第10张图片
qq群

你可能感兴趣的:(Android Things:外设I/O接口-PWM)