MSP430F5529-MPU6050陀螺仪

最新更新时间:2022-08-05来源: csdn关键字:MSP430F5529  MPU6050  陀螺仪 手机看文章 扫描二维码
随时随地手机看文章

        这里使用的是维特智能的JY61陀螺仪,具体信息可以参考官网mpu6050三轴六轴加速度计姿态角度传感器模块维特智能JY61


        JY61型陀螺仪可以通过I2C或者串口模式向开发板传输数据,但是I2C通信传过来的数据是原始数据,未经处理,需要自己解算姿态。串口通信传过来的数据是经过陀螺仪内部解算后的结果。以下为串口输出结果:

        一般串口输出取用角度输出值。


        I2C通信可以选择硬件通信或者模拟通信。硬件通信需要在开发板上配置相关的I2C引脚,模拟通信只要随意选择两个普通GPIO口即可。


        串口接收数据仅需让陀螺仪的TX口,即发送口,接开发板的RX口,即接收口。供电3.3V与正常接地。I2C通信则需要根据具体引脚接对应的陀螺仪引脚。


        串口接收数据的好处在于占用的端口少,仅需一个RX口,可以使用短接套套住的与电脑通信的RX口,即P4.4,5.。读取数据的代码量少,数据提取稳定。缺点是读取速度慢,因为串口发了很多的数据但实际用的数据很少,实际上在低速情况下对精度影响不大。


        I2C通信优点在于通信速度快。除了速度快,硬件通信需要指定的引脚,但是模拟口随便找两个引脚就行了。但是I2C通信实现需要大量代码,非常复杂。需要姿态解算,计算零漂。


        总之,用过串口收发的都说好用。


        对于I2C通信或者串口通信可以通过维特智能官网的教程实用上位机观察数据,顺便检查陀螺仪是否正常工作,也可以通过上位机检查角度偏移计算对应的零漂。


        一下附上两种通信例程:


        1.串口通信,注意:开发板上的RX接了陀螺仪的TX,开发板上的TX还是正常短接套短接。


        如果有OLED屏可以直接显示在OLED屏幕上,不需要发回去。


#include

 

float anglex,angley,anglez;

unsigned char RX_flag;

unsigned char uart1_RX[60];

unsigned char count=0;

 

void initClockTo16MHz()

{

    UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO

    UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

    __bis_SR_register(SCG0);                  // Disable the FLL control loop

    UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

    UCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operation

    UCSCTL2 = FLLD_0 + 487;                   // Set DCO Multiplier for 16MHz

                                              // (N + 1) * FLLRef = Fdco

                                              // (487 + 1) * 32768 = 16MHz

                                              // Set FLL Div = fDCOCLK

    __bic_SR_register(SCG0);                  // Enable the FLL control loop

 

    // Worst-case settling time for the DCO when the DCO range bits have been

    // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx

    // UG for optimization.

    // 32 x 32 x 16 MHz / 32,768 Hz = 500000 = MCLK cycles for DCO to settle

    __delay_cycles(500000);//

    // Loop until XT1,XT2 & DCO fault flag is cleared

    do

    {

        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags

        SFRIFG1 &= ~OFIFG;                          // Clear fault flags

    }while (SFRIFG1&OFIFG);                         // Test oscillator fault flag

}

 

void UART_Init( char Parity, char DataBits, char StopBits)

{

    P4SEL = BIT4 + BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD

    UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

    UCA1CTL1 |= UCSSEL_2;                     // SMCLK 25mhz

    UCA1BR0 = 8;                              // 16MHz 115200 (see User's Guide)

    UCA1BR1 = 0;                              // 16MHz 115200

    UCA1MCTL = UCBRS_0 + UCBRF_11 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,

 

    //------------------------------设置校验位------------------------------

    switch (Parity)

    {

    case 'n':

    case 'N':

        UCA1CTL0 &= ~UCPEN;

        break;          //无校验

    case 'p':

    case 'P':

        UCA1CTL0 |= UCPEN + UCPAR;

        break;    //偶校验

    case 'o':

    case 'O':

        UCA1CTL0 |= UCPEN;

        break;          //奇校验

        //default:  return (0);                                 //参数错误

    }

    //------------------------------设置数据位------------------------------

    switch (DataBits)

    {

    case 7:

    case '7':

        UCA1CTL0 |= UC7BIT;

        break;         //7位数据位

    case 8:

    case '8':

        UCA1CTL0 &= ~UC7BIT;

        break;         //8位数据位

        //default:  return (0);                                 //参数错误

    }

    //------------------------------设置停止位------------------------------

    switch (StopBits)

    {

    case 1:

    case '1':

        UCA1CTL0 &= ~UCSPB;

        break;          //1位停止位

    case 2:

    case '2':

        UCA1CTL0 |= UCSPB;

        break;          //2位停止位

        //default:  return (0);                                 //参数错误

    }

 

    // over sampling

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

    UCA1IE |= UCRXIE; //接收中断

    UCA1IE |= UCTXIE; //开启发送中断

 

}

 

void data_receive(unsigned char data)

{

 

    if(data == 0x55 && RX_flag ==0)

    {

        RX_flag = 1;

    }

    else if(count >= 11 && RX_flag == 1)

    {

        RX_flag = 0;

        if(uart1_RX[1] == 0x53)

        {

            anglez = ((float)((int)uart1_RX[7]<<8 | (int)uart1_RX[6])) / 32768*180;

            UCA1TXBUF=anglez; //把角度发回去,如果报错或者发错了就把anglez强制转化为字符

        }

        count=0;

        memset(uart1_RX,0,sizeof(uart1_RX));

    }

 

    if(RX_flag == 1)

    {

        uart1_RX[count] = data;

 

        if (count == 1 && data != 0x53)

        {

            RX_flag =0;

            count=0;

            memset(uart1_RX,0,sizeof(uart1_RX));

        }

        else

            count ++;

    }

}

 

int main(void) {

 

    WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer

    initClockTo16MHz();                        //配置系统时钟为16Mhz,不配置串口不能正确收发

    UART_Init('n',8,1);

    _EINT();//开启总中断

 

    while(1){

 

    }

 

}

 

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A1_ISR(void)

{

    switch (__even_in_range(UCA1IV, 4))

    {

    case 0:

        break;                 // Vector 0 - no interrupt

    case 2:                       // Vector 2 - RXIFG

        data_receive(UCA1RXBUF);

        break;

    case 4:                       // Vector 4 - TXIFG

 

        break;

    default:

        break;

    }

}


2. I2C通信,模拟通信,例程太大,写不下...


GitHub - VealFog/msp430f5529: example使用git选择其中的MPU6050进行工程下载。内置六脚OLED显示程序,同样是模拟I2C通信。

关键字:MSP430F5529  MPU6050  陀螺仪 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic618254.html

上一篇:MSP432E401Y-串口输出
下一篇:MSP430F5529-串口介绍

推荐阅读

模块学习(二)——MPU6050
去年电赛备赛期间,学的STM32标准库,那一整个繁琐直接给我劝退了,当时学习MPU6050时就非常痛苦,代码也看不懂,无非抄来抄去,然后就是编译,改错,编译无穷尽也。最近参考野火的MPU6050代码,将其移植到了MSP430f5529之上,今天分享出来。1.重要性MPU6050模块对于不论平衡车还是四旋翼无人机的开发都是非常重要的一个模块,除此之外,对于四轮小车的转弯闭环控制也是至关重要的,因此备战电赛控制类这是一个不可避开的模块。该模块包含陀螺仪和加速度传感器,可以解算出其x,y,z三个方向的角度和各个方向的角速度,使用十分方便,此次并未采用官方的DMP库。2.代码废话不多说,直接上代码,调用即可。/** MPU6050.c**
发表于 2022-08-09
模块学习(三)——激光测距模块(TOF10120)
该款激光测距模块集成了芯片,能够十分方便的直接传回数据,最近备赛,分享一下该模块的使用,以及需要注意的问题。此次是在MSP430F5529上进行开发的,其他MCU可自行移植。1.硬件接线上图是我从TOF10120技术手册上截取下来的,可以知道,该模块支持IIC和UART两种通讯模式,可根据MCU资源选择合适的方式,此次直接利用串口进行开发。绿线 ——SCL 蓝线 ——SDA白线 ——TXD 黄线—— RXD红线 ——VCC 黑线 ——GND对应于串口的话,(tof)SCL-SDA(430);(tof)SDA-SCL(430)即可2.配置可以直接利用USB转TTL模块先进行配置,配置好之后直接使用即可。其中对于IIC和UART方式有各
发表于 2022-08-09
模块学习(三)——激光测距模块(TOF10120)
模块学习(四)——超声波测距
今天想着把测距模块全部一网打尽了,把点对点和点对面两种测距全部搞定,于是有了这篇关于超声波模块的博客分享,主要还是分享代码,原理啥的网上都有,这次是基于MSP430F5529的driverlib库,没有找到开源的代码就自己分享一下了!1.基本原理还是稍稍讲一下原理,不然等下可能代码看不懂。两个引脚,一个TRIG,一个ECHO,就是触发和回响,顾名思义,trig是用来触发启动超声波模块的,echo模块是用来回收超声波的。此次使用的是US-100超声波模块,其实和常见的HC-SR04/5系列是一样的,代码均可用。基本原理trig引脚给一个大于10us的高电平脉冲,即会启动超声波模块。启动之后,模块内部会发送一段8个40KHZ的脉冲,随后
发表于 2022-08-09
模块学习(五)——矩阵键盘
矩阵键盘的学习只是为了做一个简单的遥控器,主要目标还是后续的遥控器控制小车实现简单而精准的直行和转弯,加上前面的模块,锻炼自己PID的调试和理解能力。但毕竟矩阵键盘也算个模块嘛,就也记录一下,分享给有需要的同志。(此代码是基于MSP430F5529系列,其他系列MCU均可用,自己修改引脚,配置IO口即可)1.基本原理矩阵键盘主要方便在16个按键只需要8个引脚即可实现控制,根据我们所学的4*4的矩阵可以很容易理解他的原理,无非就是先确定行(列),再确定列,即可确定某个具体的键位。方法自然而然也有很多种,用的比较多的就是行扫描法和列扫描法。例如,我们确定第三行,第四列的键位该如何确定呢?我们利用行扫描法。将四个关于行的引脚设置为输出模式
发表于 2022-08-09
模块学习(五)——矩阵键盘
MSP430f5529-GPIO简介
理论上来说,在不进行端口功能复用的情况下,每一个端口都能用作普通GPIO口用。其中P1和P2端口可以用作外部中断端口。其余的端口作用可以参考开发板自带的端口功能图。 这里介绍外部中断和普通作用GPIO口寄存器和配置。 430f5529使用的是宏定义的引脚名称。 这里用P1口做例子: 1.P1IN 可以读取当前P1端口某引脚上的信号值,用于读取电平信号,比如检测按键输入,通过读取P1IN 的值判断按键是否按下,如果按下了检测到的都是低电平,返回的就是0,反之1。 用法: if (P1IN & BIT0),此为读取P1.0引脚上电平信号 2.P1OUT 可以决定引脚的输出,比如在点亮Led灯的
发表于 2022-08-08
MSP430f5529-GPIO简介
MSP430F5529-定时器介绍
开发板有两个定时器:定时器A和定时器B。因为定时器B和定时器A差不多,所以就介绍一下定时器A。 定时器A一共有三个,定时器B有一个。其中定时器A分为Timer0_A,Timer1_A,Timer2_A。定时器A支持多重捕获/比较,PWM输出和定时功能,具备中断函数,可以通过定时器溢出或者捕获/比较触发。 这里介绍定时器A的定时器功能和输出PWM功能。其他没涉及的不做介绍。 下面介绍定时器A0相关的寄存器: 1.TA0CTL 寄存器是定时器A的总控制寄存器,可以通过写入宏定义好的单词来配置相关位 2.TA0CCTL0 寄存器是定时器A下第一个捕获/比较器的控制寄存器,也可以通过写入相关单词来配置对
发表于 2022-08-08
MSP430F5529-定时器介绍
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved