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.

[参考译文] TMS320F28379S:HRPWM

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/876009/tms320f28379s-hrpwm

器件型号:TMS320F28379S

您好!

我已经能够打开 HRPWM 并写入 CMPA 和 CMPAHR 寄存器。  

我的问题是关于调用 SFO 以获取 MEP_ScaleFactor。

我可以在不调用 SFO 的情况下运行 HRPWM 吗?
如果没有 PWM、会出现什么错误?

以下是我的 HRPWM 配置:

我将使用具有恒定频率的 PWM4、并且我将控制占空比。  

EPwm4Regs.TBCTL.bit.PRDLD = TB_Immediate;//设置立即加载
EPwm4Regs.TBPRD = 300; //对于330kHz
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;// EPwm4是主设备
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;//可选
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//可选
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET;//可选
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;//可选

EALLOW;//注意这些寄存器受保护
EPwm4Regs.HRCNFG.ALL = 0x0;//首先清除所有位
EPwm4Regs.HRCNFG.bit.EDGMODE = HR_FEP;//控制下降沿位置
EPwm4Regs.HRCNFG.bit.CTLMODE = HR_CMP;// CMPAHR 控制 MEP
EPwm4Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;// CTR 上的影子负载= 0

EPwm4Regs.HRPWR.bit.CALPWRON = 1;
EPwm4Regs.HRCNFG.bit.AUTOCONV = 1;
EDIS;
MEP_ScaleFactor = 66*256;//从典型换算系数开始

 当我加载占空比时,我会按以下方式执行它:

 EPwm4Regs.CMPA.all = Duty * EPwm4Regs.TBPRD * 65535;

(其中占空比值介于0.001和.8之间)

你有什么建议吗?  

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

    您好!

    [引用 user="PowerGuy">我是否可以运行 HRPWM 而不调用 SFO?
    如果没有 PWM、会出现什么错误?

    我不建议在没有 SFO 的情况下运行 HRPWM。 这是在 PWM 输出上产生所需精度和分辨率所需的步骤。
    因此、请使用 SFO。

    [引用用户="PowerGuy"]

     EPwm4Regs.CMPA.all = Duty * EPwm4Regs.TBPRD * 65535;
    (其中占空比值介于0.001和.8之间)
    你有什么建议吗?
    [/报价]

    这可能适用于典型的换算系数、始终建议使用 SFO。

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

    我在将 SFO ()函数添加到项目中时遇到问题。

    如果我错了、请纠正我的问题。  

    如果我不称之为 SFO,MEP 换算系数将保持 在66*256;

    其中 HRPWM 的精度会受到影响。  

    -在这种情况下,最坏的情况是什么?

    -我会失去多少分辨率?

    同样、我的周期寄存器为300 (330kHz)、标称占空比为40%。我的 CMPA 寄存器= 120 (约7位分辨率)

    使用 CMPAHR 应该会为我提供额外的8位。 现在、我有15位分辨率。

    我不介意丢失1或2位分辨率。  

    在后台调用 SFO()将更新 MEP。  

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

    您好!

    [引用用户="PowerGuy"]

    -在这种情况下,最坏的情况是什么?

    -我会失去多少分辨率?

    [/报价]

    这不仅是分辨率损失、而且行为可能无法预测、可能会导致干扰、因此不建议这样做。

    [引用用户="PowerGuy"]

    在后台调用 SFO()将更新 MEP。  

    [/报价]
    是- SFO 负责跟踪 MEP。

    [引用 user="PowerGuy"]我在将 SFO ()函数添加到项目中时遇到问题。
    你在 SFO 中遇到的问题到底是什么。 请为此创建一个帖子、以便 SFO 专家可以帮助解决此问题。

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

    《证券及期货条例》现已开始运作。  

    死板、规格表未提及使用 SFO "必须"。  

    因此、令人担忧的是、如果没有 HRPWM、可能会产生无法预测的结果。  

    以前,在没有自动校准的情况下 ,我能够像这样加载占空比:

    EPwm4Regs.CMPA.all = Duty * EPwm4Regs.TBPRD * 65535;

    既然 SFO 起作用了,我是否仍然可以用同样的方式加载它?  

    或者,我是否需要独立加载它们?  
    EPwm4Regs.CMPA.bit.CMPA  = Duty*EPwm4Regs.TBPRD;

    EPwm4Regs.CMAP.bit.CMHR =(Duty* EPwm4Regs.TBPRD)<< 8;

    我在单独加载 CMHR 时看到的问题是、我将最大占空比钳制为80%、实际上我将把加载值钳制到 CMHR 中的80%。

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

    您好!

    您可以按照以前的方式使用 CMPA/CMPAHR 更新。 SFO 不应影响代码的此部分。
    您是否在软件中启用了 AUTOCONV 位? 如果是这样、硬件将处理与 MEP_Scalefactor 之间的必要转换。

    关于 SFO 的文档反馈-我们将在对文档进行必要更新时继续提供此反馈、谢谢。