ZHDU154 July   2026 TMS320F28P550SJ , TMS320F28P551SD , TMS320F28P551SG , TMS320F28P650DK

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2库声明
  6. 3库架构
    1. 3.1 后台处理
    2. 3.2 前台处理
    3. 3.3 数据传输机制
  7. 4计量计算
  8. 5配置和数据结构
  9. 6校准模块
  10. 7用户特定的配置
    1. 7.1 DEBUG 模式
      1. 7.1.1 调试模式的函数
      2. 7.1.2 如何配置 DEBUG 模式参数
    2. 7.2 ADC 模式
      1. 7.2.1 使用片上 ADC
      2. 7.2.2 两点校准
        1. 7.2.2.1 步骤 1 — 偏移校准(零输入点)
        2. 7.2.2.2 步骤 2 — 增益校准(满量程点)
      3. 7.2.3 使用外部 ADC
    3. 7.3 模式切换
    4. 7.4 THD 算法选择
      1. 7.4.1 方法 1 — 基于 PLL(未定义 HARMONICS_SUPPORT 宏时的默认值)
      2. 7.4.2 方法 2 — Goertzel DFT(HARMONICS_SUPPORT 和 USE_GOERTZEL_THD 宏均已定义时)
      3. 7.4.3 方法 3 — 2048 点实数 FFT(已定义 HARMONICS_SUPPORT 宏但未定义 USE_GOERTZEL_THD 宏时)
    5. 7.5 拓扑选择
    6. 7.6 启用功能
    7. 7.7 系统参数
    8. 7.8 每相位比例因子
  11. 8运行示例
    1. 8.1 访问每个相位的参数
    2. 8.2 访问系统总测量值
    3. 8.3 访问相位状态标志

如何配置 DEBUG 模式参数

所有 DEBUG 模式参数均在 metrology_main_file.c 文件顶部的 #ifdef DEBUG 块内定义:

  • V_RMS — 所生成正弦波的均方根 (RMS) 电压,单位为伏特。默认值:120.0.
  • I_RMS — 所生成正弦波的 RMS 电流,单位为安培。默认值:10.0.
  • POWER_FACTOR — 仿真负载的功率因数(0.0 至 1.0)。将电压和电流之间的相位角设置为 phaseDiff = acosf(POWER_FACTOR)。默认值:0.5(滞后,60° 移位)。
  • V_SCALING — 用于归一化所生成样本的电压比例因子。必须与 template.h 模板中的 PHASE_A_VOLTAGE_SCALE_FACTOR 匹配。默认值:1585.2.
  • I_SCALING — 用于归一化所生成样本的电流比例因子。必须与 template.h 模板中的 PHASE_A_CURRENT_SCALE_FACTOR 匹配。默认值:125.0.
  • SAMPLES_PER_CYCLE — 查找表中每个市电周期的样本数。必须等于 SAMPLE_RATE | MAINS_NOMINAL_FREQUENCY。默认值:160 (8000Hz / 50Hz)。
  • PHASE_INCREMENT — 查找表中相位之间的起始索引偏移。默认值:53.

将谐波注入生成的信号

为了测试总谐波失真 (THD) 计算,可以通过在 metrology_main_file.c 文件的 #ifdef DEBUG 块内定义 INJECT_HARMONIC,将谐波分量注入生成的波形。定义 INJECT_HARMONIC 时,在执行 debugInit() 函数期间,会向电压和电流查找表添加一个额外的正弦分量:

  • voltage[i] ± (V_RMS × SQRT2) / (V_SCALING) × HARMONIC_PERCENT × sinf(HARMONIC_ORDER × t)
  • current[i] ± (I_RMS × SQRT2) / (I_SCALING) × HARMONIC_PERCENT × sinf(HARMONIC_ORDER × t - phaseDiff)
  • HARMONIC_ORDER — 要注入谐波的整数阶数(例如,5 表示以 250Hz 的频率注入 5 次谐波)。默认值:5.
  • HARMONIC_PERCENT — 注入谐波的幅值占基波幅值的比例(例如,0.50 = 50%)。预期的 THD 结果约等于该值。默认值:0.50.

通过在 debugInit() 函数的循环内手动添加更多项,可以注入多个谐波。