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

极海 G32R501 SDK SFO 库函数应用实操(AN1134 应用笔记 V1.0)

11/09 14:26
98
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

本文基于珠海极海半导体 AN1134 (V1.0) 官方应用笔记,针对 G32R501 芯片 HRPWM 外设配套 SFO 校准库函数进行完整解读,梳理库函数功能、工程集成步骤、初始化逻辑、周期性校准业务逻辑,全部参数、代码示例均来自官方文档,可直接用于开关电源、电机控制类项目 HRPWM 高精度边沿控制开发参考。

资料获取:AN1134_G32R501 SDK SFO库函数应用笔记

1. 概述

G32R501 芯片搭载 HRPWM 高精度 PWM 模块,该外设依靠 MEP 微步实现 PWM 输出边沿的高分辨率调节。MEP 比例因子会受芯片供电电压、工作温度变化发生漂移,如果比例因子数值不准,会直接造成 PWM 实际输出占空比、相位和程序设定值产生偏差,影响电源环路、电机控制的控制精度。

SFO () 是 SDK 配套专用校准库函数,专门用于 HRPWM 模块 MEP 比例因子计算,输出有效比例因子给到变量与硬件寄存器,解决温漂、电压波动带来的高精度 PWM 输出偏移问题。

2. SFO 库函数基础功能说明

SFO 库函数核心输出对象为MEP_ScaleFactor整型变量,该变量取值范围固定为 1‑255,数值含义代表 1 个系统时钟周期内部可用的微步边沿位置数量;调用 SFO () 之后,除更新内存变量MEP_ScaleFactor之外,同步把该数值写入芯片 HRMSTEP 硬件寄存器。

功能描述 更新对象
读取并计算 HRMSTEP 寄存器对应的 MEP 比例因子 MEP_ScaleFactor 变量、HRMSTEP 硬件寄存器

函数返回状态说明:

  1. SFO_INCOMPLETE:校准计算未完成,需要继续循环调用;
  2. SFO_ERROR:出现错误,代表单粗步下 MEP 微步数量超出最大限值 255,属于异常状态,官方示例采用死循环停机处理。

落地应用提示:HRPWM 多用于数字电源、高频变换电路,MEP 比例因子错误,会直接造成输出电压失控,产品开发时不可忽略 SFO 异常返回状态的判断逻辑。

3. SFO 库工程集成完整步骤

3.1 步骤 1:添加头文件

使用 SFO 库函数,工程代码中必须引入头文件SFO_V1.h。 头文件在 SDK 中的固定路径:G32R5xx_SDK\libraries\calibration\hrpwm\include\SFO_V1.h

示例代码:

#include "SFO_V1.h"

工程配置注意:需要将上述 include 目录添加至编译器头文件检索路径,否则编译会报头文件找不到。

3.2 步骤 2:变量声明

需要定义全局整型变量MEP_ScaleFactor接收 SFO 计算输出的 MEP 比例因子,该变量可供全部 HRPWM 通道共用。同时定义状态变量 status 接收 SFO 返回状态,定义 PWM 模块基地址数组。

示例代码:

// SFO库使用的全局变量,结果可供全部HRPWM通道使用
int MEP_ScaleFactor = 0;
uint16_t status = SFO_INCOMPLETE;
volatile uint32_t PWM[] = {0, PWM1_BASE, PWM2_BASE...};

3.3 步骤 3:MEP_ScaleFactor 一次性初始化

SFO 函数不需要预先手动给 MEP_ScaleFactor 赋初始值。在业务代码读取使用MEP_ScaleFactor变量之前,需要执行一次完整校准流程,循环调用 SFO () 直到校准状态退出SFO_INCOMPLETE。 如果返回SFO_ERROR错误码,示例逻辑直接进入死循环,阻断后续业务执行。

初始化示例代码:

while(status == SFO_INCOMPLETE)
{
    status = SFO();
    if(status == SFO_ERROR)
    {
        // SFO返回值为2代表MEP steps/coarse step超过最大255限制
        while(1);
    }
}

业务落地提示:该段初始化代码需要放在 main 函数业务逻辑之前,确保 HRPWM 外设开始工作前,MEP 比例因子已经完成有效计算,避免上电初期 PWM 输出精度异常。

3.4 步骤 4:运行阶段后台周期调用 SFO 校准

芯片实际工作过程,环境温度、供电电压会持续波动,会改变 MEP 微步特性。为保证所有 PWM 模块 MEP 比例因子实时有效,不能只在上电运行一次 SFO,需要把 SFO () 放置在低速后台循环内周期性重复执行。

主循环周期性调用示例:

void main ()
{
    while(1)
    {
        status = SFO();
        if(status == SFO_ERROR)
        {
            // SFO返回值为2代表MEP steps/coarse step超过最大255限制
            while(1);
        }
    }
}

工程落地说明:SFO 属于校准运算,不需要高频调用,放在主 while 后台循环即可,不可放置在 HRPWM 中断等高优先级高频中断内部,避免占用中断处理时间。

4 源码与例程获取提示

实际开发时,除参考本文示例代码,还需要查阅 SDK 配套资源:相关 C 源文件、readme 说明文档、HRPWM_SFO 外设完整工程例程,参考原厂例程完成完整工程搭建。

声明:本文全部内容转录自极海官方 AN1134 V1.0 应用笔记,产品实际开发需要结合原厂 SDK、芯片数据手册做完整验证。

相关推荐