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.

[参考译文] 编译器/UCD3138064EVM-166:UCD3138064EVM-166

Guru**** 2439710 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/663230/compiler-ucd3138064evm-166-ucd3138064evm-166

器件型号:UCD3138064EVM-166

工具/软件:TI C/C++编译器

您能否告诉我四个 PWM 的后续初始化是否正常。

void init_dpwm0 (void)

Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
Dpwm0Regs.DPWMPRD.All = Period;//Use .all 对于所有值、确保缩放匹配。

Dpwm0Regs.DPWMEV1.ALL =(周期* 3)/5;//在周期开始时置入事件1
Dpwm0Regs.DPWMEV2.all =周期;//1/4周期-除法是可以的、因为它是所有的常数。
Dpwm0Regs.DPWMEV3.ALL =(周期)/5;/1/2周期
Dpwm0Regs.DPWMEV4.ALL =周期/2;//3/4周期
Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期

Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新

Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用
Dpwm0Regs.DPWMCTRL2.bit.reson_d死 区时间_COMP_EN = 1;



void init_dpwm1 (void)

Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
Dpwm1Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
Dpwm1Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
Dpwm1Regs.DPWMPRD.All = Period;//Use .all 对于所有值、请确保缩放匹配。

Dpwm1Regs.DPWMEV1.all =(周期*3)/5;//在周期开始时置入事件1
Dpwm1Regs.DPWMEV2.all =周期;//1/4周期-除法是可以的、因为它是所有的常数。
Dpwm1Regs.DPWMEV3.all =(周期)/5;/1/2周期
Dpwm1Regs.DPWMEV4.ALL =周期/2;//3/4周期
Dpwm1Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期

Dpwm1Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
Dpwm1Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新
Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用
Dpwm1Regs.DPWMCTRL2.bit.reson_d死 区时间_COMP_EN = 1;


void init_dpwm2 (void)


Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
Dpwm2Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
Dpwm2Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
Dpwm2Regs.DPWMPRD.all = period;//use .all 对于所有值、请确保缩放匹配。

Dpwm2Regs.DPWMEV1.ALL =(周期* 3)/5;//在周期开始时置入事件1
Dpwm2Regs.DPWMEV2.all =周期;//1/4周期-除法是可以的、因为它都是常数。
Dpwm2Regs.DPWMEV3.ALL =周期/5;/1/2周期
Dpwm2Regs.DPWMEV4.ALL =周期/2;//3/4周期
Dpwm2Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期

Dpwm2Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
Dpwm2Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新

Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用
Dpwm2Regs.DPWMCTRL2.bit.reson_d死 区时间_COMP_EN = 1;



void init_dpwm3 (void)


Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
Dpwm3Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
Dpwm3Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
Dpwm3Regs.DPWMPRD.all = period;//use .all 对于所有值、请确保缩放匹配。

Dpwm3Regs.DPWMEV1.ALL =(周期* 3)/5;//在周期开始时置入事件1
Dpwm3Regs.DPWMEV2.all =周期;//1/4周期-除法是可以的、因为它都是常数。
Dpwm3Regs.DPWMEV3.ALL =(周期)/5;/1/2周期
Dpwm3Regs.DPWMEV4.ALL =周期/2;//3/4周期
Dpwm3Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期

Dpwm3Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
Dpwm3Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新

Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用
Dpwm3Regs.DPWMCTRL2.bit.reson_d死 区时间_COMP_EN = 1;

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

    设置:

    Dpwm3Regs.DPWMEV2.all =周期;
    Dpwm3Regs.DPWMEV3.ALL =(周期)/5;

    这意味着您具有负死区时间、也意味着 DPWM3A 在整个周期结束时始终保持高电平!
    这是您要做的吗? 什么是拓扑?

    Dpwm3Regs.DPWMSAMPTRIG1.ALL =周期;

    这毫无意义。 应在周期结束前至少将其设置为500nS。

    这是您要做的吗? 什么是拓扑?

    您能给我一张所需波形图吗? 我们可以 更好地支持您吗?

    此致、

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

    我在这篇评论中附加了所需的开关信号、请帮助我构建 program.e2e.ti.com/.../Switching-signal.docx

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

    占空比是多少?  它是开环50%还是由环路决定的占空比?

    我将在一天结束前向您发送一份回复。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    DPWM0A、DPWM1A、DPWM2A 和 DPWM3A 之间是否有任何需要保留的死区时间?
    这些相移中是否有任何一个相互移频? 或者、这些信号之间的通信无关紧要?
    这方面的细节在图纸中没有太多。 斑驳建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是我根据您的图纸提出的配置。
    但需要在工程图中提供更多详细信息。 我在之前的相关信息中对此表示了非常的喜欢。
    请提供这些答案、以便我进一步帮助您。

    void init_dpwm0 (void)

    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
    Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
    Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
    Dpwm0Regs.DPWMPRD.All = Period;//Use .all 对于所有值、确保缩放匹配。

    Dpwm0Regs.DPWMEV1.ALL = 528;//将 EV1放置在132nS、恰好在事件更新窗口之外
    Dpwm0Regs.DPWMEV2.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm0Regs.DPWMEV3.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm0Regs.DPWMEV4.ALL = 0;//如果不使用 B 输出,这并不重要
    Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期-2000;//周期结束前为500nS

    Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
    Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新
    Dpwm0Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN =0;// DPWM0为主器件

    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用



    void init_dpwm1 (void)

    Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
    Dpwm1Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
    Dpwm1Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
    Dpwm1Regs.DPWMPRD.All = Period;//Use .all 对于所有值、请确保缩放匹配。

    Dpwm1Regs.DPWMEV1.ALL = 528;//将 EV1放置在132nS、恰好在事件更新窗口之外
    Dpwm1Regs.DPWMEV2.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm1Regs.DPWMEV3.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm1Regs.DPWMEV4.ALL = 0;//如果不使用 B 输出,这并不重要
    Dpwm1Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新
    Dpwm1Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN =0;// DPWM1为从器件
    LoopMuxRegs.DPWMMUX.bit.DPWM1_SYNC_SEL =0;//DPWM1是从器件、与 DPWM0同步
    Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用


    void init_dpwm2 (void)

    Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
    Dpwm2Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
    Dpwm2Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
    Dpwm2Regs.DPWMPRD.all = period;//use .all 对于所有值、请确保缩放匹配。

    Dpwm2Regs.DPWMEV1.ALL = 528;//将 EV1放置在132nS、恰好在事件更新窗口之外
    Dpwm2Regs.DPWMEV2.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm2Regs.DPWMEV3.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm2Regs.DPWMEV4.ALL = 0;//如果不使用 B 输出,这并不重要
    Dpwm1Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新
    Dpwm2Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN =0;// DPWm2是从设备
    LoopMuxRegs.DPWMMUX.bit.DPWM2_SYNC_SEL =0;//DPWM2是从器件、与 DPWM0同步
    Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用


    void init_dpwm3 (void)

    Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 0;//针对初始化在本地禁用
    Dpwm3Regs.DPWMCTRL0.bit.CLA_EN = 1;//默认为1 -使用 CLA
    Dpwm3Regs.DPWMCTRL0.bit.PWM_MODE = 0;//正常模式
    Dpwm3Regs.DPWMPRD.all = period;//use .all 对于所有值、请确保缩放匹配。

    Dpwm3Regs.DPWMEV1.ALL = 528;//将 EV1放置在132nS、恰好在事件更新窗口之外
    Dpwm3Regs.DPWMEV2.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm3Regs.DPWMEV3.all =周期/2;//如果您不使用 B 输出、实际上无关紧要
    Dpwm3Regs.DPWMEV4.ALL = 0;//如果不使用 B 输出,这并不重要
    Dpwm3Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//在周期结束时更新
    Dpwm3Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN =0;// DPWM1为从器件
    LoopMuxRegs.DPWMMUX.bit.DPWM3_SYNC_SEL =0;//DPWM1是从器件、与 DPWM0同步
    Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 1;//本地启用


    此致、

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

    感谢您的答复、很抱歉耽误您的答复。 是 PWM0A 和 PWM1A 引脚的占空比为50%、PWM2A 和 PWM3A 引脚的占空比为40%。 此外、引脚 PWM2A 和 PWM3A 之间需要5%的死区时间。   

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

    您是说占空比固定为50%还是40%、这与开环中的情况类似?

    请注意、CLA_EN = 1表示占空比由数字滤波器决定、而不是 由 DPWM 配置决定。

    在 DPWM2A 和 DPWM3A 之间实现5%的死区时间非常容易。 只需将周期/20添加到 Dpwm3Regs.DPWMEV1.ALL 和 Dpwm3Regs.DPWMEV2.ALL

    此致、

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

    但我希望我的系统在闭环中运行。

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

    没问题。

    我只是不确定" PWM0A 和 PWM1A 引脚的占空比为50%、PWM2A 和 PWM3A 引脚的占空比为40%"。

    由于在闭环中、占空比会根据输入、输出和负载的条件变化。

    在某些情况下、这些是占空比。 然后、您应该保持 CLA_EN = 1 (已启用)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想将一个感测到的参数与同一个参数相乘、然后想与一个常量值进行比较、我能使用以下代码来实现这一点吗:

    IC= AdcRegs.ADCRESULT[5].bit.RESULT;
    t1=ic;
    Vdc2=t1;
    VDC=(Vdc2*Vdc2*2.5)/0xfff;
    Vdc1=(0.25/2.5)*0xfff;

    if (<Vdc1))

    Dpwm0Regs.DPWMCTRL1.bit.GPIO_A_EN =0;//现在打开中性 PWM
    Dpwm1Regs.DPWMCTRL1.bit.GPIO_A_EN =1;

    其他

    Dpwm1Regs.DPWMCTRL1.bit.GPIO_A_EN =0;
    Dpwm0Regs.DPWMCTRL1.bit.GPIO_A_EN =1;



    请帮助我查找此错误、因为这不会给我带来预期结果。 非常感谢您的参与。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您将定点和浮点算术混用,结果可能会有所不同,具体取决于您将 IC、T1、vdc2、VDC 和 Vdc1声明为哪种类型的变量。
    在 C 语言中、如果混合这些变量、则必须显式转换变量以确保结果。

    我建议将"VDC=(Vdc2*Vdc2*2.5)/0xfff;"改为 VDC=Vdc2*Vdc2,因为残割或视力因素无关紧要。 2.5倍频的多路复用和0xfff 除法只是一个标量器、对于需要在工程单元中进行测量的人来说、这是很好的选择。 但是、ARM7 不需要在欧盟看到测量结果、就可以将其与参赛者进行比较。
    相应地更改 Vdc1、使其相对于 Vdc 进行良好缩放。 换言之、计算与 Vdc 电平一致的常数、而不使用2.5和0xxf mult/div。

    您还应该在器件 GUI 中使用内存调试器来调试和观察参数。 您是否曾尝试观察过 IC、T1、vdc2、VDC 和 Vdc1的值?

    此致、