一、主要内容
PWM——脉宽调制;
ADC——模数转换。
二、PWM
PWM:
Pulse Width Modulation,脉宽调制。
PWM 是一种通过控制数字信号的高电平持续时间来改变输出效果的技术。
PWM 输出的基本波形:
┌──────┐ ┌──────┐ │ │ │ │ ──────┘ └────────┘ └────── ← 高电平 → ←──── 一个周期 ────→PWM 信号主要有三个重要参数:
周期 频率 占空比三、PWM周期
一个完整的 PWM 波形:
高电平 ↓ ┌───────┐ │ │ │ │ └───────┴──────────── 低电平从一个周期开始到下一个周期开始所经历的时间:
叫做周期 T。
例如:
T = 1ms表示一个 PWM 周期需要:
1ms四、PWM频率
PWM 频率表示:
单位时间内 PWM 信号重复的次数。
频率和周期的关系:
f = 1 / T例如:
T = 1ms那么:
f = 1 / 0.001 = 1000Hz所以:
1ms周期 = 1000Hz频率五、PWM占空比
占空比:
Duty Cycle
表示:
一个周期内高电平时间所占整个周期的比例。
计算公式:
占空比 = 高电平时间 / 周期 × 100%例如:
周期 = 10ms 高电平 = 5ms那么:
占空比 = 5 / 10 × 100% = 50%波形可以表示为:
50%占空比 高 ┌─────┐ │ │ ───┘ └───────── ← 5ms → ← 5ms → ←────10ms──────→六、不同占空比
1. 25%占空比
高 ┌──┐ │ │ ───┘ └──────────────高电平时间比较短。
2. 50%占空比
高 ┌────┐ │ │ ───┘ └────────────高低电平时间基本相同。
3. 75%占空比
高 ┌────────┐ │ │ ───┘ └────────高电平时间比较长。
因此:
占空比越大 ↓ 高电平持续时间越长七、PWM的作用
PWM 最常见的应用包括:
LED亮度控制 电机调速 舵机控制 蜂鸣器控制 功率控制例如控制 LED:
占空比小 ↓ LED较暗 占空比大 ↓ LED较亮八、PWM控制LED亮度
假设 PWM 频率足够高。
当:
占空比 = 10%LED 只有较短时间处于点亮状态。
当:
占空比 = 50%LED 点亮时间增加。
当:
占空比 = 90%LED 大部分时间处于点亮状态。
由于人眼存在视觉暂留,因此看到的是不同程度的亮度。
可以理解为:
PWM │ ├──10% → 较暗 │ ├──50% → 中等亮度 │ └──90% → 较亮九、PWM控制电机
PWM 也可以用于控制电机。
改变 PWM 占空比:
占空比改变 ↓ 平均电压/功率发生变化 ↓ 电机运行状态改变例如:
占空比较小 ↓ 电机速度较低 占空比较大 ↓ 电机速度较高具体转速与电机、驱动电路和负载等因素有关。
十、PWM的基本结构
PWM 外设可以简单理解为:
时钟 ↓ 分频 ↓ 计数器 ↓ 周期寄存器 ↓ 比较寄存器 ↓ PWM输出其中:
周期寄存器 ↓ 决定周期/频率 比较寄存器 ↓ 决定高电平持续时间 ↓ 决定占空比十一、i.MX6ULL的PWM
i.MX6ULL 内部具有 PWM 外设。
PWM 工作的基本过程:
时钟输入 ↓ 分频 ↓ PWM计数 ↓ 比较 ↓ 产生PWM波形 ↓ 输出到对应引脚因此使用 PWM 时,一般需要完成:
① 配置PWM引脚复用 ② 配置PWM时钟 ③ 设置分频 ④ 设置周期 ⑤ 设置比较值 ⑥ 开启PWM十二、PWM频率计算
PWM 的频率与:
输入时钟 + 分频系数 + 周期计数值有关。
基本思想:
PWM输入时钟 ↓ 分频 ↓ PWM计数频率 ↓ 计数 ↓ 一个周期假设计数频率为:
1MHz那么:
1个计数 = 1us如果一个 PWM 周期需要:
1000个计数那么:
T = 1000us = 1ms所以:
f = 1 / 1ms = 1kHz十三、PWM占空比计算
假设:
周期计数 = 1000 比较值 = 300那么:
占空比 = 300 / 1000 × 100% = 30%因此:
周期值 ↓ 决定PWM周期 比较值 ↓ 决定高电平时间 ↓ 决定占空比十四、PWM学习重点
PWM 最重要的是理解:
周期 频率 占空比三者关系:
T = 1 / f以及:
D = Ton / T × 100%其中:
T → PWM周期 f → PWM频率 Ton → 高电平时间 D → 占空比十五、ADC
ADC:
Analog-to-Digital Converter
即:
模数转换器。
ADC 的作用:
把模拟信号转换成数字信号。
例如:
电位器 ↓ 模拟电压 ↓ ADC ↓ 数字量 ↓ CPU处理十六、为什么需要ADC
CPU 处理的是数字信号。
但是现实世界中的很多信号都是模拟量,例如:
温度 光照 声音 电压 电流 压力这些信号通常表现为连续变化的电压。
例如:
0V ↓ 0.5V ↓ 1.0V ↓ 1.5V ↓ 2.0V ↓ ...CPU 不能直接按照模拟电压进行数字运算,因此需要:
模拟信号 ↓ ADC ↓ 数字信号十七、ADC基本工作过程
ADC 的基本过程:
模拟输入 ↓ 采样 ↓ 保持 ↓ 量化 ↓ 编码 ↓ 数字输出可以简单理解为:
模拟电压 ↓ “测量” ↓ 转换成数字值十八、ADC采样
采样:
在某一个时间点测量模拟信号的电压值。
例如一个不断变化的模拟信号:
模拟信号: /\ / \ /\ ───/────\────/──\────ADC 在不同时间进行采样:
● / \ ● ───/────●────/──\────得到一系列离散数据。
十九、ADC量化
模拟电压是连续的:
0V 0.001V 0.002V 0.003V ...而数字系统只能使用有限个数字表示。
因此 ADC 需要把连续的模拟电压划分成很多个等级。
这个过程叫:
量化。
二十、ADC分辨率
ADC 有一个非常重要的参数:
分辨率
例如:
12位ADC可以表示:
2^12 = 4096个数字等级。
数字范围通常为:
0 ~ 4095因此:
12 bit → 4096个等级二十一、ADC数字量与输入电压
假设:
ADC分辨率 = 12 bit 参考电压 = 3.3V数字量范围:
0 ~ 4095理想情况下:
ADC值 ≈ Vin / Vref × 4095反过来:
Vin ≈ ADC值 / 4095 × Vref例如:
ADC值 = 2048 Vref = 3.3V则:
Vin ≈ 2048 / 4095 × 3.3约等于:
1.65V所以可以通过 ADC 的数字结果计算输入电压。
二十二、ADC的参考电压
ADC 的转换范围与参考电压有关。
例如:
Vref = 3.3V那么 ADC 的输入范围通常对应:
0V ~ 3.3V对于理想的 12 位 ADC:
0V ↓ ADC ≈ 0 1.65V ↓ ADC ≈ 2048 3.3V ↓ ADC ≈ 4095因此:
输入电压越高 ↓ ADC数字值越大二十三、ADC量化误差
由于 ADC 的数字等级是有限的,所以模拟电压转换成数字值时会存在一定的量化误差。
例如:
真实电压 ↓ 1.234VADC 不一定能够精确表示这个无限连续的值,而是选择最接近的数字等级。
因此:
模拟值 ↓ 量化 ↓ 存在一定误差 ↓ 数字值ADC 分辨率越高:
量化等级越多 ↓ 电压划分越细二十四、ADC使用流程
使用 ADC 时,一般需要:
① 配置ADC引脚 ↓ ② 配置ADC时钟 ↓ ③ 配置ADC工作参数 ↓ ④ 启动转换 ↓ ⑤ 等待转换完成 ↓ ⑥ 读取ADC结果 ↓ ⑦ 根据参考电压计算实际电压整体过程:
模拟输入 ↓ ADC ↓ 启动转换 ↓ 等待完成 ↓ 读取结果 ↓ 数字量 ↓ 计算电压