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 |