ST意法半导体
直播中

张秀兰

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

请问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-5-6 16:53:50

针对STM32G431内部运放与ADC连接配置的疑问,以下是分步解释和解决方案:


1. OPAMP输出路由的硬件设计限制



  • 数据手册中的路由选项

    STM32G431的每个内部运放(OPAMP1/2/3)的输出可以连接到特定的ADC通道,但这些通道可能分布在不同的ADC模块上。例如:

    • OPAMP1输出可能固定连接到ADC1_IN3(而非OPAMP1专用通道)。

    • OPAMP2输出连接到ADC2_IN3。

    • OPAMP3输出则可能支持多个选项,如ADC1_IN12或ADC2_IN12。


  • 原因:硬件设计时可能为了平衡ADC资源负载,允许不同运放分配到不同ADC模块,以实现多路并行采样。


2. ADC模块的并行采样需求



  • 电机控制场景

    在UVW三相电流检测中,通常需要同步采样以计算实时电流矢量。若U/V相分配到ADC1和ADC2的同一通道号(IN3),可简化软件配置;而W相使用ADC1_IN12可能是由于:

    • ADC1的通道3已被其他功能占用(如温度传感器)。

    • 需要更高的采样率时,ADC1的IN12可能支持更短采样时间。



3. Motor Workbench的自动资源分配逻辑



  • 工具约束

    ST Motor Workbench或CubeMX在生成代码时,会根据以下规则自动分配资源:

    1. 优先选择未被占用的ADC通道。

    2. 避免ADC模块冲突(如两个运放输出分配到同一ADC模块的不同通道)。

    3. 优化时序(如选择相邻通道以缩短采样间隔)。


  • 示例

    若OPAMP3的默认路由选项是ADC1_IN12,工具会直接采用该配置,而非强制使用OPAMP3的“专用通道”(可能不存在)。


4. 验证和修改配置的步骤




  • 检查OPAMP路由表

    查阅STM32G431参考手册的OPAMP章节(如Section 12.3.18),找到类似下表的内容:































    OPAMP ADC1通道 ADC2通道 其他路由
    OPAMP1 IN3 - COMP1输入
    OPAMP2 - IN3 内部DAC输出
    OPAMP3 IN12 IN12 外部引脚PA1



  • 手动配置路由(如需调整):

    在CubeMX中,进入OPAMP配置界面,明确指定每个运放的输出目标:



    1. 选择OPAMP3的“ADC1_IN12”而非默认的“OPAMP3_OUT”。

    2. 确保ADC通道未被其他外设(如TIMER触发源)占用。




5. 代码实现建议



  • ADC多通道扫描模式

    配置ADC1和ADC2为多通道扫描模式,分别读取IN3和IN12的值。示例代码片段:
     // ADC1配置(U和W相)
    hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
    hadc1.Init.NbrOfConversion = 2;
    hadc1.Config.Channel = ADC_CHANNEL_3 | ADC_CHANNEL_12;
    // ADC2配置(V相)
    hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
    hadc2.Init.NbrOfConversion = 1;
    hadc2.Config.Channel = ADC_CHANNEL_3;

  • 同步采样触发

    使用TIMER的TRGO信号同时触发ADC1和ADC2,确保三相电流同步采样:
     HAL_ADC_Start(&hadc1);
    HAL_ADC_Start(&hadc2);
    HAL_TIM_Base_Start(&htim1); // TIM1 TRGO触发ADC


6. 常见问题排查



  • 现象:W相数据异常。

    可能原因:ADC1_IN12的输入阻抗不匹配(需检查外部RC滤波电路是否与IN3一致)。

  • 对策:在运放输出端添加缓冲电路或调整ADC采样时间(hadc.Init.SamplingTime)。


结论


U/V/W三相运放输出连接到不同ADC通道是由于硬件资源限制和工具自动优化所致,并非设计错误。通过合理配置ADC多通道扫描和同步触发,可确保三相电流采样的准确性和实时性。建议始终以数据手册的路由表为最终依据,而非依赖工具的默认配置。

举报

更多回帖

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