一、主要内容
-
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.234V
ADC 不一定能够精确表示这个无限连续的值,而是选择最接近的数字等级。
因此:
模拟值
↓
量化
↓
存在一定误差
↓
数字值
ADC 分辨率越高:
量化等级越多
↓
电压划分越细
二十四、ADC使用流程
使用 ADC 时,一般需要:
① 配置ADC引脚
↓
② 配置ADC时钟
↓
③ 配置ADC工作参数
↓
④ 启动转换
↓
⑤ 等待转换完成
↓
⑥ 读取ADC结果
↓
⑦ 根据参考电压计算实际电压
整体过程:
模拟输入
↓
ADC
↓
启动转换
↓
等待完成
↓
读取结果
↓
数字量
↓
计算电压