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.

[参考译文] TM4C123GH6PM:不能使用 TivaWare 将 PWM 占空比设置为0

Guru**** 2465890 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/657527/tm4c123gh6pm-pwm-duty-cycle-can-not-be-set-to-0-with-tivaware

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件:EK-TM4C123GXL

标题说明了一切。 我使用的是 EK-TM4C123GXL launchpad。  

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main (void){
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOB));

GPIOPinConfigure (GPIO_PB4_M0PWM2);
GPIOPinConfigure (GPIO_PB7_M0PWM1);
GPIOPinConfigure (GPIO_PB6_M0PWM0);
GPIOPinTypePWM (GPIO_PORTB_BASE、GPIO_PIN_4);
GPIOPinTypePWM (GPIO_PORTB_BASE、GPIO_PIN_6);
GPIOPinTypePWM (GPIO_PORTB_BASE、GPIO_PIN_7);

SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_PWM0));


PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

//0xff =256;256/16MHz = 16us
//0xff =256;256/16MHz = 16us
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、0xff);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、0xff);

//蓝色
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、0);
//绿色
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、1);
//红色
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、0x80);

PWMGenEnable (PWM0_BASE、PWM_GEN_0);
PWMGenEnable (PWM0_BASE、PWM_GEN_1);

PWMOutputState (PWM0_BASE、(PWM_OUT_0_BIT | PWM_OUT_1_BIT | PWM_OUT_2_BIT)、true);

while (1);

返回0;
}

PWM_OUT_1获得的占空比为1/256、我在示波器上看到一个微小的脉冲。 PWM_OUT_0的占空比设置为0、但它是高电平(100%占空比)。 设置100%占空比可获得预期结果。

至少有两个其他人发现了此问题:

https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/643899/2373019?tisearch=e2e-sitesearch&keymatch=pwm%20with%200%25%20duty%20cycle#2373019

https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/448664?tisearch=e2e-quicksearch&keymatch=PWMPulseWidthSet%20to%200

第二个标记为"已回答"、但我不理解 af36的权变措施。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Peter:
    在 TM4C 的 PWM 模块上无法实现0%直流。 如果您希望具有0%直流、则必须禁用 PWM 输出。 在本例中、您将会这样做

    操作:
    PWMOutputState (PWM0_BASE、(PWM_OUT_1_BIT | PWM_OUT_2_BIT)、true);

    而不是:
    PWMOutputState (PWM0_BASE、(PWM_OUT_0_BIT | PWM_OUT_1_BIT | PWM_OUT_2_BIT)、true);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    禁用状态是将输出驱动为低电平还是将其保持悬空?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不打算将此问题标记为已解决。 我想在需要时使用 PWM2。 我想设置 GPIOPinConfigure (GPIO_PB4_M0PWM2);

    当需要0%占空比时、引脚需要变为低电平。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Peter:
    它不会浮动。 您还可以使用输出反转功能通过 PWMINVERT 寄存器根据自己的喜好指定输出状态。 正如您所引用的另一个线程中 CB1所建议的、您还可以将引脚配置为 GPIO 引脚并强制其在0%DC 为低电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常好。 感谢你的帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您的应用和器件的灵敏度、"接收 PWM 信号时"您可以"避免从 PWM 切换到 GPIO 配置"(这是非常重要的) 而是"拨入" MCU 能够生成的最小 PWM 值、并保持一致。

    根据我们的经验、在许多情况下、0%和(例如) 2-3% PWM 之间的差异几乎没有得到证明。 (和影响)

    每个应用程序的情况都不同-因此必须评估此建议。 然而、事实证明、它非常强大、同时支持"加快实现"占空比增加"、即"消除 PWM 配置"。 更改。"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE]]在我们的经验中-在许多情况下- 0%和(比如说) 2-3% PWM 之间的差异-几乎没有什么值得注意的。 (和影响)[/报价]

    这里的问题可能不是外部器件的影响、而是电源器件的影响。 低 PWM 可能会将功率 FET 推入线性区域、而不会将大电流驱动到外部器件、但可能会导致直通。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是-在(某些)条件下-如您所注意到的-此类(可能)证明是正确的。

    然而-我们"节省"使用的"在许多情况下"提供了"摆动空间"-并且没有海报的评估(正如指示的那样)、降低了(2-3%占空比)、而不存在问题-同时实现了"加快推出更高占空比!"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当外设未使用时、是否适合将其完全关闭? 除了 PWMOutputState (PWM0_BASE、PWM_OUT_6_BIT、false)之外;我还应该调用 SysCtlPeripheralDisable (sysctl_Periph_PWM0);? 在未使用时将其保持打开是否有任何损害?

    禁用 PWM 输出位工作正常。 我将使用 PWM 和 FET 混合指示 RGB 的颜色、这比使用驱动器 IC 便宜。 在这个特定的应用中、允许光组件打开1%会产生很大的影响。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Peter:
    默认情况下、在复位后、PWM 模块和其他外设关闭、直到您使用 SysCtlPeripheralEnable()启用它们。 在您的特定情况下、需要询问的问题是 PWM_OUT_6_BIT 是否是您要禁用的唯一通道。 PWM0模块将控制8个通道。 您是否未使用某些其他通道? 如果您真正不使用整个 PWM0、则最好通过调用将其禁用
    SysCtlPeripheralDisable (SYSCTL_Periph_PWM0)、即使您可能已经通过 PWMOutputState 禁用了所有通道的输出状态。 您可以通过不启用模块来节省一些电量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Peter Borenstein"]在未使用外设时,是否应将其关闭?

    这在很大程度上是一个"总括要求"--我怀疑--一个正确的答案需要更多的细节。

    您之前(供应商的 Charles)询问了"SysCtlPeripheralDisable()"产生的"附加优势"(如果有)-我同意 Charles 的 看法-在"最全面"的情况下、这是不需要的。   (OutputState "false"证明是足够的。)   当然-您的责任-一如既往地遵守供应商规格和指示。   (您可能会注意到我的"锅炉铭牌"(论坛页面的基础)中有关"内容提供商"的内容。)

    根据我们的经验、您的报告"1%占空比"-产生了"巨大差异"(未指定"光分量")证明"异常"。 我们也使用了最佳/最亮的"高亮度和色彩丰富的 LED/OLED"-我会倾向于(相反)您的 FET 和 FET 驱动器的行为-甚至是 PCB 布局和组件选择-而不是  占空比的"1%变化"-因为"更有可能怀疑"这样的" 巨大差异!"   一如既往-这些细节中的"奢侈"-很少完全/正确地提供...

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

    [引用用户="Peter Borenstein"]。 我将使用 PWM 和 FET 混合指示 RGB 的颜色、这比使用驱动器 IC 便宜。 在这个特定应用中、允许轻组件打开1%会产生很大的影响。[/引述]

    您大概有一个电感器和反激式二极管? 否则、您可能会使 LED 过载。

    您是感应 LED 电流还是计算近似值?

    Robert

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

    [引用用户="Robert Adsett"]

    CB1_MOBILE
    根据我们的经验、在许多情况下、0%和(例如) 2-3% PWM 之间的差异几乎没有得到证明。   (和影响)

    现在、我/我已经"确认了这种(上面)工作方法"-在许多(也许大部分)-但"并非全部"-可能的"用例"中。  

    进入这个"画面"、您的观察结果( FET 进入线性区域)-实际上这 引起了人们的关注。   也就是说、" 未寻求进入该线性区域"是否 代表了 一个"FET 和相关驱动/设计缺陷" –证明 了" 独立于"– 我建议的"0% 占空比、变通办法?"

    我可以(强烈)通过演示"这种(非常)低占空比的一般使用" 来"说明我的情况"- 即使在 - 尤其是-  没有-这样、"已订购0%占空比工作!"   这种(非常)低占空比(任何)"变通"以外的循环是合法的、不是吗?

    在"所有情况"中、这项建议的"解决办法"可能不合适。    也就是说、"功率 FET 交叉导电"不应  是由"减少的占空比"引起的、尤其是在注意到/预期这种减少的占空比并且    已经实施了"适当的功率 FET 设计"时...

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

    [引用 USER="CB1_MOBILE"]

    Robert Adsett
    CB1_MOBILE
    根据我们的经验、在许多情况下、0%和(例如) 2-3% PWM 之间的差异几乎没有得到证明。   (和影响)

    [/报价]

    是的。 但是、对于并非整个情况的直流电机而言、情况尤其如此。

    首先是0%。 如果无法输出真正的零、则会导致失去控制。 交流电机不存在此特定问题、因为固定电平输出不会导致电机移动。 这使得无法输出0 PWM 成为一个相当恶劣的故障。

    第二、在高端、无法达到100%会导致损耗增加。 非常希望能够完全导通并消除开关损耗(包括直流总线电容器中的开关损耗)。

    这导致 PWM 的正常控制为0%、最小导通百分比至最大导通百分比、100%

    第三个原因。 尽管用户通过其他方式可以知道您的切换速度几乎没有差别 ,但如果您不能*,则可能无法接受。

    Robert

    *我将讲述一个故事。 我们有一位经验丰富的技术销售人员、他通常 会对 客户车辆中的电机控制器安装进行故障排除、以更换老化的 SCR 控制器。 SCR 控制器无法达到100%输出、实际上不能超过85% IIRC、SCR 损耗也很高。 为了解决这一问题、制造商安装了一个接触器、该接触器闭合以高速将电机短接至电池(称为1A 或旁路接触器)。 在一个特定的安装中、操作员不断抱怨车辆的行驶速度与以前不同。 销售人员找不到问题、测试显示两辆改装的车辆的速度都相同。 由于沮丧、他只连接了接触器线圈、没有电源线。 当操作员下一次将车辆取出时、他回来后非常高兴地看到速度已经提高、与之前的控制器相匹配。 即使接触器没有做任何事情、也能听到接触器闭合的声音、这足以导致感知到速度增加。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所有说明/说明都很好-假设您同意前面提出的观点-"最小占空比不应导致"未寻求进入"功率 FET 的线性区域"-当 FET 设计实现为"意识和正确!"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述 USER="CB1_MOBIT"]所有说明/说明都很好-假设您同意前面所述的观点-"最小占空比不应导致"未寻求进入"功率 FET 的线性区域"-当 FET 设计实现为"意识和正确!"[/QUESP]

    因此、PWM 范围两端的死区是惯例。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此问题记录在勘误表中、但变通办法建议使用倒计数(我的代码选择的值)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该向一个旧的 LM3S 编程人员询问有关解决方法的信息,

    对于0%占空比、将占空比设置为100%并将输出反相。 看到您在输出上拥有的内容。