ARM学习笔记(八)——PWM与ADC

一、主要内容

  1. PWM------脉宽调制;

  2. 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
   ↓
启动转换
   ↓
等待完成
   ↓
读取结果
   ↓
数字量
   ↓
计算电压

相关推荐
恒锐丰科技林技术员1 小时前
EG2106 半桥 MOS/IGBT 驱动芯片解析与工程应用
经验分享·嵌入式硬件·硬件工程
威嵌神州2 小时前
P2020 性能怎么样?经典 PowerPC 架构的嵌入式控制优势解析
嵌入式硬件
M78佐菲3 小时前
ARM学习笔记(12)
linux·arm开发·笔记·嵌入式硬件·学习
CHENKONG_CK3 小时前
RFID 赋能汽车零部件涂装产线,构建全流程数字化追溯体系
网络·人工智能·单片机·网络协议·tcp/ip·汽车
璞致电子4 小时前
基于 AD9361 (PZSDR‑P201Pro) 软件无线电实战综述:从板卡选型、硬件平台升级到 GNU Radio QPSK 完整收发链路
经验分享·嵌入式硬件·fpga开发·软件无线电·sdr·璞致电子
高斯的手稿08015 小时前
CS+中,全局变量的正确管理方式
嵌入式硬件
俊基科技5 小时前
喇叭 95dB、麦克风贴到 1cm,回音还能消干净?拆解 A-29P 的消回音设计
嵌入式硬件·硬件开发·ai降噪·回音消除·拾音降噪
2401_862880825 小时前
LCD 显示与触控屏驱动开发
驱动开发·嵌入式硬件
糖糖单片机设计6 小时前
基于STM32的指纹刷卡智能门禁系统设计(RC522 + AS608 + 蓝牙远程开锁 + 断电记忆)
人工智能·stm32·嵌入式硬件·51单片机·语音识别