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.

[参考译文] MSP430G2553:采用 MSP430G2553的双向电机控制

Guru**** 2393165 points
Other Parts Discussed in Thread: L293D, MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/957342/msp430g2553-bidirectional-motor-control-with-msp430g2553

器件型号:MSP430G2553
Thread 中讨论的其他器件:L293D

大家好、我最近开始对 MSP430G2553进行编程。 我正在尝试通过按下按钮使直流电机在任一方向旋转。 我使用的电机驱动器是 L293D。 我让它以1个方向旋转、但当我尝试以另一个方向旋转时、它会继续以原始方向旋转。 我知道、当我更换电缆时、电机能够朝另一个方向旋转、并且运转正常。

代码如下:

void main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
IF (CALBC1_1MHz=0xFF) //检查校准常数是否被擦除
{
while (1); //不加载程序
}
timer_init();

//配置按钮中断
P1DIR &=~BIT3; //设置 SW 引脚->输入
P1REN |= BIT3; // SW 引脚的使能电阻器
P1OUT |= BIT3; //为 SW 引脚选择上拉

P1IES &=~BIT3; //选择上升沿上的中断
P1IE |= BIT3; //在 SW 引脚上启用中断
P1IFG &=~BIT3; //清除标志


// PWM 电机端口配置
//电机控制引脚
P2DIR |= BIT0 + BIT1 + BIT2;// P2.0、P2.1、P2.2所有输出
P2OUT &=~BIT0;//清除 P2.0、P2.1、P2.2
P2OUT &=~BIT1;
P2OUT &=~BIT2;
while (1)
{}

这是计时器配置

///PWM 计时器配置
TA1CCTL1 = OUTMOD_7; // TACCR1复位/置位
TA1CCR0 = 1000-1; // PWM 周期
TA1CCR1 = 300; // TA1CCR1 PWM 占空比
TA1CTL = tassel_2 + MC_1 + ID_0 + TACLR; // SMCLK、upmode

//全局中断启用
_BIS_SR (GIE); 

最后是按钮中断

#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
if (P1IFG & BIT3)//确保它是按钮中断
{
如果(SELECT = 0)//将电机接通1路
{
选择= 1;
P2SEL |= BIT1;// PWM P1A
P2OUT &=~BIT2;// P2A 低电平
P2OUT |= BIT0;//选择 ENABLE
}
否则、如果(选择= 1)//关闭电机
{
选择= 2;
P2SEL &=~BIT1;
P2SEL &=~BIT2;
P2OUT &=~BIT1;
P2OUT &=~BIT0;
P2OUT &=~BIT2;
}
否则、如果(select = 2)//以另一种方式打开电机
{
选择= 3;
P2SEL |= BIT2;// P2A PWM
P2OUT &=~BIT1;// P1A 为低电平
P2OUT |= BIT0;//选择 ENABLE
}
其他 //再次关闭电机
{
选择= 0;
P2SEL &=~BIT1;
P2SEL &=~BIT2;
P2OUT &=~BIT1;
P2OUT &=~BIT0;
P2OUT &=~BIT2;
}
P1IFG &=~BIT3;//清除中断标志
}
} 

我将 P2.0连接到 L293D 的 EN、将 P2.1和 P2.2分别连接到 P1A 和 P2A。

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

    您好,

    从描述和 MCU 软件中、我找不到任何错误。 请发送您的电路并获取 P21和 P22的示波器波形、然后我们可以讨论更多信息。

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

    Hawken、您好、感谢您的回复

    我想我已经解决了这个问题、并已部分缓解了这个问题。 我家中没有示波器或万用表来测量输出电压、但是我周围确实有一些小 LED。 我将它们连接到 MSP430G2553、发现出于某些原因、无论我做什么、P2.2始终在导通和关断之间保持一半的距离。

    我认为、芯片上的 P2.2损坏或 PCB 上的走线已损坏。 我解决这个问题的方法是使用 P2.3而不是 P2.2。

    由于 P2.3连接到 Timer1的不同定时器通道、我不得不稍微切换 PWM 配置。 我不想配置另一个通道来执行 PWM、而是分别将 P1A 和 P2A 移动到端口 P2.0和 P2.3、以便直接打开/关闭。 然后、我将 P2.1 (仍然是 PWM)连接到电机驱动器的 EN。 PWMing EN 实现的效果与单独对 P1A 和 P2A 进行 PWMing 几乎相同。 为了方便起见、我应该购买一些便宜的示波器、以便在将来轻松进行故障排除。