利用MSP430G2553搭建蓝牙小车

发布者:清新天空最新更新时间:2021-01-18 来源: eefocus关键字:MSP430G2553  蓝牙小车 手机看文章 扫描二维码
随时随地手机看文章

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    {

       delay_us(2);

    }

 }


利用串口读取蓝牙信息头文件:


 #include"msp430G2553.h"

 #define uint unsigned int


/***********************函数***********************/

void UartInit();              //串口初始化


/***********************全局变量***********************/


extern uint JudgeRecv;                        //判断当前蓝牙是否有信息发来

extern unsigned char RX_Buffer;      //定义全局变量RX_Buffer,接收字符

extern unsigned char TX_Buffer;      //定义全局变量TX_Buffer,发送字符


利用串口读取蓝牙信息源文件:


#include"Uart.h"


/***********************串口初始化***********************/

//串口初始化

void UartInit()

{

    /*

    DCOCTL = 0; // Select lowest DCOx and MODx settings

    BCSCTL1 = CALBC1_1MHZ; // Set DCO

    DCOCTL = CALDCO_1MHZ;

    //将其端口功能选择为串口功能

    P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

    P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

    //时钟选择

    UCA0CTL1 |=UCSWRST;   //复位寄存器配置

    UCA0CTL1 |= UCSSEL_2; // SMCLK

    UCA0BR0 = 104;        // 1MHz 9600

    UCA0BR1 = 0;          // 1MHz 9600

    //调制器配置、完成USCI初始化配置

    UCA0MCTL = UCBRS0;        // Modulation UCBRSx = 1

    UCA0CTL1 &= ~UCSWRST;     // **Initialize USCI state machine**

    //使能接收中断和发送中断

    IE2 |= UCA0RXIE+UCA0TXIE; // Enable USCI_A0 RX,TX interrupt

    //打开全局中断

    _EINT();                  //打开全局中断

    */

  if (CALBC1_1MHZ==0xFF) // If calibration constant erased

  {

    while(1);                               // do not load, trap CPU!!

  }

  DCOCTL = 0;                               // Select lowest DCOx and MODx settings

  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO

  DCOCTL = CALDCO_1MHZ;

  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

  P1SEL2 = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD

  UCA0CTL1 |= UCSSEL_2;                     // SMCLK

[1] [2]
关键字:MSP430G2553  蓝牙小车 引用地址:利用MSP430G2553搭建蓝牙小车

上一篇:MSP430F5529关于SPI模式的学习
下一篇:msp430g2553-串口调试测试程序

推荐阅读最新更新时间:2024-11-07 10:11

MSP430G2553笔记【一】
昨天下了一下的IAR今天才彻底装好。 早上写了流水灯的例子,算是入门msp430的第一程序。 下午写了按键控制led灯,一直不成功,参照了例程还是不行,例程是用中断的,不理解,还是以后在看啊。后来google了一下,才知道,按键在作为IN的时候,需要使能上接电阻,就因为这纠结了好久,希望其他的朋友不要犯这错误啊~~~ datasheet上的话:If the pin's pullup/pulldown resistor is enabled,the corresponding bit in the PxOUT register selects pullup or pulldown Bit0 pulled down B
[单片机]
MSP430G2553 flash操作例子
/* 实际适用于MSP430x2xx系列单片机,包含以下10个常用功能函数: (1)初始化。Flash_Init(unsigned char Div,unsigned char Seg ):依据SMCLK频率计算设定Flash的时钟的分频系数,靠Seg段号码确定计划操作的段起始地址。 (2)整段擦除。Flash_Erase():段擦除函数。 (3)读字节。Flash_ReadChar(unsigned int Addr):读取偏移地址Addr位置1个字节的数据。 (4)读字。Flash_ReadWord(unsigned int Addr):读取偏移地址Addr位置1个字的数据。 (5)读一串字节到RAM数组。Flash
[单片机]
MSP430G2553 LCD1602 IIC 显示屏 PCF8574
地址0x27。硬件IIC效果: 软件IIC在MSP430F149的效果:
[单片机]
<font color='red'>MSP430G2553</font> LCD1602 IIC 显示屏 PCF8574
MSP430G2553测试程序(温度检测)
//****************************************************************************** // HW UART(J4)!!!!!! 特别注意,板子上J4有2个跳线要竖放,设为HW UART模式 // ADC检测,并通过串口发送到PC // MSP430G2533 Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK // http://jiwm.blog.163.com // Baud rate divider with 1MHz = 1MHz/9600 = ~104.2 // ACLK
[单片机]
MSP430G2553 定时器中断实例
代码 #include MSP430G2553.h void led_init(); void timer0_init(); void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //--配置时钟----- BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ; //--LED初始化---- led_init(); //--定时器0初始化---- timer0_init(); //---开中断------ _EINT(
[单片机]
基于msp430G2553的低频方波频率、占空比、峰峰值测量函数
使用的平台是TI公司的launch pad,频率和占空比已经实现,峰峰值还有有待改进 1、主函数部分: /********************************************* * _ooOoo_ * * o8888888o * * 88 . 88 * * (| -_- |) * * O = /O * * ____/`---'____ * * .' \| |// `. * *
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved