MSP430L1306 控制两个 TB6612 驱动四个 JBGB37-520 电机代码示例
#include <msp430.h>
#define PWMA BIT1 #define AIN1 BIT2 #define AIN2 BIT3 #define PWMB BIT4 #define BIN1 BIT5 #define BIN2 BIT6
void init_PWM() { P1DIR |= PWMA + PWMB; P1SEL |= PWMA + PWMB;
TA0CCR0 = 1000; // PWM 周期 1ms
TA0CCTL1 = OUTMOD_7; // PWM 输出模式 7
TA0CCR1 = 0; // 初始占空比 0
TA0CCTL2 = OUTMOD_7;
TA0CCR2 = 0;
TA0CTL = TASSEL_2 + MC_1; // 选择 SMCLK,向上计数模式
}
void motor_control(int motor, int dir, int speed) { if (motor == 1) { if (dir == 1) { P1OUT |= AIN1; P1OUT &= ~AIN2; } else { P1OUT &= ~AIN1; P1OUT |= AIN2; } TA0CCR1 = speed; // 设置 PWMA 的占空比 } else if (motor == 2) { if (dir == 1) { P1OUT |= BIN1; P1OUT &= ~BIN2; } else { P1OUT &= ~BIN1; P1OUT |= BIN2; } TA0CCR2 = speed; // 设置 PWMB 的占空比 } }
int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器
P1DIR |= AIN1 + AIN2 + BIN1 + BIN2; // 设置引脚为输出模式
init_PWM();
while (1) {
motor_control(1, 1, 500); // 控制电机1正转,速度为 500
motor_control(2, 1, 500); // 控制电机2正转,速度为 500
__delay_cycles(1000000); // 延迟一段时间
motor_control(1, 0, 0); // 停止电机1
motor_control(2, 0, 0); // 停止电机2
__delay_cycles(1000000); // 延迟一段时间
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/pItI 著作权归作者所有。请勿转载和采集!