射频芯片学习-PA = Power Amplifier(功率放大器)

PA = Power Amplifier(功率放大器)

PA 是射频芯片里把微弱信号放大到能通过天线发射出去的电路。LR20xx 内部有两路 PA:

复制代码
                  ┌─────────────────────────────┐
                  │         LR20xx 芯片           │
调制信号 ──►      │                              │
 (小信号)         │    ┌─── LF PA (Sub-GHz) ──┐  │
  ~0 dBm          │    │ 400~950 MHz          │  │
                  │    │ pa_lf_slices = 7      │──┼──► 天线 (天线开关选通)
                  │    │ pa_lf_duty_cycle = 7  │  │    ~+22 dBm
                  │    └───────────────────────┘  │
                  │                              │
                  │    ┌─── HF PA (2.4GHz) ───┐  │
                  │    │ 2.4~2.5 GHz          │  │
                  │    │ pa_hf_duty_cycle = 16 │  │
                  │    └───────────────────────┘  │
                  └─────────────────────────────┘

如果不配置 PA,芯片输出的射频功率只有 ~0 dBm(1mW),空中距离可能只有几米。配置 PA 后能到 +22 dBm(~160mW)。

以LR2012芯片举例:

cpp 复制代码
lr20xx_radio_common_pa_cfg_t pa_cfgs = {
    .pa_sel           = LR20XX_RADIO_COMMON_PA_SEL_LF,    // ① 选哪路 PA
    .pa_lf_mode       = LR20XX_RADIO_COMMON_PA_LF_MODE_FSM, // ② LF PA 工作模式
    .pa_lf_duty_cycle = 7,   // ③ LF PA 占空比
    .pa_lf_slices     = 7,   // ④ LF PA 电流片数
    .pa_hf_duty_cycle = 16,  // ⑤ HF PA 占空比
};

① pa_sel --- 选低频还是高频 PA

值 含义
PA_SEL_LF 用 Sub-GHz PA(400~950 MHz),868/915MHz 选这个
PA_SEL_HF 用 2.4GHz PA,2.4G 选这个
PA_SEL_BOTH 两路都用

你跑 850MHz,所以选 LF。

② pa_lf_mode --- LF PA 的工作模式

这是一个设计上有趣的地方。LR20xx 的 LF PA 有两种给电方式:

值 含义
PA_LF_MODE_FSM 有限状态机模式(推荐) --- 硬件自动管理 PA 的开关时序,效率高、省电
PA_LF_MODE_DIRECT 直接控制模式 --- 固件手动控制 PA 的各级开关

FSM 模式是新方案,解决了直接模式下的死区问题。E80 demo 用 FSM,你也应该用 FSM。

③ pa_lf_duty_cycle --- 占空比

PA 内部有多个放大级,占空比控制每一级导通的时间比例。值越大 → 导通时间越长 → 平均功率越大。

复制代码
  ┌──┐  ┌──┐  ┌──┐  ┌──┐    duty_cycle=7 (高功率)
  │  │  │  │  │  │  │  │
──┘  └──┘  └──┘  └──┘  └──

  ┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐    duty_cycle=3 (低功率)
  ││││││││││││││││
──┘└┘└┘└┘└┘└┘└┘└┘└┘
  • Sub-GHz 推荐值: 7
  • 范围 0~7,越大功率越高

④ pa_lf_slices --- 电流片

PA 由多个并联的"电流源片"组成,就像多个水管并联。slices 控制打开几片:

复制代码
    ┌──────┐
slice0 │ 启用 │═╗
    └──────┘ ║
    ┌──────┐ ║
slice1 │ 启用 │═╬═══► 总电流 = 7片 × 每片电流
    └──────┘ ║
    ...      ║
    ┌──────┐ ║
slice6 │ 启用 │═╝
    └──────┘
  • 每片约等于一定的电流 → 一定的输出功率
  • Sub-GHz 推荐值: 7(最大,全开)
  • 范围 0~7,片数越多 PA 电流越大、输出功率越高

⑤ pa_hf_duty_cycle --- 2.4G PA 占空比

和 pa_lf_duty_cycle 同理,但给 2.4GHz PA 用的。你用 Sub-GHz 时这个值实际上不起作用,但 E80 demo 仍写了 16(HF PA 的值范围是 0~31)。


最终输出功率是怎么来的

cpp 复制代码
rf_freq            ──┐
pa_sel = LF         ─┤
pa_lf_duty_cycle = 7 ─┤──→ 芯片内部计算 PA 偏置电压
pa_lf_slices     = 7 ─┤
                     ─┘
                          ↓
tx_params.power = 0x2C    ──→ 设置 PA 输入信号幅度 单位0.5dBm
                          ↓
                    最终输出功率 ≈ +22 dBm (Sub-GHz, LF PA 全开)

pa_cfg 控制的是 PA 硬件的能力上限(放大能力),tx_params 的 power 值控制的是实际的发射功率档位。 两个都要配,缺一不可。

PA理解成功放,tx_params.power理解为在功放的基础上调整声音大小。

PA 管架构,power 管信号

复制代码
                     PA (硬件放大器)                    输出到天线
输入信号 ──────────►│  放大器  │──────────────────────►
    ↑               │  ↑       ↑                       ↑
    │               │  │       │                       │
power_half_dbm      │  slices  duty_cycle              最终功率
控制信号幅度         │  控制放大器的物理能力                = 信号 × 放大
(精细调节)           │  (粗略调节)

类比:音响系统

复制代码
手机音量 ──────────►  功放机 ──────────►  音箱
(power_half_dbm)     │                 │
                     功放增益旋钮        │
                     (slices/duty)      │
                                     最终响度
  • slices/duty_cycle = 功放机后面的增益旋钮 ------ 决定了功放"最多能放多大"。旋钮拧到最大 = PA 能力全开
  • power_half_dbm = 手机音量滑块 ------ 在 PA 的能力范围内,决定实际发多大的信号

只调 PA 不调 power,等于功放拧大了但手机音量是 0 → 没声音。只调 power 不调 PA,等于手机开满但功放是关的 → 信号到不了天线。

ramp_time --- PA 功率爬升速度

射频发射时,PA 不能瞬间从 0 跳到满功率 ------ 会产生频谱溅射,污染相邻信道:

复制代码
ramp_time 短 (2µs):          ramp_time 长 (304µs):
功率                         功率
│   ┌────── 满功率             │         ╭────── 满功率
│  ╱                          │        ╱
│ ╱                           │      ╱
│╱                            │    ╱
└──────────► 时间             └──────────► 时间
  频谱脏 (谐波多)                频谱干净 ✓

从 lr20xx_radio_common_types.h:138-159:

ramp_time 频谱质量 额外耗时
2 µs 差,谐波严重 几乎无
16 µs 一般 可忽略
128 µs 好 轻微
304 µs 最好 每包多 0.3ms
相关推荐
FelixZhang02835 分钟前
量化求真10|回测通过以后,策略就能上场吗?
人工智能·python·深度学习·学习·机器学习·金融·lstm
Vcaker40 分钟前
Linux学习33-HPA动态扩缩容及k8s调度策略
linux·运维·学习
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++内存模型和名称空间 — 详细知识点总结(9)
开发语言·c++·学习
AOI小白新手上路1 小时前
韦东山《ARM 架构与编程》3-2 GPIO 引脚操作方法概述 · 学习笔记
arm开发·学习·架构
zhangrelay1 小时前
ROS2 Lyrical实验5导航Nav2
linux·笔记·学习·ubuntu·机器人
JWASX2 小时前
Java 转 go 学习 - 基本语法
学习·golang
让头发掉下来2 小时前
Kettle学习-17作业的创建与定时调度
学习
小刘在重生~2 小时前
CSS 零基础完整学习笔记|选择器|盒子模型|布局
css·笔记·学习
AOI小白新手上路3 小时前
韦东山《ARM 架构与编程》3-3 IMX6ULL 的 GPIO 操作方法 · 学习笔记
arm开发·学习·架构
浩瀚地学3 小时前
deepagents学习打卡day07
经验分享·笔记·python·学习·agent