# PWM脉宽调制 - [概要](#概要) - [什么是PWM脉宽调制技术](#什么是pwm脉宽调制技术) - [占空比](#占空比) - [频率](#频率) - [PWM脉宽调制通用方法集合](#pwm脉宽调制通用方法集合) - [PWM引脚定义](#pwm引脚定义) - [machine.PWM API详解](#machinepwm-api详解) - [类](#类) - [创建PWM对象](#创建pwm对象) - [函数](#函数) - [初始化](#初始化) - [频率](#频率-1) - [占空比](#占空比-1) - [释放资源](#释放资源) - [示例](#示例) ## 概要 - 脉宽调制技术的原理与属性(占空比,频率) - 通过PWM脉宽调节技术控制LED的亮度的演示实例。 ### 什么是PWM脉宽调制技术 - PWM的全称为Pulse Width Modulation脉冲宽度调节,是把模拟信号调制成脉波的技术。 ### 占空比   在一个周期内,高电平时间占总体周期的比例,称之为**占空比 (duty)**。    例如PWM的控制周期为100ms,其中20ms为高电平,80ms为低电平,则占空比就是 20/100 = 20%。   注意有时候占空比有时候在嵌入式并不是百分比,而是参考其**分辨率**。   分辨率越高,也就意味着你可以调节的亮度的档位也就越高,引脚输出的**平均电压**处于0-3.3v之间 划分成1024份,你可以取其任意一个。 ### 频率   PWM的第二个属性是**频率**, 频率为控制周期T的倒数。在上面这个例子里面,100ms就是控制周期,那频率就是`1s / 0.1s = 10HZ`   频率的取值范围由硬件决定。 ### PWM脉宽调制通用方法集合  PWM脉宽调制定义了操作PWM的通用方法集合,包括: - 获取、释放设备句柄 - 读写数据、获取和设置波特率 - 获取和设置设备属性。 ## PWM引脚定义   共有14个引脚有PWM功能:   总共6组PWM。(注意,在Waffle Nano中3,4号引脚为python REPL代码交互用引脚,已被占用无法进行二次调用) | 引脚 | 功能 | | -------------------- | -------- | | pin 7、pin 10 | PWM0 OUT | | pin 8、pin 9 | PWM1 OUT | | pin 2、pin 5、pin 11 | PWM2 OUT | | pin 0、pin 6、pin 12 | PWM3 OUT | | pin 1 | PWM4 OUT | | pin 14 | PWM5 OUT | ## machine.PWM API详解   **PWM可在所有输出引脚上启用。但其存在局限:须全部为同一频率,且仅有8个通道。**   使用`from machine import PWM`导入 `machine` 模块的脉宽调制类 `PWM`   再使用 `TAB` 按键来查看 `PWM` 中所包含的内容: ```python >>> from machine import PWM >>>PWM. deinit duty freq init ``` ### 类   class machine.PWM(id, Pin(),freq,duty)   id :PWM组号。   Pin() :有PWM组号相应功能的引脚。   freq :频率,频率范围由硬件决定,最低输出频率为611赫兹,最高数据频率为65535赫兹。   duty :占空比,介于0至100的闭开区间。 ### 创建PWM对象   利用类对象创建PWM   示例: ```python >>> from machine import Pin,PWM >>> p = PWM(0, Pin(7),freq=2442,duty=50) #构建PWM 0对象,频率为2442赫兹,占空比为50% ``` ### 函数   在接下来的示例中, 构造`id=0`的`PWM`对象来列举PWM对象的函数。 ```python >>>from machine import PWM >>>pwm = PWM(0,Pin(7))#构建PWM0 ``` #### 初始化   pwm.init(freq ,duty)   函数说明:初始化PWM脉宽调制   参数含义同上文类构造一致 ```python >>> from machine import Pin,PWM >>> pwm = PWM(0,Pin(7)) >>> pwm.init(freq=2442,duty=50)#初始化PWM频率为2442,占空比为50 ``` #### 频率   pwm.freq()   函数说明:设置PWM频率   频率范围由硬件决定 ```python >>> from machine import Pin,PWM >>> pwm = PWM(0,Pin(7))#创建PWM 0对象 >>> pwm.freq(2442)#设置PWM频率为2442 ``` #### 占空比   pwm.duty()   函数说明:设置PWM占空比   占空比为50% ```python >>> from machine import Pin,PWM >>> pwm = PWM(0,Pin(7))#创建PWM 0对象 >>> pwm.duty(50)#设置PWM占空比为50% ``` #### 释放资源   pwm.deinit()   函数说明:pwm使用完了之后,需要销毁,释放资源,否则引脚将继续保持在PWM模式 ```python >>> from machine import Pin,PWM >>> pwm = PWM(0)#创建PWM 0对象 >>> pwm.deinit()#释放pwm 0资源 ``` ## 示例   将waffle nano的一些GPIO引脚构造成PWM,设置其频率和占空比。 ```python from machine import Pin,PWM p = PWM(0, Pin(7)) p.freq(2442) p.freq(3442) p.duty(50) p.deinit() ```   第一行导入`machine`模块的硬件类`Pin`和脉宽调制类`PWM`   第二行创建`PWM`对象 - 0 — 构造的是`PWM 0` - Pin(7) — GPIO 7号引脚实现PWM 0功能   三四行设置PWM 0的频率   第五行设置PWM 0的占空比为50%   第六行释放PWM 0资源