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/MSP430F5529:使用 MSPWare 的 PWM 中的电压摆幅

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/737345/ccs-msp430f5529-voltage-swing-in-pwm-using-mspware

器件型号:MSP430F5529
主题中讨论的其他器件:MSPWARE

工具/软件:Code Composer Studio

我使用 MSPware 生成 PWM 波形。 代码如下所示:

#define TIMER_PERIOD 13105
#define DUTY 周期825

void main (void)
{
//停止 WDT
WDT_A_HOLD (WDT_A_base);

// P2.0作为 PWM 输出
GPIO_setAsOutputModuleFunctionParam 引脚(
GPIO_PORT_P2、
GPIO_PIN0
);
//生成 PWM -计时器以 UP_MODE_OCCK_POST_RAMRAM=




param.compareRegister partimer_partimer_param_partimer_param.param_timer = param_param_param_timer_param.param_timer_param.param_timer;// param_param_param_param_timer_param_param_param_timer_param_param_param_param_timer =
param.compareOutputMode = TIMER_A_OUTPUTDE_SET_RESET;
param.dutyCycle = Duty_cycle;
Timer_A_outputPWM (TIMER_A1_base、&param);

//Enter LPM0
___ bis_SR_register (LPM0_BITS);

//对于调试器
__no_operation();
} 



当我将万用表连接到 P2.0上时、我看到电压从[2.63、3.26]摆动。 有人能告诉我为什么它不会一直变为0?

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

    您的 ACLK 设置是什么样的? 您的万用表测量速度是否太快? 是否可以选择使用示波器并在此处发布屏幕截图?
    我们可以从那里获取它、然后进一步找出根本原因。

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

    这是我唯一的代码、从我所知、默认 ACLK 设置为32.768kHz。 我不确定它是否太快、无法通过万用表进行测量。 我没有示波器、因此我要从软件示波器[Texas - Valvano - 32b TI launchpad]中粘贴波形。 高电平脉冲应进入稳压器 IC、该 IC 应在导通期间提供5V 电压。当我将脉冲提供给稳压器 IC 时、我看不到任何输出。

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

    该迹线表示0-3.3V 摆幅、低电平周期非常短(24ms)、这对于我使用的任何万用表来说都太短了。 在400ms 内的平均值为2.5-3.3V、读数听起来似乎是正确的。

    这是您想要的波形吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    <<<当我在 P2.0上连接万用表时、我会看到电压从[2.63、3.26]摆动。 有人能告诉我为什么它不会一直变为0?
    万用表每秒进行几次采样、读数取决于采样与波形重叠的方式。

    <<<高电平脉冲应进入稳压器 IC、该 IC 应在导通期间提供5V 电压。当我将脉冲提供给稳压器 IC 时、我看不到任何输出。
    什么连接到 P2.0?
    您能否发布这部分原理图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您进行示波器测量。 我正在自行订购范围。 嗯、我打算产生与 示波器上出现的情况相反的结果。 导通时间更短、关断时间更长。

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

    这是 OUTMOD=7、它将反转您现在拥有的内容。 第一个(复位)操作在整个周期(CCR1匹配)之间分段发生、第二个(置位)在周期结束/开始时发生(CCR0匹配)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是我在进行该更改后得到的结果:

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

    太棒了、非常感谢您的帮助。 我只需要我的稳压器 IC 来检查控制器的脉冲是否适合我的用例。

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

    由于我没有听到您对此主题的回复、我假设您的问题已得到解决。
    请注意、我将关闭此线程。 如果需要进一步的帮助、请回复。

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

    您的修复程序已修复我的问题。 非常感谢。 但我还有另一个问题。 我想知道是否可以生成波形、这样总周期为4s 而不是400ms。 埃斯森特利将周期增加10倍
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最简单的变化可能是:

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

    你(们)好,Britta

    感谢您的持续 支持。 如该主题中所述、我需要得到4s 而不是400ms。 我修改了代码以将时钟除以10。 我现在看到一个奇怪的模式、3个脉冲是正常的、但之后有一个很大的滞后。 请您验证并向我提供建议吗?

    #include "driverlib.h"

    #define TIMER_PERIOD 13105
    #define Duty_cycle 82.

    void main (void)

    //停止 WDT
    WDT_A_HOLD (WDT_A_base);

    //P2.0作为 PWM 输出
    GPIO_setPeripheralModuleFunctionOutputPin (
    GPIO_PORT_P2、
    GPIO_PIN0
    );
    //GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN0);
    //生成 PWM -定时器以向上计数模式运行
    Timer_A_outputPWMParam ={0};
    param.clockSource = TIMER_A_CLOCKSOURCE_ACLK;
    param.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;
    param.timerPeriod = timer_period;
    param.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_1;
    param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
    param.dutyCycle = Duty_cycle;
    Timer_A_outputPWM (timer_A1_base、param);

    //Enter LPM0
    _bis_SR_register (LPM0_bits);

    //用于调试器
    __no_operation();

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

    我看不到这种效果。 (F5529 Launchpad、Rigol DS1102E 示波器)。

    我不知道我们在做什么不同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为在该 USB 示波器上进行测量的方式有问题。 尽管已经完成了更改并进行了计算、但我很兴奋地得到了25ms 的导通周期、而不是200ms。 您认为宏 Duty_cycle 是正确的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仔细检查示波器的一种方法是将输出引脚(P2.0)连接到其中一个 Launchpad LED。 现在、您的(240ms)脉冲足够长、可以看到、因此您应该能够每4秒实际看到一次脉冲。

    如果您希望脉冲宽度保持在24ms、则需要将 Duty_cycle 除以10、以匹配您减慢计时器的时间。 825不能整齐地除以10,但我估计误差为825/(10*82)或大约0.6%。 这是否足够接近? 替代方法是重新计算常量和分频器、以便获得所需的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sparsh、

    由于我没有收到您的回复、我认为问题已经解决。
    请注意、我将关闭此主题。 如果您需要进一步的帮助、请回复重新打开。

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

    您好、Britta、

    如何使用中断生成输出 PWM 脉冲、这基本上是我在 MSPWare 中看到的、我需要使用向上计数模式并使用比较捕获寄存器。 您能不能指导我、以便我获得与我在这里得到的类似的占空比和周期。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不同的问题、不同的线程。
    请将此主题标记为已解决并创建新主题。