This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/UCD3138A64:CCS/UCD3138A64:

Guru**** 2532480 points
Other Parts Discussed in Thread: UCD3138, UCD3138064

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/769830/ccs-ucd3138a64-ccs-ucd3138a64

器件型号:UCD3138A64
主题中讨论的其他器件:UCD3138UCD3138064

工具/软件:Code Composer Studio

早上好。  

我想驱动 LLC。 在此应用程序中,我想使用 CPU 样本改变滤波器的输入, 因此  我在 频率可变的谐振模式下生成两个 DPWM。

在这里我的代码。

不管用

请帮助!!!

谢谢你  

//######################################################################################################################
//
//文件:main.c
//
//标题:main
//
//注释:
// 1)

//######################################################################################################################
//
// Ver| dd mmm yyyy | WER |更改说明
//=== =================== =========== ================================================================================================
// 1.00 | 2015年5月5日| CH |
//
// Texas Instruments、Inc
//版权所有德州仪器2008。 保留所有权利。
//######################################################################################################################
#define main 1.

#include "system_defines.h"
#include "Cyclon_Device.h"
#include "PMBus_commands.h"
#include "PMBus_common.h"
#include "PMBus_topology.h"
#include "variables.h"
#include "functions.h"
#include "software_interrupts.h"
#include "cyclone_defination.h"
#include "stdio.h"

#define PCLK_PERIOD 4.0e-9 //时基以秒为单位
#define PERIOD_seconds 2.22e-6 // fmax = 450kHz
#define retard_seconds 100e-9 //配置模板 mort

#define 周期((int)(period_seconds/PCLK_period)<<4)//(从位4开始)
#define 延迟((int)(retard_seconds/PCLK_PERIOD)<<4)//(从位4开始)
#define EVENT1 (int)(周期*0.00)
#define EVENT2 (int)(周期*0.50)
#define EVENT3 (int)(周期*0.50)
#define EVENT4 (int)(周期*0.00)

int input_filene;// HyperKnob 的注释[min=0、max=1200、step=100]

/***** 配置 DPWM ******** /

void init_dpwm0 (void)


Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;// PWM_EN–PWM 处理使能
//0 =禁用 PWM 模块、输出为零(默认值)
// 1 =启用 PWM 操作

Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1;// CLA 处理使能
//0 =从 PWM 寄存器值生成 PWM 波形(默认)
//1 =启用 CLA 输入


Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期
Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器


//谐振模式
Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 1;//DPWM 模式
// 0 =正常模式
// 1 =谐振模式
// 2 =多输出模式
// 3 =三角模式
// 4 =前导模式

Dpwm0Regs.DPWMCTRL0.bit.reson_mode_fixed_Duty_EN =0;//配置在谐振模式下如何控制占空比
//0 =由滤波器占空比设置的谐振模式占空比(默认)
// 1 =由自动切换高电平寄存器设置的谐振模式占空比

Dpwm0Regs.DPWMCTRL0.bit.CBC_ADV_CNT_EN =0;//选择逐周期运行
//正常模式
// 0 = CBC 被禁用(默认)
// 1 = CBC 被启用
//多谐振模式和谐振模式
// 0 = PWM-A 和 PWM-B 独立运行(默认)
// 1 =启用 PWM-A 和 PWM-B 脉冲匹配


Dpwm0Regs.DPWMCTRL1.bit.HiRes_DIS = 0;//0 =启用高分辨率逻辑


Dpwm0Regs.DPWMCTRL1.bit.check_override = 1;//禁用数学检查,硬件中存在错误

Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//更新结束周期模式
// 0 =事件随时更新(默认)
// 1 =周期结束时更新的事件

Dpwm0Regs.DPWMCTRL2.bit.filter_Duty_SEL = 2;//–设置在中用于最大占空比计算的寄存器
//在重新开启和网格模式中进行过滤。
// 0 = PWM 周期寄存器(默认值)
// 1 =事件2
// 2 = PWM 周期调整寄存器(位13:0)


Dpwm0Regs.DPWMPHASETRIG.bit.PHASE_TRIGGER = 2;//相位触发=相位触发寄存器值或滤波器占空比

Dpwm0Regs.DPWMCTRL1.bit.global_Period_EN = 1;

Dpwm0Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN = 0;//0 = PWM 不同步到另一个 PWM 通道
LoopMuxRegs.DPWMMUX.bit.DPWM0_SYNC_SEL = 0;//0 = DPWM0与 DPWM0同步
Dpwm0Regs.DPWMPHASETRIG.ALL = 32;//128ns 相位延迟


Dpwm0Regs.DPWMEV1.ALL = EVENT1;//将事件1设置为周期的0%(开始)
Dpwm0Regs.DPWMEV2.all = EVENT2;//将事件2设置为周期的25%
Dpwm0Regs.DPWMEV3.ALL = EVENT3;//将事件3设置为周期的50%
Dpwm0Regs.DPWMEV4.ALL = EVENT4;//将事件4设置为周期的75%

Dpwm0Regs.DPWMPRD.All =周期;//对所有值使用.all,以便缩放匹配


Dpwm0Regs.DPWMRESDUTY.bit.谐 振占空比=(周期+1)>1;//控制 DPWM 占空比。 使用16位有符号数
//作为谐振模式下的滤波器输出乘法器。

Dpwm0Regs.DPWMCTRL0.bit.min_Duty_mode = 0;

// Dpwm0Regs.DPWMCTRL0.bit.CBC_PWM_AB_EN =1;//设置故障 CBC 是否改变 PWM-A 和 PWMB 的输出波形
//0 = PWM-A 和 PWM-B 不受故障 CBC 的影响(默认)
//1 = PWM-A 和 PWM-B 受故障 CBC 影响

//Dpwm0Regs.DPWMCTRL1.bit.CBC_BSIDE_ACTIVE_EN =1;//设置当 PWM-B 处于活动状态时 CBC 是否响应故障 CBC,
//仅在多模式和重新开启模式下可用
// 0 = PWM-A 激活时对故障 CBC 的响应(默认)
// 1 = PWM-A 或 PWM-B 激活时对故障 CBC 的响应

void init_filter0 (void)

// CPU 样本的特殊设置-除 P 以外的所有系数均为零
Filter0Regs.FILTERCTRL.bit.USE_CPU_SAMPLE = 1;//启用 CPU 样本

Filter0Regs.CPUXN.bit.CPU_SAMPLE = 64;//设置为1/4
Filter0Regs.FILTERKPCOEF0.bit.KP_COEF_0=1;// XN 值完全通过。
Filter0Regs.FILTERKICOEF0.bit.KI_COEF_0=1;
Filter0Regs.FILTERKDCOEF0.bit.KD_COEF_0=0;
Filter0Regs.FILTERKDALPHA.bit.KD_alpha_0=1;
Filter0Regs.FILTERKICLPHI.bit.KI_CLAMP 高电平= 0x7FFFFF;
Filter0Regs.FILTERKICLPLOL.bit.KI_CLAMP 低电平= 0;

Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= 0x7FFFFF;
Filter0Regs.FILTEROCLPLO。bit.output_clamp 低电平= 0;

Filter0Regs.FILTERCTRL.bit.output_MULT_SEL = 3;//选择输出多路复用器并用于乘法
//过滤输出以计算 DPWM 占空比值
// 0 =从环路多路复用器模块接收到 KComp (默认)
// 1 =从环路多路复用器模块接收到的开关周期
// 2 =从环路多路复用器模块接收到的前馈值
// 3 =从 DPWM 模块接收到的谐振占空比值


Filter0Regs.FILTERCTRL.bit.PERIOD_MULT_SEL = 1;//选择输出多路复用器,用于与滤波器输出相乘
//计算谐振模式下的 DPWM 周期值
// 0 =从环路多路复用器模块接收到的开关周期(默认)
// 1 =从环路多路复用器模块接收到 KComp
Filter0Regs.FILTERCTRL.bit.output_scale = 0;//无移位
Filter0Regs.FILTERCTRL.bit.FILTER_EN = 1;

void init_loop_mux (void)

LoopMuxRegs.SAMPTRIGCTRL.bit.FE0_TRIG_DPWM0_EN = 1;//使用 DPWM0进行滤波器0采样触发

//DPWM-0连接到滤波器以实现谐振占空比

LoopMuxRegs.FILTERMUX.bit.FILTER0_PER_SEL = 0;//为滤波器0选择开关周期周期源
//模块
//0 = DPWM 0开关周期(默认)
//1 = DPWM 1开关周期
//2 = DPWM 2开关周期
LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =周期;//3 = DPWM 3开关周期
//Use value in KCOMP-0 register (使用 KCOMP-0寄存器中的值)
LoopMuxRegs.FILTERMUX.BILTER0_KCOMP_SEL = 0;


//Connect filter-0至 DPWM-0

LoopMuxRegs.DPWMMUX.bit.DPWM0_FILTER_SEL = 0;//为选择占空比源/谐振周期
//DPWM 模块0
//0 =选择滤波器0输出(默认)
//1 =选择滤波器1输出
//2 =选择滤波器2输出
//3 =选择恒定功率模块
//4 =来自轻负载控制寄存器的 DPWM_ON_TIME 值
LoopMuxRegs.LLENTHRESH.bit.cycle_CNT_THRESH = 0;//

void global_enable (void)

UNION GLBEN_REG glben_store;//收集全局使能位以供同步使用
glben_store.all = 0;
glben_store.bit.DPWM0_EN = 1;
glben_store.bit.FE_CTRL0_EN = 1;
LoopMuxRegs.GLBEN = glben_store;

void main()

//启用 JTAG
杂项 AnalogRegs.IOMUX.ALL = 0;

///-------------------------------------------------------
//重要:阅读下面的内容,否则代码可能无法正确执行
///-------------------------------------------------------
//将引脚 FAULT3接地以实现正常运行
//将引脚 FAULT3连接到3.3V 以清除校验和
if (GioRegs.FAULTIN.bit.FLT3_IN = 0)

clear_integration_word_();

#IF (UCD3138|UCD3138064)
杂项 AnalogRegs.CLKTRIM.bit.HFO_LN_FILTER_EN = 0;
杂散 AnalogRegs.CSTRIM.bit.ITARM_TRIM =23;//28;
#endif


input_filtere= Filter0Regs.CPUXN.bit.cpu_sample;//初始化 HyperKnob

init_dpwm0();
init_filter0();
init_loop_mux();
INIT_PMBus (0x58);
global_enable();


for (;;)

PMBus_handler ();
Filter0Regs.CPUXN.bit.cpu_sample = input_filtere;//将 HyperKnob 值放入寄存器中


//#pragma 中断(c_int00、复位)

void c_int00 (void)

main();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否曾尝试使用内存调试器调试代码并查看数字信号如何通过滤波器和 DPWM 传播?
    我很难通过查看代码来调试代码、但下面的语句是:
    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =周期;看起来可疑。 请注意、KCOMP0和 DPWM 的 PRD 分辨率不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     主席先生,感谢你迅速作出答复。

    我纠正了关于 Kcomp 的错误。

    是的、我已经使用内存调试器进行了验证、问题是  、即使 我   使用 CPU 样本更改滤波器的输入、滤波器 XN 的输入和滤波器的输出也等于零

    我的策略是 将周期放入 period_Mult_SEL 的 kcomp 中、 并在 output_Mult_SEL 中修复谐振 e、并更改我在中发现的频率、即我应该使用全局周期 PWM 和 KCOMP 来更改

      

    我在上一个代码中添加了此行代码、但我没有收到任何建议。 非常感谢我被阻止了  

    if (input_filtre2>input_filtre1)

    LoopMuxRegs.PWMGLBPER.All=周期;
    等待(8800);
    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值


    其他

    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值
    等待(8800);
    LoopMuxRegs.PWMGLBPER.All=周期;

    //######################################################################################################################
    //
    //文件:main.c
    //
    //标题:main
    //
    //注释:
    // 1)

    //######################################################################################################################
    //
    // Ver| dd mmm yyyy | WER |更改说明
    //=== =================== =========== ================================================================================================
    // 1.00 | 2015年5月5日| CH |
    //
    // Texas Instruments、Inc
    //版权所有德州仪器2008。 保留所有权利。
    //######################################################################################################################
    #define main 1.

    #include "system_defines.h"
    #include "Cyclon_Device.h"
    #include "PMBus_commands.h"
    #include "PMBus_common.h"
    #include "PMBus_topology.h"
    #include "variables.h"
    #include "functions.h"
    #include "software_interrupts.h"
    #include "cyclone_defination.h"
    #include "stdio.h"

    #define PCLK_PERIOD 4.0e-9 //时基以秒4ns 为单位
    #define PERIOD_seconds 2.22e-6 // fmax = 450kHz
    #define retard_seconds 100e-9 //配置模板 mort

    #define 周期((int)(period_seconds/PCLK_period)<<4)//(从位4开始)
    #define 延迟((int)(retard_seconds/PCLK_PERIOD)<<4)//(从位4开始)
    #define EVENT1 (int)(周期*0.00)
    #define EVENT2 (int)(周期*0.50)
    #define EVENT3 (int)(周期*0.50)
    #define EVENT4 (int)(周期*0.00)


    #define PWM_MODE_ON (0)
    int input_filene;// HyperKnob 的注释[min=0、max=300、step=1 ]
    int input_filtre1;
    int input_filtre2;

    /******** /
    void _wait( int delay )

    int i;
    for (i = 0;i < delay;i++){}

    /******** /

    /***** 配置 DPWM ******** /

    void init_dpwm0 (void)


    Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1;// CLA 处理使能
    //0 =从 PWM 寄存器值生成 PWM 波形(默认)
    //1 =启用 CLA 输入
    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期;
    Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器


    //DPWM 模式
    // 0 =正常模式
    // 1 =谐振模式
    // 2 =多输出模式
    // 3 =三角模式
    // 4 =前导模式

    Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 1;//谐振模式

    Dpwm0Regs.DPWMCTRL0.bit.reson_mode_fixed_Duty_EN =0;//配置在谐振模式下如何控制占空比
    //0 =由滤波器占空比设置的谐振模式占空比(默认)
    // 1 =由自动切换高电平寄存器设置的谐振模式占空比
    Dpwm0Regs.DPWMCTRL0.bit.CBC_ADV_CNT_EN =0;//选择逐周期运行
    //正常模式
    // 0 = CBC 被禁用(默认)
    // 1 = CBC 被启用
    //多谐振模式和谐振模式
    // 0 = PWM-A 和 PWM-B 独立运行(默认)
    // 1 =启用 PWM-A 和 PWM-B 脉冲匹配
    Dpwm0Regs.DPWMCTRL1.bit.HiRes_DIS = 0;//0 =启用高分辨率逻辑
    Dpwm0Regs.DPWMCTRL1.bit.check_override = 1;//禁用数学检查,硬件中存在错误
    Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//更新结束周期模式
    // 0 =事件随时更新(默认)
    // 1 =周期结束时更新的事件
    Dpwm0Regs.DPWMCTRL2.bit.filter_Duty_SEL = 2;//–设置在中用于最大占空比计算的寄存器
    //在重新开启和网格模式中进行过滤。
    // 0 = PWM 周期寄存器(默认值)
    // 1 =事件2
    // 2 = PWM 周期调整寄存器(位13:0)
    Dpwm0Regs.DPWMPHASETRIG.bit.PHASE_TRIGGER = 2;//相位触发=相位触发寄存器值或滤波器占空比
    Dpwm0Regs.DPWMCTRL1.bit.global_Period_EN = 1;
    Dpwm0Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN = 0;//0 = PWM 不同步到另一个 PWM 通道
    LoopMuxRegs.DPWMMUX.bit.DPWM0_SYNC_SEL = 0;//0 = DPWM0与 DPWM0同步
    Dpwm0Regs.DPWMPHASETRIG.ALL = 32;//128ns 相位延迟


    Dpwm0Regs.DPWMEV1.ALL = EVENT1;//将事件1设置为周期的0%(开始)
    Dpwm0Regs.DPWMEV2.all = EVENT2;//将事件2设置为周期的50%
    Dpwm0Regs.DPWMEV3.ALL = EVENT3;//将事件3设置为周期的50%
    Dpwm0Regs.DPWMEV4.ALL = EVENT4;//将事件4设置为周期的75%
    Dpwm0Regs.DPWMPRD.All =周期;//对所有值使用.all,以便缩放匹配
    Dpwm0Regs.DPWMRESDUTY.bit.谐 振占空比=(((周期/2)>> 4)+1>1;//控制 DPWM 占空比。 使用16位有符号数
    //作为谐振模式下的滤波器输出乘法器。
    Dpwm0Regs.DPWMCTRL0.bit.min_Duty_mode = 0;
    Dpwm0Regs.DPWMCTRL0.bit.CBC_PWM_AB_EN =1;//设置故障 CBC 是否改变 PWM-A 和 PWMB 的输出波形
    //0 = PWM-A 和 PWM-B 不受故障 CBC 的影响(默认)
    //1 = PWM-A 和 PWM-B 受故障 CBC 影响
    Dpwm0Regs.DPWMCTRL1.bit.CBC_BSIDE_ACTIVE_EN =1;//设置当 PWM-B 处于活动状态时 CBC 是否响应故障 CBC,
    //仅在多模式和重新开启模式下可用
    // 0 = PWM-A 激活时对故障 CBC 的响应(默认)
    // 1 = PWM-A 或 PWM-B 激活时对故障 CBC 的响应
    Dpwm0Regs.DPWMCTRL1.bit.global_Period_EN=1;//
    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;// PWM_EN–PWM 处理使能
    //0 =禁用 PWM 模块、输出为零(默认值)

    // 1 =启用 PWM 操作

    void init_filter0 (void)

    Filter0Regs.FILTERCTRL.bit.USE_CPU_SAMPLE = 1;//启用 CPU 样本
    Filter0Regs.CPUXN.bit.CPU_SAMPLE = 64;//设置为1/4
    Filter0Regs.FILTERKPCOEF0.bit.KP_COEF_0;// XN 值完全通过。
    Filter0Regs.FILTERKICOEF0.bit.KI_COEF_0;
    Filter0Regs.FILTERKDCOEF0.bit.KD_COEF_0;
    Filter0Regs.FILTERKDALPHA.bit.KD_alpha_0;
    Filter0Regs.FILTERCTRL.bit.output_MULT_SEL = 3;//选择输出多路复用器并用于乘法
    //过滤输出以计算 DPWM 占空比值
    // 0 =从环路多路复用器模块接收到 KComp (默认)
    // 1 =从环路多路复用器模块接收到的开关周期
    // 2 =从环路多路复用器模块接收到的前馈值
    // 3 =从 DPWM 模块接收到的谐振占空比值
    Filter0Regs.FILTERCTRL.bit.PERIOD_MULT_SEL = 1;//选择输出多路复用器,用于与滤波器输出相乘
    //计算谐振模式下的 DPWM 周期值
    // 0 =从环路多路复用器模块接收到的开关周期(默认)
    // 1 =从环路多路复用器模块接收到 KComp
    Filter0Regs.FILTERCTRL.bit.output_scale = 0;//无移位
    Filter0Regs.FILTERCTRL.bit.FILTER_EN = 1;

    void init_loop_mux (void)


    LoopMuxRegs.SAMPTRIGCTRL.bit.FE0_TRIG_DPWM0_EN = 1;//使用 DPWM0进行滤波器0采样触发
    LoopMuxRegs.FILTERMUX.bit.FILTER0_PER_SEL = 0;//为滤波器0选择开关周期周期源
    //模块
    //0 = DPWM 0开关周期(默认)
    //1 = DPWM 1开关周期
    //2 = DPWM 2开关周期
    //3 = DPWM 3开关周期
    LoopMuxRegs.FILTERMUX.BILTER0_KCOMP_SEL = 0;

    LoopMuxRegs.DPWMMUX.bit.DPWM0_FILTER_SEL = 0;//为选择占空比源/谐振周期
    //DPWM 模块0
    //0 =选择滤波器0输出(默认)
    //1 =选择滤波器1输出
    //2 =选择滤波器2输出
    //3 =选择恒定功率模块
    //4 =来自轻负载控制寄存器的 DPWM_ON_TIME 值

    //。 它还用于匹配 LLC 配置中的 PWM 和谐振模式波形。

    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值

    /*如果 DPWM 的 DPWMCTRL1中的全局周期启用(GLOBAL_PERIOD_EN)位被置位
    模块、它将使用 PWMGLBPRD 中的值作为周期。 这可用于更改
    多个 DPWM 的周期。 这对于频率抖动非常有用。 注释
    周期变化在上一个周期结束时生效。 如果 DPWM 相位差、
    每个 DPWM 将在不同的时间发生频率变化。
    另请注意、如果滤波器使用来自 DPWM 的周期进行计算、它仍将使用
    DPWM 周期寄存器、即使全局周期被启用也是如此。 因此、要使用全局周期、它是
    需要将 KCOMP 寄存器用作乘法器并更改两个全局周期
    寄存器和 KCOMP 寄存器。 实际上、应该仔细排序
    遵循:
    如果周期在增加–首先更改全局周期寄存器、然后等待1个周期、然后
    更改 KCOMP。 该序列可防止死区时间违例。
    出于同样的原因、在缩短周期时、首先更改 KCOMP。
    对于任何频率变化、应根据精心设计更改顺序
    实际拓扑和 IC 配置。*/

    LoopMuxRegs.PWMGLBPER.All=周期;





    LoopMuxRegs.LLENTHRESH.bit.cycle_CNT_THRESH = 0;//

    void global_enable (void)

    UNION GLBEN_REG glben_store;//收集全局使能位以供同步使用
    glben_store.all = 0;
    glben_store.bit.DPWM0_EN = 1;
    glben_store.bit.FE_CTRL0_EN = 1;
    LoopMuxRegs.GLBEN = glben_store;

    void main()

    //启用 JTAG
    杂项 AnalogRegs.IOMUX.ALL = 0;

    ///-------------------------------------------------------
    //重要:阅读下面的内容,否则代码可能无法正确执行
    ///-------------------------------------------------------
    //将引脚 FAULT3接地以实现正常运行
    //将引脚 FAULT3连接到3.3V 以清除校验和
    if (GioRegs.FAULTIN.bit.FLT3_IN = 0)

    clear_integration_word_();

    #IF (UCD3138|UCD3138064)
    杂项 AnalogRegs.CLKTRIM.bit.HFO_LN_FILTER_EN = 0;
    杂散 AnalogRegs.CSTRIM.bit.ITARM_TRIM =23;//28;
    #endif


    input_filtere= Filter0Regs.CPUXN.bit.cpu_sample;//初始化 HyperKnob
    input_filtre1=input_file;

    init_filter0();
    init_loop_mux();
    init_dpwm0();
    INIT_PMBus (0x58);
    global_enable();


    for (;;)

    PMBus_handler ();
    Filter0Regs.CPUXN.bit.cpu_sample = input_filtere;//将 HyperKnob 值放入寄存器中
    // input_filtre2=input_file;

    /* if (input_filtre2>input_filtre1)

    LoopMuxRegs.PWMGLBPER.All=周期;
    等待(8800);
    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值


    其他

    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值
    等待(8800);
    LoopMuxRegs.PWMGLBPER.All=周期;

    }*/


    //#pragma 中断(c_int00、复位)

    void c_int00 (void)

    main();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的 FE0 (和 Filter0)似乎没有被 DPWM0触发。

    请 替换以下陈述:

    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期;

    其中:

    Dpwm0Regs.DPWMSAMPTRIG1.ALL = 256;//开始后为64nS


    这将有助于运行滤波器。
    或者、您可以定期设置 FILTERCTRL 寄存器中的 FORCE_START 位。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我对我的问题感到困扰、我会感到很抱歉。
    实际上,我不使用前端,只是我的目标是更改滤波器的输入,因此谐振模式下的 DPWM 将发生变化。
    稍后,如果此步骤经过验证,我将集成前端和自动切换机制。
    我的问题是、在正常模式下、CPU 采样是可以的、我的意思是如果我改变 FILTERXNREADER 的 INPUT 滤波、并因此改变了占空比。但是在谐振模式下、我不明白为什么当我改变 CPU 采样时从 FILTERXNREADER 寄存器取零 变量。
    我接受了你的建议,我改变了你对我说的,但仍然不起作用:(

    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期- 2000;//在周期结束前500nS

    这是

    Filter0Regs.FILTERCTRL.bit.FORCE_START = 1;//在固件控制下启动滤波器计算
    // 0 =未开始计算(默认)
    // 1 =计算开始




    很抱歉,如果我讲了太多话,但 IAM 被阻止。
    感谢您的帮助。



    //######################################################################################################################
    //
    //文件:main.c
    //
    //标题:main
    //
    //注释:
    // 1)

    //######################################################################################################################
    //此模式提供对称波形,其中 DPWMA 和 DPWMB 具有相同的脉宽。 作为
    //开关频率发生变化,脉冲之间的死区时间保持不变。

    //######################################################################################################################
    #define main 1.

    #include "system_defines.h"
    #include "Cyclon_Device.h"
    #include "PMBus_commands.h"
    #include "PMBus_common.h"
    #include "PMBus_topology.h"
    #include "variables.h"
    #include "functions.h"
    #include "software_interrupts.h"
    #include "cyclone_defination.h"
    #include "stdio.h"

    #define PCLK_PERIOD4.0e-9 //时基以秒4ns 为单位
    #define PERIOD_seconds2.22e-6 // fmax = 450kHz
    #define retard_seconds100e-9 //配置模板 mort

    #define 周期((int)(period_seconds/PCLK_period)<<4)//(从位4开始)
    #define 延迟((int)(retard_seconds/PCLK_PERIOD)<<4)//(从位4开始)
    #define EVENT1(int)(周期*0.00)
    #define EVENT2(int)(周期*0.50)
    #define EVENT3(int)(周期*0.00 )
    #define EVENT4(int)(周期*0.50)


    int input_filene;// HyperKnob 的注释[min=0、max=300、step=1 ]
    int input_filtre1;
    int input_filtre2;

    /******** /
    void _wait( int delay )

    int i;
    for (i = 0;i < delay;i++){}

    /******** /

    /***** 配置 DPWM ******** /

    void init_dpwm0 (void)



    Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1; // CLA 处理使能
    //0 =从 PWM 寄存器值生成 PWM 波形(默认)
    //1 =启用 CLA 输入

    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期- 2000;//在周期结束前500nS

    Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1; //启用1个采样触发器


    //DPWM 模式
    // 0 =正常模式
    // 1 =谐振模式
    // 2 =多输出模式
    // 3 =三角模式
    // 4 =前导模式

    Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 1; //谐振模式


    Dpwm0Regs.DPWMCTRL0.bit.reson_mode_fixed_Duty_EN =0; //配置在谐振模式下控制占空比的方式
    //0 =由滤波器占空比设置的谐振模式占空比(默认)
    // 1 =由自动切换高电平寄存器设置的谐振模式占空比



    Dpwm0Regs.DPWMCTRL0.bit.CBC_ADV_CNT_EN =1;//选择操作的逐周期
    //正常模式
    //0 = CBC 被禁用(默认)
    //1 = CBC 被启用
    //多谐振模式和谐振模式
    //0 = PWM-A 和 PWM-B 独立运行(默认)
    //1 =启用 PWM-A 和 PWM-B 脉冲匹配




    Dpwm0Regs.DPWMCTRL1.bit.HiRes_DIS = 0; //0 =启用高分辨率逻辑


    Dpwm0Regs.DPWMCTRL1.bit.CHECK_OVERRIDE = 0; //禁用数学检查,硬件中存在错误


    Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1; //更新结束周期模式
    // 0 =事件随时更新(默认)
    // 1 =周期结束时更新的事件


    Dpwm0Regs.DPWMCTRL2.bit.filter_Duty_SEL = 2; //–设置在中用于最大占空比计算的寄存器
    //在重新开启和网格模式中进行过滤。
    // 0 = PWM 周期寄存器(默认值)
    // 1 =事件2
    // 2 = PWM 周期调整寄存器(位13:0)

    Dpwm0Regs.DPWMPHASETRIG.bit.PHASE_TRIGGER = 2;//8nsec 相位延迟
    Dpwm0Regs.DPWMPHASETRIG.ALL =32;

    Dpwm0Regs.DPWMEV1.ALL = EVENT1;
    Dpwm0Regs.DPWMEV2.ALL = EVENT2;
    Dpwm0Regs.DPWMEV3.ALL = EVENT3;
    Dpwm0Regs.DPWMEV4.ALL = EVENT4;

    //在谐振模式之外的所有模式中,周期是一个固定值。 在谐振模式下
    //周期来自滤波器的输出
    Dpwm0Regs.DPWMPRD.All =周期; //对所有值使用.all,以便缩放匹配


    /* LLC 拓扑中使用寄存器谐振占空比来生成正确的滤波器占空比输出。 滤波器输出为
    乘以该寄存器即可计算滤波器占空比。 在 LLC 参考固件(UCD3138LLCEVM-028)中、它是
    设置为最大所需周期的1/2。 在本例中、位13-0用作无符号数。 更改为
    启用此模式、DPWM 必须处于谐振模式、中的 FILTER_BUITY_SEL 字段
    DPWMCTRL2必须设置为2.*/

    Dpwm0Regs.DPWMRESDUTY.bit.谐 振占空比=((周期>> 4)+1)>> 1; //该寄存器用于 LLC 拓扑中以生成正确的滤波器占空比输出。
    //滤波器输出乘以该寄存器来计算滤波器占空比。



    //作为谐振模式下的滤波器输出乘法器。
    Dpwm0Regs.DPWMCTRL0.bit.min_Duty_mode = 0;

    Dpwm0Regs.DPWMCTRL0.bit.CBC_PWM_AB_EN =1; //设置故障 CBC 是否改变 PWM-A 和 PWMB 的输出波形
    //0 = PWM-A 和 PWM-B 不受故障 CBC 的影响(默认)
    //1 = PWM-A 和 PWM-B 受故障 CBC 影响

    Dpwm0Regs.DPWMCTRL1.bit.CBC_BSIDE_ACTIVE_EN =1;//设置当 PWM-B 处于活动状态时 CBC 是否响应故障 CBC,
    //仅在多模式和重新开启模式下可用
    // 0 = PWM-A 激活时对故障 CBC 的响应(默认)
    // 1 = PWM-A 或 PWM-B 激活时对故障 CBC 的响应
    Dpwm0Regs.DPWMCTRL1.bit.global_Period_EN=1;

    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1; // PWM_EN–启用 PWM 处理
    //0 =禁用 PWM 模块、输出为零(默认值)
    // 1 =启用 PWM 操作


    void init_filter0 (void)


    Filter0Regs.FILTERCTRL.bit.USE_CPU_SAMPLE = 1;//启用 CPU 样本

    Filter0Regs.FILTERCTRL.bit.FORCE_START = 1;//在固件控制下启动滤波器计算
    // 0 =未开始计算(默认)
    // 1 =计算开始

    Filter0Regs.CPUXN.bit.CPU_SAMPLE =-34;//将负值放入 CPU 样本中;

    Filter0Regs.FILTERKPCOEF0.bit.KP_COEF_0=0x7fff;// XN 值完全通过。
    Filter0Regs.FILTERKICOEF0.bit.KI_COEF_0=0;
    Filter0Regs.FILTERKDCOEF0.bit.KD_COEF_0=0;
    Filter0Regs.FILTERKDALPHA.bit.KD_alpha_0=0;


    Filter0Regs.FILTERKICLPHI.bit.KI_CLAMP 高电平= 0x7FFFFF;
    Filter0Regs.FILTERKICLPLOL.bit.KI_CLAMP 低电平= 0;

    Filter0Regs.FILTERYNCLPHI.bit.YN_CLAMP 高电平= 0x799999;//最大占空比为95%
    //Filter0Regs.FILTERYNCLPHI.bit.YN_CLAMP 高电平= 0x199999;//最大占空比为20%
    //Filter0Regs.FILTERYNCLPLO。BIT.YN_CLAMP 低电平= 0x0;// 0%最小占空比
    Filter0Regs.FILTERYNCLPLO。BIT.YN_CLAMP 低电平= 0x066666;// 5%最小占空比

    Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= 0x3FFFF;
    //Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= 0x0CCCC;//最大占空比为20%
    Filter0Regs.FILTEROCLPL1.bit.output_CLAMP 低电平= 0;// 0%最小占空比


    /*该滤波器有两个输出、一个提供 DPWM 占空比值、另一个提供 DPWM 周期值。 在许多应用中
    拓扑、则仅使用占空比值。 在 LLC 中,使用了两个值。*/


    Filter0Regs.FILTERCTRL.bit.output_MULT_SEL = 3;//选择输出多路复用器并用于乘法
    //过滤输出以计算 DPWM 占空比值
    //0 =从环路多路复用器模块接收到 KComp (默认)
    //1 =从环路多路复用器模块接收到的开关周期
    //2 =从环路多路复用器模块接收到的前馈值
    //3 =从 DPWM 模块接收到的谐振占空比值

    Filter0Regs.FILTERCTRL.bit.PERIOD_MULT_SEL = 1;//选择输出多路复用器,用于与滤波器输出相乘
    //计算谐振模式下的 DPWM 周期值
    // 0 =从环路多路复用器模块接收到的开关周期(默认)
    // 1 =从环路多路复用器模块接收到 KComp

    Filter0Regs.FILTERCTRL.bit.output_scale = 0;//无移位

    Filter0Regs.FILTERCTRL.bit.FILTER_EN = 1; //启用过滤器


    void init_loop_mux (void)





    LoopMuxRegs.FECTRL0MUX.bit.DPWM0_FRAME_SYNC_EN = 1; //从 DPWM 0帧启用 DPWM 触发
    //同步到前端控制
    //0 = DPWM 0帧同步未路由到前端控制(默认)
    //1 = DPWM 0帧同步路由到前端控制


    LoopMuxRegs.SAMPTRIGCTRL.bit.FE0_TRIG_DPWM0_EN = 1; //将 DPWM0用于 filter0样本触发器

    LoopMuxRegs.FILTERMUX.BILTER0_PER_SEL = 0; //为滤波器0选择开关周期周期源
    //模块
    //0 = DPWM 0开关周期(默认)
    //1 = DPWM 1开关周期
    //2 = DPWM 2开关周期
    //3 = DPWM 3开关周期
    LoopMuxRegs.FILTERMUX.BILTER0_KCOMP_SEL = 0;

    LoopMuxRegs.DPWMMUX.bit.DPWM0_FILTER_SEL = 0;//为选择占空比/谐振周期源
    //DPWM 模块0
    //0 =选择滤波器0输出(默认)
    //1 =选择滤波器1输出
    //2 =选择滤波器2输出
    //3 =选择恒定功率模块
    //4 =来自轻负载控制寄存器的 DPWM_ON_TIME 值
    //设置哪个前端驱动滤波器
    LoopMuxRegs.FILTERMUX.BILTER0_FE_SEL = 0;


    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值
    //用于匹配 LLC 配置中的 PWM 和谐振模式波形。

    LoopMuxRegs.PWMGLBPER.All=周期;



    void init_front_end0 (void)

    FeCtrl0Regs.EADCDAC.BIT.DAC_VALUE= 0;
    FeCtrl0Regs.EADCDAC.bit.DAC_dither_EN = 1;
    FeCtrl0Regs.EADCCTRL.bit.AFE_GAIN= 3;
    FeCtrl0Regs.EADCCTRL.bit.eADC_MODE= 1;//取平均值模式
    FeCtrl0Regs.EADCCTRL.bit.AVG_SPACDIFY_EN = 0;//连续平均模式
    FeCtrl0Regs.EADCCTRL.bit.AVG_MODE_SEL = 0;//选择2倍取平均值

    FeCtrl0Regs.EADCCTRL.bit.EADC_ENA=1;












    void global_enable (void)

    UNION GLBEN_REG glben_store;//收集全局使能位以供同步使用
    glben_store.all = 0;
    glben_store.bit.DPWM0_EN = 1;
    glben_store.bit.FE_CTRL0_EN = 1;
    LoopMuxRegs.GLBEN = glben_store;




    void main()

    //启用 JTAG
    杂项 AnalogRegs.IOMUX.ALL = 0;

    ///-------------------------------------------------------
    //重要:阅读下面的内容,否则代码可能无法正确执行
    ///-------------------------------------------------------
    //将引脚 FAULT3接地以实现正常运行
    //将引脚 FAULT3连接到3.3V 以清除校验和
    if (GioRegs.FAULTIN.bit.FLT3_IN = 0)

    clear_integration_word_();


    #IF (UCD3138|UCD3138064)
    杂项 AnalogRegs.CLKTRIM.bit.HFO_LN_FILTER_EN = 0;
    杂散 AnalogRegs.CSTRIM.bit.ITARM_TRIM =23;//28;
    #endif


    input_filtere= Filter0Regs.CPUXN.bit.cpu_sample;//初始化 HyperKnob
    //input_filtre1=16;
    //init_front_end0 ();
    init_filter0();
    init_loop_mux();
    init_dpwm0();
    INIT_PMBus (0x58);
    global_enable();


    for (;;)

    PMBus_handler ();
    Filter0Regs.CPUXN.bit.cpu_sample = input_filtere;//将 HyperKnob 值放入寄存器中
    input_filtre2=input_filene;


    /*
    /*如果 DPWM 的 DPWMCTRL1中的全局周期启用(GLOBAL_PERIOD_EN)位被置位
    模块、它将使用 PWMGLBPRD 中的值作为周期。 这可用于更改
    多个 DPWM 的周期。 这对于频率抖动非常有用。 注释
    周期变化在上一个周期结束时生效。 如果 DPWM 相位差、
    每个 DPWM 将在不同的时间发生频率变化。
    另请注意、如果滤波器使用来自 DPWM 的周期进行计算、它仍将使用
    DPWM 周期寄存器、即使全局周期被启用也是如此。 因此、要使用全局周期、它是
    需要将 KCOMP 寄存器用作乘法器并更改两个全局周期
    寄存器和 KCOMP 寄存器。 实际上、应该仔细排序
    遵循:
    如果周期在增加–首先更改全局周期寄存器、然后等待1个周期、然后
    更改 KCOMP。 该序列可防止死区时间违例。
    出于同样的原因、在缩短周期时、首先更改 KCOMP。
    对于任何频率变化、应根据精心设计更改顺序
    实际拓扑和 IC 配置。*/


    /* if (input_filtre2>input_filtre1)

    LoopMuxRegs.PWMGLBPER.All=周期;
    等待(8800);
    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值



    其他

    LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(周期)>> 4;// KCOMP 为4ns、周期为250ps//使用 KCOMP-0寄存器中的值
    等待(8800);
    LoopMuxRegs.PWMGLBPER.All=周期;

    }*/






    //#pragma 中断(c_int00、复位)

    void c_int00 (void)

    main();
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题、我很乐意为您提供帮助。
    我确实理解您尝试执行的操作。 我知道您不使用前端
    但是、DPWM 仍然需要触发 FE 以将数据推送到滤波器、或者必须定期使用 FORCE_START (只需设置 FORCE_START 一次是不够的、应经常执行此操作)。

    我的坏情况是、

    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期- 2000;//在周期结束前500nS

    不适合 LLC。 采样触发器应设置为开关周期的开始。 类似的东西

    Dpwm0Regs.DPWMSAMPTRIG1.ALL = 256;

    首先尝试 FORCE_START 方法。 将 FORCE_START 位视为一个按钮、该按钮需要频繁按下才能强制计算滤波器。

    我仍然认为您的滤波器保持为0、因为它未被触发、每次计算都需要由 FORCE_START 或 DPWM 触发 FE 触发、然后触发滤波器。

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢  您的帮助。

    很不错  !!