ST意法半导体
直播中

费加罗

9年用户 898经验值
私信 关注
[问答]

请问STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?

请问下大家,STM32G431 芯片UVW三相的电流检测,配置使用内部运放PGA,看到G431-ESCdemo板对应motor workbench配置,为什么UV相的运放输出分别是ADC1 3通道和ADC2 3通道,而W相输出是ADC1 12通道和OPAMP3通道呢?不应该U和V相也有OPAMP1和OPAMP2通道吗?三个运放应该是一模一样的,使用内部PGA运放情况下不应该只能配置为OPAMP1,OPAMP2,OPAMP3吗?为啥还会有adc1 通道3之类的说法呢?我是用G431-ESC官方的demo板,发现通过motor workbench和cubemx配置的运放三个是不一样的,获取adc值时候,运放1和2输出连接的是adc,3运放连接的是opamp,请问下这样是基于什么考虑?

回帖(1)

话多显蠢

2025-6-17 18:06:11

好的,这个问题非常经典,涉及到 STM32G431 内部运放 (OPAMP) 和 ADC 连接的一个设计细节和文档表述上的微妙差异。


核心原因:OPAMP 的输出是 内部固定连接到特定 ADC 输入通道的物理引脚上,而不是一个名为 "OPAMPx" 的独立 ADC 通道。ADC 必须选择这个固定的 输入通道号 来读取对应运放的输出。


分析你的问题:




  1. 你的期望(理论模型):



    • 三个内部运放 OPAMP1, OPAMP2, OPAMP3 结构相同,功能相同。

    • 每个运放的输出应该对应一个专有的、命名为 “OPAMPx” 的 ADC 通道。

    • 配置 ADC 时,应该直接选择 ADC_CHANNEL_OPAMP1, ADC_CHANNEL_OPAMP2, ADC_CHANNEL_OPAMP3




  2. 现实(STM32G431 硬件设计):



    • OPAMP 的输出信号在芯片内部硬连线到了特定的 ADC 输入通道(物理引脚)上。

    • 这意味着:

      • OPAMP1 输出 连接到 ADC1_INP3ADC2_INP3

      • OPAMP2 输出 连接到 ADC1_INP12

      • OPAMP3 输出 可以连接到 ADC1_INP13ADC4_INP3(通过配置 OPAMP3_CSR 寄存器的 OPAMP3_CSR_VP_SEL 位选择)。


    • 因此,要读取 OPAMP 的输出,你必须:

      • 配置 ADC(例如 ADC1)去采样它所连接的 特定输入通道号 (如通道 3, 12, 13)。





  3. 为什么 UVW 相配置不同?



    • 在你的例子中:

      • U 相 (OPAMP1 输出): 连接到 ADC1_INP3 或 ADC2_INP3。示例板使用了 ADC1_INP3 -> ADC1 Channel 3

      • V 相 (OPAMP2 输出): 连接到 ADC1_INP12。示例板使用了 ADC1 Channel 12。注意它使用了另一个 ADC (ADC2) 的 Channel 3?这可能是为了采样速度或同步需求。硬件上 OPAMP2 只有 ADC1_INP12 这一个固定连接,所以如果 V 相用了 ADC2 Ch3,那一定不是 OPAMP2 的输出,可能是外接的或者其他配置。你描述的 “V相运放输出是ADC2 3通道” 可能不准确,或者这个ADC2 Ch3对应的是其他信号。通常内部OPAMP2输出只能从ADC1 Ch12读取。

      • W 相 (OPAMP3 输出): 连接到 ADC1_INP13 (或其他配置)。示例板使用了 ADC1 Channel 13


    • 为什么 CubeMX/Motor Workbench 显示的标签不同?

      • ADC1 Channel 3: 当你选择这个通道时,CubeMX/MWB 知道它同时也是内部 OPAMP1 的输出,所以它可能会在注释或标签里显示 OPAMP1 out 之类的提示信息。本质上,你选择的 还是通道号

      • OPAMP3 out: 这可能是 CubeMX/MWB 为了让用户更直观地知道这个 ADC 通道对应的信号源(尤其当 OPAMP3 的输出可以有不同连接方式时),而使用的一个 逻辑标签。当你选择这个 “OPAMP3 out” 选项时,CubeMX/MWB 在底层自动为你配置 ADC 去采样对应的物理通道号 (ADC1_INP13 或 ADC4_INP3,取决于设置)。但它本身不是一个独立的通道名,最终代码生成的还是 ADC 通道号配置。





  4. 回答你的具体疑问:



    • “STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?”
      答: 因为它们被硬连线到了特定的ADC输入通道引脚 (ADC1_INP3, ADC1_INP12, ADC2_INP3, ADC1_INP13, ADC4_INP3)。ADC 读取时,需要选择的是这些输入通道号 (ADC_CHANNEL_3, ADC_CHANNEL_12, ADC_CHANNEL_13),而不是一个抽象的 "OPAMP1" 通道名。

    • “不应该U和V相也有OPAMP1和OPAMP2通道吗?”
      答: U 相 (OPAMP1) 有固定的物理连接通道 (ADC1_CH3ADC2_CH3)。V 相 (OPAMP2) 有固定的物理连接通道 (ADC1_CH12)。它们没有独立的 "OPAMP1/2" 通道名。

    • “三个运放应该是一模一样的,使用内部PGA运放情况下不应该只能配置为OPAMP1, OPAMP2, OPAMP3吗?”
      答: 三个 PGA 运放本身结构和功能确实一样(增益、带宽等特性)。但是它们输出端连接到哪个 ADC 输入通道,是芯片设计时就固定好的(略有不同,OPAMP3 多一个选项)。你在配置 PGA 功能时,选择使用 OPAMP1, OPAMP2, OPAMP3。当配置 ADC 读取其输出时,你配置的是对应的固定 ADC 通道号。

    • “为啥还会有 adc1 通道 3 之类的说法呢?”
      答: ADC1 Channel 3 (ADC1_INP3) 是物理引脚/输入通道的编号。OPAMP1 的输出信号通过内部布线连接到这个物理点上。ADC 采样单元从这个物理点采集电压。这个物理点恰好是 OPAMP1 的输出(也可能是其他模拟源输入,但你配置为 PGA 模式时,内部开关连接使它成为 OPAMP1 输出)。

    • “运放1和2输出连接的是adc,3运放连接的是opamp ...”
      答: 这里的表述有点不精确。准确的来说:

      • 所有三个运放的输出最终都要连接到 ADC 的输入通道才能被读取。

      • 读取 OPAMP1 输出:必须选 ADC1 CH3 或 ADC2 CH3。

      • 读取 OPAMP2 输出:必须选 ADC1 CH12。

      • 读取 OPAMP3 输出:必须选 ADC1 CH13 (或其他配置如 ADC4 CH3)。

      • 你在 CubeMX/MWB 看到的 OPAMP3 out 选项,只是工具为了方便,把这个特定通道的逻辑源标识出来了,它底层的配置还是 ADC 通道号 (比如 13)。





总结:



  1. 忘掉 "OPAMPx 通道" 的概念。 STM32G431 内部运放的输出是固定连接到特定编号的 ADC 输入通道上的。

  2. 硬件连接决定 ADC 通道选择:

    • OPAMP1 out -> ADC1_INP3 (CH3) / ADC2_INP3 (CH3)

    • OPAMP2 out -> ADC1_INP12 (CH12)

    • OPAMP3 out -> ADC1_INP13 (CH13) (或 ADC4_INP3 (CH3), 需配置)


  3. CubeMX/Motor Workbench 的标签:

    • 当你选择 ADC1 Channel 3, ADC1 Channel 12, ADC1 Channel 13 时,工具知道它们分别对应 OPAMP1, OPAMP2, OPAMP3 的输出(在当前配置下),所以可能会在界面显示提示信息 (OPAMPx out)。

    • 对于 OPAMP3,因为其输出可以连接到不同的 ADC/Channel,工具提供了更直观的“OPAMP3 out”逻辑选项来自动处理底层通道配置。但这本质上还是选了一个具体的 ADC 通道号


  4. 你看到的差异 (Channel 3, Channel 12 vs OPAMP3) 是配置工具 UI 显示逻辑不同造成的,底层的硬件配置逻辑是一致的:都要指定具体的 ADC 通道号来读取特定运放的输出。


建议:



  1. 仔细查看 STM32G431 数据手册 (Datasheet) 的 引脚描述表ADC 章节模拟开关特性部分。这些地方会明确指出 ADC 输入通道与内部资源的连接关系(如 “Connected to OPAMPx output”)。

  2. 在 CubeMX 中配置时,直接关注你需要读取哪个运放的输出 (OPAMP1, 2, or 3?),然后根据上面列出的固定连接关系,在对应的 ADC 上选择正确的通道号 (CH3, CH12, CH13)。对于 OPAMP3,如果需要,配置它的输出目的 ADC (OPAMP3_CSR_VP_SEL)。

  3. 生成的代码中,ADC 配置初始化结构体里,配置的 RankChannel 成员肯定是具体的通道号 (如 ADC_CHANNEL_3, ADC_CHANNEL_12, ADC_CHANNEL_13),而不是一个叫 OPAMP 的宏。


理解了这个硬件连接的固定性,再看 CubeMX/MWB 的配置就清晰了:它们是为了适配这个硬件设计。U 相用 CH3 (OPAMP1), W 相用 CH13 (OPAMP3) 完全符合硬件布局。V 相用 CH12 (OPAMP2) 也合理。至于你提到的 V 相用了 ADC2 CH3?这可能是个误会或配置错误,因为硬件上 OPAMP2 只能输出到 ADC1 CH12。双检查一下配置确认 V 相是否真的连接到 OPAMP2 并且通过 ADC2 CH3 读取——如果是,那么这里读取的就不是内部 OPAMP2 的输出信号(可能配置错误或者这个 ADC2 CH3 连的是外部信号)。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分