首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • M4-R1

    • 一、简介

      • M4-R1简介
    • 二、快速上手

      • 01 OpenHarmony概述
      • 02 镜像烧录
      • 03 应用开发快速上手
      • 04 设备开发快速上手
    • 三、应用开发

      • 01 ArkUI

        • 1 ArkTS语言简介
        • 2 UI 组件-Row 容器介绍
        • 3 UI 组件-Column 容器介绍
        • 4 UI 组件-Text 组件
        • 5 UI 组件-Toggle 组件
        • 6 UI 组件-Slider 组件
        • 7 UI 组件-Animation 组件&Transition 组件
      • 02 资料获取

        • 1 OpenHarmony 官方资料
      • 03 开发须知

        • 1 Full-SDK替换教程
        • 2 引入和使用三方库
        • 3 HDC调试
        • 4 命令行恢复出厂模式
        • 5 升级App为system权限
      • 04 构建第一个应用

        • 1 构建第一个ArkTs应用-HelloWorld
      • 05 案例

        • 01 串口调试助手应用案例
        • 02 手写板应用案例
        • 03 数字时钟应用案例
        • 04 WIFI 信息获取应用案例
    • 四、设备开发

      • 1 Ubuntu环境开发

        • 01 环境搭建
        • 02 下载源码
        • 03 编译源码
      • 2 使用DevEco Device Tool 工具

        • 01 工具简介
        • 02 开发环境的搭建
        • 03 导入SDK
        • 04 HUAWEI DevEco Tool 功能介绍
    • 五、内核外设与接口

      • 01 指南
      • 02 设备树介绍
      • 03 GPIO介绍
      • 04 I2C通讯
      • 05 SPI通信
      • 06 PWM 控制
      • 07 串口通讯
      • 08 TF卡
      • 09 屏幕
      • 10 触摸
      • 11 Ethernet(以太网)
      • 12 M.2 硬盘
      • 13 音频
      • 13 WIFI & BT
      • 14 摄像头
    • 六、资料下载

      • 资料下载
  • M5-R1

    • 一、简介

      • M5-R1简介
    • 二、快速上手

      • 镜像烧录
      • 环境搭建
      • 下载源码
    • 三、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
    • 四、资料下载

      • 资料下载

06 PWM 控制

1 PWM 介绍

1.1 PWM 基础知识

PWM(Pulse Width Modulation)是一种通过改变脉冲宽度来控制平均功率的技术:

  • 周期(Period):一个完整PWM波形的时间长度
  • 占空比(Duty Cycle):高电平时间占整个周期的百分比
  • 频率:PWM信号的重复频率,频率 = 1/周期
PWM

1.2 板卡 PWM 外设接口总览

以 M4-R1 为例 1、在板卡的 40PIN 引脚上有 3 个具有 PWM 功能的 GPIO。 2、在板卡的有一个 FAN 接口提供了 1 个具有 PWM 功能的引脚。 其中 PWM5(PIN33) 已经被 MIPI1 屏幕背光所占用

板卡PIN12PIN32PIN33FAN
M4-R1pwm0pwm14pwm5pwm9

40PIN 引脚原理图如下:

PWM

FAN 接口如图所示:

PWM

备注

pwm0,pwm5,pwm9默认都已使能

2 PWM使用--命令行方式

2.1 检查PWM设备

在终端输入以下命令查看pwm是否使能

ls -l /sys/class/pwm/

如图:

PWM

pwmchip1,pwmchip2为屏幕的背光,系统默认开启。 当开启多个pwm设备树插件时,pwm控制器值越小,系统分配的pwmchip越小。

比如我同时开启了pwm0,pwm5,pwm14,那么会出现以下对应关系

pwm0->pwmchip0
pwm5->pwmchip2
pwm14->pwmchip3

2.2 导出并设置 PWM

下面以 PWM9 为例

接上风扇测试,接线图如图所示

接好线材后,PWM 引脚默认输出高电平,因此风扇会全速旋转。

白线-红线紫线-蓝线棕线-黑线
VCCPWMGND
PWM
#将 pwm9 导出到用户空间
echo 0 > /sys/class/pwm/pwmchip3/export

#设置 pwm 周期 单位为 ns
echo 1000000 > /sys/class/pwm/pwmchip3/pwm0/period

#设置占空比
echo 500000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle

#设置 pwm 极性
echo "inversed" > /sys/class/pwm/pwmchip3/pwm0/polarity   #正常,有效电平为高电平

注意

示例风扇为 PWM 引脚有效电平为高电平。 M4R1板卡设置 PWM 极性为 inversed 时,有效电平为高电平,此时调整占空比可控制风扇转速,占空比越高转速越快

提示

当设置 period 与 duty_cycle 值时,需要注意在任何的情况下都得保证 period 的值大于等于 duty_cycle 的值。

2.3 使能 PWM

#使能 pwm
echo 1 > /sys/class/pwm/pwmchip3/pwm0/enable

输入上述指令时,风扇受 PWM 控制,按照 2.2 设置即高低电平各占50%。

2.4 禁用和取消导出 PWM

#禁用 pwm
echo 0 > /sys/class/pwm/pwmchip3/pwm0/enable

#取消将 pwm9 导出到用户空间
echo 0 > /sys/class/pwm/pwmchip3/unexport

3 PWM使用-NAPI方式

通过NAPI接口并修改文件权限的方式,实现北向应用控制南向设备的能力。

3.1 NAPI接口介绍

共提供以下四个 NAPI 接口供开发者使用。

setPwmPeriod:设置PWM信号的周期setPwmDutyCycle:设置PWM信号的占空比setPwmPolarity:设置PWM信号的极性setPwmEnable:启用或禁用PWM输出

详细接口介绍见下文:

1 setPwmPeriod - 设置PWM信号的周期

接口定义

export const setPwmPeriod: (period: string) => boolean;

功能描述: 设置PWM信号的周期

参数:

period (string): PWM周期值,单位为纳秒(ns)

返回值:

boolean: 操作成功返回true

使用示例:

// 设置PWM周期为1000000纳秒(1毫秒,频率1kHz)
const result = setPwmPeriod('1000000')

2、setPwmDutyCycle - 设置PWM信号的占空比

功能描述: 设置PWM信号的占空比

接口定义

export const setPwmDutyCycle: (dutyCycle: string) => boolean;

参数:

  • dutyCycle (string): 占空比值,单位为纳秒(ns),必须小于或等于周期值

返回值:

  • boolean: 操作成功返回true

使用示例:

// 设置占空比为500000纳秒(50%占空比,假设周期为1000000ns)
const result = setPwmDutyCycle('500000')

3、setPwmPolarity - 设置PWM信号的极性

功能描述: 设置PWM信号的极性

接口定义

export const setPwmPolarity: (polarity: string) => boolean;

参数:

  • polarity (string): 极性值
    • "normal": 正常极性(高电平有效)
    • "inversed": 反转极性(低电平有效)

返回值:

  • boolean: 操作成功返回true

使用示例:

// 设置为正常极性
const result = setPwmPolarity('normal')

// 设置为反转极性
const result = setPwmPolarity('inversed')

4、setPwmEnable - 启用或禁用PWM输出

功能描述: 启用或禁用PWM输出

接口定义

export const setPwmEnable: (enable: string) => boolean;

参数:

  • enable (string): 启用状态
    • "1": 启用PWM输出
    • "0": 禁用PWM输出

返回值:

  • boolean: 操作成功返回true

使用示例:

// 启用PWM输出
const result = setPwmEnable('1')

// 禁用PWM输出
const result = setPwmEnable('0')

3.2 步骤1:修改文件权限

注意

如果使用的是我们提供的固件镜像,可以直接跳过步骤1,固件中已经将文件权限进行修改
固件获取地址:

1)检查 pwm9 是否被正常导出

ls /sys/class/pwm/pwmchip3

正常导出会显示PWM0,如下图所示。

PWM

如果没有导出则通过下述指令导出

echo 0 > /sys/class/pwm/pwmchip3/export

2)检查 /sys/class/pwm/pwmchip3/pwm0 目录下的文件是否权限为 777

ls -al /sys/class/pwm/pwmchip3/pwm0/
PWM

如果如上图所示,则通过以下指令更改权限

chmod 777 /sys/class/pwm/pwmchip3/pwm0/*
PWM

注意

M4-R1 OH5.0 默认导出pwmchip3的pwm0,并更改pwm0目录中的所有权限。 如有需要,自行到百度云盘下载相关固件

3.3 步骤2:启动应用程序

1)获取 HAP 包资源

备注

pwm_fan.hap 获取路径:

2)将 HAP 包下载到板卡中

将从百度网盘中下载好的 HAP 包通过 hdc install 下载到板卡中。

示例中将百度网盘下载的 HAP 包放到 E 盘目录下,打开终端输入下列指令:

hdc install E:\pwm_fan.hap

执行结果如图所示,显示"install bundle successfully","APP finish",即表示应用安装完成。

PWM

此时 M4R1 的桌面上显示该应用图标

PWM

3) 应用该程序

点击桌面 [PWM控制] 图标,进入应用,应用界面如图所示:

PWM

UI界面介绍 点击 PWM 控制开关,启用 PWM 控制,风扇会初始化转速为0。 通过滑动条可以控制风扇转速。 下方四个按钮为简易控制,低速,中速,高速,最高分别对应25%,50%,75%,100%

3.4 应用效果展示视频

PWM控制风扇应用效果展示视频.mp4

在 GitHub 上编辑此页
上次更新:
贡献者: hjf
Prev
05 SPI通信
Next
07 串口通讯