昨天的小 MCU,看起来大家是非常感兴趣的,那我就再给大家写一点详细的内容。这个 MCU主要解决的是对体积要求高,成本敏感的传感器客户,价格很美。
领慧立芯新品:LH32M0G3XX(完整单芯片高性能采集系统)
首先这样的 MCU 其实也不是独此一家,竞品也有,所以就先给大家看看一些竞品的对比吧!
基本信息 (MCU Core & 系统)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADC 特性
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基准源 / 恒流源
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DAC 特性
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
封装
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MCU Total_Score ENOB(bit) PGA_Max Ref_Temp(ppm/°C)
0 LH32M0G3XX 4.95 23.2 128 5
1 ADuCM360 1.87 21.1 128 100
2 MAX32675C 3.53 17.3 128 33
3 RX23E-A 3.79 22.2 128 25
4 SD25F201 3.53 22.7 256 24
Excite_Drift(ppm/°C) DAC_Bits SRAM(KB) Flash(KB) Power_mA
0 1.7 16 8 128 1.3
1 50.0 12 8 128 1.0
2 10.0 12 160 384 2.1
3 5.0 0 32 256 1.6
4 14.8 0 4 64 2.0
总评分 (综合考虑 ENOB、PGA、基准漂移、激励漂移、DAC、存储、功耗等)
**LH32M0G3XX (蓝色)**:在 ENOB、Ref 温漂、Excite 漂移、DAC、功耗上全面领先 → 非常适合高精度测量 + 工业变送。
**MAX32675C (绿色)**:内存资源非常强,但 ADC 性能较弱 → 偏向高计算负载应用。
**RX23E-A (红色)**:ENOB 高,算是“纯 ADC 强项”,但缺乏 DAC。
SD25F201 / NSA2860:在 PGA、工业特性上有亮点,但整体偏向专用芯片。
**ADuCM360 (橙色)**:作为老牌方案,功耗低,但精度和基准源性能明显落后。
如果目标是 高精度传感测量 (RTD/热电偶/桥式传感器) + 工业现场变送 (4–20 mA/HART) → LH32M0G3XX 最优。
如果目标是 大存储 + 较多外设 + 通用 MCU → MAX32675C 更合适。
如果目标是 仅高精度 ADC,不关心 DAC/变送 → RX23E-A 或 SD25F201。
蓝色 = 优势(性能突出)
红色 = 劣势(表现较弱)
橙色 = 中性(一般,既不是明显优势也不是明显劣势)
LH32M0G3XX:在 ADC 精度、基准温漂、DAC、功耗 上全面占优 → 最适合高精度工业测量。
ADuCM360:功耗优势,但 ENOB 与基准漂移差,属于老一代产品。
MAX32675C:存储资源巨大(优势),但 ADC 精度、基准漂移、功耗偏弱。
RX23E-A:ADC 精度高,但无 DAC,功耗也偏高。
SD25F201:ADC 精度高,但 存储/功耗/DAC都是短板。
NSA2860:ADC 精度高,有 4–20 mA 输出(工业友好),但存储几乎没有,内核不开放。
领慧的强项就是ADC 这块,MCU 其实是个系统工程,而且也没有出几颗,有问题也正常,这个我之后如果有时间会修一些 bug。
CW32 这块做的很不错,我这边的手册死活下载不小来,那就算了:
信号链这个事情很复杂,所以我这里想要综合的分析一下,这份手册只对 ADC(含两路:ADC0/ADC1)给出了成体系的噪声参数;其他模拟外设(DAC、基准、激励电流源、VBIAS、温度传感器等)未给出定量的噪声指标。
片上基准与传感器供电
片上基准/驱动:1.262/2.048/2.5/4.096 V 可选,带驱动缓冲、最大 16 mA 驱动,可作为 ADC 参考或外部传感器供电;VDRIVE 与 GND_SW 复用到引脚,可做比例测量(ratiometric)/开关供电。典型温漂 5 ppm/°C。
**热电偶偏置(VBIAS)**:片上 AVDD/2 偏置,一次只能路由到一个模拟输出,防止通道间串扰。
激励电流:两路、50 µA–1 mA、可路由到多路 AIN,用于 RTD/桥式等有源激励场景;可并联到同一引脚提高电流。
ADC 噪声(RMS,输入等效,单位 μV)
文档提供了两张完整的 RMS 噪声表(按 SPS × PGA 列出):
ADC0 噪声(RMS, μV @ 内部 2.048V 参考):随 SPS 降低、PGA 增大而减小。
例如:
最差:7813 SPS、PGA=1 → 240.437 μV;PGA=2 → 119.811 μV;PGA=4 → 59.658 μV …(完整行见表)
较低速典型:488 SPS、PGA=64 → 0.393 μV;PGA=128 → 0.377 μV。
低速极限:122 → 61 SPS 继续下降到 ~0.129–0.187 μV(高增益)区间。
更低速(30 SPS):PGA=64/128 约 0.091–0.093 μV。
ADC1 噪声(RMS, μV @ 内部 2.048V 参考):数值与 ADC0 同量级,趋势一致:
最差:7813 SPS、PGA=1 → 240.139 μV;PGA=2 → 122.258 μV;PGA=4 → 61.252 μV …(完整行见表)
中等速:977 SPS、PGA=64 → 0.549 μV;PGA=128 → 0.547 μV。
低速极限:2.5 SPS、PGA=128 → 0.024 μV(本表最小值)。
规律:
SPS↓ ⇒ 噪声↓(Σ-Δ+数字滤波积分更长,带宽更窄)。
PGA↑ ⇒ 输入等效噪声↓(前端放大把同一内部噪声折算到输入更小)。 两路 ADC 的输出速率范围为 2.5 SPS–7812.5 SPS(滤波器相关),参数表也明确把分辨率/噪声“参见均方根噪声与分辨率部分”。
ENOB(有效位数)与采样率 / PGA
文档同时给了 ENOB 表(同样按 SPS × PGA):
代表性性能(ENOB 读数)
注意:以下均来自 Pre.D 的 ENOB 表,设计时以最终版为准。
高带宽端:ODR≈7.813 kSPS 时,ADC0/1 的 ENOB 约 14 bit(低增益段)。
中速:ODR≈977 SPS 时,低增益下 ≈19.5 bit(ADC0/1 均类似)。
低速高分辨:ODR≈61–50 SPS,可到 ≈21.7–21.9 bit(随增益不同略有差异)。
最慢端:ODR 2.5 SPS,表中给到 ≈24 bit(理论极限/平均后的有效位数解读要结合实际噪声与带宽)。
要采几百 Hz 带宽的微伏级信号(比如 400 Hz),就落在 kSPS 级 ODR,对应 ENOB ≈ 18–19.5 bit 区间;若是低带宽静态/慢变量(应变、温度、桥式),把 ODR 拉低到 61–122 SPS,ENOB 可上到 ~21–22 bit。
ADC0 ENOB:例如 30–7813 SPS、PGA=1–128 的 ENOB 均列出;低速/高 PGA 时 ENOB 高(>21 bit),高速/低 PGA 时 ENOB 低(≈14 bit)。
ADC1 ENOB:趋势相同;例如 30–7813 SPS 全部列出,数值与 ADC0 极为接近。
片内基准电压源:给了初始精度、温漂(5 ppm/°C)、负载调整率(2.5 μV/mA)、电源抑制(94 dB)等,但没有噪声(nV/√Hz 或 RMS)指标。
温度传感器:给了精度 ±3 °C、灵敏度代码/°C,无噪声指标。
给出了 ADC0 与 ADC1 的输入等效噪声(RMS μV)的可视化结果:
横轴:采样率(SPS)
纵轴:PGA 增益
颜色:噪声大小(对数刻度,颜色越深噪声越大)
可以直观看到:
-
采样率越高,噪声越大(7813 SPS 处为百 μV 量级)。 -
PGA 越大,噪声越低(PGA=128 时能降到 0.02–0.1 μV)。 -
ADC0 与 ADC1 的趋势相同,差别主要在低速高增益时 ADC1 噪声更小(极限值 0.024 μV rms)。
算算测量的范围:
最强信号(满量程、可不失真采入的上限)
选择最大内部参考 4.096 V、最小增益 PGA=1:差分满量程:±VREF/G = ±4.096 V(即 8.192 Vpp)。
用Vcm≈AVDD/2 做共模(例如 AVDD=5.5 V → Vcm≈2.75 V),每个引脚摆幅为 ±(Vdiff/2)=±2.048 V:
V+ 最高 ≈ 2.75 + 2.048 = 4.798 V < AVDD+0.05,
V− 最低 ≈ 2.75 − 2.048 = 0.702 V > AGND−0.05, 满足引脚绝对电压限值要求。
结论:最强可测差分信号(不削顶)为 ±4.096 V(PGA=1,VREF=4.096 V,合适共模)。更高电平需外部分压/隔离。
最弱信号(受噪声底限制)
采用输入等效 RMS 噪声作为 1σ 门槛,再给出 3σ/6.6σ 作为工程检测阈值:
极限低带宽(追求最低噪声):ADC1 @ 2.5 SPS,PGA=128 → 0.024 μV rms(表中最小)。
比如再在≈400 Hz 带宽场景:ADC1 @ 488 SPS,PGA=64/128 → 0.266 μV rms。
需要大带宽时,优先提高 PGA 再提高 ODR,尽量把输入信号放到 满量程的 50–90%,使 SNR 接近 ENOB 表格上限。
微伏级直流/低频:把 ODR 拉低(61/122/244 SPS 档),配合 PGA≥64,可以把输入等效噪声压到 0.1 μV 量级;若对参考噪声敏感,考虑外接更低噪声基准并做比例测量(VDRIVE↔参考)以抑制供电耦合。
左图:488 SPS(≈400 Hz 带宽)
右图:122 SPS(≈几十 Hz 带宽)
横轴:PGA 增益(对数坐标,1–128)
纵轴:输入等效噪声(μV rms,对数坐标)
整体趋势一致:采样率越低、PGA 越高,噪声越小。
ADC1 略优:在大多数 PGA 档下,ADC1 噪声比 ADC0 更低,尤其在高增益时(64/128 档),ADC1 的优势更明显。
高带宽场景(488 SPS):ADC0/ADC1 均在 0.2–0.4 μV 区间(高 PGA),ADC1 略低。
低带宽场景(122 SPS):ADC1 能保持更低的等效噪声,利于微弱信号检测。
我尝试把 ADC1 配成 AIN0–AIN1 差分输入、PGA=64、488 SPS(ODR)、双极性输出,并用软件触发启动连续转换。
ADC1 @ AIN0–AIN1, PGA=64, 488 SPS, Bipolar, 连续转换
#include <stdint.h>

#define ADC_BASE 0x40012880UL
/* ——— 总览(参考手册寄存器映射,统一本页基地址) ———
ADC_STATUS_1: BASE+0x44
ADC_DATA_1: BASE+0x48
ADC_CONTROL_1: BASE+0x50
CHANNEL_CFG_1: BASE+0x54
CONFIGURATION_1:BASE+0x58
FILTER_1: BASE+0x5C
#define ADC_STATUS_1 (*(volatile uint32_t *)(ADC_BASE + 0x44))
#define ADC_DATA_1 (*(volatile uint32_t *)(ADC_BASE + 0x48))
#define ADC_CONTROL_1 (*(volatile uint32_t *)(ADC_BASE + 0x50))
#define CHANNEL_CFG_1 (*(volatile uint32_t *)(ADC_BASE + 0x54))
#define CONFIGURATION_1 (*(volatile uint32_t *)(ADC_BASE + 0x58))
#define FILTER_1 (*(volatile uint32_t *)(ADC_BASE + 0x5C))
/* ---------- CHANNEL_CFG_1 位域 ----------
AINP[9:5] 选择正端;AINM[4:0] 选择负端。
0x0: AIN0, 0x1: AIN1, … 0xB: AIN11;还支持温度、AVDD/5、IOVDD/5、DAC/5 等内部点。
我们要差分 AIN0(+)–AIN1(−)。 */
#define CHANNEL_AINP_SHIFT 5
#define CHANNEL_AINM_SHIFT 0
#define AINx(n) ((uint32_t)(n))
/* ---------- CONFIGURATION_1 位域 ----------
BIPOLAR[10]=1 双极性;REF_SEL[5:4] 选择参考(b00=VREF+/VREF-);
PGA[2:0]:b110=64×;PGA_BYPASS[3]=0 使能PGA;REF_BUFP/M可按需打开。 */
#define CFG_BIPOLAR (1u << 10)
#define CFG_REFSEL_SHIFT 4
#define CFG_REFSEL_VREFP_VREFM 0u // b00
#define CFG_PGA_SHIFT 0
#define CFG_PGA_64 0b110
/* ---------- FILTER_1 位域 ----------
FS[4:0] 速率码:4=488sps(还有 0:7813, 3:977, 5:244, 6:122, 7:61, 9:30, 10:15 等)。 */
#define FS_488SPS 4u
/* ---------- ADC_CONTROL_1 位域 ----------
TRIG_SRC_SEL[12:11]:b00=软件START位启动;b01=硬件触发。
MODE[5:2]:b0001=连续;b0010=单次;START位写1开始转换(单次结束后自清)。 */
#define CTRL_TRIG_SRC_SHIFT 11
#define CTRL_TRIG_SWSTART (0u << CTRL_TRIG_SRC_SHIFT)
#define CTRL_MODE_SHIFT 2
#define CTRL_MODE_CONTINUOUS (0b0001u << CTRL_MODE_SHIFT)
#define CTRL_START (1u << 0)
/* ---------- STATUS ----------
RDYN[12]=1 表示“数据就绪”;读 ADC_DATA_x 清零。 */
#define STATUS_RDYN (1u << 12)
static inline void adc1_init_ain0_ain1_pga64_488sps(void)
{
/* 1) 选择差分通道:AIN0(+) – AIN1(−) */
CHANNEL_CFG_1 =
(AINx(0) << CHANNEL_AINP_SHIFT) | // AINP = AIN0
(AINx(1) << CHANNEL_AINM_SHIFT); // AINM = AIN1
/* 出处:CHANNEL_CFG_1 的 AINP/AINM 编码表。:contentReference[oaicite:0]{index=0} :contentReference[oaicite:1]{index=1} */
/* 2) 参考与PGA配置:双极性、参考=VREF+/VREF−、PGA=64×(不旁路PGA) */
CONFIGURATION_1 =
CFG_BIPOLAR |
(CFG_REFSEL_VREFP_VREFM << CFG_REFSEL_SHIFT) |
(CFG_PGA_64 << CFG_PGA_SHIFT);
/* 出处:BIPOLAR、REF_SEL、PGA 位定义,1×..128×枚举;同结构在 _1。:contentReference[oaicite:2]{index=2} :contentReference[oaicite:3]{index=3}
双极性/参考/缓冲描述(示例在 CONFIGURATION_0,但字段一致)。:contentReference[oaicite:4]{index=4} :contentReference[oaicite:5]{index=5} :contentReference[oaicite:6]{index=6} */
/* 3) 采样率:FS=4 → 488 sps */
FILTER_1 = FS_488SPS;
/* 出处:FILTER_1 的 FS 速率码列表(4=488sps)。:contentReference[oaicite:7]{index=7} */
/* 4) 控制:软件触发、连续模式,START=1 开始转换 */
ADC_CONTROL_1 =
CTRL_TRIG_SWSTART |
CTRL_MODE_CONTINUOUS |
CTRL_START;
/* 出处:TRIG_SRC_SEL、MODE、START 位定义。:contentReference[oaicite:8]{index=8} :contentReference[oaicite:9]{index=9} :contentReference[oaicite:10]{index=10} */
}
static inline int32_t adc1_read_sample_blocking(void)
{
/* 轮询 RDYN=1(数据就绪),再读 24-bit 数据寄存器(读数据清 RDYN) */
while ((ADC_STATUS_1 & STATUS_RDYN) == 0) { /* wait */ }
uint32_t raw = ADC_DATA_1 & 0x00FFFFFFu; // 24-bit
/* 出处:RDYN=“数据就绪”(读 DATA 清除);DATA_x 是 24 位寄存器。:contentReference[oaicite:11]{index=11} :contentReference[oaicite:12]{index=12} */
/* 二补码扩展到32位 */
if (raw & 0x00800000u) { raw |= 0xFF000000u; }
return (int32_t)raw;
}
示例默认为 REF_SEL = VREF+/VREF-。若你启用内部基准或用 VDRIVE/AVSS 做比例测量,可按需切 REF_SEL;必要时打开 REF_BUFP/M 提高基准输入阻抗(字段在 CONFIGURATION_1 中,定义同上)。
速率选择:FILTER_1.FS 速率表里列了常用 ODR(7813/3906/1953/977/488/244/122/61/60/30/15/…/2.5 SPS),仅需改 FS_488SPS 常量即可。
DMA:如果不想轮询 RDYN,可以配合 DMA/DMAMUX 把 ADC_DATA_1 自动搬到内存(手册有 ADC 与 DMA/DMAMUX 支持描述)。
VBIAS / 激励电流:热电偶或桥式测量时,可用 IO_CONTROL_IBIAS 把 VBIAS(AVDD/2) 送到某个 AIN 引脚,或者用 IEXC_RANGE / IEXC_CTRL 配置 50 µA–1 mA 的 激励电流源到指定 AIN 引脚。
比较器阈值:可设置 ADC_1_HI/LO_COMPARATOR 做越限报警;配合 ERROR_EN 生成错误事件。
PGA=64、488 SPS 对应数据手册中 ADC1 的输入等效噪声 ~0.266 µV_rms,这就是你在该档位的最弱可测门槛(1σ),可按 3σ/6.6σ 放宽到 ~0.798/1.756 µV_rms;若换到 2.5 SPS、PGA=128,噪声可到 0.024 µV_rms(极限低带宽)。