1. 小车硬件
1.1 机械部分
1).直流电机(黄色DC3V-6V)2个;
2).亚克力板;
3).万向轮;
4).用于装配的螺钉与支撑若干。
1.2 电气部分
1).主控MSP430G2553
2).蓝牙模块HC05
3).DC转DC;
4).电机驱动模块TB6612;
5).手机端的蓝牙调试器。
因为电气连接没有画图,所以对于具体的连接说明,也就不再说明了。这部分也确实比较简单。
2. 小车软件
2.1车体上软件
电机驱动头文件:
#include"msp430G2553.h"
#define uint unsigned int
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
/***********************函数***********************/
void IOInit(); //IO初始化
void TimeAInit(); //定时器A初始化
void ForwordMotor(uint speed); //车体前移
void LeftMotor(uint speed); //车体左转
void RightMotor(uint speed); //车体右转
void BackMotor(uint speed); //=车体后移
void SpinMotor(uint speed); //车体旋转
void StopMotor(); //电机停止转动
void PWMA_Delay(uint speed); //PWM利用简单延时
void delay(uint time); //定义延迟函数,单位为ms
/***********************全局变量***********************/
extern uint JudgeRecv; //判断当前蓝牙是否有信息发来
extern unsigned char RX_Buffer; //定义全局变量RX_Buffer,接收字符
extern unsigned char TX_Buffer; //定义全局变量TX_Buffer,发送字符
电机驱动源文件:
#include"MotorDrive.h"
/*****************************IO初始化**************************************/
void IOInit()
{
P1DIR|=BIT7+BIT6+BIT5+BIT4; //P1.7、P1.6、P1.5、P1.4 设置为双输出口,其中P1.4为PWM输出
P2DIR|=BIT2+BIT1+BIT0; //P2.0、P2.1、P2.2设置为输出口,其中P2.2为PWM输出
P1OUT&=0x0f; //P1.7、P1.6、P1.5、P1.4 设置为低电平
P2OUT&=0xf8; //使P2.0、P2.1、P2.2输出低电平
}
/*******************************车体前移***************************************/
//沿前向指定speed速度运动
void ForwordMotor(uint speed)
{
//P1.7(STBY)、P1.6(AIN2)置1, P1.5(AIN2)置0
//P2.0(BIN1)置0,P2.1(BIN2)置1
P1OUT|= BIT7+BIT6;
P1OUT&=~BIT5; // P1.7(STBY)、P1.6(AIN2)置1,P1.5(AIN2)置0
P2OUT&=BIT0;
P2OUT|=BIT1; //P2.0(BIN1)置0,P2.1(BIN2)置1
//P1.4(PWMA),P2.2(PWMB)进行设置,即产生PWM信号
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(speed); //电机1和电机2相同的速度
}
}
/*******************************车体左转***************************************/
//车体进行左前转弯
void LeftMotor(uint speed)
{
//P1.7(STBY)、P1.6(AIN2)置1, P1.5(AIN2)置1
//P2.0(BIN1)置0,P2.1(BIN2)置1
P1OUT|= BIT7+BIT6+BIT5; // P1.7(STBY)、P1.6(AIN2)置1,P1.5(AIN2)置1
P2OUT&=BIT0;
P2OUT|=BIT1; //P2.0(BIN1)置0,P2.1(BIN2)置1
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(speed); //电机1和电机2相同的速度
}
}
/********************************车体右转**************************************/
void RightMotor(uint speed)
{
//P1.7(STBY)、P1.6(AIN2)置1, P1.5(AIN2)置0
//P2.0(BIN1),P2.1(BIN2)置1
P1OUT|= BIT7+BIT6;
P1OUT&=~BIT5; // P1.7(STBY)、P1.6(AIN2)置1,P1.5(AIN2)置0
P2OUT|=BIT0+BIT1; //P2.0(BIN1),P2.1(BIN2)置1
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(speed); //电机1和电机2相同的速度
}
}
/********************************车体后移**************************************/
void BackMotor(uint speed)
{
//P1.7(STBY)置1、P1.6(AIN2)置0, P1.5(AIN2)置1
//P2.0(BIN1)置1,P2.1(BIN2)置0
P1OUT|=BIT7+BIT5;
P1OUT&=~BIT6; //P1.7(STBY)置1、P1.6(AIN2)置0, P1.5(AIN2)置1
P2OUT|=BIT0;
P2OUT&=~BIT1; //P2.0(BIN1)置1,P2.1(BIN2)置0
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(speed); //电机1和电机2相同的速度
}
}
/******************************车体旋转**************************************/
void SpinMotor(uint speed)
{
//P1.7(STBY)置1、P1.6(AIN2)置1, P1.5(AIN2)置0
//P2.0(BIN1)置1,P2.1(BIN2)置0
P1OUT|=BIT7+BIT6;
P1OUT&=~BIT5; //P1.7(STBY)置1、P1.6(AIN2)置1, P1.5(AIN2)置0
P2OUT|=BIT0;
P2OUT&=~BIT1; //P2.0(BIN1)置1,P2.1(BIN2)置0
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(speed); //电机1和电机2相同的速度
}
}
/******************************电机停止**********************************/
void StopMotor()
{
//P1.7(STBY)置0、P1.6(AIN2)置0, P1.5(AIN2)置0
//P2.0(BIN1)置0,P2.1(BIN2)置0
P1OUT&=~BIT7;
P1OUT&=~BIT6;
P1OUT&=~BIT5;
P2OUT&=~BIT0;
P2OUT&=~BIT1;
while(JudgeRecv) //接收标志位非零,循环发送脉冲
{
PWMA_Delay(0); //电机1和电机2相同的速度
}
}
/**************************PWMA调速利用延迟******************************/
void PWMA_Delay(uint speed)
{
if(speed>100) //速度最大值为100
{
return;
}
else
{
//P1.4置1,P2.2置1
P1OUT|=BIT4;
P2OUT|=BIT2;
delay(speed);
//P1.4置0,
P1OUT&=~BIT4;
P2OUT&=~BIT2;
delay(101-speed); //控制转速
}
}
/**************************延时函数***************************/
void delay(uint time)
{
for(int i=0;i
上一篇:MSP430F5529关于SPI模式的学习
下一篇:msp430g2553-串口调试测试程序
推荐阅读最新更新时间:2024-11-07 10:11