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.

[参考译文] TMS570LS3137:PWM 高分辨率配置

Guru**** 2538950 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

工具与软件:

你(们)好

我进行了一些新的详细测试、发现了一个与 PWM 生成有关的问题  

即使如此、我也要更改 hetRAM1->instruction[(PWM_CH2 << 1U)+ 41U].Data 上的数据值

对于占空比配置、如果数据变化小于10、则 PWM 输出没有任何变化。

在这个我的测试程序中、占空比配置作为数据读数写入、以环回设置的值

AN1上生成中断。


pwmchannel 上的数据值0 = 4672

PWM1=500 AN1=2087

pwmchannel 上的数据值0 = 4662

PWM1=499 AN1=2087

pwmchannel 0上的数据值= 4653

PWM1 = 498 AN1 = 2087

pwm 通道上的数据值0 = 4644

PWM1=497 AN1=2087


pwmchannel 上的数据值0 = 4626

PWM1 = 495 AN1 = 2087


pwmchannel 上的数据值0 = 4617

PWM1=494 AN1=2087

pwmchannel 上的数据值0 = 4608

PWM1=493 AN1=2087

最后写入4599、PWM 输出通道的读数变化为2145


pwmchannel 0上的数据值= 4599

PWM1=492 AN1=2145

有什么建议吗?

谢谢

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

    你(们)好

    在我的配置中、高分辨率似乎对 PWM 不起作用

    我尝试设置程序寄存器的位8、但没有成功

    有什么建议吗?

    谢谢

    Fabio

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

    尊敬的 Fabio:

    是否有可能在终端共享您的代码以进行快速调试? 您甚至可以通过私人消息发送它。

    ——
    谢谢、此致、

    Jagadish。

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

    你(们)好

    恐怕太复杂了… 我只会用 PWM 创建一个简单的项目。。。

    我将对 PWM0使用此配置

    /* MOV64:PWM 0 ->占空比更新
    *-指令= 41
    *-下一条指令= 42
    *-条件下一指令= 2.
    *-中断= 1
    *-引脚= 4
    */

    /*程序*/
    0x00054301U、//低分辨率0x00054201U、
    /*控制*/
    (0x00004007U |(UINT32)((UINT32) 1U << 22U)|(UINT32)((UINT32) 4U << 8U)|(UINT32)(((UINT32) 3U << 3U))、
    /*数据*/
    4736U、
    /*保留*/
    0x00000000U
    }、
    /* MOV64:PWM 0 ->周期更新
    *-指令= 42
    *-下一条指令= 3.
    *-条件下一指令= 41.
    *-中断= 2
    *-引脚= na
    */

    /*程序*/
    0x00006302U、//低分辨率0x00006202U、
    /*控制*/
    (0x00052007U)、
    /*数据*/
    8960U、
    /*保留*/
    0x00000000U
    }、

    使用这些函数来管理配置

    void pwmSetDuty (hetRAMBASE_t * hetRAM、uint32 PWM、float pwmDuty)

    uint32操作;
    uint32 pwmPolarity = 0u;
    uint32 pwmPeriod = hetRAM->Instruction[(PWM << 1U)+ 42U].Data + 128U;
    pwmPeriod = pwmPeriod >> 7U;

    if (hetRAM == hetRAM1)

    pwmPolarity = s_het1pwmPolarity[PWM];
    }
    设计

    }
    如果(pwmDuty ==0U)

    操作=(pwmPolarity=3U)? 0u:2U;
    }
    否则、if (pwmDuty >= 100U)

    操作=(pwmPolarity=3U)? 2U: 0U;
    }
    设计

    动作= pwmPolarity;
    }

    hetRAM->Instruction[(PWM << 1U)+ 41U].Control =((hetRAM->Instruction[(PWM << 1U)+ 41U].Control)&(~(UINT32)(0x00000018U))|(操作<<3U);
    // hetRAM->Instruction[(PWM << 1U)+ 41U].Data =(((pwmPeriod * pwmDuty)<< 7U)+ 128U;
    hetRAM->Instruction[(PWM << 1U)+ 41U].Data =((uint16_t)((pwmPeriod * pwmDuty * 128)/ 100U)+ 128U;
    }

    void pwmSetSignal (hetRAMBASE_t * hetRAM、Uint32 PWM、hetSIGNAL_t 信号)

    uint32操作;
    uint32 pwmPolarity = 0u;
    float64 pwmPeriod = 0.0F;

    if (hetRAM == hetRAM1)

    pwmPeriod =(signal.period * 1000.0F)/1422.222F;
    pwmPolarity = s_het1pwmPolarity[PWM];
    }
    设计

    }
    if (signal.duty =0U)

    操作=(pwmPolarity=3U)? 0u:2U;
    }
    否则、if (signal.duty >= 100U)

    操作=(pwmPolarity=3U)? 2U: 0U;
    }
    设计

    动作= pwmPolarity;
    }

    hetRAM->Instruction[(PWM << 1U)+ 41U].Control =((hetRAM->Instruction[(PWM << 1U)+ 41U].Control)&(~(UINT32)(0x00000018U))|(操作<<3U);
    hetRAM->Instruction[(PWM << 1U)+ 41U].Data =((((UINT32) pwmPeriod * signal.Duty)/100U)<< 7U)+ 128U;
    hetRAM->Instruction[(PWM << 1U)+ 42U].Data =((UINT32) pwmPeriod << 7U)- 128U;

    }

    仅当写入的数据值大于先前的值(约为70)时、输出值才会变化、而不是每次更改大约9或10的值时都变化

    谢谢

    Fabio

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

    尊敬的 Fabio:

    刚才、我已验证您的代码和值正在更改、但这是预期行为。

    原因是:

    实际上、我们可以使用两个时钟来实现 PWM 分辨率。 一种是环路分辨率、另一种是高分辨率。

    HALCoGen 将仅生成具有环路分辨率的代码、这意味着 HR 数据(低7位)将被忽略、仅考虑较高的25位数据。

    例如、请考虑您的情况  

    我想您正尝试默认生成60us 周期和30us 占空比:

    您的环路分辨率为853.333nS

    周期计数的计算方式为所需的周期(60us)除以一个环路分辨率周期(853.333ns)、等于~70。 同样、占空比计数将为30us/853.33ns、等于~37。

    这意味着、要生成60us 周期、我应该将此70复制到 DJZ 指令中数据的较高25位字段(因为 DJZ 指令用于 HET 代码中的周期生成)。

    因此、如果您左移7位到70、那么该值将变为8960、您可以看到、这是我们 默认移动到代码中数据字段的值、对吧?

    /* Program */
    0x00006302U、//低分辨率0x00006202U、
    /*控制*/
    (0x00052007U)、
    /*数据*/
    8960U、
    /*保留*/
    0x00000000U
    }、

    同样、 要生成30us 占空比周期、我应将37复制 到  PWCNT 指令 中数据的较高25位字段(因为使用了 PWCNT 指令在 HET 代码中生成周期)。

    所以、如果您左移7位到37、那么值将变为4736、您可以看到、 默认情况下、这是我们将移至代码中数据字段的值、对吧?

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5334507 #5334507"]{
    /*程序*/
    0x00054301U、//低分辨率0x00054201U、
    /*控制*/
    (0x00004007U |(UINT32)((UINT32) 1U << 22U)|(UINT32)((UINT32) 4U << 8U)|(UINT32)(((UINT32) 3U << 3U))、
    /*数据*/
    4736U、
    /*保留*/
    0x00000000U
    }、

    因此、结论是、如果我们使用环路分辨率、则无法在小于环路周期的情况下更改 PWM 波形(在本例中为853.333nS)。 我们只能使最小变化至少为853.333ns。

    如果您希望使小于853.333ns、则我们应使用高分辨率而不是环路分辨率。 而且默认情况下、HALCoGen 无法实现此高分辨率代码。

    我们或者应该在 HALCoGen 生成的代码中进行手动更改、或者我们应该使用 HET IDE 生成我们的定制代码。

    遗憾的是、我没有任何直接提供的示例。 您可以参考 TRM 并亲自试用以获取高分辨率吗? 如果你在任何地方都坚持实施、那么我会为你提供整流支持。

    ——
    谢谢、此致、
    Jagadish。

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

    你(们)好

    感谢您的详细解释。

    workinfìg、我不知道我是否真的宣布了高分辨率、因为老实说、我不知道请求的频率是哪个(现在我使用初始化的默认配置时为1 μ s)

    pwm_signal.period =(float64) 100;
    PWM_SIGNAL.DUTY =(UINT32) 50;  
    pwmSetSignal (hetRAM1、(UINT32) PWM_CH1、PWM_SIGNAL);
    pwmSetSignal (hetRAM1、(UINT32) PWM_CH2、PWM_SIGNAL);
    pwmSetSignal (hetRAM1、(UINT32) PWM_CH3、PWM_SIGNAL);
    pwmSetSignal (hetRAM1、(uint32) PWM_CH4、PWM_SIGNAL);

    HET_ENABLE();

    HET_setpin ((UINT32) PWM_CHANNEL_PATTERN[1]);//PWM1引脚 B24
    pwmStart (hetRAM1、(uint32) PWM_CH1);

    HET_setpin ((UINT32) PWM_CHANNEL_PATTERN[2]);//PWM2引脚 C24
    pwmStart (hetRAM1、(uint32) PWM_CH2);

    HET_setpin ((UINT32) PWM_CHANNEL_PATTERN[3]);//PWM3引脚 B25
    pwmStart (hetRAM1、(uint32) PWM_CH3);

    HET_setpin ((UINT32) PWM_CHANNEL_PATTERN[4]);//PWM4引脚 C25
    pwmStart (hetRAM1、(uint32) PWM_CH4);

    对于有关 het.c 文件中的高分辨率的手动修改...修改是否会变得复杂?

    谢谢

    Fabio

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

    您好、尝试使用 HET_IDE、但我无法生成 C 代码:-(

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

    尊敬的 Fabio:

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5334775 #5334775"]不幸的是、我不知道我是否真的放弃了高分辨率、因为老实说、我不知道请求的频率是哪个(现在我是 workinfìg 使用此默认初始化配置

    如果您不需要低于1us 的分辨率、则可以使用现有示例。

    但是、如果您还希望生成变化小于1us 的周期或占空比、那么我们应该需要实现高频分辨率、而不是环路分辨率。

    如果您需要高频分辨率示例、我将为您创建一个。

    ——
    谢谢、此致、
    Jagadish。

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

    你(们)好

    我将检查 PWM 频率、但恐怕我需要高分辨率功能可以正常工作。

    如果您不是很难或浪费时间来举个例子、或指出要做出的改变、让 HR 开始工作、那么请提前感谢您

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

    尊敬的 Fabio:

    如果您只想在占空比下更改 HR、那么无需完成代码更改、只需在用于生成占空比的 PWCNT 指令中启用 HR 即可。

    如果您像使用以下函数那样重置 hr_lr 位:

    void EnableHRforDutyCycle ( hetRAMBASE_t * hetRAM, uint32 pwm)
    {
        hetRAM->Instruction[(pwm << 1U) + 1U].Program  &= (~0x00000100U);  /*Enabling HR for Duty Cycle*/
    }

    如果您执行此操作、那么您也可以更改至少7位的数据。

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration "]

    pwmchannel 上的数据值0 = 4672

    PWM1=500 AN1=2087

    pwmchannel 上的数据值0 = 4662

    PWM1=499 AN1=2087

    pwmchannel 0上的数据值= 4653

    PWM1 = 498 AN1 = 2087

    pwm 通道上的数据值0 = 4644

    PWM1=497 AN1=2087


    pwmchannel 上的数据值0 = 4626

    PWM1 = 495 AN1 = 2087

    [报价]

    进行此修改后、您还会看到上述值的占空比变化。

    ——
    谢谢、此致、
    Jagadish。

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

    你(们)好

    我已经通过调试器手动设置,也通过代码,但没有 success....it 似乎误导其他东西...... 但我会在星期一说 agli。

    谢谢

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

    尊敬的 Fabio:

    我将尽快测试并提供示例项目。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Fabio:

    我现在没有时间创建示例、我建议您使用一种简单的方法、只需参考下面的线程

    (+) TMS570LS3137:当使用协处理器输出 PWM 时、波形不准确-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    您可以看到、客户仅使用4条指令生成 PWM:

    您可以执行相同的过程来生成 PWM。

    一旦您执行此操作、我们无需将环路分辨率保持为855ns。

    每条指令将以1/75MHz 的频率执行、因此我们可以将环路分辨率降至60ns (4条指令)、  

    现在、这意味着我们的分辨率从855ns 向下追溯到60ns、因此这意味着我们可以在 PWM 生成中进行更改、分辨率也为60ns。

    ——

    谢谢、此致、
    Jagadish。

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

    你(们)好

    恐怕我不了解...但我知道我需要一个分辨率为 千分之一的10kHz PWM、因此 xx.y%、其中 y 必须具有显著性

    谢谢

    Fabio

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

    尊敬的 Fabio:

    如果我们将环路分辨率降低到60ns、那么如果我们生成环路分辨率为60ns 的10kHz 信号、那么可能的最低占空比将为0.06%(60ns*100/100us)。

    这只能通过 HET IDE 实现、因为我们只能生成包含4条指令的 PWM、而在 HET IDE 中、即使需要1个 PWM、也将生成58条指令。

    您还可以直接在 HET IDE 帮助部分找到 PWM 示例代码:

    因此请参考这些示例并尝试从 HET IDE 生成 PWM。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

    如何从 HET IDE_生成 C 代码

    我以前从未使用过它

    谢谢

    Fabio

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

    这是我的实际 het.ce2e.ti.com/.../5086.het.c

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

    尊敬的 Fabio:

    我使用 HET IDE 创建了一个频率为10kHz (100us 周期)且占空比为50%的示例项目。

    e2e.ti.com/.../PWM_5F00_HET_5F00_IDE_5F00_LS3137.zip

    在这个项目中、我只使用了4条指令在 N2HET1[1](控制器的 V2引脚)上生成 PWM:

    由于我仅使用4条指令、因此执行这些指令只需44ns、并且我将88.889ns 配置为循环分辨率、以便提供一定的缓冲区进行执行。

    因此、每个数据计数 int PWCNT 或 DJZ 指令将表示88.889ns。 因此、我们可以得到波形的分辨率为88.889ns。 我的意思是、每个数据计数都会使输出波形中的88.889ns 发生变化。

    示例:

    值的输出占空比为562:

    tON = 49.9us 且 Tperiod = 100us

    2.现在我将占空比值增加了1、这意味着563:

    tON = 50us、周期= 100us

    3。 现在我将占空比值增加了1、这意味着564:

    tON = 50.1us、周期= 100us

    现在您可以看到、数据值的每一次变化都会影响波形~0.1us (100ns)。

    使用该工程并按如下所示构建您的应用、请记住如果您想生成两个 PWM 波形、那么您应该再次提高环路分辨率。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、Jagadish

    非常感谢:-)

    我会尽快尝试  

    是的、我需要两个 PWM 通道。

    谢谢(&R)

    Fabio

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

    尊敬的 Fabio:

    是的、我需要两个 PWM 通道。

    我建议您验证此输出、如果它符合您的要求、则尝试用与我类似的方法为两个 PWM 编写代码。

    如果您在任何地方停留、我都会创建一个项目。

    ——
    谢谢、此致、
    Jagadish。

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

    我会尝试的  

    非常感谢

    Fabio

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

    你好、Jagadish

    我尝试了解如何将您的修改集成到我的代码中。

    我在 et.c 中找到了这两个主要主题

    1)你给你的计划打电话  

      (void) memcpy ((void*) hetRAM1、(void*) HET_INIT0_PST、sizeof (HET_INIT0_PST);

    而不是我的

      (void) memcpy ((void *) hetRAM1、(const void *) het1PROGRAM、sizeof (het1PROGRAM));

    我可以使用您的程序吗、因为它只涉及 PWM、而且我的程序是无用的? 或者在我的程序中有一些配置可以在我的应用程序中创建不起作用的功能?

    2)另一个大问题是  在 PWM 计算中使用88.889F 而不是1422.222F。 我可以直接替换这个值、或者我还必须修改一些时钟配置吗?

    似乎只需要引脚配置其他方面、因此我保留了自己的配置。

    谢谢

    Fabio

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

    尊敬的 Fabio:

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5365379 #5365379"]

    1)你给你的计划打电话  

      (void) memcpy ((void*) hetRAM1、(void*) HET_INIT0_PST、sizeof (HET_INIT0_PST);

    而不是我的

      (void) memcpy ((void *) hetRAM1、(const void *) het1PROGRAM、sizeof (het1PROGRAM));

    [报价]

    实际上、我的程序是从 HET IDE 而不是 HALCoGen 生成的:

    HET_IDE IDE、配置、编译器或调试器|德州仪器 TI.com

    我的代码是一种自定义代码、而不是 HALCoGen 提供的默认代码。 HALCoGen 中的默认 HET 代码具有大量指令、这是因为它可以执行大量操作(如 PWM 生成、边沿中断和 PWM 捕捉等)、因此它有大量代码(约58条指令)、这就是它需要更多循环时间的原因。 因此、为了简化环路并缩短循环时间、我从 HET IDE 生成了定制代码来降低环路分辨率并提高整体分辨率。

    是的、您回答正确要么可以使用 HALCoGen 代码、要么您可以使用此自定义代码。 您不能同时使用这两种模式。

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5365379 #5365379"]2)另一个大问题是  在 PWM 计算中使用88.889F 而不是1422.222F。 我可以直接替换该值吗?或者我还必须修改一些时钟配置吗?

    您不能直接替换 PWM 值、您应该需要更改整个 HET 代码。

    请打开 HALCoGen IDE 并验证我的项目中的以下突出显示部分:

    这里我直接给出了与 HET (最初由 HET IDE 生成)相关的.h 和.c 文件。 这些文件包含我之前提到过的简化代码。

    ——
    谢谢、此致、
    Jagadish。

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

    您好、Javadoc

    正确、可以使用 HALCoGen 代码、也可以使用此自定义代码。 您不能同时使用这两个选项。

    我将先尝试您的程序、然后尝试默认程序、因为恐怕只使用您的 PWM 简化代码在我的最终应用程序中丢失某些内容

    请打开 HALCoGen IDE 并验证我项目中的以下突出显示部分

    很遗憾、我还没有 HaslCoGen 初始项目、但我只使用生成的 C 代码

    如果您不能直接替换 PWM 值、应更改整个 HET 代码。

    我将继续 使用相同的原理、首先是您的 het.c 和 het.h、然后是我的文件、因为我需要相同的硬件配置才能在我的相同引脚中实现 PWM 输出

    我会让你知道我想在九月的事情

    谢谢

    Fabio

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

    您好、Javadoc

    我进行了一些测试、直接替换 het.c 和 het.h 什么都不起作用...我可能需要正确配置 GPIO。

    所以我试图将你的程序安装在我的项目中,但也不起作用。

    所以我尝试了整合你的 het.c 代码(主要是 88.889F 的计算,而不是1422.222F 和 tihis 配置

    /**-设置预分频值
    *-循环预分频器
    *-高预分频器
    */
    hetREG1->PFR =(UINT32)((UINT32) 3U<<8U)    /*之前是7U */
    |(uint32) 0u;

    手动设置指令寄存器中的 hr_lr 位...

    有些东西正在进步:-)

    明天我会检查更好的所有修改和结果...但我要问你一个关于 hr_lr 位的确认.

    你写了一些答复之前,..

    在成瘾中,我用设置 hr_lr 位

    空 EnableHRforDutyCycle (hetRAMBASE_t * hetRAM、Uint32 PWM)

    hetRAM->instruction[(PWM << 1U)+ 1U].Program &=(~0x00000100U);/*为占空比启用 HR */
    }

    但是在 RM 中、为了启用高分辨率、必须将 hr_lr 位设置为等于1。 是这样吗?

    非常感谢

    Fabio

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

    尊敬的 Fabio:

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5380609 #5380609"]但是在 RM 中、我发现必须将 hr_lr 位设置为等于1、才能启用高分辨率.... 正确吗?

    是的正确、如果我们设置了 hr_lr 位、则指令将使用 HR 数据实现高分辨率。 此处我没有启用该位、因为我们已经得到了非常小的代码大小、而我们的环路分辨率也非常小、这是因为不需要使用 HR 数据、而且我们的环路分辨率非常低、因此我们可以在输出波形中获得足够高的分辨率。

    ——
    谢谢、此致、
    Jagadish。

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

    您好、Javadoc

    即使我将 hr_lr 位设置为1、数据的7 LSB 也不被考虑... 我需要一些其他配置来使用这7个位?

    谢谢

    Fabio

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

    尊敬的 Fabio:

    即使我将 hr_lr 位设置为1、也不考虑数据的7个 LSB .... 我需要一些其他配置才能使用这7个位?

    我将尽快测试并为您提供高分辨率示例。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、Jagadish

    谢谢。

    但现在我的 PWM 已经足够好了。。 只需要知道为什么我无法使用高分辨率。

    谢谢

    Fabio

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

    尊敬的 Fabio:

    [报价 userid="588266" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394088/tms570ls3137-pwm-high-resolution-configuration/5386967 #5386967"]但是现在我的 PWM 已经足够使用了.... 它只会知道为什么我无法使用高分辨率。[/报价]

    我想澄清一点、使用 HR 位数据将取决于 LR 因素。

    例如、如果我们将 LR 系数配置为8、如下所示:

    HR 数据中的数据位3至0不会被考虑用于计算、如下所述。

    有关更多详细信息、请参阅 TRM、

    也仅突出显示以下五个说明将支持 HR 数据、对于其余说明、不会考虑 HR 数据。

    此外、无法切换 HR 数据脉冲的两个边沿。根据我们使用的指令类型、只有一个边沿可以与 HR 数据切换。

    如果您尝试根据上述输入、则可以使用 HR 数据。

    ——
    谢谢、此致、
    Jagadish。

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

    您好、Javadoc

    我想我在你的第二个 假设。

    最终的 PWM 行为是非常精确的设置:

    1) HRPFC = 0x8 (我无法管理 HR 数据)

    2) pwmPeriod =(100 * 1000.0F)/100.0F;

    在 pwmSetSignal 和   hetRAM->Instruction[(PWM << 1U)+ 42U].Data =(uint32_t)(pwmPeriod*128)- 128U;

    3) hetRAM->Instruction[(PWM << 1U)+ 41U].Data =((uint32_t)((pwmPeriod * pwmDuty * 128)/ 1000U)+ 128U;

     pwmSetDuty 中

    非常感谢

    Fabio

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

    尊敬的 Fabio:

    我将通过在结尾处创建一个示例来检查这一点

    我将尽快提供这方面的最新情况。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Fabio:

    我找到了一些东西、

    实际上、该问题仅发生在 PWM0上。 我的意思是、只有 PWM0高分辨率数据不起作用、而其他所有 PWM 都正常工作。

    例如:

    我创建了一个项目来生成4个 PWM、它们是从 PWM0到 PWM3、如下所示:

    案例1 (测试具有环路分辨率的占空比):

    默认情况下、会设置所有 PWM 的 hr_lr 位、这意味着 PWM 将仅以环路分辨率生成:

    验证全部四个 PWM 的所有 PWCNT 指令的第8位 hr_lr:

    这是我为上述配置获得的输出:

    我得到了占空比为51.21us 的所有 PWM。

    案例2 ( 高分辨率测试占空比):

    现在、要使用高分辨率进行测试、我要先清除所有 PWM 的 hr_lr 位:

    现在我清除了所有 PWM 的编程指令中的第8位、从而启用高分辨率。

    现在、我还启用了 HR 数据中的所有位、以创建高分辨率延迟:

    更改前:

    更改后:

    完成这些更改后、我的输出 PWM 波形如下所示:

    您可以看到、PWM0的 TON 周期没有改变、但所有其他 PWM (PWM1至 PWM3)的 TON 周期增加了。 因此、高分辨率适用于除 PWM0之外的所有其他 PWM。 我不知道为什么高分辨率不适用于 PWM0、即使我对所有 PWM 执行了相同的配置。

    可能是芯片问题、到目前为止您可以尝试其他 PWM、我将把此问题记录给设计团队。

    我随附代码供您参考:

    e2e.ti.com/.../PWM_5F00_N2HET_5F00_LC4357.zip

    请在您的终端进行测试、并告知我状态。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Fabio:

    我希望上述代码可以解决这个问题、我会将与 PWM0相关的问题在内部记录给开发团队、否则至少我们会尝试将其包含在勘误表中。

    ——
    谢谢、此致、
    Jagadish。