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。