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。