ARM内核单片机高分辨率定时器(HRTIM)原理和用法 您所在的位置:网站首页 ARM单片机硬件招聘 ARM内核单片机高分辨率定时器(HRTIM)原理和用法

ARM内核单片机高分辨率定时器(HRTIM)原理和用法

2024-07-08 00:31| 来源: 网络整理| 查看: 265

1. 什么是HRTIM?

HRTIM代表高分辨率定时器。HRTIM是一种高精度定时器,能够生成复杂的波形,如PWM(脉宽调制)、相移PWM等。它由六个16位的上计数器和一个具有非常精细时间分辨率的控制器定时器组成(在STM32G4系列上为184皮秒)。它们可以独立使用或同步使用。HRTIM的应用非常多样:从数字电源转换(数字SMPS、太阳能转换器、电机控制)到一般用途的应用。

1.1 计数器操作模式

上计数器可以以三种模式运行:

连续模式(也称为自由运行模式):当它超过在周期寄存器(HRTIM_PERxR)中设置的值时,会回滚到零。 单次可重触发模式:它在重置事件发生时开始,并在达到周期值(HRTIM_PERxR)时停止。在这种模式下,用户可以随时重置。 单次不可重触发模式:与单次可重触发模式的原理相同,但在这种模式下,如果在计数阶段结束之前发生重置事件,则会忽略这些事件。

1.2 框图概览

正如我们在下图中看到的,HRTIM具有模块化架构。让我们一一查看每个模块:

块1(Timing units):包含六个16位上计数器,这些计数器具有可编程溢出功能、两个捕获寄存器和四个比较寄存器。当计数器值等于比较值(HRTIM_CMP1xR)时,可以生成比较事件。

块2(Set/Reset Crossbar):允许输出对不仅由相关的定时单元控制,还可以由外部事件和其他定时器控制。

块3(Output stage):管理一对输出,并应用任何类型的逻辑(极性、安全状态、异步故障保护等)。

块4(Input block):包含10个外部事件和五个故障信号(用于保护电源级并关闭PWM输出)。

块5(Interface part):将高精度定时器(HRTimer)与其他定时器、DMA、ADC和DAC通过STM32的内部连接进行链接。

2. HRTIM实现高分辨率的机制

HRTIM(高分辨率定时器)在ARM内核MCU上能够实现皮秒(ps)级时间分辨率,主要得益于其高精度的时钟源和精细的定时器配置。以下是实现这一高分辨率的关键因素:

高稳定性时钟源:HRTIM可以使用稳定的内部或外部时钟源,这些时钟源提供了高精度的基础时间单位。

精细的时钟分频:HRTIM包含可编程的时钟分频器,允许对时钟源进行细分,从而实现更小的时间间隔。

高分辨率定时器单元:HRTIM定时器单元设计用于捕捉和计算非常短的时间周期,这得益于其高精度计数器和事件采样能力。

先进的配置选项:HRTIM提供了多种定时器模式和配置选项,包括死区时间插入、延迟保护、故障管理等,这些都可以精确控制事件的时序。

微调控制:HRTIM允许对定时器的比较值、捕获值和触发条件等进行微调,以实现精确的时序控制。

同步机制:HRTIM支持内部和外部同步,允许多个定时器之间或与其他定时器进行同步,以实现精确的相位对齐。

DMA和中断支持:HRTIM支持直接内存访问(DMA)和中断,可以在不占用CPU资源的情况下实现精确的事件响应。

固件支持:通过HAL库或LL(低层)API,STM32提供了丰富的软件支持,使得开发者能够充分利用HRTIM的高分辨率特性。

这些特性结合起来,使得HRTIM在STM32G4系列上能够实现184皮秒级别的时间分辨率,适用于需要精确时序控制的应用,如电机控制、电力转换、精密测量等。

3.高分辨率时钟使用示例

创建一个基于32位ARM单片机的HRTIM使用示例代码,我们将使用HAL库来初始化HRTIM,并配置一个简单的PWM输出。以下是一个基础的示例,用于arm32位微控制器。请根据实际的微控制器型号和需求调整时钟配置、GPIO初始化和其他参数。

```c #include "arm_MCU.h" //以你选择的单片机硬件型号为基础

// 假设使用HRTIM1和Timer A HRTIM_HandleTypeDef hhrtim1;

void SystemClock_Config(void); void MX_HRTIM1_Init(void); void Error_Handler(void);

int main(void) {   HAL_Init();   SystemClock_Config();      // 初始化HRTIM   MX_HRTIM1_Init();      // 开启HRTIM Timer A的PWM输出   if (HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2) != HAL_OK)   {     Error_Handler();   }      // 主循环   while (1)   {     // 此处可以放置其他用户代码     HAL_Delay(1000);   } }

void SystemClock_Config(void) {   // ... 系统时钟配置代码 ... }

void MX_HRTIM1_Init(void) {   hhrtim1.Instance = HRTIM1;   hhrtim1.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;   hhrtim1.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;      // 初始化HRTIM   if (HAL_HRTIM_Init(&hhrtim1) != HAL_OK)   {     Error_Handler();   }      // 配置HRTIM定时器A的时基   if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &sTimeBaseCfg) != HAL_OK)   {     Error_Handler();   }      // 配置HRTIM定时器A的PWM   if (HAL_HRTIM_SimplePWMChannelConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &sPWMCfg) != HAL_OK)   {     Error_Handler();   }      // ... 其他配置代码 ... }

void Error_Handler(void) {   // 用户可以在这里实现错误处理代码   while(1)   {     // 错误指示,例如闪烁LED   } }

// 注意:sTimeBaseCfg 和 sPWMCfg 需要根据实际需求进行配置 HRTIM_TimeBaseCfgTypeDef sTimeBaseCfg = {0}; HRTIM_SimplePWMCfgTypeDef sPWMCfg = {0};

// 注意:以下函数需要根据实际硬件配置进行实现 // void GPIO_Init(void) {} // void HAL_HRTIM_MspInit(HRTIM_HandleTypeDef *hhrtim) {} ```

在上述代码中,我们首先初始化了mcu库,并调用了系统时钟配置函数`SystemClock_Config`。然后,我们使用`MX_HRTIM1_Init`函数来初始化HRTIM1,并配置了Timer A的PWM输出。在主循环中,我们使用`HAL_Delay`函数创建了一个简单的延时。

请注意,上述代码是一个框架,其中的一些配置(如`sTimeBaseCfg`和`sPWMCfg`的结构体初始化)和硬件相关的初始化(如GPIO初始化和HRTIM MSP初始化)需要根据具体的应用需求和硬件设计来完成。

在实际应用中,您还需要配置PWM的比较值、分频器、死区时间等参数,并实现错误处理函数`Error_Handler`以及可能的硬件初始化函数。此外,MCU硬件库函数的具体名称可能会根据MCU系列和硬件库的版本有所不同,因此请参考您使用的微控制器的参考手册和硬件库文档。

4. 高分辨率时钟测试

在设计高精度时间控制系统时,测试和验证HRTIM(高分辨率定时器)配置是否满足精度要求是一个关键步骤。以下是一些测试和验证的方法:

仿真测试:在实际硬件实现之前,使用仿真工具(如STM32CubeMX附带的模拟功能或Proteus等第三方仿真软件)来模拟HRTIM的配置和运行情况。

硬件测试环境搭建:准备一个测试环境,包括STM32开发板、示波器、逻辑分析仪、信号发生器等必要的测试设备。

基本功能测试:首先验证HRTIM的基本功能,如定时器的启动、停止、重置以及计数器的递增和递减。

时间分辨率测试:使用高精度的时钟源或示波器测量HRTIM的最小时间分辨率,确保它符合设计规格。

PWM输出测试:如果系统使用HRTIM产生PWM波形,通过示波器观察PWM波形的占空比和频率是否符合预期。

死区时间测试:对于互补PWM输出,验证死区时间是否正确设置,以确保输出不会同时导通。

同步模式测试:如果HRTIM配置为同步模式,测试主从定时器之间的同步信号是否按预期工作。

中断和DMA测试:如果使用中断或DMA,验证它们的触发条件和处理逻辑是否正确。

故障和保护测试:模拟故障情况,验证HRTIM的保护机制是否按预期响应。

长时间稳定性测试:让HRTIM运行一段时间,监测其性能是否稳定,是否存在累积误差。

温度和电源电压变化测试:测试在不同的环境温度和电源电压下HRTIM的性能,以验证其对环境变化的适应性。

负载变化测试:模拟不同的系统负载情况,验证HRTIM在不同负载下的响应和稳定性。

软件性能测试:评估与HRTIM交互的软件驱动的性能,包括初始化代码、中断服务例程和DMA配置。

自动化测试脚本:开发自动化测试脚本来执行重复性测试,以减少人为误差并提高测试效率。

对比分析:如果有现成的解决方案或产品,可以将HRTIM的测试结果与它们进行对比分析。

文档记录:详细记录测试过程、测试结果和任何异常情况,为后续的分析和改进提供依据。

专业软件分析:使用专业的分析软件(如MATLAB、LabVIEW等)来处理测试数据,进行深入的数据分析和性能评估。

通过上述方法,可以全面地测试和验证HRTIM的配置是否满足高精度时间控制的要求。在测试过程中,根据测试结果调整HRTIM的配置参数,直到系统性能达到设计规格。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有