MSP430L1306 控制 TB6612 驱动 JBGB37-520 小车代码示例
#include <msp430.h>
#define IN1 BIT0 #define IN2 BIT1 #define IN3 BIT2 #define IN4 BIT3 #define ENA BIT4 #define ENB BIT5
void delay_ms(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 1141; j++); }
void init_pwm() { TA0CCR0 = 1000; // PWM 周期为 1ms TA0CCTL1 = OUTMOD_7; // 输出模式为 PWM TA0CCTL2 = OUTMOD_7; TA0CCTL3 = OUTMOD_7; TA0CCTL4 = OUTMOD_7; TA0CTL = TASSEL_2 + MC_1; // 选择 SMCLK 作为时钟源,设置为增计数模式 }
void set_pwm_duty_cycle(unsigned int duty_cycle_a, unsigned int duty_cycle_b) { TA0CCR1 = duty_cycle_a; // 设置占空比 TA0CCR2 = duty_cycle_a; TA0CCR3 = duty_cycle_b; TA0CCR4 = duty_cycle_b; }
void init_gpio() { P1DIR |= ENA + ENB + IN1 + IN2 + IN3 + IN4; // 设置引脚为输出模式 P1OUT &= ~(ENA + ENB + IN1 + IN2 + IN3 + IN4); // 初始化输出为低电平 }
void set_direction(int dir_a, int dir_b) { if (dir_a > 0) { P1OUT |= IN1; P1OUT &= ~IN2; } else if (dir_a < 0) { P1OUT |= IN2; P1OUT &= ~IN1; } else { P1OUT &= ~(IN1 + IN2); }
if (dir_b > 0)
{
P1OUT |= IN3;
P1OUT &= ~IN4;
}
else if (dir_b < 0)
{
P1OUT |= IN4;
P1OUT &= ~IN3;
}
else
{
P1OUT &= ~(IN3 + IN4);
}
}
int main(void) { WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
init_pwm();
init_gpio();
set_pwm_duty_cycle(500, 500); // 设置初始占空比为 50%
set_direction(1, 1); // 设置初始方向为前进
while (1)
{
delay_ms(1000); // 前进 1 秒
set_direction(-1, -1); // 后退
delay_ms(1000); // 后退 1 秒
set_direction(0, 0); // 停止
delay_ms(1000); // 停止 1 秒
}
}
原文地址: https://www.cveoy.top/t/topic/pIuB 著作权归作者所有。请勿转载和采集!