深入STM32定时器与ADC联动:FOC三电阻采样的时序逻辑全解析

📅 2026/7/26 3:43:03 👁️ 阅读次数 📝 编程学习
深入STM32定时器与ADC联动:FOC三电阻采样的时序逻辑全解析

深入STM32定时器与ADC联动:FOC三电阻采样的时序逻辑全解析

在电机控制领域,场定向控制(FOC)算法的实现离不开精确的电流采样。STM32系列微控制器凭借其强大的定时器和ADC外设,成为实现FOC算法的热门选择。本文将深入探讨STM32高级定时器(TIM1)与ADC的协同工作机制,解析三电阻采样中的关键时序逻辑,帮助开发者构建清晰的硬件抽象层认知。

1. FOC三电阻采样的硬件基础

三电阻采样是FOC算法中常用的电流检测方案,通过在电机三相下桥臂串联采样电阻,测量电流流向。这种方案相比单电阻或双电阻采样,具有更高的精度和更简单的硬件设计,但对时序控制的要求也更为严格。

1.1 STM32定时器的高级功能

STM32的高级定时器(如TIM1)为电机控制提供了丰富的功能:

  • 中心对齐模式:PWM波形以计数器周期为中心对称,便于生成对称的驱动信号
  • 互补输出:可生成带死区时间的互补PWM信号,直接驱动H桥电路
  • 刹车功能:在异常情况下快速关闭PWM输出,保护功率器件
  • 触发输出:可配置为ADC的外部触发源,实现精准的采样时刻控制
// 定时器基本配置示例 LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_CENTER_DOWN); LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_PWM1); LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N);

1.2 ADC的注入组与外部触发

STM32的ADC模块支持多种采样模式,其中注入组特别适合电机控制应用:

  • 外部触发:可由定时器事件精确触发采样
  • 中断优先级:注入组转换可打断常规组转换,确保关键采样的实时性
  • 多通道序列:可配置采样顺序,优化电流检测流程

提示:在FOC应用中,通常将ADC注入组配置为定时器触发,确保采样时刻与PWM波形严格同步。

2. PWM与ADC的时序协同设计

三电阻采样的核心挑战在于确定合适的采样时刻。理想的采样点应满足以下条件:

  1. 目标相的下桥臂MOS管完全导通
  2. 电流波形已稳定(渡过死区时间和振铃阶段)
  3. 采样时刻避开PWM开关边沿的噪声干扰

2.1 采样时刻的三种典型场景

根据PWM占空比的不同,三电阻采样可分为三种典型场景:

场景条件采样位置触发边沿
中段采样低占空比PWM周期中点上升沿
前段采样中高占空比下桥臂导通起始上升沿
后段采样极高占空比下桥臂关断前下降沿

2.2 关键时间参数的计算

在代码中,hTafterhTbefore是两个至关重要的时间参数:

  • hTafter:死区时间+MOS管开关引起的电流振铃时间

    hTafter = \frac{(DEADTIME_{ns} + MAX\_TNTR_{ns}) \times ADV\_TIM\_CLK_{MHz}}{1000}
  • hTbefore:ADC触发延迟+ADC采样保持时间

    hTbefore = \frac{(ADC\_TRIG\_CONV\_LATENCY + ADC\_SAMPLING) \times ADV\_TIM\_CLK_{MHz}}{ADC\_CLK_{MHz}} + 1

3. 代码逻辑的深度解析

R3_2_SetADCSampPointSectX函数的核心任务是确定ADC采样时刻的定时器计数值,并配置相应的触发条件。其决策逻辑可分解为以下步骤:

  1. 判断是否可采用中段采样

    if ((pHandle->Half_PWMPeriod - lowDuty) > pHandle->pParams_str->hTafter) { // 采用中段采样策略 hCntSmp = pHandle->Half_PWMPeriod - 1; pHandle->_Super.Sector = SECTOR_4; // 固定采样AB相 }
  2. 无法中段采样时的交叉点搜索

    • 计算占空比差值:hDeltaDuty = lowDuty - midDuty
    • 根据差值大小决定采样策略:
      if (hDeltaDuty > (pHandle->Half_PWMPeriod - lowDuty) * 2) { // 前段采样策略 hCntSmp = lowDuty - pHandle->pParams_str->hTbefore; } else { // 后段采样策略 hCntSmp = lowDuty + pHandle->pParams_str->hTafter; if (hCntSmp >= pHandle->Half_PWMPeriod) { // 需要切换为下降沿触发 pHandle->ADCTriggerEdge = LL_ADC_INJ_TRIG_EXT_FALLING; hCntSmp = (2 * pHandle->Half_PWMPeriod) - hCntSmp - 1; } }
  3. 更新定时器寄存器

    return R3_2_WriteTIMRegisters(&pHandle->_Super, hCntSmp);

4. 实际应用中的优化技巧

在工程实践中,以下几点经验值得注意:

  • 时钟配置优化:确保定时器时钟和ADC时钟的比值合理,避免采样时刻计算出现舍入误差
  • 死区时间校准:根据实际MOS管的开关特性调整hTafter参数
  • ADC采样时间:在信号稳定性和转换速度之间取得平衡
  • 抗干扰设计
    • 在PCB布局上,采样电阻应尽量靠近MOS管
    • 使用差分放大电路提高采样信号的信噪比
    • 在软件上可添加数字滤波处理
// 推荐的ADC配置流程 LL_ADC_INJ_StartConversionExtTrig( ADC1, LL_ADC_INJ_TRIG_EXT_RISING, LL_ADC_INJ_SEQ_SCAN_ENABLE );

5. 调试与验证方法

当三电阻采样出现问题时,可采用以下方法进行排查:

  1. PWM波形验证

    • 使用示波器检查各相PWM波形是否符合预期
    • 确认死区时间设置是否正确
  2. ADC触发时刻检查

    • 通过GPIO输出标记ADC触发时刻
    • 对比触发时刻与PWM波形的关系
  3. 电流采样数据分析

    • 通过调试接口导出原始采样数据
    • 检查采样值是否与预期电流波形一致

注意:在调试过程中,建议先使用较低的PWM频率和母线电压,避免损坏功率器件。