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/MSP430G2553:CCS/MSP430G2553

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/683105/ccs-msp430g2553-ccs-msp430g2553

器件型号:MSP430G2553

工具/软件:Code Composer Studio

#include 
#define MA1 BIT0
#define MA2 BIT1
#define MB1 BIT2
#define MB2 BIT4

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P2DIR &=~BIT1 + BIT2 + BIT3 + BIT4; //显式将 P2设为输入-即使默认情况下其输入
P2REN |= BIT1 + BIT2 + BIT3 + BIT4;//启用上拉/下拉
P2OUT |= BIT1 + BIT2 + BIT3 + BIT4;//选择下拉

P1DIR |= MA1 + MA2 + MB1 + MB2;

while (1)
{
if (!(P2IN & BIT1))//转发
{
P1OUT |= MA1 + MB1;
P1OUT &=~MA2 + MB2;
__DELAY_CYCLES (500);

}
如果(!(P2IN 和 BIT2))//反向
{
P1OUT |= MB2;
P1OUT |= MA2;
P1OUT &=~MA1 + MB1;
__DELAY_CYCLES (500);

}
if (!(P2IN & BIT3))//右侧
{
P1OUT |= MA1;
P1OUT &=~MA2 + MB1;
P1OUT &=~MB2;
__DELAY_CYCLES (500);

}
if (!(P2IN & BIT4))//左侧
{
P1OUT |= MB2;
P1OUT &=~MA1 + MA2;
P1OUT &=~MB1;
__DELAY_CYCLES (500);

}
其他
{
P1OUT = 0x00;
__DELAY_CYCLES (500);

}
}
//return 0;
}

这是我将其用于电机控制器的代码

但它无法正常工作。

MB2不工作、它在导通时仅在输出端提供0.2V 电压。 而其他2.1V

我尝试了很多东西、但它的功耗基本不变。

请给我一个合适的解决方案

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我也通过更改寄存器来尝试使用上拉和下拉模式、但它保持恒定
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请更正括号中的"如果其他"和反相位:

    #include <msp430.h>
    #define MA1 BIT0
    #define MA2 BIT1
    #define MB1 BIT2
    #define MB2 BIT4
    intmain(void)
    {
        WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
         P2DIR &= ~(BIT1 + BIT2 + BIT3 + BIT4) ; //explicitly making P2 as Input - even though by default its Input
         P2REN |= BIT1 + BIT2 + BIT3 + BIT4; //Enable Pullup/down
         P2OUT |= BIT1 + BIT2 + BIT3 + BIT4; //Select Pulldown
         P1DIR |= MA1 + MA2 + MB1 + MB2;
                 while(1)
                 {
                   if(!(P2IN & BIT1)) // forward
                   {
                       P1OUT |= MA1 + MB1;
                       P1OUT &= ~(MA2 + MB2);
                       __delay_cycles(500);
                   }
                   else
                   if(!(P2IN & BIT2)) // REVERSE
                   {
                       P1OUT |= MB2;
                       P1OUT |= MA2;
                       P1OUT &= ~(MA1 + MB1);
                       __delay_cycles(500);
                   }
                   else
                   
    if(!(P2IN & BIT3)) // RIGHT
                   {
                       P1OUT |= MA1;
                       P1OUT &= ~(MA2 + MB1);
                       P1OUT &= ~MB2;
                       __delay_cycles(500);
                   }
                   else
                   
    if(!(P2IN & BIT4)) // LEFT
                   {
                       P1OUT |= MB2;
                       P1OUT &= ~(MA1 + MA2);
                       P1OUT &= ~MB1;
                       __delay_cycles(500);
                   }
                   else
                   {
                       P1OUT = 0x00;
                       __delay_cycles(500);
                   }
                 }
        //return 0;
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    > P2DIR &=~BIT1 + BIT2 + BIT3 + BIT4;//明确地将 P2设为输入-即使默认情况下它的输入也是如此
    这与您认为的情况不同。 由于后续代码提示您希望所有 P2.1-P2.4为输入、请尝试:
    >P2DIR &=~(BIT1 + BIT2 + BIT3 + BIT4);// P2.1-P2.4输入-即使默认情况下它们是输入
    ----
    > P1OUT &=~MA1 + MA2;
    这有一个类似的问题、但在这里、我认为您正在尝试将 MA1设置为低电平、将 MA2设置为高电平、因此您应该将它们拆分:
    > P1OUT &=~MA1;
    > P1OUT |= MA2;

    我对其中的4个实例进行计数。

    [编辑:添加了有关多个实例的注释。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为应该存在电源问题。
    有可能吗???
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [我在上面添加了一条关于我建议的第2部分的多个实例的注释。]

    您在 MB2上描述的症状表明总线冲突、因此我认为早期代码可能会损坏某些东西、但我发现 MSP430非常困难。 在某些地方也可能存在接线错误、但我们无法从此处看到。

    也就是说、如果修复代码后症状仍然存在、您可以尝试换用新的 Launchpad。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    > P1OUT &=~MA1 + MA2;

    因为我想保持两者都处于低电平

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

    谢谢主席先生