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.

[参考译文] MSP430G2332:如何配置2个 PWM 信号?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/917704/msp430g2332-how-to-configure-2-pwm-signals

器件型号:MSP430G2332

您好!  

我不熟悉 MSP430。 我希望有2个 PWM 信号。 其中一个具有25kHz、占空比为60%、位于 P1.1引脚上。 另一个具有0.016Hz、P2.1引脚上占空比为75%。  

这是我要做的。 它非常笨拙。

#include 

int main (void)
{
WDTCTL = WDTPW + WDTHOLD;
//P2.1和 P2.2
P2DIR |= 0x07; //
///PWM
P1DIR |= 0x04; //将 P1.1设置为输出方向
P1SEL |= 0x04; // P1.1 TA0.1选项
CCR0 = 38; // PWM 周期
CCTL1 = OUTMOD_7; // CCR1复位/置位
CCR1 = 23; // PWM 60%
TACTL = tassel_2 + MC_1; // SMCLK、

针对(;)
{的向上计数模式
volatile unsigned int i、j;
J = 70;
I = 10000; //延迟
操作
{
J-;
执行(i -);
while (i!= 0);
} while (j!= 0);
P2OUT ^= 0x07; // PS12和 LED 关闭
J = 23;
I = 10000; //延迟
操作
{
J-;
执行(i -);
while (i!= 0);
} while (j!= 0);
P2OUT ^= 0x07; // PS12和 LED 亮起
}

我们是否有更好的方法来实现该功能?

25kHz PWM 的精度非常差、因为 SMCLK 大约为1MHz。 如何提高 CLK 频率?

谢谢、

小明

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

    第二个问题:启动时,SMCLK“模糊相似”1MHz——当我看到它可能是0.9MHz 或1.1MHz。 您希望使用校准后的 DCO 常数。 奇怪的是、我在 Resource Explorer 中看不到这方面的示例、但其本质是:

    >BCSCTL1=CALBC1_1MHZ;  
    >DCOCTL = CALDCO_1MHz;  

    在经过校准的 SMCLK 下、PWM 应该非常精确。

    ----------------

    第一个问题:对于延迟、我建议在 DO 循环上使用__delay_cycles。 _delay_cycles 非常精确、不受优化影响。 为了避免出现幻数、我建议如下所示:

    >#define Hz  1000000UL   // 1MHz

    然后、您可以延迟60秒

    >__DELAY_CYCLLES (60 * Hz); // 60秒

    ------------------

    25kHz 的计时器设置变为:

    #define PWM_Hz 25000UL  // 25kHz

    >CCR0 = Hz /PWM_Hz - 1; // PWM 周期为25kHz

    > CCR1 =((6 * Hz / 10)/PWM_Hz); // 25kHz 时占空比为60%  

    [编辑:删除了不需要的可读性转换。]

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

    感谢您的回答! 您的建议有效。  

    我还有一个问题:

    由于25kHz 基于1MHz 时钟、因此分辨率较差。 我是说我可以创建精确的60%占空比、但不能创建61%占空比。 对于基于1MHz 时钟的25kHz PWM、一个阶跃是2.5%占空比差异。 如何使分辨率更好?

    此致、

    小明

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

    根据数据表(SLAS723H)第1页、G2332具有4倍的校准时钟频率:[1、8、12、16]MHz。 如果您使用(例如) CALDCO_8MHZ/CALBC1_8MHZ (并更改 Hz)、我很确定算术仍然有效。 这将为您提供25kHz/8MHz =~0.3%的分辨率。 _delay_cycles 使用"无符号长整型"(32位)、但我认为您还没有接近该限制。

    使用>=8MHz 还可以使用 PWM 计时器(中断)计数长达60秒。 这将允许您的程序执行其他操作、而不是始终在__delay_cycles 中旋转。 但是、如果你所拥有的功能能够满足你的需求、那就好了。

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

    您好、Bruce、

    感谢你的帮助!