跳转至

PWM

一、简介

1.1 pwm 是什么

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

PWM 的相关参数:

1. PWM 的频率: 是指 1 秒钟内信号从高电平到低电平再回到高电平的次数(一个周期),也就是说一秒钟 PWM 有多少个周期 单位:Hz 2. PWM 的周期: T=1/f 周期=1/频率 例:如果频率为 50Hz ,也就是说一个周期是 20ms,那么一秒钟就有 50 次 PWM 周期 3. PWM 的占空比: 是一个脉冲周期内,高电平的时间占整个周期时间的比例 单位: % (0%-100%) 例:一个周期 10ms,高电平占 8ms,那么此占空比就是 8/10=80%

1.2 pwm 原理

单片机的 IO 引脚输出的是数字信号,且只能输出 1 和 0,那如果 TTL 电平中,高电平为 5V,低电平为 0V,但是我们想要输出不同的模拟电压,比如输出 3.75V 应该怎么操作?

此时要用到 PWM,通过改变 IO 口输出方波的占空比,得到不同的模拟电压。 3.75/5=0.75 ,也就是高电平时间占整个周期的 75%,即占空比为 75%,可得到平均电压 3.75V. 注意上图中蓝线,代表着输出的模拟电压,占空比越大,则模拟电压也越大。

1.3 Air724UG pwm 说明

查阅 Air724UG 模块硬件设计手册

PWM_PWT_OUT 的时钟基于 APB 时钟,主时钟是 200Mhz,通过配置 pwt 寄存器的 PWT_Period 和

PWT_Duty 来控制 pwm 的输出

PWM_LPG_OUT(Light Pulse Generation)用于低频率的应用如驱动 LED 闪烁。

下面是频率和占空比可以选择的取值范围:

周期范围:125ms,250ms,500ms,1000ms,1500ms,2000ms,2500ms, 3000ms

选择对应的时间,输出的波形周期也与之对应。

高电平时间: 15.6ms, 31.2ms, 46.8ms, 62ms, 78ms, 94ms, 110ms, 125ms, 140ms, 156ms, 172ms, 188ms,

200ms, 218ms, 243ms

选择对应高电平时间,输出在当前周期内的高电平。

二、演示功能概述

本教程教你如何使用开发板输出 PWM 功能。

功能定义:

1. 使用 PWM 引脚输出脉宽调制信号 2. 驱动开发板指示灯,呼吸灯演示

三、准备硬件环境

3.1 开发板准备

使用 EVB_Air724 开发板,如下图所示:

淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接

此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。

api:https://doc.openluat.com/wiki/21?wiki_page_id=2068

3.2 数据通信线

USB 数据线一根(micro USB)。

3.3 PC 电脑

WIN7 以及以上版本的 WINDOWS 系统。

3.4 组装硬件环境

USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,如下图所示。

四、准备软件环境

4.1 下载调试工具

使用说明参考:Luatools 下载和详细使用

4.2 源码及固件

1. 底层 core 下载

下载底层固件,并解压

链接:https://docs.openluat.com/air724ug/luatos/firmware/

如下图所示,红框的是我们要使用到的

1. 本教程使用的 demo 见附件:

https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/pwm呼吸灯

4.3 下载固件和脚本到开发板中

打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。

点击项目管理测试选项。

进入管理界面,如下图所示。

  • 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中

  • 点击增加脚本或资源文件,选择之前下载的程序源码,如下图所示。

  • 点击下载底层和脚本,下载完成如下图所示。

五、代码示例介绍

5.1 PWM 接口说明

本例使用 Air724 的 49 管脚,即 PWM_PWT_OUT GPIO_5 pwm 通道 id=0,控制开发板上的红色电源指示灯。

开启 pwm 通道的 pwm 输出,设置不同的占空比,小灯会有不同的亮度,原理图如图所示。

5.2 breathingLight.lua 代码

打开并且配置 PWM 函数 misc.openPwm(0, 512, y) 说明

--0:gpio5, 1:gpio13

--p1 周期 0-1024

--p2 占空比 0-512

sys.taskInit(function()
    sys.wait(5000)
    log.info("test start")
    while true do
        if x == 0 then
            y = y + 4
        elseif x == 1 then
            y = y - 4
        end
        if y < 6 then
            x = 0
        elseif y >= 508 then
            x = 1
        end
        misc.openPwm(0, 512, y)         -- 打开并且配置PWM
        sys.wait(8)
    end
end)

5.3 main.lua 代码

本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,然后加载加载功能测试模块。

六、开机展示

连接好硬件并下载固件后,重启开发板观察指示灯的变化,如下图所示。

七、常见问题

1. 为什么 gpio13 输出是低频波形吗?

gpio13 只能输出低频 pwm 波形。

1. 为什么配置后输出没波形?

答:看通道是否配置正确,gpio 口是否被占用。

1. PWM 的信号的频率如何选择?

频率的选择通常取决于具体应用,根据自己的项目需要来选择:

(1)电机控制:常用频率为 1 kHz 到 20 kHz,以确保足够的反应速度和控制精度。

(2)LED 调光:频率通常在 1 kHz 以上,以避免人眼感知到闪烁。

(3)音频信号:频率设置应高于音频信号的最高频率(例如,至少为 20 kHz)。

给读者的话

本篇文章由杨超开发;

本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;

请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-硬件驱动-PWM

用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;

我们会迅速核实并且修改文档;

同时也会为您累计找错积分,您还可能赢取月度找错奖金!