ST意法半导体
直播中

王艳

8年用户 1372经验值
私信 关注
[问答]

请问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-16 17:44:35

我来详细解释一下你遇到的STM32G431内部运放输出连接ADC的配置问题。你的观察很敏锐,核心原因在于每个内部运放都有两个独立的输出路径可供选择:一个直接连接到特定的ADC输入通道,另一个连接到专用的OPAMPx_VOUT通道。官方示例中U相和V相使用了前一路径,而W相使用了后一路径,这不是错误,而是基于ADC通道复用性和具体设计的合理选择。


以下是关键点分析:


? 1.  每个OPAMP的输出有两个物理路径 (见Reference Manual)



  • OPAMP1:

    • 输出1: 直接连接到 ADC1_IN3 (或者其他ADC,具体看型号和封装)。

    • 输出2: 连接到 OPAMP1_VOUT。这个OPAMP1_VOUT是一个可路由的信号,可以连接到支持ADC输入的任意通道(如ADC1_IN0, ADC1_IN1, ADC1_IN15, ADC2_IN0, ADC2_IN1等)。在CubeMX/Motor Workbench中,选择OPAMP1作为ADC源时,实际就是选择使用OPAMP1_VOUT信号。


  • OPAMP2:

    • 输出1: 直接连接到 ADC2_IN3

    • 输出2: 连接到 OPAMP2_VOUT (可路由信号)。


  • OPAMP3:

    • 输出1: 直接连接到 ADC1_IN12

    • 输出2: 连接到 OPAMP3_VOUT (可路由信号)。



? 2.  为什么在官方配置中U相和V相使用ADCx_INy而W相使用OPAMPx



  • 目的:平衡ADC通道负载和避免冲突

    • ADC通道资源竞争: STM32的ADC通道是共享资源。OPAMP1_VOUT, OPAMP2_VOUT, OPAMP3_VOUT需要连接到尚未被其他外设或模拟输入占用的ADC通道。如果目标ADC通道已经被其他功能(比如温度传感器、VBAT、某个GPIO配置为ADC输入)占用了,就无法再使用对应的OPAMPx_VOUT

    • 官方示例的选择 (推测):

      • U相 (OPAMP1): 可能计划使用的OPAMP1_VOUT的默认目标通道(或需要的目标通道)已经被分配给其他关键信号。官方选择了更"直通"的路径 ADC1_IN3。好处是配置简单且直接,只要启用ADC1的通道3即可获得OPAMP1的输出。

      • V相 (OPAMP2): 原因类似U相,官方选择了 ADC2_IN3 这个直通路径。

      • W相 (OPAMP3): 连接OPAMP1_VOUT的通道已被U相关闭,但连接OPAMP3_VOUT的通道(如ADC1_IN0或ADC2_IN0或其他)正好空闲且满足采样时间要求。因此选择了更灵活的 OPAMP3_VOUT 路径。另一个因素是OPAMP3的直接通道是ADC1_IN12,而U相(OPAMP1)也已经用了ADC1_IN3,同时使用同一ADC的不同通道(IN3和IN12)需要处理好采样时序(交错采样等)。使用OPAMP3_VOUT路由到另一个ADC的不同通道可以减轻ADC1的负担(若U相和W相都要在短时间内采样,用不同ADC可并行)。在实际配置中W相也可能是路由到了ADC2的某个通道(例如ADC2_IN0,在CubeMX中选择OPAMP3作为源)。




? 3.  OPAMPx在CubeMX/Motor Workbench中的含义



  • 当你在CubeMX或Motor Workbench的ADC配置界面,为一个通道选择输入源时:

    • 选择OPAMP1OPAMP1_VOUT: 表示你正在使用OPAMP1的可路由输出信号OPAMP1_VOUT作为该ADC通道的输入源。

    • 选择ADC1_IN3 (对于OPAMP1): 表示你正在使用OPAMP1的直接连接的固定输出到ADC1通道3作为输入源。


  • 因此,在代码中,"OPAMP3通道"表示你选择OPAMP3_VOUT作为源的那个ADC通道(比如配置为读取ADC2的通道0),而"ADC1 12通道"表示你直接读取OPAMP3的固定输出点(ADC1通道12)


? 4.  总结与原因



  • 三个OPAMP本身确实一模一样,结构功能完全一致。

  • 关键在于,每个OPAMP有两种访问其输出的方式

    • 方式A (固定连接):通过特定的、固定的ADC输入通道(ADCx_INy),此方式不占用“可路由的OPAMP输出”资源。

    • 方式B (路由连接):通过配置为OPAMPx源的ADC输入通道(对应OPAMPx_VOUT信号)。


  • G431-ESC官方配置选择了混合策略

    • U相 (OPAMP1): 使用方式A (读ADC1_IN3)。

    • V相 (OPAMP2): 使用方式A (读ADC2_IN3)。

    • W相 (OPAMP3): 使用方式B (配置某个ADC通道 - 如ADC1_IN0或ADC2_IN0 - 的源为OPAMP3)。


  • 这样做的可能原因:

    • 平衡ADC负载: 避免所有相电流都集中在同一个ADC上(如ADC1)。U相用ADC1_IN3 (ADC1), W相如果用路由方式连接到ADC2_IN0 (ADC2),那么V相用ADC2_IN3 (ADC2)就比较均衡。

    • 路径可用性: 连接OPAMP1_VOUTOPAMP2_VOUT到其他ADC通道的路径可能被其他功能占用或冲突。固定连接通道ADC1_IN3ADC2_IN3是OPAMP1/2专用的,不会因路由冲突而不可用。

    • 配置简化: 对于固定连接的ADCx_INy,配置更直观,只需开启相应ADC通道并读取数据。对于W相,通过选择OPAMP3作为ADC输入源,实现了信号的灵活路由。

    • 采样速率优化: 使用不同的ADC可以在一次扫描或并行模式下更快地采样多个相电流。



? 5.  如何验证你的工程配置



  • 在CubeMX (或Motor Workbench内嵌的CubeMX) 中检查ADC配置:

    • 找到配置U相电流采样的ADC通道,查看其 "Input Channel" 配置。如果显示ADC1_IN3ADC2_IN3,则使用的是OPAMP的直接固定输出。

    • 如果某个ADC通道显示OPAMP1OPAMP2OPAMP3作为源,则使用的是OPAMP的可路由输出信号(OPAMPx_VOUT)。


  • 在生成的代码中检查ADC初始化:

    • 查找hadc1.Init.Channel = ADC_CHANNEL_x 或者类似定义。x 如果是 3 (ADC_CHANNEL_3) 且该ADC是ADC1,则是OPAMP1的直接输出。

    • 如果x 是 0 (ADC_CHANNEL_0) 或其他通道,并且hadcx.Init.Channel配置为ADC_CHANNEL_OPAMP1等,则表示使用的是OPAMP的可路由输出。



结论:


G431-ESC官方配置中U相和V相使用ADCx_IN3,而W相使用OPAMP3作为ADC源,这完全符合STM32G4的硬件特性。这反映了设计者选择了OPAMP1和OPAMP2的直接固定输出路径(方式A),而为OPAMP3选择了更灵活的可路由输出路径(方式B)。主要原因通常是:



  1. 平衡ADC负载(ADC1 vs ADC2)

  2. 避免OPAMPx_VOUT路由路径上的资源冲突

  3. 简化特定相的配置

  4. 潜在的速度优化


这是一个有效且合法的配置方式。在CubeMX中选择OPAMPx作为ADC通道源和直接选择对应的ADCx_INy通道是等效的,最终都能正确读取到运放的输出电压。这个混合配置展示了灵活运用硬件资源的工程智慧!?✨

举报

更多回帖

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