• 正文
  • 相关推荐
申请入驻 产业图谱

STM32G4 定时器组合 PWM:单周期两次 ADC 触发实现方案

05/21 09:10
532
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在工业采样、传感器数据采集等场景,常需定时器单个周期内两次触发 ADC 转换,且触发时间点灵活可调。传统单通道定时器无法实现该需求,而 STM32G4(含 H、U 系列)高级 / 通用定时器的组合 PWM 模式,可通过内部信号逻辑组合,无需额外硬件,即可完成单周期双触发。本文基于意法半导体 LAT1649 技术文档,从原理、配置、代码到验证,给出完整落地方案。

资料获取:经验分享 | LAT1649 利用TIMER的组合信号实现单个周期的两次触发

1. 需求背景:单周期双触发痛点

开发者使用 STM32G4 芯片时,提出核心需求:通用定时器单个计数周期内,触发 ADC 两次,且触发位置可自由调整。

传统方案局限:

  • 单通道 PWM 仅能生成 1 路触发信号,无法实现双触发;
  • 多定时器级联复杂度高,占用资源且触发时序难同步;
  • 外部逻辑增加硬件成本,违背小型化设计需求。

STM32G4 定时器组合 PWM 模式,通过内部寄存器逻辑组合,完美解决该痛点,无需额外引脚与硬件。

2. 核心原理:组合 PWM 信号生成双触发

2.1 组合 PWM 模式定义

STM32G4 等系列定时器支持Combined PWM(组合 PWM)模式:单个输出通道(如 OC1),通过 ** 两个比较寄存器(CCR1/CCR)生成两路参考信号(REF1/REF2),经逻辑与(AND)/ 或(OR)** 组合,输出一路合成信号(OC1REFC)。

  • 通道 1/2 为一组:OC1REFC = REF1 & REF2(模式 2)或 REF1 | REF2(模式 1);
  • 触发输出(TRGO)可直接映射 OC1REFC,作为 ADC 触发源。

2.2 双触发实现逻辑

定时器计数周期内,CCR1、CCR2 分别设定两个不同比较值,生成两路 REF 信号;合成信号 OC1REFC 在上升沿 + 下降沿各触发一次,ADC 配置为双边触发,即可实现单周期两次转换,触发位置由 CCR1/CCR2 灵活调节。

3. CubeMX 实操配置(以 STM32G474+TIM3+ADC3 为例)

3.1 TIM3 定时器配置

  1. 时钟源:内部时钟,预分频(PSC)1699,自动重装载(ARR)7999;
  2. 通道 1:PWM 生成,模式设为Combined PWM2(逻辑与),脉冲值 3000;
  3. 通道 2:PWM 生成,模式 PWM1,脉冲值 5000;
  4. 触发输出(TRGO):选择OC1REFC,作为 ADC 触发源。

3.2 ADC3 配置

  1. 分辨率:12 位,扫描模式关闭;
  2. 外部触发:定时器 3 TRGO,双边触发(上升 + 下降);
  3. 通道:Vrefint(内部参考电压),采样时间 247.5 周期;
  4. DMA:开启,Normal 模式,数据宽度字,搬运长度 6。

4. 关键代码实现

4.1 定时器与 ADC 初始化

// TIM3初始化(CubeMX自动生成)
TIM_HandleTypeDef htim3;
// ADC3初始化(CubeMX自动生成)
ADC_HandleTypeDef hadc3;
// ADC结果缓存
uint32_t ADC_Result[6] = {0};

// 启动定时器与ADC
void Start_ADC_Double_Trigger(void)
{
    HAL_ADCEx_Calibration_Start(&hadc3, ADC_SINGLE_ENDED); // ADC校准
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 开启通道1
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 开启通道2
    HAL_ADC_Start_DMA(&hadc3, ADC_Result, 6); // ADC+DMA启动
    HAL_TIM_Base_Start(&htim3); // 启动定时器
}

4.2 触发完成回调(可选)

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    if(hadc->Instance == ADC3)
    {
        // 单周期两次转换结果存入ADC_Result[0]、ADC_Result[1]
    }
}

5. 验证结果

下载程序至 NUCLEO-G474 开发板,调试查看 ADC_Result 数组:

  • 单周期内成功生成两组有效转换数据;
  • 调整 CCR1/CCR2 数值,触发时间点同步变化;
  • 无额外硬件占用,时序精准无延迟。

6. 避坑关键要点

  1. 模式匹配:定时器必须选Combined PWM 模式,普通 PWM 无法生成合成信号;
  2. 触发极性:ADC 务必配置双边触发,否则仅单次触发;
  3. CCR 配置:CCR1、CCR2 需小于 ARR,且数值不同,避免触发点重合;
  4. 芯片适配:仅 STM32G4/H/U 等高级定时器支持组合 PWM,F 系列早期芯片不支持;
  5. DMA 设置:搬运长度≥2,确保两次转换数据完整存储。

STM32G4 定时器组合 PWM 模式,为单周期两次 ADC 触发提供极简方案,无需额外硬件,仅通过寄存器配置即可实现触发时间灵活可调。该方案资源占用少、时序精准、成本低,广泛适用于工业采样、电源监测、多通道传感器同步采集等场景,同样适配 STM32H、U 系列高级定时器,是嵌入式高精度采样的优选方案。

相关推荐